Currently, Penumbra’s stake distribution is more centralized than desirable. While this has been gradually shifting over time and is expected to decentralize gradually, and UI changes like Encourage Decentralization in Minifront's Staking Page have aimed to accelerate that process, it’s worth considering ideas about how to economically incentivize decentralization.
This post describes one such idea, Staking Boost, in an initial form for feedback from the community. The core idea is simple:
- Currently, at the end of each epoch, the chain computes the new issuance over the epoch and then allocates it to each validator’s delegation pool on a pro-rata basis by adjusting the exchange rate for that validator’s delegation token.
- Instead, a new chain parameter
staking_boost_percent
would define a percentage of staking rewards allocated to the new staking boost mechanism (for purposes of discussion, let’s say 20%). - At the end of each epoch, 80% of the staking rewards are distributed on a pro-rata basis as before, and the other 20% is allocated to a single validator’s delegation pool, selected uniformly at random from the validator set (i.e., all validators equally weighted).
The effect of this mechanism would be to incentivize consensus participation by smaller validators, for whom the fixed-size boost is larger relative to the size of their delegation pool. To clarify, the boost is applied to the validator’s entire delegation pool (delegators), not to the validator directly, though validator commission would apply as normal.
Consider, for instance, the current chain parameters: epochs are normally 34,560 blocks (~2 days), and issuance is set at 63411upenumbra
per block, or 2,191.484160 UM per epoch.If there were 100 validators and the stake boost was set to 20%, that would be a boost of ~440UM, with each validator getting the boost 1% of the time, or approximately 2.2 UM per day in expectation. Now consider what this does to a “giant” or “tiny” validator, assuming the current 16.75% staking participation remains unchanged:
- A “tiny” validator with the 100UM minimum bond is expected to win the boost ~1.8x per year (180 epochs per year / 100 validators), for ~800 UM of boost in expectation. They also receive (100 / 16750000) * (0.8 * 2200 * 180) = 1.89 UM of rewards, giving a year-end delegation pool size of 902 UM, or 902% APY.
- A “giant” validator with 10% of the voting power (1,675,000 UM) is also expected to win the boost ~1.8x per year for ~800 UM of boost in expectation. They receive (0.1) * (0.8 * 2200 * 180) = 31680 UM of rewards, giving a year-end delegation pool size of 1,707,480 UM, or 1.94% APY.
These numbers are illustrative of the dynamics only, and would not be reflective of real-world scenarios, as delegating to the smallest validators would become much more rewarding, and the increased size of the delegation pool dilutes the boost. But this is exactly the behaviour the mechanism seeks to incentivize.
To select a validator at random, the ideal solution would be to use a VRF, to prevent a proposer from manipulating the randomness used to select the boosted validator. However, this seems unnecessary in this instance relative to some kind of “good enough” mechanism like using the app hash or the last commit info, because malfeasance would be extremely easy to detect, and a validator who manipulates the mechanism could be socially slashed.