Connect a wallet

Your wallet signs; this site never sees a secret key. Pick the wallet you use on Kadena.

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

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.

Fee account on chain…

Finished rounds

Reading finished rounds from the chain…

Back to every game

Recompute a draw yourself

  1. 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.
  2. 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.
  3. 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.
  4. 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.