Move Board · post a dance move
This demo calls an already-deployed Midnight contract. No fresh deploy per visitor — you only pay the (much smaller) callTx DUST cost. Contract pattern mirrors midnightntwrk/example-bboard: post a move as the current occupant with a private-author ZK commitment; only that same author can take() to clear it.
DustWallet.balance() = 0 even though Lace shows DUST? That's the confirmed Preprod sync bug — see known issues → Lace shows DUST but SDK reports 0. Because this demo skips the deploy fee, it needs less DUST than the ledger demo.Not yet deployed on Midnight Preprod Testnet. From your local checkout:
compact compile contracts/MoveBoard.compact contracts/managed/move-board cp -r contracts/managed/move-board/keys public/keys/move-board cp -r contracts/managed/move-board/zkir public/zkir/move-board MIDNIGHT_CONTRACT=move-board VITE_NETWORK_ID=preprod \ bun scripts/deploy-midnight.mjs
The script writes the resulting address into src/data/moveboard-contract.preprod.json. From then on, every visitor calls this same contract.
Waiting for a pinned deploy on Midnight Preprod Testnet.
Connect Lace on Midnight Preprod Testnet, enter a dance move, and submit a post(label) callTx. Proving runs in your local Docker proof server (30–120s); the balance + submit steps come out of your Lace-visible DUST.
The Lace-signed callTx wiring lives in src/lib/use-midnight-wallet.ts (shared with the ledger demo). Because the contract is pinned, only post() and take() callTx paths are exercised here — no deployContract DUST spike.