Skip to main content

Inflation

Astar has a soft-capped 'yearly' inflation and uncapped max supply. Inflation is distributed amongst actors in the network, in varying proportions. Actors include:

  • stakers
  • dApp owners
  • collators
  • treasury

Basic Time Units

Cycles

Cycle can be considered as a 'year' in the Astar Network. When a new cycle starts, new inflation configuration is calculated according to the total issuance at that point in time. E.g. if 'yearly' inflation is set to be 7%, and total issuance is 1,000,000 ASTR, then the soft-capped max inflation for that cycle will be 70,000 ASTR.

Cycle length is configurable, but in practice it will resemble a 'year' off-chain.

inflation_soft_cap=inflation_ratetotal_issuanceinflation\_soft\_cap = inflation\_rate * total\_issuance

Periods

Each cycle consists of one or more periods. Periods are a core time unit in the dApp Staking protocol. Each period consists of a Voting and Build&Earn subperiods.

During the Voting subperiod, neither stakers nor dApp owners can earn any rewards, only collators and treasury continue earning. During the the Build&Earn subperiod, stakers earn staking rewards per era and have the opportunity to earn bonus reward at the end of a period. dApp owners also earn rewards, based on how well their dApp is performing in dApp staking, at the end of each era.

Eras

Each period is divided up into multiple eras. Era is the core time unit in dApp staking, and its length is measured in the number of blocks.

BuildAndEarn subperiod consists of one or more standard eras. Each era has a fixed length. Voting subperiod always consists of exactly one era and this voting era is unique as its length (in blocks) can be longer than a standard era length (but always a multiple of standard era length).

Example

  • Block is produced every 12 seconds
  • Era length is 7200 blocks which equals 24 hours (1 day) (This is standard era length)
  • Voting subperiod length is 10 eras (This is the single voting era which lasts 10 x 7700 blocks)
  • Build&Earn subperiod length is 81 eras
  • Cycle length is 4 periods

With such configuration, we'd end up with a cycle lasting 364 days (roughly a year), and each period taking around 3 months to complete.

Recalculation

When a new cycle begins, soft-inflation cap is recalculated, and according to the calculated value, rewards for all network actors are adjusted.

The reason why it's a soft-cap, instead of a hard-cap is how staker & dApp rewards are distributed. Rewards are only minted when they are claimed, and it is possible that at the time of reward recalculation, some rewards remain unclaimed. As a result, theoretically, it's possible for the cycle inflation to exceed the soft-cap even though in practice it will be highly unlikely due to lazy minting & fee burn mechanisms.

Inflation Distribution

Based on the calculated soft-cap, rewards for all network participants are adjusted.

Collators

Collators get a fixed amount of the cycle's soft-capped inflation. This amount is equally divided by the number of blocks in the cycle.

collator_reward_per_block=total_collator_cycle_rewardblocks_per_cyclecollator\_reward\_per\_block = \frac{total\_collator\_cycle\_reward}{blocks\_per\_cycle}

Treasury

Similar to the collators, treasury gets a fixed amount of the cycle's soft-capped inflation distributed in equal amounts throughout all the blocks in the cycle.

treasury_reward_per_block=total_treasury_cycle_rewardblocks_per_cycletreasury\_reward\_per\_block = \frac{total\_treasury\_cycle\_reward}{blocks\_per\_cycle}

dApps

dApp reward are assigned at the end of each era during Build&Earn subperiod. This means that the total cycle's dApp reward amount has to be equally divided by the total number of Build&Earn eras in a cycle.

dapp_reward_pool_per_era=total_dapp_cycle_rewardperiods_per_cycleeras_per_build_and_earndapp\_reward\_pool\_per\_era = \frac{total\_dapp\_cycle\_reward}{periods\_per\_cycle * eras\_per\_build\_and\_earn}

The dApp staking protocol will calculate how much each staked dApp should get.

Stakers

There are two components to the staker rewards - regular staking rewards & the bonus reward for loyal stakers.

Regular Staker Rewards

Regular staker rewards are awarded for staking native currency, ASTR, on a dApp. These rewards have two components - the base reward and the adjustable reward.

Base reward is the amount assigned to the reward pool at the end of each era regardless of how much has been staked in total.

