Provably Fair
Every result is determined by publicly verifiable data — no server randomness, nothing we control.
Results computed inside an immutable Tezos smart contract from block data. No off-chain RNG.
↓ Details below
Crash points derive from a pre-committed SHA-256 hash chain seeded by an unpredictable Tezos block hash.
View Crash fairness →
Dice — how it works
No off-chain randomness
Results are computed inside the smart contract from block data sealed by the Tezos network. No server, no RNG, nothing we control.
Every input is public
Block number, timestamp, and game counter are all visible on TzKT.io. Anyone can reconstruct the exact result of any bet.
Immutable formula
The smart contract is deployed and locked on-chain. The math cannot be changed after the fact — not by us, not by anyone.
How each roll is decided
Why on-chain randomness is hard
A blockchain is a network of thousands of computers that must all agree on the exact same result for every transaction. True randomness is impossible — if each node invented a different number, the chain would fork. Every smart contract calculation must be completely deterministic: same inputs, same output, every time, forever.
Instead, the contract uses pseudo-randomness: a formula that can generate excellent randomness. Feed in the same inputs and you always get the same result — that's what makes it verifiable. The formula uses large prime multipliers so that any tiny change in the inputs produces a completely different output. The unpredictability doesn't come from the formula itself; it comes from using an input that neither party knows in advance.
That input is the block timestamp, set by the baker when they seal the block your transaction lands in — after your bet is already committed.
Block level and game counter are sequential — they can be estimated. The ingredient neither party controls is the exact timestamp: the baker (block producer) assigns it when they seal the block your transaction lands in. You don't know which baker that will be, or what second they'll choose. The formula mixes all three values through large prime constants so that a single second's difference in timestamp produces an entirely different roll.
Block number
sealed by the network
Block time
seconds since Jan 1 2020
Game counter
increments each bet
mix & mod 6
on-chain formula
Face 1 – 6
Example roll, step by step
Scroll through to see how a single bet is settled on-chain
Your bet
← face → bit
Block sealed by Tezos network
Block number
8,542,103
Timestamp
2025-05-29 · 14:32:10 UTC
Game counter
#42
Block level and game counter are sequential — you can estimate them. What you can't control is which block your transaction lands in: that's the baker's call. The exact timestamp is set by the baker at sealing — and even a 1-second difference produces a completely different result due to the large multiplier in the formula.
Mixing the inputs (XOR)
A = block level × K₁ + time × K₂
B = game count × K₃ + bitmask × K₄
XOR compares A and B bit-by-bit. A bit becomes 1 (green) wherever A and B differ:
(showing last 8 bits — same XOR logic applies across all 64 bits)
A ⊕ B (full 64-bit result)
Why mod 6 + 1?
The XOR result is a huge 64-bit number. mod 6 keeps only the remainder after dividing by 6 — the remainder is always exactly 0, 1, 2, 3, 4, or 5, giving six equally-likely outcomes. We add 1 because die faces are numbered 1–6, not 0–5.
remainder → die face
Remainder 5 + 1 = face 6
Result