WNDY on Base

Proof-of-Windy.

WNDY is an ERC-20 on Base where every token in circulation has been minted by a Risc Zero zero-knowledge proof that a windy-lang program ran honestly inside a zkVM. Bitcoin spends hashes on nothing; WNDY spends them on running an esoteric 2D programming language. A useful-PoW experiment.

supply / 21,000,000 WNDY
pre-mine 0 %  // fair launch
live since 2026-05-11  // Base mainnet

§ token spec

The Windy token contract is deployed once and never replaced. New mint mechanisms plug in as separate Minter contracts that receive MINTER_ROLE. The 21M cap is a Solidity constant in the deployed bytecode — no admin path can raise it.

name / symbol Windy / WNDY
standard ERC-20 + ERC20Burnable + AccessControl
chain Base mainnet · chain id 8453
decimals 18
hard cap 21,000,000 WNDY  // Bitcoin homage, constant
pre-mine 0  // no founder, no treasury, no VC
burn holders may burn() their own balance. burned WNDY is gone — no re-mint
mint gate MINTER_ROLE  // held only by ZkExecutionMinterV2

deployed contracts

Windy (WNDY) 0x8c64a92e3a12f5ca4050b5fb90804bd24cd653ca
ZkExecutionMinterV2 0xc566ab14616662ae92095a72a8cc23bf62b6ff02
Risc Zero verifier 0x0b144e07a0826182b6b59788c34b32bfa86fb711 // router
guest IMAGE_ID 0xb78810f2e9557907cf9865797240661414e8102326cfdd8d8bc7879d58ca57cb
admin (Safe) 0x1143569f0B6D17B51b7dfff9Dfa8BbF1AdCe75D7 // 1-of-1, can pause + grant minters; cannot mint

§ how mining works

Mining WNDY is not a brute-force search. You write a program in windy-lang, prove it ran honestly inside a Risc Zero zkVM, and submit the proof on-chain. The minter verifies the proof, grades the journal, and pays out a fixed reward per tier.

  1. 1

    write a .wnd program

    Anything that executes — the harder the language features it uses (multi-IP, grid memory, branching, wind speed), the higher it scores. Write it in the browser playground or any editor.

  2. 2

    prove it in the zkVM

    The Risc Zero guest runs your program, measures execution shape (visited cells, hard-opcode diversity, branches, grid writes), and produces a Groth16 proof bound to your recipient address and a one-shot nonce.

  3. 3

    submit on-chain

    The minter calls the Risc Zero verifier, re-grades the journal in Solidity, dedups by programHash (one mint per source forever), and mints the tier reward to the recipient committed inside the proof.

The first miner to submit a given program_hash claims it. Subsequent submissions of the byte-identical source revert with ProgramAlreadyConsumed. Mining is a search for previously-unsolved programs, not a loop that re-submits a known-good proof forever.

§ tiers

tierscorereward
None < 10 revert
Bronze [10, 30) 0.1 WNDY
Silver [30, 70) 1.0 WNDY
Gold ≥ 70 10.0 WNDY // per-proof cap

Score is a function of visitedCells (trace-truth code size) and a multiplicative diversity bonus over the ten "hard" opcodes (t p g _ | ≫ ≪ ~ # "). The exact formula is enforced both in the zkVM guest and on-chain — see PHASE-2-MINING.md. Run windy mine --dry-run my.wnd to preview your score before paying gas.

§ quickstart

Install the CLI, write a program, mine it.

$ cargo install windy-lang windy-mine

$ cat > my.wnd <<'EOF'
"Hi,Windy"v
        >
       ,@
EOF

$ windy mine --dry-run my.wnd       # grade only, no tx, no Docker
score:    34.30
tier:     2 → Silver
reward:   1.0 WNDY
Looks mintable. Re-run without --dry-run to claim it.

$ windy mine my.wnd                  # Groth16 wrap (~5–10 min) + mainnet mint
✓ proof generated
✓ score verified on-chain (Silver)
✓ minted 1.0 WNDY → 0xCE13…5167
   tx: https://basescan.org/tx/0x9731…4c54c

Full walkthrough — installing Docker for Groth16, picking a keystore, troubleshooting revert reasons — lives in docs/MINING-GUIDE.md.

§ trust model

§ the windy trilogy

WNDY is one of three sibling projects exploring the same 2D wind-flow language.