Provably Fair Explained: How Duel.com Verifies Game Results
How provably fair works on Duel.com Originals: the SHA-256 commitment, Duel's HMAC-SHA256 formula for each game, drand for Crash, and what the proof does not cover.
On this pageShowHide
- The problem it solves
- How commit-reveal works
- Duel's documented scheme
- How each game turns the number into a result
- Check one result yourself
- Why the scheme holds
- Crash and Castle Roulette: drand instead of a client seed
- What it proves and what it does not
- What is covered on Duel.com
- Common misconceptions
- When to verify
- Summary
Quick answer
Provably fair is a way for a casino to show that it fixed the outcome of your bet before you placed it and did not touch it afterwards. It is cryptography, not a promise: you can check it yourself with a few lines of code. On Duel.com it applies to the in-house Duel Originals, and Duel publishes the exact method for nine of them.
It is also narrower than the marketing around it suggests. The proof covers one thing, the integrity of a result. It says nothing about whether the operator can pay, how your withdrawal is handled, or how third-party games behave.
The problem it solves
A normal online casino runs a random number generator on its own server. You see the result and have to trust that it was not adjusted for your stake, your balance or your recent wins. A testing lab may have certified the generator, but you cannot check any single spin.
Provably fair removes that trust for one specific question: was this result decided before I bet, and was it left alone? It does so with a commit-reveal scheme.
How commit-reveal works
Step 1
Commit
Duel shows the SHA-256 hash of a secret server seed
Step 2
Contribute
You set a client seed after seeing the hash
Step 3
Bet
Result = HMAC-SHA256 keyed with the server seed
Step 4
Reveal
Rotating discloses the server seed
Step 5
Check
Hash matches, results reproduce
Duel commits
The server generates a random server seed and shows you its SHA-256 hash. A hash is a one-way fingerprint: you cannot work backwards from it to the seed, and no practical way exists to find a different seed with the same hash. Publishing the hash locks Duel into that seed without revealing it.
You add your own input
You choose a client seed, or one is generated for you. Because Duel committed before you chose, it cannot have picked a server seed that plays badly against your client seed. This is why setting your own client seed after seeing the hash matters.
Each bet is derived, not drawn
The result is computed with HMAC-SHA256. The server seed is the key and the message is your client seed, a nonce and, in multi-step games, a cursor. The nonce goes up by one with every round, so each bet has a different but fully determined result.
Rotation reveals the seed
The server seed stays hidden while it is in use, otherwise you could compute future results. When you rotate to a new seed pair, the old server seed is disclosed.
You check two things
First, that the revealed seed hashes to the commitment you were shown. Second, that the seed, your client seed and each nonce reproduce the results you got.
The inputs are covered one by one in server seed, client seed and nonce.
Duel's documented scheme
These mechanics are shared by the games that use your seed pair: Dice, Blackjack, Plinko, Mines, Keno, Beef and Video Poker.
| Element | What Duel documents |
|---|---|
| Server seed | A 64-character hex string generated with crypto.randomBytes(32), shown to you as a SHA-256 hash before play |
| Client seed | A string you choose, or one generated automatically if you do not |
| Nonce | The number of the round you are on. It rises by 1 for every round across all house games, so the Originals share one counter |
| Cursor | A step counter inside one round, starting at 0: one per card, per Plinko row or per shuffle step |
| HMAC message | clientSeed:nonce:cursor. Dice has a single step and uses clientSeed:nonce |
| HMAC key | The unhashed server seed. Our tests show it is used as 32 hex-decoded bytes, not as text |
| Random number | The first 4 bytes (8 hex characters) of the HMAC, read as a 32-bit number |
| Fairness range | Numbers at the very top of the 32-bit range are rejected and the next 4 bytes are used, which removes modulo bias |
The last row deserves a sentence. 4,294,967,296 possible values do not divide evenly into 52 cards or 10,001 dice results, so a plain remainder would favour the lowest results by a tiny margin. Rejecting the few leftover values makes every result exactly equally likely. For Dice the accepted range is under 4,294,959,453, which leaves 429,453 values for each of the 10,001 results.
How each game turns the number into a result
| Game | Derivation |
|---|---|
| Dice | Number mod 10001, divided by 100. A roll from 0.00 to 100.00 |
| Plinko | One HMAC per row, 8 to 16 rows. Odd means right, even means left. The bucket is the number of rights |
| Blackjack | One HMAC per card. Card index is the number mod 52, accepted if under 4,294,967,248 |
| Mines | Fisher-Yates shuffle of tiles 0 to 24 over 24 steps. The first N positions are the mines, fixed before you click |
| Keno | Shuffle of 40 numbers over 39 steps. The first 10 are drawn, plus 1 each |
| Beef | Shuffle of 20 positions. Death positions by difficulty: Extreme 10, Hard 5, Medium 3, Easy 1 |
| Video Poker | Shuffle of 52 cards. The first 5 are the hand, the next 5 the replacements |
| Crash | 2^32 divided by (number + 1), multiplied by (1 − 0.001). Uses drand, see below |
| Castle Roulette | Number mod 48 gives the roll, which maps to a multiplier. Uses drand |
On Blackjack, Duel states that every card has a 1 in 52 chance of appearing, with each card produced by its own HMAC. Its documentation does not describe a shoe from which dealt cards are removed.
Check one result yourself
This reproduces Duel's published Dice example. It runs with Node.js and no extra packages.
// Duel Dice, using Duel's published worked example
const crypto = require("node:crypto");
const serverSeed = "e8c83961a3961baee67cc08da34ada1c00a4515450a3cdbd2b1db81a35ca7f72"; // revealed after rotation
const clientSeed = "UzR5CIqog4DXox5H";
const nonce = 21;
const digest = crypto
.createHmac("sha256", Buffer.from(serverSeed, "hex")) // key: the seed as 32 bytes, not as text
.update(`${clientSeed}:${nonce}`)
.digest("hex");
const value = parseInt(digest.slice(0, 8), 16); // first 4 bytes as a number
console.log(digest.slice(0, 8), value, (value % 10001) / 100);
It prints 24081264 604508772 83.28, the same roll Duel publishes for this example. The comment on the key matters: the server seed has to be decoded from hex. Used as text, the same inputs give 73.32, which is wrong.
Scripts for every documented game, the commitment check and a Python version are in how to verify a bet.
Why the scheme holds
| What the casino might try | What stops it |
|---|---|
| Swap the server seed after a big win | The new seed would not hash to the published commitment |
| Pick a server seed that beats your client seed | It committed before your client seed was set |
| Change one result and leave the rest | The same revealed seed must reproduce every bet on the pair |
| Use a different part of the hash or another formula | Your own recalculation with the published method would stop matching |
Duel names the same warning signs itself: a hashed server seed that was not shown before play, one shown only after you committed to a client seed, a changed algorithm, or a revealed seed that does not match its hash.
The scheme only protects you if you do your part: note the hash before you play, use your own client seed, and run the check after rotating. A commitment nobody checks deters nothing.
Crash and Castle Roulette: drand instead of a client seed
A per-player client seed does not fit a game where everyone watches the same round. Many crypto casinos solve this with a pre-generated hash chain. Duel documents a different design: drand.
Drand is a public, distributed randomness beacon. A group of independent organisations jointly produce a new random value every few seconds, each with a round number, and publish it for anyone to read. No single party, Duel included, can predict a future value or choose it.
For Crash and Castle Roulette, Duel documents this sequence:
- Before the round, Duel shows its hashed server seed and a drand round ID. The ID points to a value on drand's quicknet beacon that has not been published yet.
- When drand publishes that round, its value takes the place of the client seed. The nonce is fixed at 0.
- The result is the HMAC-SHA256 of that value with Duel's server seed as the key.
Duel cannot steer the result, because it committed to its seed before the drand value existed. Players cannot predict it, because the server seed is hidden. The published values are at api.drand.sh/v2/beacons/quicknet/rounds/ followed by the round ID.
The Crash formula shows the house edge in plain sight:
crash point = (2^32 / (number + 1)) x (1 - 0.001)
The 0.001 is the 0.1% base edge of the Originals. The crash guide covers the game and the roulette guide has the Castle Roulette payout table. The verification script for both is in how to verify a bet.
What it proves and what it does not
| Question | Does provably fair answer it? |
|---|---|
| Was this result fixed before my bet? | Yes |
| Was it altered afterwards? | Yes, alteration is detectable |
| Is the house edge what the site says? | Partly. Where the payout rule is published, as in the Crash formula, you can read the edge from it |
| Is the casino solvent? | No |
| Will my withdrawal be paid, and how fast? | No |
| Are slots and live dealer results fair? | No, those use the provider's RNG or a physical table |
| Are the terms, bet limits and account decisions fair? | No |
A provably fair loss is still a loss. For the questions the proof cannot reach, the checks are different: is Duel.com legit covers the licence and operator, and a small test withdrawal covers payouts.
What is covered on Duel.com
Duel's sitemap lists twelve Originals with their own pages: Dice, Blackjack, Plinko, Crash, Mines, Beef, Keno, Castle Roulette, Video Poker, Rock Paper Scissors, Limbo and Groomers Van.
Duel publishes the derivation for the nine in the table above. It has not done so for Rock Paper Scissors, Limbo and Groomers Van as of October 2026, so they are not documented here; check duel.com/fairness/verify or ask live chat for those.
Third-party slots and live dealer games are not provably fair. Their outcomes come from the studio's certified random number generator or from a physical dealer, and you cannot recompute them from seeds. That includes the Duel-branded live blackjack table, which is a live dealer product and not the Blackjack Original.
The house edge is a separate matter from fairness. Originals run at a 0.1% base edge, which Duel refunds as instant rakeback inside a daily allowance of $50,000 wagered and $1,000 per bet, with Beef at about 99.2% RTP by design. See house edge and RTP explained and Duel's Zero Edge page. The refund is pricing; no hash proves it.
Where the seed controls sit inside a Duel account is not something we can document reliably. Look for a fairness link in the game window or the bet detail, and ask the 24/7 live chat if you cannot find it.
Common misconceptions
- Provably fair means the game can be beaten. It cannot; the payout formula is fixed
- A long losing streak proves rigging. Streaks are normal variance; verify the bets if in doubt
- It covers every game on the site. Only the in-house Originals
- Rotating seeds changes your luck. A new pair has the same odds
- Seeing the hash is enough. The proof only exists once you compare it to the revealed seed
When to verify
- Once, early. Rotate after your first session and check the commitment, so you know the process works on your account.
- When a result looks wrong. Recomputing it settles the question in a minute.
- Before you rely on the site for larger stakes. One verified pair is worth more than any review.
The rotation steps are in how to rotate your seed.
Summary
Provably fair is commit-reveal: Duel shows the SHA-256 hash of a server seed, derives each result with HMAC-SHA256 from that seed plus your client seed, nonce and cursor, then reveals the seed on rotation so you can check both the hash and the results. Crash and Castle Roulette use a public drand value in place of a client seed. The method is published by Duel and reproducible with your own code. It proves the result was not altered. Solvency, withdrawals and third-party games need separate checks.
Frequently asked questions
What does provably fair actually prove?
It proves that a result came from a server seed the casino fixed before you bet, combined with your client seed and a nonce, and that nothing was changed afterwards. It does not prove the casino is solvent, that a withdrawal will be paid, or anything about slots and live dealer games.
Which Duel.com games are provably fair?
The Duel Originals are provably fair. Duel publishes the algorithm for nine of them: Dice, Blackjack, Plinko, Mines, Keno, Beef, Video Poker, Crash and Castle Roulette. Third-party slots and live dealer tables, including the Duel-branded live blackjack table, are not seed-verifiable.
Is the exact Duel.com algorithm published?
Yes. Duel publishes the method for nine Originals, each with a worked example that can be reproduced independently. It is HMAC-SHA256 keyed with the server seed, over clientSeed:nonce:cursor, with the first 4 bytes mapped to a result by a per-game formula. Duel's verifier is at duel.com/fairness/verify.
How is Duel Crash provably fair without a client seed?
Crash and Castle Roulette replace the client seed with a value from drand, a public randomness beacon. Duel shows its hashed server seed and a future drand round ID before the round starts. Duel cannot predict or choose the drand value, and players cannot see the server seed, so neither side can steer the result.
Can a provably fair casino still cheat?
Not by changing a result after the bet without being caught, provided you check the commitment and use your own client seed. The proof does not cover anything outside the result: bet limits, account closures, withdrawal handling and terms are separate questions that no hash can answer.
Does provably fair mean there is no house edge?
No. The edge sits in the formula that turns the random number into a payout. In Duel Crash it is visible: the crash point is multiplied by 1 minus 0.001, a 0.1% edge. Duel refunds that 0.1% on Originals as rakeback inside a daily allowance, which is pricing, not cryptography.
Do I need to verify every bet?
No. Checking the commitment once per seed pair covers every bet on that pair, because one revealed seed reproduces all of them. Verify a handful of results when you first play and again whenever a result looks wrong to you.
Duel.help Games Desk
Casino games, sportsbook & provably fair
The games desk documents game rules, house edge, RTP concepts, provably fair verification and sportsbook mechanics in plain English.
- Published
- Last reviewed
Independent and unaffiliated with Duel.com. Read our editorial policy to see how these guides are researched and reviewed.
Was this page helpful?
Feedback stays on your device and helps you track what you have already read.
Parent category
Provably Fair · 4 articles
Seeds, hashes and step-by-step verification of individual bet results.
Related articles
Next steps and adjacent topics chosen from the same part of the help center.
How to Verify a Bet on Duel.com (Step by Step)
Verify a Duel.com bet with Duel's verifier or your own code: the documented HMAC-SHA256 scheme, runnable Node and Python scripts, and fixes for mismatches.
Server Seed, Client Seed and Nonce Explained
What the server seed, client seed, nonce and cursor do in a Duel.com bet, how HMAC-SHA256 combines them, and Duel's own Dice example worked through.
How to Rotate Your Seed on Duel.com
When and how to rotate your seed pair on Duel.com: record the hash, reveal the server seed, run the SHA-256 check, and verify past rounds in Duel's verifier.
House Edge and RTP Explained for Crypto Casino Players
What house edge and RTP actually mean, how they relate, why short sessions diverge from the average, how Duel.com's Zero Edge 100% / 99.9% RTP model works, and what a 0% edge does and does not change.
Duel.com Casino Guide: Games, Odds and How to Play
An independent overview of Duel.com's casino: the Duel Originals (Crash, Dice, Plinko, Mines, Blackjack, Keno, Castle Roulette, Video Poker, Limbo, Beef and more), how Zero Edge 100% RTP works, third-party slots with 50% rakeback, live dealer, how the house edge compares, and how to choose what to play.
Is Duel.com Legit? How to Assess a Crypto Casino
Is Duel.com legit? Who owns it (Immortal Snail LLC, founder Ossi Ketola), its Anjouan licence, launch date, reputation signals, provably fair games, no-KYC trade-offs, and a balanced verdict.