base_staker_reward_pool_per_era=total_base_staker_cycle_rewardnumber_of_cycleseras_per_build_and_earnbase\_staker\_reward\_pool\_per\_era = \frac{total\_base\_staker\_cycle\_reward}{number\_of\_cycles * eras\_per\_build\_and\_earn}

The adjustable part is the dynamic part, and depends on the total value staked and the target stake value. This amount linearly increases as the total value staked increases, and then saturates once the amount is reached or exceeded. With this component, staker rewards are not a zero-sum game.

max_adjustable_staker_reward_pool_per_era=total_adjustable_staker_cycle_rewardnumber_of_cycleseras_per_build_and_earnmax_\_adjustable\_staker\_reward\_pool\_per\_era = \frac{total\_adjustable\_staker\_cycle\_reward}{number\_of\_cycles * eras\_per\_build\_and\_earn}

The adjustable part of the reward is calculated once an era ends, using the total value staked at that point in time.

adjustable_factor=min(1,total_value_staked_percentideal_staking_percent)adjustable\_factor = min(1, \frac{total\_value\_staked\_percent}{ideal\_staking\_percent})

Using the adjustable_factor, adjustable portion of the staker reward is:

adjustable_staker_reward_pool=max_adjustable_staker_reward_pool_per_eraadjustable_factoradjustable\_staker\_reward\_pool = max_\_adjustable\_staker\_reward\_pool\_per\_era * adjustable\_factor

When the adjustable factor is less than 1, it means the remainder is never minted, reducing the overall inflation.

With the above formulas, we can finally express how much staker Alice earns in era n:

staker_reward_per_eraAlice=staked_valueAlice,ntotal_staked_valuen(base_staker_reward_pool_per_eran+adjustable_staker_reward_pooln)staker\_reward\_per\_era_{Alice} = \frac{staked\_value_{Alice,n}}{total\_staked\_value_n} * (base\_staker\_reward\_pool\_per\_era_n + adjustable\_staker\_reward\_pool_n)

Bonus Rewards

In case a staker stakes during the Voting subperiod, and doesn't reduce their stake during the Build&Earn subperiod below what was staked at the end of the Voting subperiod, it will make them eligible for the bonus reward.

Bonus reward pool is assigned per period, and can be expressed as:

bonus_reward_pool_per_period=total_bonus_cycle_rewardperiods_per_cyclebonus\_reward\_pool\_per\_period = \frac{total\_bonus\_cycle\_reward}{periods\_per\_cycle}

The bonus reward for a staker Alice can then be expressed as:

bonus_staker_rewardAlice=voting_subperiod_staked_valueAlicetotal_voting_subperiod_staked_value(bonus_reward_pool_per_period)bonus\_staker\_reward_{Alice} = \frac{voting\_subperiod\_staked\_value_{Alice}}{total\_voting\_subperiod\_staked\_value} * (bonus\_reward\_pool\_per\_period)

Lazy Minting

Both staker and dApp rewards are minted in a lazy fashion - when they are needed. Only collator & treasury rewards are minted per block.

With the adjustable staker reward and the dApp staking tier system, the inflation in practice will be much lower than the calculated soft-cap. Maximum adjustable award amounts is possible only if the ideal staking rate is reached or exceeded. For the dApp rewards, it's unlikely that all of the tiers will be filled with dApps - it might be that the tier capacity is larger than the demand, or that simply some dApps don't attract enough support to enter a tier. These rewards will never be even minted thus lowering the effective inflation rate.

Rewards don't persist forever, and must be claimed before they expire. Although this is expected to be very lenient, it's still possible to happen.

None of the aforementioned mechanism are burn mechanisms, instead they just delay the minting operation until it's needed. The major burn mechanism is part of the fee system, where a significant portion of fees get burned. Only due to this, it's practically impossible for the soft-capped max inflation to be reached when considering rewards assigned & issued during a single cycle.

Parameters

ParameterAstarShidenShibuya
Periods Per Cycle362
Eras Per Voting Subperiod1168
Eras Per Build&Earn Subperiod1115520
Blocks Per Era7200 (~24 hours)7200 (~24 hours)1800 (~6 hours)
Cycle Inflation Rate7%7%1%
Treasury Part5%5%5%
Collators Part3.2%3.2%3%
dApps Part13%13%20%
Base Staker Part25%10%25%
Adjustable Staker Part40%58.8%35%
Bonus Part13.8%10%12%
Ideal Staking Rate50%50%20%