cip29
titleDecrease Inflation and Adjust Disinflation
descriptionThis proposal lowers the Celestia inflation and disinflation by 33% to moderate issuance while maintaining competitive yield.
authorDean Eigenmann (@decanus), Marko Baricevic (@tac0turtle)
discussions-toInflation Reduction Discussion Forum
statusDraft
typeStandards Track
categoryCore
created2025-02-04

Abstract

This CIP proposes to reduce both the Celestia inflation and disinflation by 33%. Celestia has a thriving ecosystem and already enjoys a significant share of the overall DA market. The current nominal inflation schedule also results in high dollar-value rewards for stakers. By “jumping” the inflation schedule forward, this proposal seeks to moderate total issuance, thereby reducing overall token dilution while still providing a yield that remains competitive to ensure the security of the network.

Motivation

Celestia launched in October of 2023, and since its launch there has been a high demand for posting blobs to the network, while other solutions have not been able to scale in a decentralized manner. However, TIA’s bonding has been continuously high (peaking at around 72% and currently at about 65%) meaning that stakers are overly incentivized.

While we have observed a large shift towards a dynamic inflation schedule: Solana, Near, and Cosmos, we believe that simplicity is key. Staying with a fixed inflation schedule provides a simple solution onchain and we believe that when Celestia’s fee market matures and a diverse ecosystem of yield opportunities on TIA emerge, a more complex solution could be better justified. Instead, keeping it simple is better aligned with Celestia’s ethos (and still allows for future changes).

The goal of this CIP is to reduce the inflation of Celestia immediately; both in a simple and understandable manner, as well as in an economically sustainable way guaranteeing staking rewards remain competitive over time.

Reasons for this CIP are:

  1. Current issuance is too high, especially in dollar-terms. We want to avoid accelerated dilution of non-stakers.
  2. To empower applications to compete effectively with staking yields. While it is important to maintain a high bond ratio (60%+) to secure the network, we also envision a vibrant ecosystem of diverse applications emerging on Celestia-secured rollups. Using TIA as collateral onchain competes with staking yield and reducing inflation makes onchain use more attractive.
  3. By reducing inflation we reduce the amount of forced selling due to taxes and other offchain liabilities. High inflation can contribute to centralization of a network by diluting non-stakers. If a set of users are staking with high inflation their stake and inadvertently their network power increases while a non-staker would see their network power decrease. While this is a property of PoS systems, higher inflation accelerates it.

At a 33% reduction the inflation rate is 4.82% in the first year of the reduction, and the APR is roughly 7.39% if the bonding ratio stays the same. This is currently around 2.2 times the APR of Ethereum staking, but Celestia is a smaller and younger network so a higher security budget is justified.

Specification

Overview

  1. Reduce Inflation: We reduce the current inflation by 33% in the next upgrade (v4)

  2. Reduce Disinflation Rate: We reduce the disinflation rate by 33%

  3. Reward Calculation:

    • The reward distribution mechanism remains unchanged—rewards are still allocated pro rata to stakers and validators.

    • The only modification is to the base inflation parameter and the disinflation parameter; both drop by 33% on the next upgrade leading to lower yet sustainable inflation immediately

Implementers MUST ensure:

  • The chain upgrade process includes the new inflation parameters without disrupting block production.

  • The new schedule is included in the next major version release to reflect the updated inflation rates on-chain in the next app version (v4).

Parameters

Below is the illustrative table showing the original versus the accelerated schedule. The “New Adjusted Inflation” column is an example of how inflation might look if we reduce it by 33% starting in the next upgrade. Note that for simplicity, the table assumes the inflation drop is applied at year 1.5 but if this proposal gets accepted, it would be immediately applied with the next upgrade.

YearOriginal InflationNew Adjusted InflationNotes
08.008.00Genesis year, no change.
17.207.20
1.57.205.00088Reduce year 0 inflation by 33% and additionally apply 6.7% disinfaltion, lowering the inflation rate to 5.00088%
26.484.66582Regular annual disinflation applied (6.7%).
35.834.35321Regular annual disinflation applied (6.7%).
45.254.06155Regular annual disinflation applied (6.7%).
54.723.78942Regular annual disinflation applied (6.7%).
64.253.53553Regular annual disinflation applied (6.7%).
73.833.29865Regular annual disinflation applied (6.7%).
83.443.07764Regular annual disinflation applied (6.7%).
93.102.87144Regular annual disinflation applied (6.7%).
102.792.67905Regular annual disinflation applied (6.7%).
112.512.49956Regular annual disinflation applied (6.7%).
122.262.33209Regular annual disinflation applied (6.7%).
132.032.17584Regular annual disinflation applied (6.7%).
141.832.03005Regular annual disinflation applied (6.7%).
151.651.89404Regular annual disinflation applied (6.7%).
161.501.76714Regular annual disinflation applied (6.7%).
171.501.64874Regular annual disinflation applied (6.7%).
181.501.53828Regular annual disinflation applied (6.7%).

To understand the numbers on how this would affect stakers please refer to the tables below:

Current schedule:

YearInflation RateAPR (35% Staked)APR (50% Staked)APR (65% Staked)
08.022.8616.012.31
17.220.5714.411.08
26.4818.5112.969.97
35.8316.6611.668.97
45.2515.010.58.08
54.7213.499.447.26
64.2512.148.56.54
73.8310.947.665.89
83.449.836.885.29
93.18.866.24.77
102.797.975.584.29
112.517.175.023.86
122.266.464.523.48
132.035.84.063.12
141.835.233.662.82
151.654.713.32.54
161.54.293.02.31

