Provably fair dice verifier
Paste the four values your site shows for a finished round. The verifier hashes the server seed, compares it with the commitment you saw before betting, then recomputes the roll.
It runs entirely in your browser using the Web Crypto API. Nothing you type is sent to Woyale or anyone else.
How the roll is calculated
This is the most common dice formula. Some sites use their own variant, so check their fairness page if your numbers don't match.
Hash check
SHA-256 of the revealed server seed must equal the hash shown before the bet.
HMAC
HMAC-SHA256 with the server seed as key and "client seed:nonce:0" as the message.
Bytes to float
The first four bytes become a number between 0 and 1: each byte divided by 256, 256², 256³ and 256⁴, then added up.
Roll
Multiply by 10,001, round down, divide by 100. The result runs from 0.00 to 100.00.
Worked example: the values already in the form
The verifier opens with demonstration values. They aren’t from any real site. Press the button and you should get the numbers below.
- Server seed:
7c2f9b1e4a0d83c65e1f92ab0c47d6e8 - Client seed:
woyale-demo - Nonce: 42
1. The hash. SHA-256 of the server seed is:
abca779606fda7b5d7d3fffbf848be7224674da6e528380c0439293e9634d1e3
Paste that into the hash field and the check passes. Change one character in either field and it fails. That’s the whole point of the commitment.
2. The HMAC. The message is woyale-demo:42:0. HMAC-SHA256 with the server seed as the key gives:
21f4fc2c785ab7a49e6cbce341b92f5960636a9326a8191e9aeae663e5dcfca9
3. The float. The first four bytes are 21 f4 fc 2c, or 33, 244, 252 and 44 in decimal.
| Byte | Value | Divided by | Contribution |
|---|---|---|---|
| b0 | 33 | 256 | 0.12890625 |
| b1 | 244 | 65,536 | 0.00372314 |
| b2 | 252 | 16,777,216 | 0.00001502 |
| b3 | 44 | 4,294,967,296 | 0.00000001 |
Sum: f = 0.13264443 (to eight places).
4. The roll. 0.13264443 × 10,001 = 1,326.58. Round down to 1,326, then divide by 100: the roll is 13.26.
Change the nonce to 43 and the roll becomes 75.80. Each bet on the same seed pair gives a new, unrelated result, which is why you need the exact nonce of the bet you’re checking.
If your numbers don’t match
A mismatch is usually a copying error, not cheating. Work through these in order.
- Hash fails. Check that you copied the revealed seed, not the hashed one, and that no space or line break came along with it. If the seed is right and the hash still differs, the site didn’t use the seed it committed to. Screenshot both values with the date.
- Hash passes, roll differs. Check the nonce first. Some sites count from 0 and some from 1, so try one either side.
- Still different. Check the client seed for capital letters and trailing spaces. It must be the one that was active when you placed the bet, not the one you set afterwards.
- Still different. The site probably uses its own formula: a different message layout, a different number of bytes, or a different scale. Open the raw output panel and compare the HMAC hex with the site’s fairness page. If the HMAC matches, only the conversion step differs. How one HMAC result becomes a dice roll, a multiplier or a shuffled deck shows the common variants.
What a match tells you
A passing hash and a matching roll show that the result was fixed before you bet and came from the stated formula. They don’t show that the site pays winners, that its house edge is what it advertises, or that it’s licensed anywhere. They say nothing about sports bets, which real games settle and no seed decides. Read what provably fair doesn’t prove before you treat a fairness badge as a reason to trust a site with money.
Common questions
Is it safe to paste my seeds here?
The page computes everything in your browser with the Web Crypto API and sends nothing to Woyale or anyone else. Only check revealed server seeds anyway: a seed that’s still active would let anyone who saw it predict your next results.
Why do I need the hash from before the bet?
Without it, a site could reveal any seed that produces the results it already gave you. The hash you recorded beforehand pins the seed down. If you never saved it, the check proves only that the formula was applied, not that the seed was fixed in advance.
Does this work for crash, limbo or plinko?
Not directly. Those games start from the same kind of HMAC output but convert it differently. The raw HMAC and float in the output panel let you apply the site’s own formula by hand. The step-by-step guide shows the method in full.