Sharing Block Rewards and Arbitrary Lamports with Stakers #188
Replies: 2 comments 4 replies
-
contrarian take: what's the point of removing the burn, passing 100% to the validators, and then effectively adding a competition vector so we should expect most to be rewarded to stakers, except in those situations like FTX owned SOL where the staked is tied long term with a provider, who would take advantage and won't roll this value to its stakers? what's the value of these 2 changes and is it significantly better and worth the implementation and activation of 2 SIMD? (I don't fully back this argument, and having designed such tooling for Paladin can appreciate its usefulness, but playing devil's advocate here) |
Beta Was this translation helpful? Give feedback.
-
Thanks Ben, glad to see this conversation being taken forward. I'm not sure it would be necessary to specify a validator block reward collector account, this would require additional space in the vote account and for the vast majority they would use the default of the identity account to ensure their funds for vote fees remain covered. Aside from this the system makes sense, I think the pool reward account can be treated as an activating stake account and it should be possible to amend the stake activation/deactivation to include these in those figures, the main difference being that the staked lamports amount can change until the last slot of the epoch (but this is already the case for regular stake accounts as well). Additionally, similar to Jito, the pool rewards account seed can include the epoch number, creating a separate account for each epoch, this may make tracking activating stake easier, the pool rewards account would be closed post-distribution and the remaining state bond used to fund the N+2 rewards pool account, a validator would need to put up the funds up-front to fund state bonds for two accounts, for epochs N and N+1, in epoch N+1 during rewards distribution account for N is closed and N+2 is opened, and so on. |
Beta Was this translation helpful? Give feedback.
-
With SIMD-0096 (remove burn from priority fees), users expressed concerns of not being able to benefit from the increased block rewards, and validators expressed they’d like to be able to share block rewards. Along with sharing block rewards, validators do not have a way to share arbitrary sources of revenue. Some validators have used liquid staking tokens to share block rewards and other sources of revenue by adding SOL to an LST reserve account, but this can only benefit liquid staking users where a vast majority of staking is done natively.
This needs to be done in protocol because it's incredibly expensive to load 1.5m and growing stake accounts. Anything that isn't in protocol has to do hundreds of thousands of transactions and update all of the stake account balances. We see see this behaviour with Jito’s merkel tree claim-based distribution which requires hundreds of thousands of transactions to claim and move SOL each epoch to stakers.
We can piggy back off of the epoch rewards calculation that already does these expensive accounts loads while providing a very simple solution for validators to share block rewards and any other sources of revenue.
Proposed Solution:
Create a staker lamport distribution system. Each vote account would have a derived stake rewards pool account. This stake rewards pool account would be able to receive lamports at any point during the epoch. Each epoch, during inflation reward calculations, any lamports above the rent for the reward pool account would be removed from the account and be added to the total inflation rewards. The inflation rewards + stake rewards pool account would then be distributed to all stakers. [1]* This could be used by the validator or any rewards system to efficiently distribute lamports to all of a validator’s stakers.
Create a block rewards commission system that divides block rewards into two accounts. One account would be the aforementioned stake rewards pool account, and the other would be the validator block reward account. The validator block reward account would be defined in the vote account along with a commission value set separate from inflation rewards commission. The validator block reward account would be assignable to any address, defaulting to the identity account, and it would receive all of the commission from block rewards.
Example: A validator that has 20% block reward commission and creates a block that has a total of 100 million lamports in fees. 20 million lamports would go to their validator block reward account, and 80 million would go to the staker collector account to be distributed.
Prerequisites:
Potential Next Steps:
[1] inflation rewards are always added as active stake. There’s a complication in which these lamports from the collector account will be existing lamports that aren’t staked. One could design this system to just add to the unstaked portion of lamports, requiring users to withdraw these lamports similar to the existing Jito system. Alternatively, one could design it to go in as staked lamports, but would have to deal with the total activating stake limit and potential complications there. If the collector account’s lamports are added as stake, one would have to deal with treating these lamports as “activating” aka “warming up” stake.
Beta Was this translation helpful? Give feedback.
All reactions