Game results
Every round that has finished — drawn or refunded — read live from the chain, newest first. Each drawn round shows the drand beacon that decided it and everything needed to recompute the winners yourself.
How the winner is decided, what could stop a draw, and what we do about it
- Under the contract's rules, nobody can choose the winner. Until the contract is frozen, our admin keys can override those rules — see “Who can change this contract” on the games page.
- Each round is decided by one public drand randomness beacon: the one drand publishes about 3 minutes after the round's draw time, fixed when the round's first ticket is bought. The contract checks that beacon against drand's published key before it pays anyone, so a made-up or altered beacon is refused, and once sales close, nothing on the Kadena chain — no block and no miner — can change the result. So under the contract's rules, nobody — whether a player, a miner or us — can choose the winner or know it while tickets can still be bought.
- drand can only stop publishing: each beacon has exactly one valid signature, so it cannot hand a round a different result. Its beacons are produced jointly by independent operators, and one could be known early only if enough of them worked together.
- One case is not covered: if the Kadena network stalled for more than about 3 minutes right at a round's close, or a miner rewrote that much of it, a ticket could be accepted after that round's beacon was already public. What limits it: the 3-minute wait is longer than any gap between blocks we measured on this chain — the longest was 136 seconds, over 120,001 blocks.
- If a round is never drawn — drand stopped, or nobody sent the draw — it is not stuck: once 90 days have passed since its beacon was due, anyone can trigger its refund, and each ticket gets its price back plus an equal part of any bonus. Until a refund lands, the round can still be drawn normally.
- What we do about it: our settlement program sends each draw once its beacon is out, and the contract lets anyone send it — from the games page, with any wallet, for only the network fee — so a draw never depends on us. Anyone can work out the winners from the published beacon before the draw is sent, and every prize has a published ceiling.
Part of each game's fee pays whoever sends the draw; the rest is paid to SPT's funding account, which anyone can read on chain.
…Finished rounds
Reading finished rounds from the chain…
Recompute a draw yourself
- Take the round key (the game’s name, a bar, the round number — for example weekly|3), the drand round that decided it and that beacon’s signature, as shown on each round below. Anyone can fetch the same beacon from drand’s public relay.
- Split the signature, 128 hexadecimal characters, into two halves of 64 and read each as a hexadecimal number, x and y. The seed is blake2b-256 of the text drand|prize-draw|<round key>|<drand round>|<x>|<y>, with x and y written in decimal, read as a big-endian integer, modulo 10^18.
- For each place i = 1, 2, … up to the number of winners: take blake2b-256 of <seed>|<round key>|<i> as an integer, modulo (tickets sold − i + 1). Step that number past every ticket position already drawn, in ascending order. The result is the winning ticket’s position, counting from 0 in the order tickets were sold.
- Anyone can also ask any node for the contract’s own answer with a read-only call to its public draw-ranks function, using the seed, the round key, the tickets sold and the number of winners.
This page does this for every drawn round it shows: it recomputes the winning positions in your browser, asks the contract’s draw-ranks for its own answer, and compares both with what the round stored. Where your browser can fetch the beacon, it recomputes the seed too. The two rounds drawn before the contract moved to drand were decided by the hash of a Kadena block instead; for those it shows the block and checks the positions from the stored seed.