Skip to main content

Emission and the levy

Epic's emission steps down through defined eras and eventually stops, and a declining foundation levy takes part of each block reward.

Units

UnitFreemen
1 EPIC100,000,000 (EPIC_BASE)
1 milli-EPIC100,000 (MILLI_EPIC)
1 micro-EPIC100 (MICRO_EPIC)
freeman1 (FREEMAN)

Every API accepts and returns integer freemen. 0.1 EPIC is 10000000.

Timing

ParameterValue
Target block time60 seconds (BLOCK_TIME_SEC)
Blocks per hour60
Blocks per day1,440
Cut-through horizon10,080 blocks (CUT_THROUGH_HORIZON)

Coinbase maturity is how many blocks a mined output waits before it can be spent. The value comes from the active chain type:

NetworkCoinbase maturity
Mainnet1,440 blocks (COINBASE_MATURITY, one day of blocks)
Floonet30 blocks (FLOONET_COINBASE_MATURITY)
Usernet3 blocks (USER_TESTING_COINBASE_MATURITY)
Automated testing3 blocks (AUTOMATED_TESTING_COINBASE_MATURITY)

The selection is coinbase_maturity().

A mature coinbase is still subject to the wallet's own confirmation floor, --min_conf, which defaults to 10 on every network. See wallet operations.

Reward eras

Emission steps down at era boundaries rather than following a smooth curve:

Era endsHeightDurationBase reward
Era 1480,960334 days16 EPIC
Era 21,157,760+ 470 days8 EPIC
Era 32,023,200+ 601 days4 EPIC
Era 43,175,200+ 800 days2 EPIC
Era 54,642,560+ 1,019 days1 EPIC
Era 6 onwardrepeating steps1,460 days each0.15625 EPIC, halving each step

The per-era values are in fast_total_supply(). The base reward is not what the miner receives, because the foundation levy comes off it first. On a local chain at era 1 heights, a mined block credited the wallet 14.5792 EPIC, which is 16 EPIC less the 8.88% era 1 levy.

From era 6 the base reward is 0.15625 EPIC (BASE_REWARD_ERA_6_ONWARDS) and steps continue on a 1,460-day period. The era constants are BLOCK_ERA_1 onwards, and the reward is computed by reward_at_height().

Reward steps are not halvings

The era 5 to 6 transition takes the reward from 1 EPIC to 0.15625 EPIC, a reduction of 6.4 times rather than 2. The blocks_to_next_halving field in the node's Status response counts blocks to the next step, and a step is not a halving. Build a supply projection from the era schedule.

Rewards are computed with integer arithmetic, so later steps reach zero and emission stops. Two fields in the Status response report supply, both in whole EPIC rather than freemen:

FieldValue
supplyfast_total_supply() at the current height, divided by 100,000,000
max_supplyThe fixed number 21000000, set in the status handler (api/src/handlers/server_api.rs:86)

max_supply is a value the status response carries. No consensus constant of that name exists, and neither field takes part in block or transaction validation. The emission schedule is the era table above.

The foundation levy

A share of each block reward goes to the Epic foundation rather than the miner, declining across nine levy eras:

Levy eraRate
18.88%
27.77%
36.66%
45.55%
54.44%
63.33%
72.22%
81.11%
91.11%

The rates are FOUNDATION_LEVY over a ratio of 10,000, applied by reward_foundation_at_height().

The first levy era runs 120 days and each subsequent era runs 365 days, nine eras in total, so the levy ends at height 4,377,600 and the full reward goes to the miner from there on.

Foundation payments use pre-generated coinbase data shipped with the node, one entry per day of the levy schedule (foundation_height()), so a foundation coinbase is constructed from that data rather than by the miner.

Fees

The fee depends on the shape of the transaction, not on network demand:

fee = max(4 × outputs + kernels − inputs, 1) × 0.001 EPIC

A two-input, two-output, one-kernel transfer costs 700,000 freemen, or 0.007 EPIC. The weight is TransactionBody::weight() and the base fee is MILLI_EPIC, 100,000 freemen (core/src/libtx/mod.rs:37).

The wallet does not supply a base fee, so there is no fee market to bid into. Block weight is capped at 40,000 (MAX_BLOCK_WEIGHT), with inputs weighted 1, outputs 21 and kernels 3. A pool applies its own floor through accept_fee_base, also 100,000 by default.

Next