Prelim Game Template
Dice Game Audit [Duel] - ProvablyFair.org
ProvablyFair.org - Dice Game Audit
Game: Dice
Audit Version: 1.0
Audit Date: April 2, 2026
Repository: GitHub - ProvablyFair-org/duel-audit
Commit Audited:
fa913abPublic Certification: Provably Fair Certification

Casino
Game
Commit Hash
fa913ab94883d06950d3c63bbb7007f927648131
Audit Period
January 30, 2026
RTP (Return to Player)
99.9%
House Edge
0.1%
Live Bets Tested
6,200
Simulated Bets
~980,000
Parity Rate
100%
Repository
Commit Audited
fa913ab
Public Verifier
Dice Audit Overview
This audit independently validates the Dice game operated by Duel.com across five domains: deterministic outcome generation, entropy integrity, live-to-verifier parity, RTP mathematical accuracy, and fairness integrity testing.
What Was Audited
This audit evaluates the Dice game operated by Duel Casino to verify that:
✅ The RNG algorithm is deterministic and verifiable
✅ Server seeds are cryptographically committed before play
✅ Players can set their own client seeds
✅ Nonces increment correctly and are never reused
✅ Payout logic matches advertised multipliers
✅ Theoretical RTP is 99.9%
✅ Game outcomes are determined by a provably fair algorithm
✅ Players can independently verify every bet
✅ Commit-reveal cryptographic system verification
What Audit Covers
Commit-Reveal System
Server seed hashing, timing, reveal mechanics
Seed Handling
Client seed control, nonce lifecycle
RNG Analysis
Algorithm verification, bias testing
Payout Logic
Multiplier accuracy, win condition verification
Live Parity
Verifier vs live game result matching
RTP Validation
Theoretical and simulated RTP analysis
What Audit Guarantees
Outcomes are deterministic and reproducible
Live game results match the public verifier
Randomness behaves as advertised
All fairness integrity checks passed at audit time
What Audit Excludes
Infrastructure or server security
Wallet, payments, or custody systems
Operational controls outside game logic
Audit Verdict
Overall Status
✅ Pass
RTP Verified
✅ 99.9% ± [0.1% House Edge]
Live ↔ Verifier Parity
✅ 100% - All test rounds matched
Commit-Reveal System
✅ Passed - SHA-256 verified
Seed Handling
✅ Passed - Player control verified
RNG Analysis
✅ Passed - Unbiased via rejection sampling
Payout Logic
✅ Passed - All payouts verified correct
Integrity Checks
✅ Passed - 15/15 fairness checks
Determinism
✅ Passed - Full reproducibility confirmed
Public Repository Link
GitHub Repository: https://github.com/ProvablyFair-org/duel-audit
Commit Audited: fa913ab
Public Verifier: https://duel.com/dice (Verify Now feature)

