Working ZK demos, deployed live.
Reference builds from the prompt library. Each demo is a real Compact contract on the Midnight preview and preprod testnets. State is read from the public Indexer — no wallet needed to browse.
Not yet deployed. Run bun scripts/deploy-midnight.mjs locally — the script writes the address + tx into src/data/midnight-contract.preview.json.
Not yet deployed. Run VITE_NETWORK_ID=preprod bun scripts/deploy-midnight.mjs locally — the script writes the address + tx into src/data/midnight-contract.preprod.json.
Midnight Ledger
Timestamp original choreography privately. A Compact appendEntry circuit commits the message to the public ledger while the author's identity stays hidden behind a ZK-proved witness. Public ledger view runs read-only over the Midnight Indexer.
Programmatic DUST
Create a wallet, print all three addresses, fund the unshielded address with tNIGHT, then explicitly register NIGHT UTXOs for DUST generation. The docs' end-to-end flow, mirrored locally with bun scripts/dust-demo-preprod.mjs.
Move Board
Post a dance move against an already-deployed contract — no fresh deploy per visitor. Skips the DUST-heavy deploy step (helpful while the Preprod DUST sync bug is around) and only pays the small callTx fee. Contract pattern from midnightntwrk/example-bboard.
Hitting 1010 InvalidDustSpendProof, DustSpendProcessed decode errors, or /check 400 bad input? Field notes from the Midnight team, with the current workaround for each.