Adjusting Polkadot's Ideal Staking Rate Calculation

Hey everyone

I am proposing a change to the formula that calculates the ideal staking rate on Polkadot. In the following, I’ll detail the rationale behind this proposed change, offer an insight into the potential adjustment, and argue that it aligns with Polkadot’s anticipated trajectory.

Introduction

As presented in more detail here, the ideal staking rate is decreasing by 0.5% with every additional parachain until a minimum of 45%. Right now, with 45 parachains (with ID>=2000), the ideal rate is at 52.5%. The current system is designed to nudge the collective of stakers towards the ideal rate by diverting staker rewards whenever there is a mismatch between the two rates. It is crucial to recognize that if the staking rate falls below the ideal rate, diversions are scaling linearly. In contrast and if the staking rate is above the ideal rate, the amount scales exponentially. In other words, then much more rewards are diverted to treasury, reducing staker APY significantly.

This system was originally designed to cope with a gruadually upscaling number of parachains where continously a significant amount of issuance would be locked up in the slots. This leads to the observation that the total issuance of DOT would be divided among three major conditions: liquid, staked, or locked (in long-term slots).

With the upcoming changes, this assumption seem to be outdated, because the Relay Chain will allocate coretime on a much more frequent basis and the costs of coretime are spent directly, instead of indirectly (through opportunity costs). In short, there won’t be any tokens locked in parachain slots eventually.

While the long-term leases will probably still be a part of Polkadot in the short/medium-term, I expect them to fade away after some transition phase. This implies that it is not reasonable to expect a larger share of issuance being locked up for parachain leases. With that state being gone, we should reconsider the capacity limit imposed on the staking system by the ideal staking rate.

In particular, we should consider making sure that the ideal staking rate leaves enough room for staked tokens, obtaining more economic security as a positive side-effect.

An opportunity for revision

With the net number of parachain slots finally declining, the ideal staking rate would gradually move back to it’s upper limit of 75%. So, without further intervention, we’d see a gradual increase in the ideal staking rate. The problem, however, is that the slots have a non-uniformly distributed number tokens locked. In particular, a significant share of in the long-term lease system are due to Polkadot’s initial two lease offerings. Specifically, there are ~100M DOT locked in leases 6-13 and ~40M in 7-14. Those are projected to expire at around 23rd October 2023 and mid-January 2024, respectively. Then, the system experiences approximately ~7.4% of the issuance turning liquid in a singular event in October 2023 and another ~3% in January 2024.

With a current staking rate of about 48.8%, it leaves a meager 3.7% of the issuance available for staking prior to a steep plunge in staker rewards. Remember, that the incentives not to overshoot the ideal staking rate are much stronger than to not undershoot it. We might even see additional parachain slots being auctioned off, driving the ideal rate even further down. Consequently, the bulk of the unlocking tokens are constricted within the present staking framework.

To address this, rather than waiting for the natural rise in the ideal staking rate, we can act preemptively. By adjusting the rate now, we prepare the system for these imminent unlocking events, ensuring staking capacity aligns with Polkadot’s anticipated trajectory.

Immediate change

The current formula determines the auction_proportion which is then substracted from the fixed value of 75% to obtain the ideal staking rate. An easy intervention would be to change the calculation.

The formula is currently:
let auction_proportion = Perquintill::from_rational(auctioned_slots.min(60), 200u64);

An immediate revision could be:

let auction_proportion = Perquintill::from_rational(auctioned_slots.min(60), 300u64);

In that configuration, the variable auction_proportion is calculated as the minimum of the auctioned_slots (which are all parachains with ID >= 2000) and 60, divided by 300. The ideal staking rate is then 75% minus the auction_proportion. For the current situation, the ideal staking rate would then be calculated as: 0.75 - min(45,60)/300 = 0.6, i.e., 60%.

Long-term change

Eventually, it does not make sense to scale the ideal staking rate with the number of parachains (paraIDs), because their concept will be deprecated. Instead, we probably want to go for an ideal staking rate that is a governance-exposed constant. Then, the community can collaboratively determine an optimum value, given the state of the network at the time.

