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.
§ 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
write a
.wndprogramAnything 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
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
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
| tier | score | reward |
|---|---|---|
| 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
-
21M cap is a Solidity
constant. It lives in the deployed bytecode ofWindy.sol. No admin, no multisig, no upgrade path can raise it. -
Deployer EOA holds zero roles.
DEFAULT_ADMIN_ROLE+PAUSER_ROLEwere renounced from the deployer in the same atomic broadcast as the deploy. After block N+1 the deployer is indistinguishable from any other address. -
Admin is a 1-of-1 Safe.
The Safe can pause the minter or grant
MINTER_ROLEto a future Phase 3 minter. It cannot mint WNDY directly. -
Only path to new WNDY: a valid Risc Zero proof.
MINTER_ROLEon the token is held only byZkExecutionMinterV2. The minter verifies against the pinnedIMAGE_IDand mints to the recipient committed inside the proof's journal. - Self-audit baseline. 61 Foundry tests · 7 fuzz × 256 runs · 100% coverage on production contracts · Slither 0 findings · Mythril clean. No paid external audit yet — that's the trade for "experimental useful-PoW token." When real value/liquidity accumulates, re-audit.
§ the windy trilogy
WNDY is one of three sibling projects exploring the same 2D wind-flow language.
windy
the language. 2D esolang where code flows like wind. 35 opcodes, multi-IP, browser playground.
windy.sisobus.comaria
hear it. Sonification of windy execution — wind direction becomes pitch, IP collisions become harmony.
windy.sisobus.com/aria/coin
mine it. ZK-verified windy execution mints an ERC-20 on Base. Useful PoW.
windy.sisobus.com/coin/ (you are here)