Block Reward & Halving

This page explains Parallax's Bitcoin-inspired emission schedule, coinbase maturity mechanism, and how block rewards are managed in the protocol state.

Monetary Parameters
ParameterSymbolValueNotes
Initial reward
R₀
50 × 10¹⁸ wei
50 LAX per block
Halving interval
H
210,000 blocks
≈ 4 years at 10 min intervals
Coinbase maturity
M
100 blocks
Reward unlock delay
Lockbox address
0x0000000000000000000000000000000000000042
State location for maturity records
Cumulative Supply by Epoch
Sum of all issued rewards up to each halving epoch (LAX units).
Per-block Reward (step)
Reward in LAX per block at each epoch.
Overview
The Parallax monetary schedule mirrors Bitcoin's: 21 million total supply, 50 → 25 → 12.5 ... halvings every 210,000 blocks.
  • Initial block reward: 50 LAX (in wei, 50 × 10¹⁸).
  • Halving interval: every 210,000 blocks (≈ 4 years at 10-minute blocks).
  • Total theoretical supply: capped at ~21,000,000 LAX.
  • Implements a deflationary issuance model identical in structure to Bitcoin's but denominated in wei for EVM compatibility.
Reward function (from consensus.go)
pseudocode
calcBlockReward(height):
  if height == 0:
    return 0
  reward = 50 * 1e18
  halvings = height / 210000
  if halvings > 63:
    return 0  // reward effectively zero
  divisor = 2 ** halvings
  return reward / divisor
Coinbase Maturity Scheduling
Block rewards are locked until maturity — preventing instant spend and ensuring deterministic unlocks.
  • Every reward is associated with an unlock height: current_height + 100 blocks.
  • Rewards are written into the state trie under a special lockbox address (0x...42).
  • When chain height reaches unlock, the reward is transferred to the miner's address.
  • Ensures clean separation of pending vs spendable supply in the ledger state.
Reward scheduling (simplified)
pseudocode
Finalize(block):
  height = block.number
  reward = calcBlockReward(height)
  unlock = height + CoinbaseMaturityBlocks

  if reward > 0:
    lockbox[unlock].addr = coinbase
    lockbox[unlock].amt  = reward

  // Pay matured rewards for current height
  if lockbox[height].amt > 0:
    AddBalance(lockbox[height].addr, lockbox[height].amt)
    Clear(lockbox[height])
Economic Properties
Parallax enforces predictable scarcity and zero pre-mine issuance.
  • Each halving epoch reduces new issuance by 50%.
  • Cumulative issuance asymptotically approaches the 21M cap but never exceeds it.
  • Rewards are distributed exclusively to miners — no developer or foundation allocation.
  • The emission curve is hard-coded, ensuring no discretionary monetary changes post-launch.
Total issued approximation
pseudocode
totalIssued(upToHeight):
  sum = 0
  for h in 1..upToHeight:
    sum += calcBlockReward(h)
  return sum
// approaches 21e6 * 1e18 wei
State Representation
Reward maturity tracking inside the state trie.
  • Two state keys are used per unlock height: schedKeyAddr(height) and schedKeyAmt(height).
  • Both are derived using keccak256("maturity:addr:" + height) and ("maturity:amt:" + height).
  • Values are stored under the lockbox address to segregate reward metadata from user accounts.
  • Upon payout, both keys are cleared from state to reclaim trie space.
State key derivation (from consensus.go)
pseudocode
schedKeyAddr(height):
  return keccak256("maturity:addr:" || height)

schedKeyAmt(height):
  return keccak256("maturity:amt:" || height)
Summary

Emission Summary

Parallax's issuance is fully deterministic. Rewards halve every 210,000 blocks until they converge toward zero. Every coin in circulation is traceable to on-chain mining output, making Parallax a fair-launch, work-secured network with no premine or hidden subsidies.