Introduction
In my previous post, I outlined a roadmap for technical changes that allow us as a community to adjust key economic parameters directly through OpenGov. With these updates about to be deployed in the next runtime upgrade, we should start discussing specific sets of parameters that are reasonable going forward.
In this post, I aim to educate how changing different parameters affect the economic situation of Polkadot and offer a reasonable package, formed by numerous discussions with community members, of updated parameters and illustrate their impact on inflation, staker APY, and Treasury inflow. Additionally, I propose to eliminate any penalisation of stakers when the staking rate does not match the ideal rate and thereby simplify the inflation system, avoiding unnecessary (additional) inflow to treasury and reducing general confusion around the system.
The data was generated using the Polkadot runtime, with thanks to @ankan and @gpestana for their assistance. The code is available here. I encourage everyone to verify and replicate the results.
Going forward
Simplifying the Model
As discussed in my previous post, the mechanism around the ideal staking rate was initially designed with the expectation that a significant share of all DOTs would be locked in parachain slots. To influence the ratio between staked, locked, and liquid DOTs, diverting tokens to the Treasury from stakers was considered useful. However, with agile coretime and the burning of their revenues, this consideration is largely obsolete.
Thus, I’d argue that maintaining this system no longer makes sense and might even be detrimental. Therefore, I propose to abolishing the system of reducing inflation diverted to stakers relative to the gap between the ideal staking rate and staking rate. The primary reasons are:
- Redundancy: We no longer need this system, because we no longer aim for a specific ratios between tokens staked, bonded, and liquid. As a consequence, we can remove it to obtain a more simple system.
- Simplicity: In countless discussions about the token economics of Polkadot I experienced that many people are very confused by how the inflation curve works. Reducing complexity leads to a better understandable economic system.
- Independent Treasury Funding: With updates discussed previously, the Treasury will be funded independently and we are no longer dependent on diverting additional parts of the inflation away from stakers to the Treasury.
- Unnecessary Lower APY: While keeping the current system with new parameters would not negatively impact the security of Polkadot, it could lead to frustration of stakers, because an already lowered APY by reduced inflation might be amplified by additionally diverting funds to Treasury from the share of inflation dedicated to stakers.
Importantly, there is a natural mechanism that prevents the staking rate to be too low or too high. The following relationship holds true:
- Low staking rate → Higher potential APY → Enter staking to profit.
- High staking rate → Lower potential APY → Exit staking to use DOT otherwise.
This mechanism leads to an equilibrium for the staker APY, influenced by a flexible staking rate. With a shortened unbonding queue, as proposed in RFC0092, the system can freely adjust.
We’ll see later in the concrete proposal that this simplification can be achieved by setting min_inflation == staker_inflation
, i.e., setting the minimum inflation parameter to the inflation that goes to stakers (which is calculated by max_inflation * maxStakerReward
). This has the huge benefit, that we can simplify the model but leave all ingredients intact to quickly revert to the old system in case of unexpected situations.
Baseline case
Below, I present a baseline case with 10% total inflation, the inflation curve intact, and a fixed 20% Treasury inflow. After that, I argue why there is room for optimisation and propose a set of parameters that lead to a more balanced outcome in terms of inflation, Treasury inflow, and staker APY.
Ideal_stake: ~60% (flexible, decreasing with number of parachains)
staking_rate: exogenous (but ~58.5% right now)
fall_off: 5%
min_inflation: 2.5%
max_inflation: 10%
staker_inflation: variable
maxStakerReward: 80%
total_issuance: 1.444688e+19 (plancks)
Outcome
Staking Rate | Staker APY |
---|---|
40% | 15.52% |
45% | 14.83% |
50% | 14.27% |
55% | 13.82% |
58.5% (~currently) | 13.54% |
65% | 7.7% |
70% | 5.36% |
75% | 4.17% |
80% | 3.52% |
Treasury inflow: ~1’925’899 DOT per spending period (24 days), growing at 10% p.a.
The red curve illustrates the inflation that goes to stakers. The maximum of 8% (with 13.54% APY) is only reached if ideal_rate == staking_rate
. As mentioned above, this situation appears to be not ideal. First, the Treasury inflow is rather large (remember that tokens are minted from inflation and therefore come at an inherent cost to all token holders), and that any deviation from the ideal situation would quickly reduce staker APY and even further increase Treasury inflow.
From these numbers it appears that we have room to decrease inflation, a sentiment frequently stated among community members.
Futher Adjustment
In the following, I present a set of parameters that takes into account the previously mentioned points and achieves a lowered inflation, competitive staker APY, and sufficient Treasury inflow. A good starting point might be to work backwards from a “sufficient Treasury inflow”, taking a look at historical data.
Historical Treasury Inflow
Historically, the Treasury inflow was mainly driven by the gap between the ideal staking rate and the actual staking rate. Inflow from Fees and slashes were largely insignificant. I’ve shown this graph before, it holds data until July 2024.
Historically, and subject to some volatility, the inflow was on average 1.209M DOT per spending period (24 days).
With the maxStakerReward
parameter introduced here, we can rid ourselves from the uncertainty of inflows and the large volatility and fix it to a specific share of the inflation. In this regard it is crucial to understand that the token are minted from thin air, i.e., they contribute to the dillution of the total supply of DOT. Therefore, we need to properly evaluate the trade-off between dillution and having a potent Treasury so that the Polkadot DAO is able to fund its growth and development.
Notes on the calculations
Without the complex system (by setting min_inflation == staker_inflation
) that diverts funds from stakers to the Treasury depending (sometimes non-linearly) with the gap to the ideal rate, the calculations become much more easy for everyone to understand and replicate. The following ingredients are necessary:
Variables to set or observe:
max_inflation
: Maximum yearly total inflation (stakers + Treasury)maxStakerReward
: Percentage that goes directly to stakers.staking_rate
: A result of the individual choices of every token holder (58.5% right now).total_issuance
: Total supply of DOT (~1.444688e+19 as time of writing).
Variables to calculate:
staker_inflation
:max_inflation * maxStakerReward
staker_APY(staking_rate)
:staker_inflation / staking_rate
treasury_inflow_per_spending_period
:total_issuance * max_inflation * (1 - maxStakerReward) / 365 * 24
New Model and Parameters
Ideal_stake: irrelevant
staking_rate: flexible (but ~58.5% right now)
fall_off: irrelevant
min_inflation: 6.8%
max_inflation: 8%
maxStakerReward: 85%
staker_inflation: 6.8%
total_issuance: 1.444688e+19 (plancks)
Outcome
The staker APY naturally depends on how much of the total issuance is staked (i.e., staking rate). With the parameters above, the relationship is as follows:
Staking Rate | Staker APY |
---|---|
40% | 17% |
45% | 15.11% |
50% | 13.6% |
55% | 12.36% |
58.5% (~currently) | 11.62% |
65% | 10.46% |
70% | 9.71% |
75% | 9.07% |
80% | 8.5% |
Treasury inflow: 1’155’539 DOT per spending period (24 days), growing at 8% p.a.
Evaluation
The parameters as presented above result in a reasonable outcome:
- Reduced complexity with a fixed Treasury inflow by setting
min_inflation == staker_inflation
. - Sufficient staker APY around 11.6% (~3.6% after inflation) that is competitive compared to other blockchain networks.
- Sufficient Treasury inflow similar to the historical average that is growing with 8% p.a…
Pallet inflation (RFC89)
In the previous sections we have shown how to achieve a new and simpler curve using the current implementation of the era inflation calculation in Polkadot. The same curve can be implemented using the pallet-inflation (link RFC#89), potentially with different parameters.
Origin
While it is important to extend the flexible upgradeability of Polkadot also to it’s economic parameters, these changes have significant impact on the overall network and the community. Therefore, upgrading parameters should not come lightly, because having a stable and predictable economics is an important part for all token holders.
Changing the state should only be possible with sufficient drive from the community and the token holders of Polkadot. The question arises which OpenGov track (and which curves) determine the vote on these parameters. While it is technically possible to add a new origin with its own requirements and parameters, the root
origin appears to be the most suitable choice. This is because the decision deposit and the fact that only one proposal can be active at a time helps prevent spam. Since changes are not expected to occur frequently, using root
further ensures that these changes are given the appropriate level of importance by making it necessary to meet the stringent criteria for approval and support that they deserve.
Next Steps
Off-Chain Consensus
Finding consensus on this topic is very challenging, because the large number of parameters result in many degrees of freedom, leading to a lot of different “packages” of parameters. In this post, I tried to give some reasonable parameters that result in reduced inflation (not too drastically), sufficient staker APY, and sufficient Treasury inflow. There are, however, many other options available. Our best choice is to see how the off-chain discussion is going and whether we’ll already find a solution with sufficient support, before going to an on-chain vote.
On-Chain Consensus
Since the fellowship is planning to release all necessary technical upgrades already in the next runtime upgrade, I don’t think it is necessary to parallelise finding consensus on upgraded parameters and already inject a changed set of parameters into the upgrades directly at the time of the runtime upgrade. Instead, we as a community should go through the “normal” process of changing the parameters through an OpenGov referendum on it’s respective track.
Summary
In this post, I gave some background information about the inflation system and proposed a set of new parameters going forward. The choice of changing min_inflation == staker_inflation
would effectively simplify the model, having several advantages as discussed.
Further, we could reduce the inflation to a total of 8% p.a. with a fixed Treasury inflow of 15% of that. The specific parameters are:
min_inflation = 6.8%
max_inflation = 8%
maxStakerReward 85%
which result in:
- ~11.62% APY (with staking rate == 58.5%).
- ~1.155M DOT inflow to Treasury on a 24-day basis.
Simplifying the system would also render other parameters such as ideal_rate
and drop_off
insignificant.
This post should be regarded as a suggestion and starting point for further discussions around whether and how to adjust Polkadot’s economic system. It’s important to have extensive off-chain discussions and try to find ways to reach some consensus before going through the complex and long process of on-chain voting.