So i have been collecting my staking rewards from Ada lite. I am neurotic so i withdraw my rewards every month or so. For the first time i noticed that when i withdrew my rewards i wasnt reciving any rewards. so i went back and looked at my transactions and for the better part of a year when i withdrew my rewards i can see the tranaction fee but no recived ADA =(
That is totally unnecessary and only costs you money in tx fees.
First check the pool you are delegating to on https://pooltool.io/ to make sure it is in fact getting rewards.
Second, this is almost certainly because the balance before you “withdrew your rewards” already included the rewards, so all you will see is the tx fee each time you “withdraw”.
You sir are correct. PoolTools show they have been going in. Thank you very much for the prompt response I have been trying to figure this out for a little bit now!
-Tyler
I noticed the same issue today. The last three withdrawals are not there. But the fees are. And when you look at the fees details, it shows the amount I should have received. But, the total amount never goes up. Just down by the amount of the fees
See my explanation eariler:
Which wallet app are you using?
Reward withdrawals do not change your staking balance. Unwithdrawn rewards already contribute to your stake … which is why it is just a waste of transaction fees to withdraw them regularly if you do not intend to spend them. Still better is using a wallet app that does not force you to do withdrawals in a separate transaction, but just does it when you are doing transactions, anyway.
If you are using Adalite, the staking tab looks like this:
A withdrawal should move ADA from “Rewards account balance” to “Available balance”, but the “Staking balance” will just be reduced by the transaction fee.
Same account in Eternl looks like this:
Same information with slightly different names given.
A withdrawal transaction in Eternl looks like this:
(This was also sending ADA away. I haven’t done a pure withdrawal in ages because – as said – it’s just a waste of transaction fees.)
But as you can see the net effect is given as –3.184521 ADA – the 3.01 ADA sent out and the 0.174521 ADA transaction fees. The withdrawn rewards are not considered as a plus, because they already were in included in the total funds, just moved from the rewards account to another part of your wallet.
In Adalite, exactly the same transaction looks like this:
Adalite does consider a withdrawal a plus of your wallet because they give more emphasis on what they call “Available balance” and that one goes up by a withdrawal.
So, what you see very much depends on how your wallet app interprets and presents the things happening in Cardano, but under the hood it is exactly the same.
Thanks for all your replies. HeptaSean, I am using a Ledger Nano X
I understand all you have said. But, what I don’t understand is why the rewards used to be added to my balance and now they’re not. For example, I would have 1000 ADA and 10ADA to claim. I would claim it and the balance would go up to 1009 (minus the 1ADA fee). Obviously I’m using round numbers to simplify. But, now I just get the fees taken off
This is what I mean. I used to get these details when I added my reward to my balance…
But look at the last two transactions…
And when I go to the transaction details, it shows the amount of rewards I earned (at the bottom of these screenshots)…
However, the rewards are not added to my balance. And even if they were, what would be the point of the claim option? Why not just have the rewards automatically added to the balance at each epoch?
Regards
Looks like I’m not allowed to upload photos. So, if you can think of I way I can share them with you let me know
According to https://forum.cardano.org/t/welcome-understanding-trust-levels-on-the-cardano-forum/117680#trust-level-0-newcomer-1, you should be able to include one (but only one) image in the post. So, maybe try to just show the details view?
I still do not know which wallet app you are using. Depending on the wallet app and on the number you are looking at it:
- The number called “Staking balance” in Adalite and “Total funds” in Eternl does not change because the rewards were already included there before the withdrawal. Withdrawing only moves between different “pots” inside this stake. This number goes up automatically every five days when the rewards are distributed.
- The number called “Available balance” in Adalite and “Balance” in Eternl should go up with every withdrawal. But after it has gone up, the old state is shown nowhere, so it’s not that easy to verify if you maybe just have overlooked the change or compared two different values with each other or …
As @erikd and I have said in every post in this thread: There is no point in just regularly withdrawing rewards in separate transactions. These transactions always cost transaction fees and if you have little stake, they can eat up a significant part of the rewards or even be higher than them.
You only need to withdraw rewards if you want to spend them, if your other ADA are not enough for what you want to send out and you need to also use the reward ADA.
Cardano also allows to withdraw rewards as an additional action in other transactions (but not all wallet apps have implemented that, probably because their developers found it too complicated). That only increases the transaction fees a tiny bit and can be done regularly. Wallet apps that have this feature tend to do it automatically every time rewards are available. Could be discussed if that is the best way or if it could be done even more efficiently, but it is a large improvement over separate transactions.
That does not work with how Cardano is designed. Cardano’s very basic design philosophy is the “UTxO model” where “UTxO” means “unspent transaction output”. Everything that you use in a transaction is the output of a previous transaction. There is no account balance directly in the data of the blockchain. The balance is just the sum of all the unspent transaction outputs that belong to you, that have once been sent to you and not been used since then.
Sending every one of the millions of stakes the rewards every epoch, would be a lot of additional data created every five days. Moreover, in order to not let the blockchain grow too much with tiny, hardly relevant outputs, there is a minimal ADA requirement on them. They cannot be smaller than something like 0.98 ADA (more if there are NFTs or asset tokens on the output). So, rewards smaller than 1 ADA would have to be … discarded?
That’s why the developers of Cardano have decided to not pay out rewards directly, but rather keep a separate table to which the rewards for a stake are automatically added every epoch. And these are only moved over to the UTxO part of the blockchain when you explicitly withdraw them (but are considered for the size of your stake determining your rewards already before that when they only exist in this reward table).
There is a reason for this. There are over a million stake addresses and rewards accrue every 5 days.
If rewards were directly accredited to the staked address it would a new UTxO would need be added to the UTxO set which would be 1 million+ new UTxOs every 5 days which would needlessly inflate the size of the UTxO set.
To avoid thus UTxO set inflation, rewards are accredited to an ETH style account, and the value held in this account is updated each epoch. Then when the stake address issues its next transaction the full value of the account is added as one of the inputs.
That is only true for some wallet apps – Daedalus, Eternl when auto-withdrawal is on (default now), … – but not for others – Yoroi, Adalite, ….
Interesting! I mistakenly thought that the ledger rules themselves mandated the use any reward input in the next transaction.
Nah, you explicitly have to built a withdrawal into the transaction.
Also this would lead to a lot of problems if it was a ledger rule because a withdrawal needs a witness for the stake part and the next one spending from an associated address might not even have that. E.g., if the address is delegated to someone else’s stake or to a script.