I’d argue, however, that the gradual upscaling is still a valid mechanism, because slots will gradually expire. We might want to wait until Polkadot fully transitioned between the old and the new method of allocating coretime until we discuss further, larger changes.

Next steps

Time is of the essence. This change requires a runtime upgrade and makes the most sense to deploy it before October 23rd. Should there be a consensus within the community about this revision, it could be synchronized with the adjustments discussed here that are currently being worked on here. From what I gather, we might still make that deadline.

TL;DR

In order to give the unlocking tokens from lease period 6-13 and 7-14 more room in the staking system, we could make a small adjustment to the calculation of the ideal staking rate. While this can be regarded as an ad-hoc response to a single event, the change aligns with the direction of Polkadot and its upcoming changes.

Let me know what you think.

18 Likes

I generally agree with the observation that this formula is moving toward being obsolete, and it will naturally correct itself. Long term, we could move back to a constant ideal staking rate, or similar.

Immediate change

The immediate change is somewhat hard to a coordinate, as it requires a runtime upgrade and getting a Polkadot runtime to enact usually takes time. If this adjustment generally has approvals from the community and fellowship, we better merge it fast and assist it is enacted in time.

Long-term change

Learning from the pains of the current mechanism, this future inflation rate should be a storage item such that it can be tweaked easier.

4 Likes

Hi Kian

Thanks for the feedback.

Yes, this change requires us to be quick. I talked with @gpestana who can implement the code change. I also consulted @bkchr, who expects that we can make it in time. He also told me, that we only require to change the runtime configuration (in contrast to the runtime crate), so it should be quick.

This will be part of this change.

So is it safe to say this would increase rewards for people actively staking in the short to medium term based on the current amount of people actively staking right now?

I am not sure if it needs to be part of the broader change to the tresury inflow. I opened an independent PR for it here: Update Polkadot ideal staking rate by kianenigma · Pull Request #26 · polkadot-fellows/runtimes · GitHub

1 Like

No, it doesn’t need to be. But it might be a good opportunity to merge both together as the code adjustments for the treasury changes are also progressing.

But you are right, those two changes are not directly dependent on each other.

1 Like

That depends on the staking rate relative to the ideal staking rate. If those two numbers converge we see maximum rewards going to stakers. To reiterate the observation from above: If we overshoot the ideal staking rewards (for example if a lot of the unlocking tokens enter the staking system), then the staker rewards would significantly decrease.

This is what I assumed based on what you said, so I agree. Seems like there is no reason not to pass this based on what you laid out.

One topic I would like to raise is that of the minimum nomination amount. With such a large amount of funds unlocking soon and the change in the ideal staking rate, this would necessarily increase the minimum amount significantly, crowding out nominators with smaller stakes, which seems quite non-ideal. Fortunately, we do have nomination pool nowadays, so this may even be a good time to tell small stakers to join one.

4 Likes

Good point, and I’m glad you brought it up. Staking pools are indeed the solution, but unfortunately, rapid staking reward threshold increase will mean that those smaller stakers will have to wait 28 eras to move to pools.

1 Like

@jonas thanks for bringing this up, I agree with the short-term changes.

