Verify round 2
Fetch the round and every input below fills from the round record and the Bitcoin chain; every check runs in your browser. Nothing here asks you to trust Luckotto: swap in your own evidence at any point.
Waiting for round evidence
Fetch a round to load its record, committed CSV, and chain evidence.
Evidence
Fetching a round fills every field below, and all of them stay editable. Swap in your own values — paste a CSV you downloaded earlier, or point the settings at your own Esplora node — and the checks recompute instantly. The chip on each field says where its current value came from.
Advanced settingsNetwork, descriptor, Esplora endpoint, and proof constantsCollapse
Checks
Every check compares two independently sourced values. Expand a row to see both sides and how the comparison is computed.
CSV matches the commitment published at lockWaits for the round to lock and seal its CSV commitment.Waiting
HMAC-SHA256 over the exact CSV bytes, keyed by the round secret hash. Published together with the CSV when the round seals — before any draw randomness exists.
CSV matches the on-chain OP_RETURN commitmentWaits for the commitment transaction to confirm; the OP_RETURN payload is read from Esplora.Waiting
The same HMAC is written into an OP_RETURN output of the commitment transaction. Once that transaction confirms, the commitment is anchored by Bitcoin rather than by Luckotto.
First confirmed spend equals the recorded commitment txWaits for a confirmed spend of the commitment address; the transaction broadcasts around lock.Waiting
The first confirmed spend from the round's commitment address is located independently on Esplora and must be the transaction the round record names.
Round secret matches the published secret hashWaits for the round to resolve and reveal its secret; the hash itself publishes at lock.Waiting
SHA-256 of the revealed round secret must equal the hash published at lock — proving the secret (and everything keyed by it) existed before the draw block.
Draw height equals commitment height + draw delayWaits for the confirmed commitment transaction; its block height plus the draw delay pins the draw block.Waiting
The draw block must sit a fixed delay after the commitment confirmation, so the randomness source cannot exist while entrants can still change.
Draw block hash matches the recorded draw blockWaits for the round to record its draw block, a fixed delay after the commitment confirms.Waiting
The draw block hash in evidence (fetched from Esplora at the draw height) must be the block the round record claims fed the draw.
Checkpoints match the published checkpointsWaits for the round to publish its checkpoint chain; rounds publish checkpoints as soon as they are computed after the draw block.Waiting
Each checkpoint advances the previous one by the pinned number of strictly sequential SHA-256 hashes, starting from the draw block hash.
Replayed winner equals the recorded winnerWaits for the replay: it needs the revealed round secret, the committed CSV, and the checkpoint chain.Waiting
The draw replays in this browser from the round secret, the committed CSV, and the checkpoint chain; the result must equal what the round records.
Replay
The draw outcome below is recomputed in this browser from the evidence above. The published checkpoints make that instant; to prove the chain itself instead of trusting it, regenerate it — the hashes are sequential by design, so it is deliberately slow.
Recomputes every checkpoint from the draw block hash with strictly sequential SHA-256 — the same anti-grinding work the server did. Expect hours in a browser tab (it keeps working in the background); the native tool below is much faster.
Needs a valid draw block hash in the evidence section first.
go install github.com/luckotto/calc/cmd/luckotto-verify@latest luckotto-verify --app-url https://luckotto.com --esplora-url https://mempool.space/api 2