Block Reward Formula
AgentChain uses a deterministic block reward formula with a 2% annual inflation schedule. The reward increases at each epoch boundary, ensuring long-term mining incentive sustainability without requiring governance votes or hard forks.
Formula
The block reward for any given block number is calculated as:
reward = 2 × 10¹⁸ × (102/100)^epoch
Where:
epoch = floor(blockNumber / 5,256,000)
- Base reward: 2 CRD (2 × 10¹⁸ wei)
- Epoch length: 5,256,000 blocks (~1 year at 6-second block times)
- Inflation rate: 2% compounding per epoch
Implementation
Go Pseudocode
func CalcBlockReward(blockNumber uint64) *big.Int {
baseReward := new(big.Int).SetUint64(2e18)
epoch := blockNumber / 5_256_000
numerator := big.NewInt(102)
denominator := big.NewInt(100)
reward := new(big.Int).Set(baseReward)
for i := uint64(0); i < epoch; i++ {
reward.Mul(reward, numerator)
reward.Div(reward, denominator)
}
return reward
}Step-by-Step Breakdown
- Start with the base reward of 2 CRD (2,000,000,000,000,000,000 wei).
- Determine the epoch by integer-dividing the block number by 5,256,000.
- For each completed epoch, multiply the reward by 102 and divide by 100 (equivalent to a 2% increase).
- Return the final reward in wei.
The use of integer arithmetic (multiply then divide) avoids floating-point precision issues. The repeated Mul/Div pattern ensures that each epoch's reward is calculated deterministically and identically across all nodes.
Why Integer Arithmetic
Blockchain consensus requires every node to compute identical results. Floating-point arithmetic can produce different results across different hardware and software implementations. By using big.Int multiplication and division, the calculation is deterministic:
Epoch 0: 2000000000000000000 (exact)
Epoch 1: 2000000000000000000 * 102 / 100 = 2040000000000000000 (exact)
Epoch 2: 2040000000000000000 * 102 / 100 = 2080800000000000000 (exact)
No rounding errors accumulate because the base reward and multiplier produce clean divisions for the first several dozen epochs.
No Uncle Rewards
AgentChain does not pay rewards for uncle (ommer) blocks. In Ethereum's original design, uncle blocks received a partial reward (7/8 of the full block reward) to incentivize miners who found valid blocks that did not make it into the canonical chain. AgentChain omits this for simplicity:
- The 6-second block time and difficulty algorithm are tuned to minimize orphan blocks.
- Removing uncle rewards simplifies the consensus code and makes the total supply more predictable.
- Uncle inclusion rewards for the canonical block miner are also omitted.
Transaction Fees
Transaction fees are added on top of the block reward. When a miner produces a block, they receive:
total_miner_income = block_reward + sum(transaction_fees)
Where transaction_fees = gasUsed × gasPrice for each transaction in the block.
Since AgentChain does not implement EIP-1559, there is no base fee and no fee burning. The entire gas cost paid by the transaction sender goes to the miner. This means:
- Miners receive 100% of all gas fees.
- No CRD is destroyed through fee burning.
- The effective inflation rate is the block reward inflation plus net transaction fees.
Reward Schedule: First 10 Epochs
The following table shows the block reward, annual token emission, and cumulative supply for the first 10 epochs:
| Epoch | Block Range | Reward per Block (CRD) | Annual Emission (CRD) | Cumulative Supply (CRD) | |-------|-------------|----------------------|----------------------|------------------------| | 0 | 0 - 5,255,999 | 2.000000 | 10,512,000.00 | 10,512,000.00 | | 1 | 5,256,000 - 10,511,999 | 2.040000 | 10,722,240.00 | 21,234,240.00 | | 2 | 10,512,000 - 15,767,999 | 2.080800 | 10,936,684.80 | 32,170,924.80 | | 3 | 15,768,000 - 21,023,999 | 2.122416 | 11,155,418.50 | 43,326,343.30 | | 4 | 21,024,000 - 26,279,999 | 2.164864 | 11,378,526.87 | 54,704,870.16 | | 5 | 26,280,000 - 31,535,999 | 2.208162 | 11,606,097.40 | 66,310,967.57 | | 6 | 31,536,000 - 36,791,999 | 2.252325 | 11,838,219.35 | 78,149,186.92 | | 7 | 36,792,000 - 42,047,999 | 2.297371 | 12,074,983.74 | 90,224,170.66 | | 8 | 42,048,000 - 47,303,999 | 2.343319 | 12,316,483.41 | 102,540,654.07 | | 9 | 47,304,000 - 52,559,999 | 2.390185 | 12,562,813.08 | 115,103,467.15 |
Notes on the Table
- Annual Emission = reward per block x 5,256,000 blocks per epoch.
- Cumulative Supply does not include transaction fees (which are transfers, not new supply) and assumes every block is mined on schedule.
- The 2% compound inflation means supply grows slightly faster than a linear 2% per year. After 10 epochs (~10 years), the annual emission is approximately 19.5% higher than the first year.
Long-Term Supply Projection
The total supply follows a geometric series. After n epochs:
total_supply = 10,512,000 × ((1.02^n - 1) / 0.02)
| Milestone | Approximate Total Supply (CRD) | |-----------|-------------------------------| | 1 year | 10,512,000 | | 5 years | 54,704,870 | | 10 years | 115,103,467 | | 20 years | 255,478,938 | | 50 years | 889,945,656 |
There is no supply cap. CRD has a perpetual inflation schedule, though the 2% rate means the inflation percentage of total supply decreases over time as the denominator grows.
Verifying the Reward
You can verify the block reward for any block by checking the miner's balance change. Using the JSON-RPC API:
# Get the miner's balance before and after a block
# The difference (minus transaction fees received) equals the block reward
# Get block details
curl -X POST http://localhost:8545 \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"method": "eth_getBlockByNumber",
"params": ["0x1", false],
"id": 1
}'The miner field in the response shows the address that received the block reward.
Modifying the Reward (For Testnets)
If you are running an AgentChain testnet and want to adjust the reward parameters, the relevant constants in the Go source are:
- Base reward:
2e18wei (thebaseRewardvariable) - Inflation numerator:
102(2% increase; change to105for 5%, etc.) - Inflation denominator:
100 - Epoch length:
5_256_000blocks
Changing any of these values creates an incompatible fork. All nodes on the network must use identical reward parameters.