Updated schedule:

YearInflation RateAPR (35% Staked)APR (50% Staked)APR (65% Staked)
08.022.8616.012.31
17.220.5714.411.08
1.55.0008814.288210.00187.69366
24.6658213.33099.331647.17819
34.3532112.43778.706426.69725
44.0615511.60448.123096.24853
53.7894210.82697.578845.82988
63.5355310.10157.071065.43928
73.298659.424726.59735.07485
83.077648.793266.155284.73483
92.871448.204115.742884.4176
102.679057.654445.358114.12162
112.499567.141594.999113.84547
122.332096.66314.664173.58782
132.175846.216674.351673.34744
142.030055.800164.060113.12316
151.894045.411553.788082.91391
161.767145.048973.534282.71868
171.648744.710693.297482.53653
181.538284.395083.076552.36658

Backwards Compatibility

No backward compatibility issues are anticipated. This parameter change follows the standard CIP process, and current node operators should not require any additional changes besides upgrading to the new binary which automatically implements the changes discussed in this CIP.

Test Cases

  1. Parameter Verification Test:

    • Ensure that when the updated inflation parameters are applied at Year 3, the on-chain inflation rate reflects the new values instead of the old schedule.
  2. Reward Distribution Test:

    • Validate that block rewards are distributed correctly under the new inflation rates.

Reference Implementation

Below is a pseudo-code snippet for updating the inflation parameters. Actual implementation may vary by client:

Proposed implementation:

const (
	// InitialInflationRateCip29 is the inflation rate specified in CIP-29.
	InitialInflationRateCip29 = 0.0536
	// DisinflationRateCip29 is the rate at which the inflation rate decreases each year (after CIP-29 was introduced).
	DisinflationRateCip29 = 0.067
)

func InitialInflationRateCip29AsDec() sdk.Dec {
	return initialInflationRateCip29AsDec
}

func DisinflationRateCip29AsDec() sdk.Dec {
	return disinflationRateCip29AsDec
}

// CalculateInflationRate returns the inflation rate for the current year depending on
// the current block height in context. The inflation rate is expected to
// decrease every year according to the schedule specified in the README.
func (m Minter) CalculateInflationRate(ctx sdk.Context, genesis time.Time) sdk.Dec {
	if ctx.ConsensusParams().Version.AppVersion <= 3 {
		return calculateInflationRatePreCip29(ctx, genesis)
	} else {
		return calculateInflationRatePostCip29(ctx, genesis)
	}
}

func calculateInflationRatePreCip29(ctx sdk.Context, genesis time.Time) sdk.Dec {
	years := yearsSinceGenesis(genesis, ctx.BlockTime())
	inflationRate := InitialInflationRateAsDec().Mul(sdk.OneDec().Sub(DisinflationRateAsDec()).Power(uint64(years)))

	if inflationRate.LT(TargetInflationRateAsDec()) {
		return TargetInflationRateAsDec()
	}
	return inflationRate
}

func calculateInflationRatePostCip29(ctx sdk.Context, genesis time.Time) sdk.Dec {
	if ctx.ConsensusParams().Version.AppVersion <= 3 {
		panic("calculateInflationRatePostCip29 should not be called with AppVersion <= 3")
	}

	years := yearsSinceGenesis(genesis, ctx.BlockTime())
	inflationRate := InitialInflationRateCip29AsDec().Mul(sdk.OneDec().Sub(DisinflationRateCip29AsDec()).Power(uint64(years)))
	if inflationRate.LT(TargetInflationRateAsDec()) {
		return TargetInflationRateAsDec()
	}
	return inflationRate
}

Alternative Approaches

Alternatives that were considered.

Alternative 0: Do nothing

If we continue to do nothing, Celestia’s inflation schedule will end up competing with applications trying to offer alternative yield to stakers, therefore limiting TIA’s onchain usage.

Alternative 1: Dynamic Inflation based on bonded ratio

The Cosmos hub has a market dynamic inflation schedule/range where the inflation increases and decreases the further away current stake is from an ideal target amount of bonded stake.

Inflation = CurrentInflation + (1 - BondedRatio / GoalBonded) * (InflationRateChange / BlocksPerYear)

Similarly, the Solana community is currently considering a similar approach but with vastly faster corrections than the Cosmos hub (see SIMD-0228 for details).

Generally, the dynamic approach is more complex and less predictable. Celestia’s community has a strong commitment to base layer simplicity and minimalism. A fixed inflation schedule is simple and less complex, probably less controversial, and the right answer at this point in time

Alternative 2: Accelerate the Inflation faster (or slower)

Why not apply a disinflation rate of 10% only, or why not even a disinflation rate of 50%? We believe that a 33% drop of inflation and disinflation (as you can see by the numbers) has a sufficiently significant effect on the inflation without deviating too much from the original schedule. For comparison, here are the numbers if we applied 50% instead or kept the original schedule:

inflation change

If we accelerate the schedule slower, the system continues over incentivising stakers and the change would not really move the needle as it would be too close to the current schedule. If we accelerate even faster, we risk hitting the target inflation of 1.5% too fast or generally risk lowering the inflation too much too early. Celestia mainnet is just about a year old and while there is already a thriving ecosystem, we want to err on the side of caution. A target inflation of <~5% seems ideal for a proof-of-stake system which is still early and whose tokenomics will play out in the future.