How the calculation works
Each result comes from HMAC-SHA256(serverSeed, clientSeed:nonce:round). Every round gives 32 bytes, and each group of 4 bytes becomes one float: b0/256 + b1/256² + b2/256³ + b3/256⁴. The site shows you SHA-256(serverSeed) before you play and reveals the seed afterwards, so it cannot swap the seed once it knows your bets.
Check a bet in three steps
- Rotate or change your seed pair on the site so it reveals the old server seed.
- Paste the server seed, the hash you were shown, your client seed and the bet's nonce.
- Click Calculate. The hash must match, and the floats must convert to the result you saw.
Verifying a Provable.io draw
Provable.io outcomes use the same derivation. Integer draws map each 4 bytes to a range without modulo bias, which the Integers output reproduces. You can also look up any draw by its short ID on /verify, or read how provably fair random numbers are generated.
Frequently asked questions
What is a provably fair calculator?
It recomputes a game result from the seeds a site reveals after the fact: the server seed, your client seed and the nonce. If the recomputed result matches what you were shown, and the server seed hashes to the value you saw before playing, the result was fixed before you played and was not changed afterwards.
Which sites does it work with?
Any site that derives results from HMAC-SHA256 with the server seed as the key and clientSeed:nonce:round as the message, in 32-byte rounds, 4 bytes per float. That is the scheme Provable.io uses and the one Stake documents on its fairness pages. If a site uses a different message format, its numbers will not match here.
Is my server seed sent anywhere?
No. The calculation runs in your browser with the Web Crypto API. The seeds you paste are not sent to Provable.io or anyone else.
Why do I get a float instead of a dice roll or a card?
Every game starts from the same floats between 0 and 1. Each game then converts them its own way, for example a float multiplied by 52 picks a card. The site's fairness or conversions page gives that formula. For Provable.io integer draws, switch the output to Integers.
What does the cursor do?
Each HMAC round gives 32 bytes, enough for 8 floats. The cursor is the byte offset to start from, so games that need more than 8 numbers move to the next round. Leave it at 0 unless the site tells you otherwise.