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
| Unit | Freemen |
|---|---|
| 1 EPIC | 100,000,000 (EPIC_BASE) |
| 1 milli-EPIC | 100,000 (MILLI_EPIC) |
| 1 micro-EPIC | 100 (MICRO_EPIC) |
| freeman | 1 (FREEMAN) |
Every API accepts and returns integer freemen. 0.1 EPIC is 10000000.
Timing
| Parameter | Value |
|---|---|
| Target block time | 60 seconds (BLOCK_TIME_SEC) |
| Blocks per hour | 60 |
| Blocks per day | 1,440 |
| Cut-through horizon | 10,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:
| Network | Coinbase maturity |
|---|---|
| Mainnet | 1,440 blocks (COINBASE_MATURITY, one day of blocks) |
| Floonet | 30 blocks (FLOONET_COINBASE_MATURITY) |
| Usernet | 3 blocks (USER_TESTING_COINBASE_MATURITY) |
| Automated testing | 3 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 ends | Height | Duration | Base reward |
|---|---|---|---|
| Era 1 | 480,960 | 334 days | 16 EPIC |
| Era 2 | 1,157,760 | + 470 days | 8 EPIC |
| Era 3 | 2,023,200 | + 601 days | 4 EPIC |
| Era 4 | 3,175,200 | + 800 days | 2 EPIC |
| Era 5 | 4,642,560 | + 1,019 days | 1 EPIC |
| Era 6 onward | repeating steps | 1,460 days each | 0.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().
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:
| Field | Value |
|---|---|
supply | fast_total_supply() at the current height, divided by 100,000,000 |
max_supply | The 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 era | Rate |
|---|---|
| 1 | 8.88% |
| 2 | 7.77% |
| 3 | 6.66% |
| 4 | 5.55% |
| 5 | 4.44% |
| 6 | 3.33% |
| 7 | 2.22% |
| 8 | 1.11% |
| 9 | 1.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.