Skip to content

ECIP-1017 — Era-Based Monetary Policy

ECIP-1017 defines Ethereum Classic's fixed, disinflationary monetary policy — the core economic difference from Ethereum. The block reward steps down by 20% at fixed intervals called eras, giving ETC a capped, predictable emission curve.

Metric Value
Era length 5,000,000 blocks
Era 0 reward 5 ETC
Reduction per era 20% (× 4/5)
Dedicated files 3

Reward schedule

Each era spans ECIP1017EraRounds (5,000,000) blocks. The reward for era n is 5 ETC × (4/5)ⁿ:

Era Block range Block reward
0 1 – 5,000,000 5 ETC
1 5,000,001 – 10,000,000 4 ETC
2 10,000,001 – 15,000,000 3.2 ETC
3 15,000,001 – 20,000,000 2.56 ETC
4 20,000,001 – 25,000,000 2.048 ETC
n 5 × 0.8ⁿ ETC

Uncle & nephew rewards

  • Era 0 uses Ethereum's distance formula: an uncle earns (8 − (H − U)) / 8 × reward.
  • Era 1+ fixes the uncle reward at 1/32 of the era block reward.
  • The nephew (the miner that includes an uncle) earns 1/32 of the block reward in every era.

Implementation

block finalized → ETCEngine.Finalize                  [consensus/etc/engine.go]
  → accumulateRewardsETC(config, state, header, uncles)
    → era    = getBlockEra(number, ECIP1017EraRounds)   // (number-1) / eraRounds
    → reward = getBlockWinnerRewardByEra(era)            // 5 ETC × (4/5)^era
    → credit coinbase with block reward + 1/32 per included uncle (nephew)
    → credit each uncle coinbase (era-0 distance formula, else fixed 1/32)

Dedicated Files

File Description Changed
consensus/etc/engine.go · diff ETC consensus engine — accumulateRewardsETC, getBlockEra, getBlockWinnerRewardByEra +771 -0
params/protocol_params_etc.go · diff ECIP-1017 disinflation constants (reward × 4/5 per era) +25 -0
consensus/etc/rewards_test.go · diff Era-based reward schedule tests +254 -0

← Back to Fork Changelog