How to spend specific UTXOs?


I want to only spend my staking rewards and nothing else from my ADA for tax purposes. How can I do that?

In Daedalus I find no way to spend a specific UTXO.

I suppose this is possible via the cli and if so how? Can you please give me instructions on what commands I need to execute in the cli to find my staking rewards address and only spend ADA from it and from no other UTXO?

Thank you

1 Like

As far as I can see, that’s not really possible.

If I try to build a transaction that only withdraws rewards, I get a Missing: (--tx-in TX-IN) error.

The closest I got, is:

First, see how many rewards, there are:

$ cardano-cli query stake-address-info --mainnet \
> --address stake1u9807rkfsvg9h9nw6lcjwvtdn594kwadgtxy3pa37v7khjg62c5we
        "address": "stake1u9807rkfsvg9h9nw6lcjwvtdn594kwadgtxy3pa37v7khjg62c5we",
        "delegation": "pool1u899yml96tf2cf4zkw4490mnhf832pk6fefnaluvt7487jmqzhg",
        "rewardAccountBalance": 6898045

Then, find a UTxO on the same wallet that can be used:

$ cardano-cli query utxo --mainnet \
> --address addr1q8fgal6mmwdllxdvft28xy6x3wjgc3v6nj450smmhtdama6wlu8vnqcstwtxa4l3yuckm8gttva66skvfzrmruead0ysjatmn5
                           TxHash                                 TxIx        Amount
61d9cdcfb2da5f594c471b9b2a6717ef06e6cb653a098d0aa593349ee51b0151     0        49827195 lovelace + TxOutDatumNone

Then, build a transaction that withdraws these rewards (--withdrawal), gives exactly the same amount to another wallet (--tx-out), and takes the transaction fee from the given UTxO (--tx-in) and puts the change back into this source wallet (--change-address):

$ cardano-cli transaction build --mainnet \
> --tx-in 61d9cdcfb2da5f594c471b9b2a6717ef06e6cb653a098d0aa593349ee51b0151#0 \
> --withdrawal stake1u9807rkfsvg9h9nw6lcjwvtdn594kwadgtxy3pa37v7khjg62c5we+6898045 \
> --tx-out addr1q89vv6r6e7040j7lm5m3s9c9cv7l0hdchwrwt62xm4v7h2df36408rhdrmchm7pxj8huuyz4jsgzqjllta5xfgrjysqsznluu4+6898045 \
> --change-address addr1q8fgal6mmwdllxdvft28xy6x3wjgc3v6nj450smmhtdama6wlu8vnqcstwtxa4l3yuckm8gttva66skvfzrmruead0ysjatmn5 \
> --out-file withdraw-tx.raw
Estimated transaction fee: Lovelace 174301

That might/ought to be enough for tax purposes. Exactly the rewards are moved to another wallet.

Thanks for trying to help.

I wait for this being implemented in Daedalus if it ever will be, that’s too complicated for me.

You could just send exactly the amount of rewards to another wallet every epoch with Daeadalus. That could also be enough for your tax authorities to believe that they were not staked.

I do not know if Daedalus will automatically withdraw the rewards for this, but the effect is the same: Exactly the rewards amount is moved away, before it ever gets staked.

It’s not about that the coins would get staked. It’s about that for some parts of my holdings other tax laws do get applied (older then one year are tax-free) and I do not want to spend my tax-free coins first. And unfortunately the UTXOs are actually important. This is much easier in an account base system and if the GUI wallet does not support spending specific UTXOs then this actually nightmare.

Okay, I only know the German rules, where it is important to move away rewards, before they are staked so that they will become tax-free after one year and not after ten years (according to the interpretation of a preliminary interpretation by the ministry of finance). And where I would not expect the tax authorities to be so technically inclined to go down to UTxOs.

Anyway, in ccvault you can enforce the withdrawal of rewards for a transaction and transfer exactly that amount to another wallet:

The checkbox “Force withdrawal of rewards together with transaction” is the crucial thing here.

This lead to this transaction:
(You can ignore the tokens, I just used this experiment to do something I wanted to do anyway – transfer tokens from Ledger to Nami.)

The important part is: This transaction withdraws exactly 7.922974 ADA of rewards and transfers exactly 7.922974 ADA to the other wallet. There are other inputs and outputs (there technically have to be), but ADA are completely fungible. The reasoning that the rewards are the ADA that were moved away is at least as strong as the very hostile interpretation that some of the other ADA were moved away and the rewards actually stayed in the wallet.