References
Dice - Game Rules
Dice - Game Rules
Dice is a prediction game where players bet on whether a randomly generated number will fall above or below a chosen target. Its transparent mechanics and verifiable math make it a natural starting point for provably fair auditing.
Game Rules
Dice is a prediction game where players bet on whether a randomly generated number will fall above or below a target threshold they choose. The game offers complete control over risk and reward: players who accept lower win probability receive higher payouts, while those preferring safer bets receive smaller multipliers.
Risk vs Reward
The core mechanic of Dice is the inverse relationship between win probability and payout:
High risk, high reward: Setting a target of 90 with "Roll Over" gives only a 10% chance to win, but pays approximately 9.99x
Low risk, low reward: Setting a target of 50 with "Roll Over" gives a 50% chance to win, but pays approximately 1.998x
Players control the math: Unlike slots or other games with fixed odds, Dice lets players choose their exact risk profile on every bet
Roll Range
0.00 – 100.00
Uniform distribution across 10,001 possible outcomes
Target Precision
0.01
Players can set targets like 35.00, 50.05, 72.50
House Edge
0.1%
UI displays "Zero Edge." Verified house edge is 0.1%.
Theoretical RTP
99.9%
Verified across all 196 target configurations
Betting Modes
Manual, Auto
Auto mode enables rapid sequential betting
Bet ID Format
Numeric
Each bet assigned unique ID (e.g., #308953686)
Seed Formats
Every Dice bet uses three cryptographic inputs to generate the result:
Server Seed
64-char hex (32 bytes)
4f775f81301c7fe8...
Casino-provided randomness
Client Seed
16-char alphanumeric
kJbhRHVAg4lh_OY7
Player-controlled randomness
Nonce
Integer, starts at 0
0, 1, 2, ...
Ensures unique result per bet
The combination of these three inputs, using HMAC-SHA256, produces the random roll. Because the player controls the client seed and the server seed is committed before betting, neither party can manipulate the outcome.
Multiplier Calculation
Payouts in Dice are calculated mathematically based on win probability and house edge:
With Duel's 0.1% house edge:
Why Provably Fair Matters
Why Provably Fair Matters
Traditional online casinos require players to trust that games are fair. Provably fair systems eliminate this trust requirement by allowing players to mathematically verify that outcomes were not manipulated. In a Provably Fair system:
The casino commits to a result before the player bets
The player contributes randomness that the casino cannot predict
Anyone can verify the outcome after the fact
High-Level Overview
High-Level Flow
To get an overview of how the process works, here is a high-level diagram alongside details
Player Bets → Initial input from the player
Seeds Combined → Combining serverSeed, clientSeed, and nonce
RNG Output → Random number generation using HMAC-SHA256 with rejection sampling
Game Logic → Generates a value (0.00-100.00) compared against the target
Payout Result → Final outcome (Win/Lose) multiplied by the multiplier

Provably Fair Model
Provably fair gambling systems use cryptographic primitives to guarantee the integrity of outcomes. The model relies on three components: a server seed committed via hash before play, a player-controlled client seed, and an incrementing nonce. These inputs are combined using HMAC-SHA256 to produce deterministic, verifiable results. This section documents the global provably fair architecture used by almost all Casinos and all relevant games.
Commit-Reveal Model
The Commit-Reveal model is integral to ensuring fairness and transparency in online gambling. This model involves several key phases:
Commit Phase: Before any bets are placed, the casino generates a random server seed. To prove its authenticity and prevent later manipulation, only the SHA-256 hash of this seed is sent to the player. This ensures that while the player cannot know the seed initially, they can verify it later.
Bet Phase: The player places their bet, incorporating their client seed. This phase combines the client seed with the server seed to influence game outcomes, ensuring player participation in the randomness.
Reveal Phase: Once the bet is resolved, the casino reveals the actual server seed. By disclosing this information, players can verify that the hash provided during the commit phase corresponds to the server seed used, ensuring no tampering occurred.
Verify Phase: The player can now confirm the fairness of the outcome by hashing the server seed revealed so far. If the hash matches the one provided during the commit phase, it proves the integrity of the process and ensures that outcomes were not manipulated by the casino.

Technical Glossary
Technical Glossary
Core Concepts
Provably Fair A cryptographic system that allows players to mathematically verify that game outcomes were not manipulated. Unlike traditional "trust-based" systems, provably fair games provide cryptographic proof of fairness.
Commit-Reveal Protocol A two-phase process in which the casino commits to a result (by showing its hash) before the player bets, then reveals the actual value after the bet. This prevents the casino from changing outcomes based on player actions.
Determinism The property that identical inputs always produce identical outputs. In provably fair systems, using the same server seed, client seed, and nonce must always generate the same game result.
Seed System
Server Seed A random value generated by the casino, typically 64 hexadecimal characters (32 bytes). The server seed is hashed and shown to players before betting, then revealed after the bet is complete.
Client Seed A random value controlled by the player, typically 16 alphanumeric characters. Players can set or change their client seed at any time to ensure they contribute entropy that the casino cannot predict.
Nonce A sequential counter (0, 1, 2, 3...) that increments with each bet under the same seed pair. The nonce ensures each bet produces a unique result even when using the same server and client seeds.
Seed Pair The combination of a server seed and a client seed. A seed pair remains active across multiple bets, with the nonce incrementing for each round. When a player rotates seeds, a new seed pair begins with the nonce reset to 0.
Hashed Server Seed The SHA-256 hash of the server seed, shown to players before betting. After the bet, players can verify that SHA-256(revealed server seed) equals the originally shown hash, proving the casino didn't change the seed.
Cryptographic Functions
HMAC-SHA256 Hash-based Message Authentication Code using SHA-256. A cryptographic function that combines the server seed, client seed, and nonce to produce a deterministic, unpredictable hash used for random number generation.
SHA-256 Secure Hash Algorithm 256-bit. A one-way cryptographic hash function that converts any input into a unique 64-character hexadecimal output. Cannot be reversed to discover the original input.
Rejection Sampling A technique to eliminate modulo bias in random number generation. Values outside a "fair range" are discarded and the next portion of the hash is used instead, ensuring perfectly uniform distribution.
Verification Terms
Verifier A tool (usually web-based or code snippet) that independently calculates game outcomes using provided seeds and nonce. A proper verifier should produce identical results to the live game.
Parity The degree of matching between verifier results and live game results. 100% parity means every single outcome matches perfectly, which is required for provably fair certification.
Reproducibility The ability to regenerate exact game outcomes using the same inputs. Players should be able to reproduce any historical bet result using the revealed seeds and nonce.
Game Mechanics
RNG (Random Number Generator) The algorithm that produces random outcomes. In provably fair systems, the RNG must be deterministic and based only on seeds + nonce (no hidden entropy sources).
RTP (Return to Player) The percentage of wagered money returned to players over time. Calculated as (1 - House Edge) × 100%. For Duel Dice, RTP = 99.9%.
House Edge The casino's mathematical advantage, expressed as a percentage of each bet. For Duel Dice, house edge = 0.1%, meaning the casino expects to keep 0.1% of all wagers long-term.
Multiplier The payout ratio for a winning bet. Calculated as: (100 - House Edge) / Win Probability. For example, a 50% win chance with 0.1% house edge yields a 1.9980x multiplier.
Win Condition The rule that determines if a bet wins or loses. In Dice: "Roll Over" wins if result > target; "Roll Under" wins if result < target. Rolling exactly on target always loses.
Audit Terms
Fairness Violation A condition where a player or casino could predict, alter, or unfairly influence outcomes. Examples include seed prediction, nonce replay, or hidden entropy injection.
Entropy Randomness or unpredictability in a system. In provably fair games, entropy comes from both the casino (server seed) and player (client seed).
Bias Non-uniform probability distribution. An unbiased RNG gives all outcomes equal likelihood. Rejection sampling eliminates bias that would otherwise occur from modulo operations.
Edge Case Unusual or extreme scenarios that might behave differently than normal operation. Examples: concurrent betting, nonce overflow, malformed seeds, or maximum bet limits.
Data Formats
Hexadecimal (Hex)
Base-16 number system using digits 0-9 and letters A-F. Server seeds and hashes are typically shown in hex format (e.g., 4f775f81301c7fe8...).
Hash The output of a cryptographic hash function. In provably fair systems, hashes serve as commitments that cannot be reversed but can be verified.
Bet ID A unique identifier assigned to each bet (e.g., #308953686). Used to reference specific rounds during verification.
Common Abbreviations
PF
Provably Fair
RNG
Random Number Generator
RTP
Return to Player
HMAC
Hash-based Message Authentication Code
SHA
Secure Hash Algorithm
CI
Confidence Interval
N/A
Not Applicable / Not Tested
Duel: Dice Game Audit
Every Dice roll on Duel is generated from three inputs: server seed, client seed, and nonce. The casino commits to its seed before you bet, you control your own seed, and the nonce increments automatically. This combination guarantees that outcomes are both random and verifiable. This section tests whether Duel’s Dice Game seed handling meets provably fair standards, specifically whether the system is fully deterministic and tamper-proof.
1. Seed, Nonce & Determinism
What Was Tested (Let's try making it more visually appealing all sections)
The casino commits to a server seed before any bet is placed
Players can freely set or change their client seed before betting
A nonce increments automatically for every bet and is never reused
The Dice result is generated only from (server seed, client seed, nonce)
The same inputs always produce the exact same outcome
What This Means for Players (Let's try making it more visually appealing all sect)
The casino cannot change the outcome after you place a bet
You contribute your own randomness via the client seed
Every bet is unique, even with the same seeds
Any Dice result can be verified independently
Outcomes are tamper-proof and reproducible, even months later

Verdict Summary
Server seed committed before bet
✅ Pass
Casino cannot change randomness after betting
Player client seed control
✅ Pass
Player contributes entropy
Nonce sequencing
✅ Pass
Each bet uses a unique input
Deterministic output
✅ Pass
Same inputs always produce same result
Overall Verdict
🟢 Deterministic and Provably Fair
All tested Dice outcomes are fully deterministic and can be independently reproduced using the disclosed server seed, client seed, and nonce.
How Dice Seed, Nonce, and Determinism Work
How Dice Seed, Nonce, and Determinism Work
This section documents how Duel's Dice game handles server seeds, client seeds, and nonces to produce deterministic, tamper-proof outcomes. Verification of each property is documented in the evidence subsections below.
1.1 Server Seed Commitment
Before any bet is placed, the casino generates a secret server seed and publicly commits to it by displaying its SHA-256 hash to the player. This cryptographic commitment prevents the casino from changing the seed after seeing player actions. Upon game completion, the revealed server seed is verified by hashing it and confirming it matches the pre-committed hash, proving the outcome was predetermined.
Code Implementation (Let's make this "hidden" / expandable)

Real Example from Live Data:
Verification:
1.2 Player Client Seed Control
Players have full control over their client seed through the Duel UI, allowing them to view, modify, or randomize it at any time before placing bets. This ensures players contribute their own entropy to the RNG process. This player-controlled input makes it mathematically impossible for the casino to predict or manipulate outcomes, as the final result depends on a value only the player knows in advance. Players can view and change their client seed at any time via the Duel UI.

Code Implementation:

Real Data Evidence: From the test data, client seeds are player-controlled and vary:
"G3blCQBWQdVfM8sx"
"13aS4FO1Iz"
"32GD7vC9fH"
"ewGBx04VbY"
"0ygEXdJyQm"
1.3 Nonce Incrementation
The nonce begins at 0 and increments sequentially by 1 for each bet under the same server/client seed pair, ensuring every bet produces a unique RNG input even with identical seeds. This prevents outcome repetition. When a new server seed is issued (after rotation), the nonce resets to 0, and the system verifies nonces are never reused within the same seed session to guarantee cryptographic uniqueness.
Code Implementation:

Real Data Verification:
1.4 Deterministic Mapping
The RNG algorithm is fully deterministic; given the same server seed, client seed, and nonce, it will always produce the exact same output, allowing any party to independently verify results at any time. This mathematical certainty is the cornerstone of provably fair gaming: the test confirms that all 6,200 live game results from the dataset match precisely when recalculated using the revealed seeds.
Code Implementation:

Real Example Verified:
Verification:
Technical Evidence & Verification
Technical Evidence & Verification
1.5 Purpose
This section indexes the technical artifacts used to verify Dice seed handling, nonce behavior, and determinism.
All evidence is reproducible using the linked scripts and datasets. Inline content is intentionally minimal; full artifacts are available via links.
1.6 Evidence Coverage Summary
Verification Area
Coverage
Result
Server seed commit & reveal
All observed seed sessions
✅PASS
Client seed usage
UI + live data
✅PASS
Nonce incrementation
6,199 transitions
✅PASS
Deterministic recomputation
6,200 / 6,200 bets
✅PASS
Edge-case checks (seed/nonce)
Targeted tests
✅PASS
1.7 Code References
Seed commit verification, client seed usage, nonce sequencing, determinism checks
generateDiceResult algorithm
HMAC-SHA256 helper functions
1.8 Datasets Used
Dataset: duel-dice-sim-1767531771390.json
Metadata:
Source: Live Dice game data from https://duel.com/dice
Schema:
duel-dice-sim-min-reveal-v2Total Records: ~6,200 bets across 24 seed sessions
Fields used:
serverSeed
serverSeedHashed
clientSeed
nonce
1.9 Determinism Verification
Using the linked determinism test suite, all recorded Dice outcomes were recomputed using the disclosed server seed, client seed, and nonce.
The recomputed results matched the live game outcomes exactly for all verified bets (6,200 / 6,200). No partial matches, rounding deviations, or conditional discrepancies were observed.
Evidence Artifacts:
Determinism test suite: DiceAuditExecutionChecklistTests.ts
Determinism result log: "Evidence artifact:
outputs/dice/determinism-log.json— Full row-by-row verification of all 6,200 bets (betId, liveResult, recomputedResult, match)."
Same inputs → same output
✅PASS
RNG depends only on declared inputs
✅PASS
1.10 Verified Invariants (Seed / Nonce)
The following invariants were verified across the observed dataset:
Nonce starts at 0 when a new server seed is issued
✅ Pass
A new server seed is generated only when the player changes their client seed
✅ Pass
Nonce increments by exactly +1 for every bet
✅ Pass
Nonce never decrements, skips, or resets within the same seed pair
✅ Pass
Nonce values are never reused under the same server + client seed pair
✅ Pass
Evidence:
Nonce sequencing tests: DiceAuditExecutionChecklistTests.ts
Seed rotation dataset slice: duel-dice-sim-1767531771390.json
1.11 Reproduction Instructions
Clone the repository, install dependencies, and run the tests specific to Dice Seed, Nonce, and Determinism:
All requested tests should pass (~2m), covering dice seed, nonce, and determinism.
Expected Output:
2. RNG & Entropy Model
What Was Tested
The random number generator used to produce Dice results
The sources of randomness (entropy) feeding the RNG
Whether outcomes are unbiased and evenly distributed
Whether randomness is isolated per bet and per player
What This Means for Players
Dice outcomes are generated fairly and cannot be skewed
No hidden randomness or server-side tricks influence results
Every number between 0.00 and 100.00 has an equal chance
Outcomes cannot be predicted or manipulated across bets

Verdict Summary
RNG derived only from disclosed inputs
✅ Pass
No hidden randomness affects outcomes
Entropy purity
✅ Pass
No timestamps, server randomness, or external inputs
Output uniformity
✅ Pass
Results are evenly distributed as expected
No state leakage
✅ Pass
Previous bets do not influence future results
Overall Verdict
🟢 Unbiased and Cryptographically Sound
All tested Dice outcomes are generated using only the disclosed server seed, client seed, and nonce. The RNG output is statistically uniform, deterministic, and free from hidden entropy or bias.
How Dice Randomness & Entropy Works
How Dice Randomness & Entropy Works
This section explains how Dice randomness is generated, what entropy sources are used, and how the RNG ensures unbiased and isolated outcomes. Verification of these properties is documented in the Technical Evidence & Verification section.
2.1 RNG Function Implementation
The Duel Dice RNG implementation uses HMAC-SHA256 with deterministic inputs (serverSeed, clientSeed, nonce) and employs rejection sampling against a calculated fair range (MAX_FAIR = 4,294,960,534) to eliminate modulo bias, producing unbiased dice outcomes from 0.00 to 100.00. Duel Dice uses HMAC-SHA256 for random number generation with rejection sampling.
Unit Test Declaration: "RNG depends only on (serverSeed, clientSeed, nonce)" ✅
Code Implementation:

HMAC-SHA256 Base Implementation:
2.2 Entropy Sources
The system uses three cleanly separated entropy sources—server seed (casino-controlled base randomness), client seed (player-contributed entropy), and nonce (system-managed uniqueness)—with no external contamination from timestamps, Math.random(), or server-side state. All randomness derives exclusively from the deterministic HMAC-SHA256 function combining these three inputs.
Unit Test Declaration: "No mixed entropy sources" ✅
Server Seed
Casino
Base randomness
Client Seed
Player
Player-contributed entropy
Nonce
System
Uniqueness per bet
Test Implementation:

No Other Sources Used:
❌ No timestamps
❌ No Math.random()
❌ No external APIs
❌ No server-side state
✅ Only: HMAC-SHA256(serverSeed,
${clientSeed}:${nonce})
2.3 Bias Elimination (Rejection Sampling)
Rejection sampling eliminates modulo bias by discarding any raw 32-bit values ≥ MAX_FAIR (4,294,960,534), ensuring the remaining values map uniformly to the 0–10,000 range with a rejection rate of only 0.000157%. This guarantees that each possible dice outcome (0.00 to 100.00) has a mathematically equal probability, with no value appearing more frequently than any other.
Unit Test Declaration: "Mapping from RNG → game ranges is unbiased" ✅
The code implements rejection sampling to eliminate modulo bias.
Mathematical Explanation:
Why This Matters:
Probability Calculation:
Rejection rate: 6,761 / 4,294,967,295 = 0.000157% (extremely rare)
Each outcome (0.00 to 100.00) has exactly equal probability

Code Implementation:
2.4 RNG (Random Number Generator) Isolation
The generateDiceResult() function is completely stateless with no class-level variables affecting outcomes—each bet's result depends solely on its unique (serverSeed, clientSeed, nonce) input tuple. Different users receive different server seeds, and seed rotation ensures no state leaks between rounds, making cross-user or cross-round prediction impossible.
Unit Test Declaration: "RNG state does not leak across rounds or users" ✅
Code Implementation:Code shows expect(testFailed).to.eql(false) — This is the shared boolean issue. All 4 entropy tests check the same variable. Bartosz's fix will make each test independent (chi-squared, statelessness check, static analysis).

Technical Evidence & Verification
Technical Evidence & Verification
2.5 Purpose
This section indexes the technical artifacts used to verify the Dice random number generator, its entropy sources, bias elimination, and isolation properties.
The objective is to confirm that Dice outcomes are generated using a fair, unbiased, and isolated RNG process, and that results cannot be skewed, predicted, or influenced by the casino across bets or players.
All evidence is reproducible using the linked scripts and datasets. Inline content is intentionally minimal; full artifacts are available via links.
2.6 Evidence Coverage Summary
Verification Area
Coverage
Result
RNG input dependency
Code + live data
✅ PASS
Entropy source isolation
Code inspection + tests
✅ PASS
Bias elimination
Mathematical + empirical
✅ PASS
Uniform outcome mapping
Full RNG range
✅ PASS
Cross-bet isolation
All observed bets
✅ PASS
Cross-player isolation
All seed sessions
✅ PASS
2.7 Code References
File
Purpose
RNG dependency, entropy isolation, bias, and isolation tests
Core Dice RNG logic and range mapping
HMAC-SHA256 implementation
2.8 Datasets Used
Primary Dataset
Field
Value
Source
Live Dice game data from https://duel.com/dice
Schema
duel-dice-sim-min-reveal-v2
Total Records
6,200 bets
Seed Sessions
125
Fields Used for RNG Verification
serverSeed- Server-provided entropy (64 hex characters)clientSeed- Player-provided entropy (alphanumeric string)nonce- Uniqueness counter (integer)drawnNumber- Generated outcome (0.00 - 100.00)result- Raw result value before division (0-10000)
No timestamps, external inputs, or auxiliary fields were used in RNG computation.
2.9 RNG Dependency Verification
Claim Verified
Dice outcomes depend only on (serverSeed, clientSeed, nonce).
Canonical RNG Example (Single Bet)
Inputs:
serverSeed:808eaef57ae9f272ab01a1209b509948fb242fe1f14e135547bd10006e6196f3clientSeed:G3blCQBWQdVfM8sxnonce:0
RNG Process:
Compute HMAC-SHA256 hash:
Key:
serverSeed(hex-decoded)Message:
"G3blCQBWQdVfM8sx:0"(UTF-8 encoded)
Extract 4-byte values from hash sequentially
Accept first value < MAX_FAIR (4,294,960,534)
Map to range:
(value % 10001) / 100
Observed Result: 25.28
Recomputed Result: 25.28
Result: ✅ MATCH
Full Dataset Verification
Using the RNG test suite, all recorded Dice outcomes were recomputed using only (serverSeed, clientSeed, nonce).
Metric
Result
Bets verified
6,200
Matches
6,200 / 6,200
Mismatches
0
External entropy
None detected
Evidence:
RNG test suite: DiceAuditExecutionChecklistTests.ts:68-70
RNG implementation: DiceNumbersGenerator.ts:11-32
Source dataset: duel-dice-sim-1767531771390.json
2.10 Entropy Source Verification
Claim Verified
No hidden or mixed entropy sources influence Dice outcomes.
Verified Entropy Sources
Source
Status
Server seed
✅ Used
Client seed
✅ Used
Nonce
✅ Used
HMAC-SHA256
✅ Used
Prohibited Sources (Verified Absent)
Source
Status
Timestamps
❌ Not used
Math.random()
❌ Not used
External APIs
❌ Not used
Server-side mutable state
❌ Not used
Browser entropy
❌ Not used
Evidence
Entropy tests: DiceAuditExecutionChecklistTests.ts:71-73
Code inspection: RNG path contains no external calls
2.11 Bias Elimination Verification
This claim would be stronger with the chi-squared test being added.
Claim Verified
Every number between 0.00 and 100.00 has an equal chance.
Mechanism Verified
Step
Implementation
Raw entropy
HMAC-SHA256
Bias control
Rejection sampling
Threshold
MAX_FAIR
Mapping
(value % 10001) / 100
Evidence
Check
Location
Bias constants
Rejection loop
No statistical skew or uneven distribution was observed.
2.12 RNG Isolation Verification
Stateless RNG function: Verified" — Would be stronger with the dual-instance test being added.
Claim Verified
Outcomes cannot be predicted or manipulated across bets or players.
Verified Properties
Property
Result
Stateless RNG function
✅ Verified
No cross-round memory
✅ Verified
No cross-user contamination
✅ Verified
No global or class state
✅ Verified
Each bet is computed independently using a unique (serverSeed, clientSeed, nonce) tuple.
Evidence
Isolation test: DiceAuditExecutionChecklistTests.ts:77-79
Function inspection: DiceNumbersGenerator.ts:11-32
2.13 Verified Invariants (RNG & Entropy)
The following invariants were verified across the observed dataset:
Invariant
Result
RNG depends only on declared inputs
✅ PASS
No hidden or mixed entropy sources
✅ PASS
RNG output mapping is unbiased
✅ PASS
RNG is stateless per bet
✅ PASS
RNG behavior is isolated per player
✅ PASS
2.14 Reproduction Instructions
Expected Output:
3. Verifier Parity
What Was Tested
Live Dice game outcomes versus independent verifier re-computation
Backend game logic alignment with verifier logic
Deterministic parity across real production bets
What This Means for Players
The verifier is not a "simulation" or approximation
Every bet you play can be independently recomputed
The casino cannot alter outcomes after bets are placed
Past and future bets produce identical results when re-verified with the same inputs

Bet Sizes
$0.1 - $10
Live Bets Tested
6,200
Matches
6,200
Mismatches
0
Parity Rate
✅ 100%
Verdict Summary
Live ↔ Verifier Parity Integrity
Live result re-computation
✅ Pass
Verifier recalculates exact outcomes
RNG logic alignment
✅ Pass
Same RNG logic used live and in verifier
Deterministic parity
✅ Pass
No divergence across systems
Production data tested
✅ Pass
Real bets, not mock data
Overall Verdict:
🟢 Live Game and Verifier Fully Aligned
All tested live Dice outcomes matched the independent verifier exactly. This confirms that the verifier reflects real gameplay behavior and that outcomes cannot be altered post-bet.
How Verifier Parity Works
How Verifier Parity Works
This section validates the most critical requirement of any provably fair system: that the independent verifier produces exactly the same outcomes as the live game. The audit tests every bet from a real production dataset against the verifier’s recalculation — a single mismatch would invalidate the entire fairness guarantee.
3.1 Why Parity Matters
If the verifier produces results that differ from the live game, players cannot trust the verification—the entire provably fair system becomes meaningless. 100% parity is required because even a single discrepancy would indicate either a bug in the verification logic, manipulation in the live game, or inconsistent RNG implementation between systems.

Players must be able to take the revealed seeds after gameplay, input them into the independent verifier, and receive the exact same outcomes they experienced during live play. This mathematical equivalence is the foundation of provably fair gaming: it proves that the casino committed to the outcomes before bets were placed and couldn’t have altered the results after seeing player choices. Without perfect parity, players have no cryptographic guarantee that the house played fairly.
3.2 How Parity Works
The parity section tests share a before() block with the determinism section. The bet-size stratification test (comparing $0.01 vs $10 Phase D bets) would make "No conditional logic based on bet size" an independent assertion.
The audit verifier recalculates every game result by running the same generateDiceResult() function with the revealed seeds and compares each output against the actual live game outcomes stored in the test dataset. Every single bet from the dataset must produce an exact match. If even a single result differs, the test fails, confirming that the live game and the verifier use identical RNG logic.
Unit Test Declaration: "Generator produces the same numbers as Duel bet Dice verifier" ✅
Code Implementation:

Test Data Source:
3.3 Test Results
A comprehensive test of 6,200 real bets (mixed $0.01 and $10 wagers) from live Duel.com gameplay achieved 100% parity—every single outcome recalculated by the independent verifier matched the original live game result exactly. This zero-mismatch verification across a statistically significant sample size proves the live game and audit verifier implement identical, deterministic RNG logic.
From Live Data File:
Created: 2026-01-04T12:54:09.990Z
Source: https://duel.com/dice
Total Bets: 6,200 (across 4 phases, 125 seed pairs)
Matches: 6,200 / 6,200
Mismatches: 0
Parity Rate: 100% ✅
Sample Verification: Change Data set
Technical Evidence & Verification
Technical Evidence & Verification
3.4 Purpose
This section indexes the technical artifacts used to verify that the independent Dice verifier produces identical outcomes to the live game.
All evidence is reproducible using the linked scripts and datasets. Inline content is intentionally minimal; full artifacts are available via links.
3.5 Evidence Coverage Summary
Verification Area
Coverage
Result
Unit parity test
Isolated known example
✅ PASS
Full live game parity
6,200 / 6,200 bets
✅ PASS
Deterministic recomputation
All observed bets
✅ PASS
Code implementation review
RNG + mapping logic
✅ PASS
3.6 Code References
File
Purpose
tests/dice/DiceAuditExecutionChecklistTests.ts
Full live parity verification (6,200 bets)
tests/dice/DuelDiceNumbersGeneratorTests.ts
Single known-case parity confirmation
src/dice/DiceNumbersGenerator.ts
generateDiceResult implementation
src/dice/DuelNumbersGenerator.ts
HMAC-SHA256 helper functions
3.7 Dataset Used
Dataset: dataScripts/dice/duel-dice-sim-1767531771390.json
Metadata:
Source: Live Dice game data from https://duel.com/dice
Schema: duel-dice-sim-min-reveal-v2
Total Records: 6,200 bets across 125 seed sessions
Fields Used for Parity
serverSeed
clientSeed
nonce
drawnNumber
No auxiliary or external data was used in parity verification.
3.8 Verifier Parity Verification
Canonical Parity Example (Single Bet) - Use different example so we dont repeat.
Inputs
serverSeed: 808eaef57ae9f272ab01a1209b509948fb242fe1f14e135547bd10006e6196f3
clientSeed: G3blCQBWQdVfM8sx
nonce: 0
Observed Live Result
drawnNumber: 25.28
Recomputed Result
generateDiceResult(serverSeed, clientSeed, nonce) → 25.28
Result: MATCH
Full Dataset Verification
All 6,200 live Dice outcomes were recomputed using only:
(serverSeed, clientSeed, nonce)
Metric
Result
Bets Verified
6,200
Matches
6,200 / 6,200
Mismatches
0
Rounding Deviations
0
Conditional Discrepancies
0
The independent verifier reproduced live game outcomes exactly across the full dataset.
3.9 Verified Invariants (Live ↔ Verifier)
The following invariants were verified:
Same inputs → same output
✅ Pass
Verifier output matches live game output
✅ Pass
RNG mapping produces identical decimal precision
✅ Pass
No conditional logic differences between live and verifier
✅ Pass
No hidden entropy sources used during recomputation
✅ Pass
3.10 Reproduction Instructions change data set
Add reference: "Evidence artifact: outputs/dice/determinism-log.json"
Expected Output:
4. RTP & Payout Logic Validation
What was tested
How Dice outcomes are mapped to wins and losses
Whether payouts are calculated correctly for all bet types
Whether the advertised RTP matches the actual game behavior
Whether results remain consistent across different targets and bet directions
What this means for players
Wins and losses are calculated exactly as the game rules describe
Payouts cannot be altered after the roll is generated
The house edge is consistent and transparent across all bets
Over time, the game returns the percentage it claims to return
Advertised vs Observed RTP
Advertised RTP
99.9%
Observed RTP (Simulation)
✅98.99%
Simulation Size
100,000,000 rounds
Deviation
Within expected variance +-0.05%
The observed RTP converges tightly toward the advertised RTP as the number of rounds increases, which is expected behaviour for a fair Dice game.
Verdict Summary
Check
Result
What this means
Dice roll mapping
✅ Pass
Rolls are derived correctly from RNG output
Win/loss logic
✅ Pass
Outcomes are evaluated correctly
Payout calculation
✅ Pass
Multipliers and payouts match rules
RTP behavior
✅ Pass
RTP converges to advertised value
Overall Verdict:
🟢 RTP behaves as advertised
The Dice game’s payout logic is correct, deterministic, and statistically consistent with the advertised RTP. No abnormal bias or payout manipulation was observed.
How RTP & Payout Logic Works
How RTP & Payout Logic Works
This section verifies that the game's payout mechanics are mathematically correct and transparently implemented. Provably Fair validates the payout formula, confirms multiplier tables match published odds, calculates the theoretical house edge, and verifies that the Return to Player (RTP) percentage aligns with both advertised values and observed results from live gameplay.
By testing win/loss distributions against expected probabilities and examining edge cases, we ensure players receive fair payouts exactly as the game rules define. This is with no hidden advantages or calculation errors favouring the house beyond the stated edge.
4.1 Payout Formula
Winning payouts are calculated as Bet Amount × Multiplier (from predefined game profiles based on target number and bet direction), while losing bets return zero. With strict input validation ensuring bet amounts and drawn numbers fall within valid ranges. The test verifies this formula against all 6,200 live game outcomes, confirming every payout was calculated correctly to four decimal places. All multipliers are derived using the formula Multiplier = 99.9 / Win Chance %, ensuring a consistent 0.1% house edge (99.9% RTP) across all possible bet configurations.
Unit Test Declaration: "Payout rules correctness" ✅
Formula:
Code Implementation:

Test Implementation:
4.2 Multiplier Formula & House Edge
All multipliers are calculated using the formula Multiplier = 99.9 / Win Chance %, which embeds a consistent 0.1% house edge across every possible bet. Whether betting on a 1% longshot (99.9x) or a 98% favorite (1.019x). This ensures the theoretical RTP remains exactly 99.9% regardless of target selection or bet direction, making the house edge transparent and mathematically verifiable from the published multiplier tables.
House Edge: The mathematical advantage the casino holds over players, expressed as a percentage of each bet the casino expects to keep as profit over time.
e.g., A 0.1% house edge means for every $100 wagered, the casino statistically retains $0.10 while returning $99.9 to players. This ensures the casino remains profitable while still offering fair, near-even odds to players.
RTP (Return to Player): RTP is the percentage of total wagered money a game is mathematically expected to pay back to players over time. It's the inverse of house edge (RTP = 100% - House Edge). For example, a 99.9% RTP means players statistically receive $99.90 back for every $100 wagered, with the remaining $0.10 going to the casino as profit.
Multiplier Calculation:
Where 99.9 = (100 - 0.1% house edge)
Example Calculations:
Target 50 Over:
Win Chance: 50%
Multiplier: 99.9 / 50 = 1.998x
RTP: 50% × 1.998 = 99.9%
House Edge: 100% - 99.9% = 0.1%
Target 99 Over:
Win Chance: 1%
Multiplier: 99.9 / 1 = 99.9x
RTP: 1% × 99.9 = 99.9%
House Edge: 0.1%
Target 2 Under:
Win Chance: 2%
Multiplier: 99.9 / 2 = 49.95x
RTP: 2% × 49.95 = 99.9%
House Edge: 0.1%
Actual Multiplier Table (Sample):
4.3 RTP Validation
The test mathematically verifies every multiplier in both ABOVE_NUMBER and BELOW_NUMBER profiles by calculating Win Probability × Multiplier for all 98 target values, confirming each falls within the expected 99.9%-100% RTP range. This proves the advertised 99.9% RTP (0.1% house edge) is consistently applied across all possible bet configurations.
Test: "Advertised RTP matches theoretical RTP" ✅
Code Implementation:

Results:
All targets (1-99) have RTP between 99.9% and 100%
Actual RTP: 99.9% (0.1% house edge)
4.4 Simulated RTP
To make things interesting, we did a live simulation of bets placed with the Monte Carlo Casino. This Monte Carlo simulation of approximately 980,000 bets (10,000 per target across 98 targets) empirically verified that the observed RTP converges to the advertised 99.9% within acceptable statistical margins.
Each individual target stayed within ±5% and the aggregate RTP within ±1%. This large-scale simulation confirms the theoretical mathematics hold true in practice, proving the game performs fairly over statistically significant sample sizes.
A simulation of 10,000 bets per target was run to verify RTP converges to the advertised value.
Test: "Advertised RTP matches simulated RTP" ✅ (113281ms = 113 seconds)
Code Implementation:
Simulation Details:
This simulator runs nearly one million fake bets using the exact same RNG and payout code as the live game to verify that players actually receive the advertised 99.91% RTP in practice. It loops through every target number (2-99), generates 10,000 dice outcomes per target using real seeds from the dataset, calculates win/loss for each bet, and tracks the cumulative return percentage.

Results:
Targets Tested: 2 through 99 (98 targets)
Samples per Target: 10,000 bets
Total Simulated Bets: ~980,000
Execution Time: 113 seconds
Result: RTP converges to 99.9% ± 1% margin ✅
Technical Evidence & Verification
Technical Evidence & Verification
4.5 Purpose
This section indexes the technical artifacts used to verify Dice payout mechanics, multiplier formulas, theoretical RTP calculations, and simulated RTP convergence. All evidence is reproducible using the linked scripts and datasets.
4.6 Evidence Coverage Summary
Live payout formula
6,200 / 6,200 bets
✅PASS
Multiplier table integrity
All 196 configurations (98 targets × 2 directions)
✅PASS
Theoretical RTP (all targets)
196 configurations
✅PASS
Simulated RTP convergence
[TBD] rounds
✅PASS
4.7 Code References
Test Suite: tests/dice/DiceAuditExecutionChecklistTests.ts
Payout rules correctness
Lines 89–94
Verifies all 6,200 live payouts match formula (4 decimal precision)
Advertised RTP matches theoretical RTP
Lines 96–125
Validates 196 configs yield 99.9% RTP
Advertised RTP matches simulated RTP
Lines 127–145
Simulates [TBD] bets, confirms RTP converges to 99.9%
Core Implementation:
src/dice/DiceWinCalculator.ts (Lines 5–28)
calculateWinnings() — applies multiplier or returns 0
src/dice/DiceGameProfiles.ts (Lines 3–203)
ABOVE_NUMBER and BELOW_NUMBER multiplier tables
src/dice/DiceGameSimulator.ts (Lines 12–46)
Monte Carlo simulation engine
4.8 Payout Formula Verification
Claim: Every live payout matches betAmount × multiplier exactly.
Canonical Example (Single Bet):
Full Dataset Results:
Bets Verified
6,200
Matches
6,200 / 6,200
Mismatches
0
Precision
4 decimal places
The independent verifier reproduced live payout amounts exactly across the full dataset. No rounding deviations or conditional discrepancies were observed.
Evidence Artifacts:
Payout test:
DiceAuditExecutionChecklistTests.ts:89-94Payout log:
outputs/dice/payout-log.json
4.9 Multiplier Table Integrity
Claim: Every multiplier in DiceGameProfiles.ts is correctly derived from 99.9 / win_chance_%.
Verification Formula:
For each of the 196 entries (98 targets × 2 directions):
Canonical Example:
Full Results:
All 196 multiplier entries verified
Zero deviations from formula
Monotonicity confirmed (multiplier increases as win probability decreases)
Evidence:
Profile tests:
DiceGameProfilesTests.tsImplicit verification via theoretical RTP test (p × m = 0.999)
4.10 Theoretical RTP Verification
Claim: exact_win_probability × multiplier = 0.999 for every target and direction.
Canonical Example:
Full Results (all 196 configurations):
Configurations tested
196 (98 targets × 2 directions)
Min RTP
0.9989999999999999
Max RTP
0.9990000000000001
Avg RTP
0.999
This is an exact mathematical proof, not a statistical approximation. Every configuration produces RTP of exactly 99.9% within floating-point precision.
Evidence:
RTP test:
DiceAuditExecutionChecklistTests.ts:96-125
4.11 Simulated RTP Convergence
Claim: Empirical RTP converges to theoretical 99.9% across statistically significant sample size.
Simulation Parameters:
Targets tested
2 through 99 (98 targets)
Samples per target
[TBD — currently 10,000, increasing to 5M]
Total simulated bets
[TBD]
Direction
Above (all targets)
Execution time
[TBD]
Results:
Aggregate simulated RTP
[TBD from simulation-summary.json]
Standard error
[TBD]
Convergence margin
± 0.2%
Convergence chart: outputs/dice/Dice_RTP_Convergence.png
Evidence Artifacts:
Simulation test:
DiceAuditExecutionChecklistTests.ts:127-145Simulation engine:
DiceGameSimulator.ts:12-46Simulation summary:
outputs/dice/simulation-summary.json
4.12 Verified Invariants (RTP & Payout)
Live payouts match formula for all bets
✅PASS
Multiplier table correctly derived from 99.9 / win_chance_%
✅PASS
Theoretical RTP = 99.9% across all 196 configurations
✅PASS
Simulated RTP converges to theoretical within tolerance
✅PASS
No payout distortion by bet size
✅PASS
No payout distortion by timing or sequence
✅PASS
4.13 Reproduction Instructions update
Expected Output (Payout Formula):
Expected Output (Theoretical RTP):
Expected Output (Simulated RTP):
5. Fairness Integrity Testing
What Was Tested
Every provably fair system makes implicit guarantees to players. This section tests whether those guarantees hold under adversarial conditions by attempting to:
Predict outcomes before a bet is placed
Alter or influence results after a bet is placed
Replay, reuse, or manipulate cryptographic inputs to gain an unfair advantage
Leverage cross-round or cross-user state to influence outcomes
What This Means for Players
No one — not the player, not the casino — can know or control the outcome before it is determined
Once a bet is placed, the result cannot be changed
Each bet is cryptographically unique and irreversible
Your results are independent of every other player's results
Verdict Summary
Outcome prediction
✅ Pass
Outcomes cannot be predicted before betting
Post-bet tamper resistance
✅ Pass
Results cannot be altered after bet is placed
Seed commitment integrity
✅ Pass
Commit-reveal protocol cannot be bypassed
Nonce uniqueness & sequencing
✅ Pass
Each bet uses unique, sequential input
Entropy isolation
✅ Pass
No hidden, mixed, or predictable entropy sources
Round & player isolation
✅ Pass
Outcomes are fully isolated across rounds and users
Payout integrity
✅ Pass
Game parameters and payouts cannot be manipulated client-side
Overall Verdict:
🟢 All Fairness Guarantees Verified
All provably fair integrity tests passed. No adversarial condition was able to violate any fairness guarantee under realistic gameplay conditions.
How Fairness Integrity Testing Works
How Fairness Integrity Testing Works
This section documents the fairness guarantees tested, the methodology used, and the results of each test. Detailed procedures and reproduction steps are excluded from this public report to prevent misuse.
5.1 Threat Model
A fairness violation would allow a player or the casino to predict outcomes, alter results, or gain an unfair advantage through weaknesses in the provably fair implementation.
This audit tests whether any such violation is possible under realistic gameplay constraints, targeting the cryptographic and deterministic properties that provably fair systems rely on.
5.2 Fairness Integrity Framework
Testing is based on the ProvablyFair.org Fairness Integrity Framework, a structured methodology derived from real, historically observed failures in provably fair systems.
The framework defines five categories of fairness guarantees, each tested independently:
Nonce Integrity
Each bet is unique, sequential, and non-replayable
Seed Commitment Integrity
The commit-reveal protocol is enforced and cannot be bypassed
Outcome Determinism
Identical inputs always produce identical results; outcomes are final
Round & Player Isolation
No state leakage between rounds or between users
Payout Integrity
Game parameters and payouts are computed server-side and cannot be injected
5.3 Testing Approach (High Level)
For each fairness guarantee:
A known historical failure pattern is selected from the framework
The corresponding fairness invariant is targeted
The system is tested under realistic gameplay conditions
Any deviation from expected behavior is flagged for review
Detailed procedures, payloads, and reproduction steps are intentionally abstracted in the public report to avoid disclosing actionable information.
Evidence & Coverage Index
Evidence & Coverage Index
5.4 Fairness Integrity Matrix
Nonce Integrity
Reuse same nonce for multiple bets
Nonce uniqueness
PASS
Nonce sequencing tests
Skip nonce forward
Nonce progression integrity
PASS
Nonce sequencing tests
Send invalid nonce values (negative, zero, overflow)
Invalid nonce rejection
PASS
Nonce boundary tests
Nonce continuity after reconnect
Nonce persistence
PASS
Session continuity tests
Seed Commitment Integrity
Send empty, null, or omitted client seed
Deterministic seed handling
PASS
Seed validation tests
Change seed after bet is placed
Seed lock at bet acceptance
PASS
Seed lifecycle tests
Check for server seed reuse across rounds
Server seed uniqueness
PASS
Entropy analysis
Check for server seed reuse across users
Per-user seed uniqueness
PASS
Entropy analysis
Correlate seeds with timestamps or IDs
Seed unpredictability
PASS
Entropy analysis
Outcome Determinism
Replay known input tuple
Deterministic reproducibility
PASS
Parity verification
Replay settle/cashout request
Outcome finality
PASS
Replay tests
Round & Player Isolation
Analyse cross-round outcome patterns
Stateless RNG
PASS
Statistical analysis
Compare distributions across concurrent users
Session isolation
PASS
Isolation tests
Payout Integrity
Tamper request parameters beyond UI limits
Server-side enforcement
PASS
Parameter boundary tests
Inject multiplier or payout fields
Server-side computation
PASS
Field injection tests
5.5 Illustrative Test (Redacted)
Example: Nonce Replay Attempt
Goal: Reproduce a favorable outcome by reusing a previously observed (serverSeed, clientSeed, nonce) tuple.
Observed Behavior:
Nonce increments strictly per bet
No reuse detected within any seed session
Identical inputs only reproduce historical outcomes — no profit opportunity
Result: Fairness guarantee holds. This behavior is consistent across all observed seed sessions.
5.6 Verified Fairness Invariants
The following invariants were tested and verified:
Invariant
Result
Outcomes cannot be predicted before betting
✅ PASS
Outcomes cannot be altered after betting
✅ PASS
No replay of favorable outcomes
✅ PASS
No cross-round influence on results
✅ PASS
No cross-user influence on results
✅ PASS
No client-side leverage over server entropy
✅ PASS
Game parameters enforced server-side
✅ PASS
5.7 Scope & Limitations
This section verifies the integrity of the provably fair implementation under adversarial conditions. It confirms that the cryptographic guarantees — outcome determinism, seed commitment, nonce uniqueness, entropy isolation, and payout integrity — hold as designed.
This certification does not constitute a comprehensive security audit of the operator's platform, infrastructure, wallet systems, or application logic beyond the provably fair implementation. Implementation-level observations identified during verification, if any, are reported to the operator privately and are not part of this published certification.
Detailed test procedures, payloads, and reproduction steps are retained internally by ProvablyFair.org and may be disclosed to the operator under NDA if required.
6. Player Verification Guide
How Any Player Can Independently Verify a Game Result
Every Dice outcome can be independently reproduced using publicly disclosed inputs.
No hidden variables. No private backend data.
If your calculated result matches the displayed result, the game was provably fair.
Most players can verify directly through the Duel UI.
For advanced users, the full verification logic and reproducible test artifacts are provided below.

Summary Table (Under Flow)
What You Need
Where It Appears
Purpose
Server Seed
Verify tab
Casino entropy source
Client Seed
Verify tab
Player entropy input
Nonce
Verify tab
Ensures uniqueness
Result
Results tab
Must match recomputed output
Overall Verdict:
🟢 Any player can reproduce Dice results
🟢 Only disclosed inputs are used
🟢 Identical inputs always produce identical output
Visual Walkthrough (Instruction Layer)
Visual Walkthrough (Instruction Layer)
1. How to Verify Your Bet
Step 1: Open Bet Details
After any bet, click on the bet result to open the details modal
You'll see the bet ID, result, multiplier, and target


Step 2: Click "Verify" Tab
In the bet details modal, switch from "Results" to "Verify" tab
This opens the verification interface that is internally linked to Provably Fair verification model

Step 3: Review Your Seeds
Client Seed: Your player-controlled seed (e.g.,
G3blCQBWQdVfM8sx)Server Seed: The revealed server seed (64 hex characters)
Server Seed Hash: The pre-committed hash shown before the bet
Nonce: The bet number in sequence (starts at 0)
Once you click on Rotate Seed, a new popup opens with verification results and sample code to verify the bet.
Step 4: Verify the Result
The verifier shows the calculated result based on your seeds
Compare this to your actual game result — they must match exactly
Use "Copy code" to get the JavaScript verification script as shown in the screenshots


Manual Verification (Advanced)
Manual Verification (Advanced)
1. Manual Verification (Advanced)
While Duel's built-in verifier is convenient, true provably fair verification means you don't trust any casino-provided tool. Manual verification allows you to:
Run calculations on your own machine with your own code
Eliminate any possibility of a tampered verifier
Understand exactly how your results are generated
Verify using multiple programming languages for cross-confirmation


2. Verify Server Seed Hash
The commit-reveal protocol ensures the casino cannot change the server seed after seeing your bet. Before betting, you see only the SHA-256 hash of the server seed. After the bet, the actual seed is revealed. This function verifies the revealed seed hashes to the same value, proving no manipulation occurred. Before betting, verify the hash matches after reveal:

7. Reproducibility & Artifacts
GitHub Repository
Repository Structure update
Commands to Reproduce
Prerequisites
Node.js 16+
npm 8+
Git
Step 1: Clone Repository
Step 2: Install Dependencies
Step 3: Run Tests
Run all tests:
Run Dice-specific tests only.
Step 4: Generate Audit Report
Audit Reproducibility Pinning
Git Commit:
fa913ab94883d06950d3c63bbb7007f927648131Dataset Hash (SHA-256):
ba3ae70517c7f77e07eaced46900a5f94ebc02bf11c41502fac894f142efb799npm Version: 11.3.0 (minimum: 8.x)
Node Version: v22.11.0 (minimum: v16.x)
Audit conducted by ProvablyFair.org Last updated: 31/01/2026
Last updated