Eras define halving, Epochs define rhythm, community defines the model, blocks define everything. Full technical specification of the Proof of AI Work protocol.
CLAWING uses a dual-layer timing structure built entirely on block.number — no timestamps, no manipulation vectors, fully deterministic.
| Parameter | Value | Description |
|---|---|---|
| Total supply | 210,000,000,000 CLAW | MAX_SUPPLY |
| Era length | 1,050,000 blocks | ≈ 145.8 days (halving cycle) |
| Epoch length | 50,000 blocks | ≈ 6.94 days (emission cycle) |
| Epochs per Era | 21 | |
| First Era perBlock | 100,000 CLAW | INITIAL_PER_BLOCK |
| Epoch hard cap | perBlock × 50,000 | Era 1: 5 billion/epoch |
| Claim cooldown | 3,500 blocks | ≈ 11.67 hours |
| Max claims/epoch | 14 | 50,000 ÷ 3,500 |
| Seed update | Per Epoch | Based on blockhash |
| Halving rule | perBlock >> (era-1) | 50% reduction each Era |
| Stop condition | < 0.01 CLAW | < 1016 wei |
| Total Eras | 24 | |
| Total Epochs | 504 | 24 × 21 |
| Total duration | ≈ 9.58 years | 25.2M blocks × 12s |
In v4.0, one Epoch spanned 1M blocks (≈ 4.6 months). If many miners joined early, the hard cap exhausted in weeks, leaving months of idle time. The dual-layer fix reduces emission granularity to 1 week — if an Epoch's cap is exhausted, the idle period lasts days, not months.
| Model | Idle Period |
|---|---|
| v4.0 (single-layer, 4.6 months) | Cap exhausted → wait months |
| Current (dual-layer, 1 week) | Cap exhausted → new cap next Monday |
The entire contract uses block.number for all time logic. No block.timestamp anywhere.
block.timestamp allows ±15s miner adjustment. block.number is strictly monotonic.Each Era halves the per-block reward. 50% of all $CLAW is mined in Era 1. Over 98% is mined by Era 6. The full schedule spans 24 Eras across approximately 9.58 years.
| Era | perBlock | Epoch Cap | Era Total | Cumulative | Years | Supply % |
|---|---|---|---|---|---|---|
| 1 | 100,000 | 5.00B | 105.00B | 105.00B | 0.40 | 50.0% |
| 2 | 50,000 | 2.50B | 52.50B | 157.50B | 0.80 | 75.0% |
| 3 | 25,000 | 1.25B | 26.25B | 183.75B | 1.20 | 87.5% |
| 4 | 12,500 | 625M | 13.13B | 196.88B | 1.60 | 93.8% |
| 5 | 6,250 | 312.5M | 6.56B | 203.44B | 2.00 | 96.9% |
| 6 | 3,125 | 156.25M | 3.28B | 206.72B | 2.40 | 98.4% |
| 7 | 1,562.5 | 78.13M | 1.64B | 208.36B | 2.79 | 99.2% |
| 8 | 781.25 | 39.06M | 820.31M | 209.18B | 3.19 | 99.6% |
| Eras 9-24: continues halving — perBlock drops from 390.6 to 0.012, cumulative approaches 210B over ~9.58 years | ||||||
Under the 3,500-block cooldown, a single address claims at most 14 times per Epoch. Assuming average T = 1,000 (logarithmic bonus ≈ 7.24×), single reward ≈ 723,700 CLAW:
| Active Miners | Claims/Epoch | Consumed | vs Hard Cap | Idle Period |
|---|---|---|---|---|
| 100 | 1,400 | 1.01B | 0.20× | None |
| 500 | 7,000 | 5.07B | 1.01× | ~0 days (equilibrium) |
| 1,000 | 14,000 | 10.13B | 2.03× | ~3.5 days |
| 5,000 | 70,000 | 50.66B | 10.1× | ~6.3 days |
500 miners is the equilibrium point. Below that, no idle period. Above, the idle period never exceeds one week — it automatically resets when the next Epoch begins.
The logarithmic curve is the anti-whale mechanism. Doing 10× the work yields roughly 3.3× the reward — not 10×. This ensures diminishing returns for large miners while still rewarding genuine AI computation.
Implementation uses MSB bitwise operation for the logarithm calculation, costing approximately 30 Gas — negligible overhead.
Each address must wait 3,500 blocks (≈ 11.67 hours) between claims. This replaces the old block.timestamp / 1 days approach which was manipulable at UTC boundaries. The new approach is fully deterministic — given block.number and lastClaimBlock, anyone can calculate if a claim is possible.
With 50,000 blocks per Epoch and 3,500-block cooldown: 50,000 ÷ 3,500 = 14 claims maximum per address per Epoch. Hard-coded in the contract as MAX_CLAIMS_PER_EPOCH.
Updated once per Epoch (every 50,000 blocks) based on a combination of recent blockhashes and block.prevrandao. All claims within an Epoch share the same Seed — miners fetch it once per week.
CLAWING introduces on-chain model governance. Instead of a hard-coded whitelist, the community votes on which AI model to use each Era.
Era 1 uses GPT-5.4, set in the constructor. No vote needed — this bootstraps the system with a known model.
For Era N (N > 1), the model is decided by on-chain voting during Era N-1. The governance cycle has three phases within each Era:
The ZK proof verifies the specific modelHash — not just the API domain. TLSNotary captures the model ID from the API response (OpenAI-compatible format) and the SP1 circuit proves it matches the Era's designated model. All candidate models must support the /v1/chat/completions standard interface.
Three-contract decoupled design. Each contract has a single responsibility, minimizing attack surface and enabling independent auditing.
Standard ERC-20 with MAX_SUPPLY = 210,000,000,000. Immutable minter set at deployment. Zero premine — totalSupply() starts at 0. MIT licensed.
Verifies SP1 Groth16 zero-knowledge proofs. Checks modelHash against the Era's designated model. Does not depend on tokenomics parameters — unchanged since v3.0.
Core minting logic. Manages Era/Epoch tracking, reward calculation (MSB log), cooldown enforcement, epoch hard caps, claim counting, Epoch Seed, and model governance (nomination, voting, finalization). Gas budget: ~320-340k per mint.
Upgradeable oracle endpoint. Allows the verification contract to be updated without redeploying the token or minting contracts.
Every mining claim requires a Groth16 zero-knowledge proof generated by an SP1 circuit. The proof verifies that real AI inference was performed via TLSNotary (zkTLS) — capturing the TLS session, extracting the model response, and proving the model ID matches the Era's designated modelHash. The oracle cannot forge proofs — the math guarantees it.
The logarithmic reward calculation uses a bitwise MSB (Most Significant Bit) operation — 8 rounds of binary search in assembly. Total cost: approximately 30 Gas. This converts log₂(T) to ln(T) via the identity ln(T) = log₂(T) × ln(2) ≈ log₂(T) × 0.693.
Zero block.timestamp dependency anywhere in the contract. Era calculation, Epoch calculation, cooldown checks, and Seed updates all use block.number exclusively. Non-manipulable, deterministic, and simple.
Governance voting uses a lock-up mechanism. Tokens are transferred into the contract during voting and can only be withdrawn during the announcement phase or after the Era ends. This prevents flash-loan attacks where an attacker borrows tokens, votes, and returns them in a single transaction.
The tuple (address, globalEpoch, claimIndex) is globally unique. Combined with the Epoch Seed validation and cooldown check, no proof can be submitted twice. The claimIndex must exactly match the current claim count for that address in that Epoch.