Verify
Recalculate a draw yourself
Five readings are enough. They use public data only: the height committed before the draw, the Bitcoin block hash, the ticket list.
Draw
–
1
The committed height is fixed before the block exists · drawInfo
–
2
The hash is Bitcoin's own, compared with the oracle · getHash
–
3
The seed = keccak256(hash ‖ vault ‖ draw number) · drawSeed
Call: drawSeed(draw number, hash). The argument order is the reverse of the preimage. Encoding: abi.encodePacked.
–
4
Prize i draws ticket keccak256(seed ‖ i) mod totalWeight
–
5
drawTicketOwner returns the address, compared with DrawSettled (and winnersOf in v2)
–
Contracts · four, verified, immutable
| Contract | Address | Verified code on |
|---|
Attestors · threshold of
Three attestors, threshold two: two matching attestations finalize a hash, one alone decides nothing. At the pilot, all three are operated by the builder, on a single machine, with the keeper. Anyone can check a reported hash against Bitcoin, and a diverging attestation leaves a public trace, the Mismatch event. In v2, two of the three move to a separate machine, with the quorum on the most reliable host.
Immutable contracts, no upgrade possible. One privileged power only: raising the deposit cap, never lowering it, after a h timelock; it touches neither deposits, nor pots, nor draws. Attestors can only report a Bitcoin hash, never rewrite a finalized height.