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 rewardR₀50 × 10¹⁸ wei50 LAX per block
Halving intervalH210,000 blocks≈ 4 years at 10 min intervals
Coinbase maturityM100 blocksReward unlock delay
Lockbox address0x0000000000000000000000000000000000000042State 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)

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.