Introduction
With the network maturing and an increasingly clear path forward (Polkadot 2.0, JAM) it is a good time to revisit and tweak some of the economics around Polkadot. This post summarizes recent technical developments that allow initiatives to address current pain points and enhance the network’s overall functionality. It serves as a starting point for a well-informed community discussion on whether and how these mechanisms can be used. In this post, I will mostly focus on introducing and discussing the mechanisms without delving too deeply into specific parameters. Once there is general consensus on the utility of these mechanisms, we can then focus on finding suitable parameters.
Goals
This post aims to achieve several goals:
- Inform and update the community about recent technical developments and their current status and timeline.
- Outline how these mechanisms could collectively address recent issues that have been heavily discussed within the Polkadot community.
- Initiate an informed discussion that considers the broader picture of these changes, which are potentially closely related.
These insights can be used to discuss frequently raised topics in the Polkadot community, such as sustainable Treasury inflow and adjustments to overall inflation.
Current situation
This is a good timing to kick off discussions around changes to Polkadot’s economics, because significant progress has been made on necessary changes to the code to provide us with the tools needed to efficiently optimize Polkadot’s economics in the near future.
Additionally, we observe substantial Treasury outflows backed only by continuously diminishing inflows. The next graph shows the inflows (blue) and outflows (red) with the net-inflow (black).
While outflows have continously risen, inflows have decreased because the staking rate is approaching the ideal staking rate. The following graph shows the percentage of era rewards diverted to the Treasury.
This dynamic has lead to a significant reduction of treasury balance in recent months. Note that ~5M DOT moved to AssetHub and ~2.6M DOT on Hydration, while there are open spends of ~5M DOT for active bounties. These numbers are not part of the next graph.
While the Treasury still holds sufficient funds, we should act and get to a more sustainable inflow, instead of relying on the somewhat less predictable mechanism that currently funds the Treasury.
New Developments
Mechanism 1: Fixed Treasury Inflow
A while ago, I proposed to divert a fixed part of the inflation directly into the treasury to become independent of the ‘staking inefficiency’ mechanism that currently makes the overwhelming inflow to treasury. Since the RFC process wasn’t established then, discussions happened mostly in the forum post. Despite the absence of any measurable signal about the opinion (such as a Wish-For-Change vote), there appeared to be broad support for the mechanism. This led a few engineers to start implementing this feature.
In the meantime, changes were made to alter the calculation of the ideal staking rate to prepared the system for an increased staking rate caused by large unlocks from the first wave of auctions and a general outphasing of parachain slot auctions in favor of agile coretime. While the increase of staking rate took longer than I personally anticipated, the analysis in this post shows that there has been a net benefit for stakers due to that change. Due to the way the system works right now, that also means that the Treasury receives smaller inflow. Especially in the recent weeks, the gap between the ideal staking rate and staking rate dwindled leaving the Treasury with lower inflows.
While the Treasury is still potent and has sufficient balance, we should strive for a quick introduction of the code change proposed in the original forum post. Luckily, the respective upgrade has already been developed, audited, and deployed on Westend and should be ready to be deployed on Polkadot during the upcoming release cycles.
What changes?
The MaxStakerReward
is a new storage value that can be accessed by governance and determines the percent of the total eraRewards (i.e. inflation) that goes to stakers. Conversely, 100% - MaxStakerReward
would directly be minted to the treasury. The mechanism is already live on Westend (Chainstate → Staking → MaxStakerReward) and we’ll hopefully see this live on Polkadot soon. On Westend, for example, the MaxStakerReward
is set to 80%, which essentially means that 20% of total inflation goes to treasury.
Status & Timeline: The mechanism is audited, live, and tested on Westend. Depending on the release schedule drawn by the Polkadot Fellowship, this could take around 1 - 2 months to be live.
Impact: It makes sense to merge this change in any case, because it could be initiated with MaxStakerReward = 100%
, which corresponds to exactly the current situation. In a later referendum, the community can change the parameter. Alternatively, the community could determine a different parameter with which the update could be shipped. This mechanism would lead to a sustainable and predictable inflow to Treasury.
Mechanism 2: Parameter- / Inflation Pallet
Currently, the inflation calculation (including parameters such as the max_inflation
(which is currently set to 10%), is deeply embedded into the runtime and cannot be changed without a runtime upgrade itself. This is not optimal and changing code around the inflation through this method comes at a significant risk. To solve this issue the Parameter Pallet has been developed, that abstracts several parameters from the runtime and makes them accessible by OpenGov. RFC0089 proposed by @kianenigma complements this initiative of making allowing direct access to these parameters.
What changes?
The parameter pallet exposes crucial parameters of the inflation system directly to governance (potentially on different OpenGov tracks). The most important ones include:
max_inflation
: Total yearly inflation.ideal_rate
: Ideal staking rate that could be a fixed point.falloff
: determines the shape of the curve that sanctions the rewards for stakers for not being at the ideal rate.
Status & Timeline: The mechanism is audited, live, and tested on Rococo. Depending on the release schedule drawn by the Polkadot Fellowship, this could take around 1 - 2 months to be live.
Impact: As the previous mechanism, the abstraction of the parameters from the runtime does not necessitate any change. Once deployed, we can start referenda to change the various parameters.
Mechanism 3: Unbonding Queue
RFC0092 introduces an unbonding queue to the Relay Chain that allows for a flexible unbonding time from staking, depending on the overall stake that is currently unbonding. That means, in times where not many users are unbonding, stake could be unbonded as quickly as two days. It balances security considerations with UX improvements and will likely result in a large (expected) decrease of unbonding time for users. This also offers a good compensation of a lower staking reward (caused by lower inflation).
This addition to Polkadot would further increase its agility and vastly improve the UX for stakers.
Timeline: (TBD) Necessary approval by the RFC by Fellowship first, then code & audit.
Impact: This change would significantly reduce the expected unbonding time for stakers, while making sure that there is always sufficient stake slashable to provide sufficient economic security.
How does it all fit together?
The mechanisms discussed above paint a clear path for the community in the near future. Once the necesarry code is live, Treasury inflow can be fixed leading to a sustainable and predictable inflow, yearly inflation and other economic factors can be adjusted and enacted through governance. With a potentially lower inflation (and a higher inflow to Treasury compared to the current situation), staker rewards necessarily drop. A quicker unbonding would compensate for that.
Special thanks
I would like to thank @gpestana for his invaluable support in countless discussions about the current state of the implementation and helping with calculating numbers using code very close to the actual implementation. I’d also like to extend my gratitude to @pavla and the rest of Parity’s Data team for allowing me access to their infrastructure and supporting me to get the data I need to make well-informed analyses.