Gas, fees, and economics¶
Units¶
WAVE is the chain's native asset. The chain internally tracks balances in Bohms — the smallest unit, where:
$$ 1 \text{ WAVE} = 10^{18} \text{ Bohms} $$
(Named after David Bohm. Bohms are to WAVE what wei is to ETH or satoshis are to BTC.)
All on-the-wire amounts in JSON APIs are floats in WAVE units (e.g. 0.001 is 1,000,000,000,000,000 Bohms). The contract VM operates in Bohms internally; conversion happens at the engine boundary.
Block reward¶
| Value | |
|---|---|
| Initial subsidy | 5 WAVE / block |
| Halving interval | 2,100,000 blocks (~4 yrs at 60s mainnet block time) |
| Asymptotic max supply | 21,000,000 WAVE |
| Genesis premine | 1,000,000 WAVE (foundation) |
Halving math:
$$ \text{subsidy}(h) = \frac{5}{2^{\lfloor h / 2{,}100{,}000 \rfloor}} \text{ WAVE} $$
The geometric series sums to:
$$ \text{premine} + 2 \cdot \text{INITIAL_REWARD} \cdot \text{HALVING_INTERVAL} = 10^6 + 2 \cdot 5 \cdot 2{,}100{,}000 = 21{,}000{,}000 $$
The chain enforces this cap in validate_received_block — any block whose coinbase would push total_supply past 21M is rejected, even if the rest of it is valid. See Tokenomics for the full emission curve.
Transaction fees¶
Fees are paid in WAVE, set by the sender, collected by the miner of the including block (added to the coinbase).
| Value | Notes | |
|---|---|---|
MEMPOOL_MIN_FEE | 0.0001 WAVE | Floor — txs below are rejected from mempool |
DEFAULT_TRANSACTION_FEE | 0.01 WAVE | Default used by the wallet UI |
| Contract deploy / call fee | 0.001 WAVE | Charged from sender; gas_limit * gas_price |
| RBF bump | +10% over the existing fee | To replace a same-nonce tx |
Recommended fees are returned by the dashboard's GET /api/fee endpoint (per fee estimation), based on current mempool depth and recent block contents.
Gas¶
Contract execution is metered in gas. Conversion:
| Constant | Value |
|---|---|
DEFAULT_GAS_LIMIT | 1,000,000 |
GAS_PRICE | 1,000,000,000 (1 Gwei-equivalent, in Bohms/gas) |
| Default per-tx fee | 1,000,000 * 1,000,000,000 / 10^18 = 0.001 WAVE |
The default gas limit is the value the Playground API applies when none is specified. Specific operations have published costs (see Reference: Crypto + gas):
| Op | Gas |
|---|---|
| Base block tx | 21,000 |
| Contract deploy (per byte of bytecode) | 200 |
SLOAD | 800 |
SSTORE (new slot) | 20,000 |
SSTORE (existing slot, non-zero) | 5,000 |
SHA3 (per word) | 6 + 6 per word over input |
CALL / DELEGATECALL / STATICCALL | 700 + cost-of-callee |
| ML-DSA verify precompile | 50,000 |
| ML-KEM decapsulate precompile | 25,000 |
| Memory expansion | Quadratic (anti-DoS) |
Gas left over after execution is not refunded in v1.
Transaction sizing¶
A typical transaction fits these envelopes:
| Tx kind | Wire size (est.) | Default fee | Typical gas |
|---|---|---|---|
| Plain transfer | ~5.5 KB | 0.01 WAVE | 21,000 |
| Chat message (memo ≤ 200B) | ~6 KB | 0.001 WAVE | 21,000 |
| Contract deploy (small, ~500B bytecode) | ~7 KB | 0.001 WAVE | 100,000–300,000 |
| Contract call (simple) | ~5.5 KB | 0.001 WAVE | 21,000–50,000 |
Most of the size budget goes to the ML-DSA-87 signature (4,627 bytes) and public key (2,592 bytes if not yet known to the verifier).
Mining economics¶
A block at mainnet's 60s target with 5 WAVE subsidy plus occasional fees produces ~7,200 WAVE/day to the global miner set. With a single miner, that miner receives all of it; with N miners, each receives ~5 * (their_hashrate / total_hashrate) WAVE per block in expectation.
Fee revenue is negligible relative to subsidy at present — the chain has many empty blocks. As usage grows, fees grow with it.
After the first halving (~4 years), subsidy drops to 2.5 WAVE/block; after the second, 1.25; and so on. By halving ~30, subsidy falls below the dust limit and fees become the sole meaningful miner revenue.