This is a good point and it was my initial idea when Jonas raised this issue. In general, I think that having a parameterised era_payout formula gated by governance seems like a good direction, but we can work on that once the ideal staking rate is updated given the time constraints (tracking issue: Consider parameterise the `era_payout` formula · Issue #1559 · paritytech/polkadot-sdk · GitHub).

1 Like

Thanks @jonas for the analysis. I support this initiative and I think this can be considered together with increasing the minimum amount to create a pool Nomination Pools: Increase Minimum Create Bond to 1000 DOT

Noting that we are not distinguishing between parameters than can be tweaked from governance (MinCreateBond in pools) and those that cannot and can only be changed when code upgrades (inflation curve). Therefore these two cannot easily be mixed together as one proposal I am afraid.

2 Likes

Hi @kckyeung

That is a good point! I’d like to note, that an increase in minimum nomination amount is not solely the result of the proposed change, but could result simply from the fact that we’ll see more nominators anyway. But, of course, it is true that the goal of the proposed change is to further incentivize the unlocked tokens to join the staking system.

I did some calculations. There are around 8.1k unique addresses that contributed more than the current minimum (250 DOT) in the first five auctions (the one that leads to 100M unlock). We can simulate a “worst-case” situation by assuming all of them join as new nominators. Note, around 500 of those contribution addresses are already nominators, so they won’t further bloat the state.

I gathered all currently active nominators, merged them with those contribution addresses, ordered by amount and checked the 22000th value. Given that, the minimum bond would increase to ~580 DOT.

As mentioned above, this assumes the “worst-case”. I expect that many contributors are already nominators (with other stashes) and will merge them instead of opening a new nominator. Generally, and as mentioned by others, we’d want to see more smaller nominators move towards nomination pools anyway.

To summarize, there will be an increase in the minimum bond, but that is almost inevitable, and numbers are not so bad.

1 Like

Yeah, it makes sense, and it would mean that those 8k addresses are more or less representative of the current active stakers. Still, there will ~ 3200 current addresses that will be kicked out. So, maybe some sort of notice would be a good thing?

I think @jonas 's proposal makes a lot of sense, especially considering @kckyeung 's comment.

  1. Currently, there’s a growing discontent among people who are losing rewards due to the increase in the minimum reward. However, their behavior still earns them some rewards.
  2. If, in addition to disincentivizing rewards with growth, they collapse, the system might start behaving quite unstably.
  3. For instance, the collapse of rewards could lead to a large amount of liquidity entering the market (from staking) – affecting demand – which would accelerate the market entry.

So yes, this is very timely.

Perhaps, I would suggest implementing some self-protection against governance. Currently, the opengov isn’t functioning predictably, and we’re uncertain about its future behavior. And the ideal staking rate is one of the key metrics of system stability. For example, governance could set the ideal staking rate at 20 percent, and then the system would essentially annihilate.

Some suggestions:

  • Limit the step of ideal staking rate changes overall (for example no more than 5% down and 10% up).
  • Limit the step of ideal staking rate changes relative to the current level (no more than 5% down and 10% up).
  • Limit the frequency of potential updates (no more than once every 500 eras).

Such restrictions will help reduce the burden of monitoring the system. Moreover, since we have a fellowship, it provides us with the capability to address any emergent issues promptly.

2 Likes

Dear all,

I currently really think than the current high staking rewards of DOT reduce defi economy inside polkadot ecosystem.

As DOT is the main token of Polkadot its also the main token inside defi applications, and so the most important token for them to exist.

A defi applications can exist only if they give more rewards than staking rewards for user who put their DOT inside this applications.

If the rewards is bellow, the application will just die as user will remove liquidity to only make staking.
No reason to be pay less when you take more risk.

If we want to develop the defi economy we must reduce the staking rewards of DOT.
Its on the same logic than central bank for euro/dollars who reduce the rate when they want to boost the economy.

Currently I really think than its more important to focus on the development of the ecosystem than to protect rentability of staking.

A blockchain without economy, with only staking, is a dead blockchain.

So to conclude, I’m against this proposal.
Let’s reduce the rentability of staking and motivate owner of DOT token lock in crowdloan to move them on defi applications, to develop the economy of polkadot than only staking.

Best regards,

No Risk - No Fun

5 Likes

I agree with NoRisk-No fun, staking rewards APR is not the Alpha and Omega of the ecosystem.
The ecosystem needs staking for the security, not for the yield it generates.

I mean, on Ethereum it’s around 4% and everyone is happy with it.
No risk (staking) → Less APR
High risk (Defi) → More APR

But you want to drive Polkadot with: No risk → More APR

I also don’t get it and it will continue to damage the whole (small) Defi ecosystem in Polkadot.

1 Like

This situation could be viewed as an opportunity to reduce out-sized staking rewards, rather than a crises in need of an intervention. Putting the dot in the treasury and utilizing it to potentially (hopefully)build value for everyone makes more sense than handing it over to be dumped daily on the market with no potential for value build.

I think the deep suggestion here is decoupling the ideal parameter from parachains slots and putting it the hands of OpenGov – and so setting a starting point for that.

60% is a pretty big jump considering only 10% of the supply is unlocking.

Something like 54% would leave room for half the unlock to go toward staking/gov while encouraging the other half to find another home like in DeFi.

Then OpenGov it from there!

1 Like