Every result is fixed before it happens, by two things neither you nor we can change afterwards.
We draw a random server seed and show its SHA-256 hash before you bet. The hash pins the seed down: we can't swap it afterwards, and nobody can work the seed out from the hash.
The seed is also committed to a block of the public EOS (Vaulta) blockchain that does not exist yet. A new block comes every 0.5s and is final about 1s later; its id can't be predicted by anyone, CSDEGEN included.
The result is an HMAC-SHA256 of the seed, the block's id and the nonce. Once the seed is revealed, recompute any bet, round or battle below, in your own browser.
| Game | When its EOS block is committed |
|---|---|
| Roll, Mines, Keno, Upgrader, 21, cases and reward cases | When your seed pair is created or rotated: the first block about 1s later. Every bet of the pair mixes in that block's id, so only a bet in the first seconds after a rotation waits for it. |
| Spin | When the round opens: the first block made after betting closes, so nobody can know the roll while bets are open. |
| Battles | When the last seat fills: the first block about 1s later. The room shows "Waiting for EOS block #N" until it is final, then the rounds start. |
Check a block yourself. Every FAIRNESS button shows its EOS block number (a link to a public explorer, for example #451316667) and its id. A block id's first 8 hex characters are its block number. In the verifier, Fetch from EOS asks two public EOS nodes for the id straight from your browser, and checks the block's own time against when it was committed (a seed pair's creation, a Spin round's betting close): it must come after. We only roll from final blocks: a final block can never be replaced.
No result yet
Every game's house edge, from the same numbers the game settles your bets with.
| Game | House edge |
|---|---|
| CasesEach case costs its expected value ÷ 93.5%, rounded up | 6.5%RTP 93.5% |
| BattlesA seat costs the sum of its cases' prices | 6.5%RTP 93.5% |
| RollEvery target, win chance 1% to 95% | 3.5%RTP 96.5% |
| MinesEvery cash-out, with any number of mines | 5.5%RTP 94.5% |
u32(hmac) = the first 8 hex characters, as a number (0 to 4,294,967,295)
float = u32 / 2^32 at least 0, below 1
ticket = u32 mod 10000 0 to 9999
Your seed pair: Roll, Mines, Keno, Upgrader, 21, cases, reward cases
f_i = u32(HMAC_SHA256(key = serverSeed, msg = clientSeed:eosBlockId:nonce:i)) / 2^32
Battles (combined seed as the key, empty message)
pull = u32(HMAC_SHA256(key = serverSeed-eosBlockId-slot-round, "")) mod 10000
jackpot = u32(HMAC_SHA256(key = serverSeed-eosBlockId-jackpot, "")) mod totalTickets
Spin (one seed and one block per round)
f0 = u32(HMAC_SHA256(key = roundSeed-eosBlockId-round, "")) / 2^32HMAC-SHA256 with UTF-8 strings. The first 4 bytes of the digest (8 hex characters), read big-endian, are the u32. A float is always at least 0 and below 1; a ticket is 0 to 9999. Slot and round count from 1 (key …-1-1 is slot 1, round 1).
The verifier runs the exact module the server runs.
| Game | Floats | Rule |
|---|---|---|
| Roll | 1 | roll = floor(f0 × 10000), shown as roll / 100 |
| Spin | 1 | slot = floor(f0 × 15): 0 green, 1-7 blue, 8-14 black; bait = 4 and 11; one seed and one EOS block per round, key roundSeed-eosBlockId-round, empty message |
| Mines | 24 |
A new round seed is drawn and its SHA-256 shown before anyone bets, with the EOS block the round will roll from: the first block made after betting closes, so nobody can know it while bets are open.
Bets are open until the timer runs out. After two greens in a row: 45s.
The strip waits on green while the round's EOS block becomes final (usually 2 to 4s), then rolls from green and lands on the result over 7s. A late block only makes the wait longer.
The result shows for 2s, then the strip rolls back to green (1.5s) and the next round opens.
| 4.5%RTP 95.5% |
| UpgraderWin chance = value ratio × 95%, at most 75% | 5%RTP 95% |
| Spin· Blue / Black7 of 15 slots, pays 2.1x | 2%RTP 98% |
| Spin· Green1 of 15 slots, pays 14.7x | 2%RTP 98% |
| Spin· Bait2 of 15 slots, pays 7.4x | 1.33%RTP 98.67% |
| 21Main bet with best play. Side bets: Perfect Pairs 3.85%, 21+3 3.78%. Max win 30,000 coins a round: no bet reaches it alone, but bets that together could are capped, so at the table maximums (2,500 + 500 + 500 coins) a round's edge is 1.78% of the bets, not 1.5% | 0.57%RTP 99.43% |
| Fisher-Yates over tiles 0-24: step i swaps i with i + floor(fi × (25 − i)); the first N are mines |
| Keno | 10 | Same shuffle over tiles 0-39; the first 10 are drawn; pays min(stake × multiplier, 20,000 coins) |
| 21 | 52 | card k = floor(fk × 52): rank = card / 4 (2-10, J, Q, K, A), suit = card mod 4 (diamonds, hearts, spades, clubs); f0 player, f1 dealer up, f2 player, f3 hole, then each card in the order the moves draw it, the dealer's last; pays min(total due, 30,000 coins) a round |
| Upgrader | 1 | the win zone starts at z / 10000, z the zone start you placed (0 to 9999), and wraps round the dial: wins if (f0 − start) mod 1 < chance. Advanced (k = 2 or 3 zones): T = chance × 10000 split into k arcs, base = floor(floor(T) / k), r = T − k × base, arc i is base + min(1, max(0, r − i)) long and starts at (z + round(i × 10000 / k)) mod 10000; wins if f0 × 10000 lies in any arc (wrapping past 9999). The total chance and the payout are the same for 1, 2 or 3 zones |
| Case open | 1 ticket | ticket = u32 of the i = 0 HMAC mod 10000; the item whose ticket range holds it (every case covers 0 - 9999, best tier first); pays that item's price. n cases at once use n nonces in a row |
| Reward case | 2 | daily and Star Shop cases: f0 picks the tier, t = floor(f0 × the case's total odds), walking grey, blue, red, gold until the running odds pass t; f1 the item, floor(f1 × items in that tier) |
| Battle pull | 1 ticket | ticket = pull mod 10000, slot and round counted from 1 (Slot 1, Round 1 = key …-1-1); the item of that round's case whose ticket range holds it |
| Jackpot | 1 draw | one range per team, in team order, back to back from 0: Jackpot, tickets = the team's total in coins × 100; Crazy Jackpot, tickets = 10,000 ÷ the team's total in coins (a total of 0 counts as 0.01), rounded to 4 decimals, then cut to 2, × 100 (6.43 coins → 1,555.21 → 155,521); winner = jackpot u32 mod the total |
A sample server seed with real EOS block #451316667. Every value is computed by the code that rolls your bets; put the same inputs in the verifier above and you get the same numbers.
serverSeed b5b1ff1762f1c2065224d506236c6ea1
EOS block #451316667, id 1ae68bbbd10c338dd81f7c33a9f8ff86b1e9ca84a9fa0b34ec3b33a7de6567ee
Seed pair: client seed csdegen, nonce 0, i = 0
msg csdegen:1ae68bbb…6567ee:0:0
HMAC 78372f0b… u32 2,016,882,443 float 0.4695920374 ticket 2443
Battle pull: slot 1, round 1
key b5b1ff17…6c6ea1-1ae68bbb…6567ee-1-1
HMAC e384da42… u32 3,817,134,658 ticket 4658
Spin round 123456
key b5b1ff17…6c6ea1-1ae68bbb…6567ee-123456
HMAC 89a62c1a… f0 0.5376918376 slot 8
Crazy Jackpot: four players at 9651.68, 8289.16, 9520.94, 8509.08 coins
key b5b1ff17…6c6ea1-1ae68bbb…6567ee-jackpot u32 233,524,876
Slot 1 Tickets: 0 - 102
Slot 2 Tickets: 103 - 222
Slot 3 Tickets: 223 - 327
Slot 4 Tickets: 328 - 444
Winner Ticket: 1The seed and the block id are published in the round history.
f0 = u32(HMAC_SHA256(key = roundSeed-eosBlockId-<round>, "")) / 2^32
slot = floor(f0 × 15)The strip in order, each slot's number under its coin. The stop inside the coin comes from the same float. The two coins either side of the green, wearing the hook, are Bait: slots 4 and 11, either side of the green. A bait bet wins on either; the slot's colour still pays its own bets.
| Bet | Slots | Pays | RTP |
|---|---|---|---|
| Blue | 7 of 15 | 2.1x | 98% |
| Green | 1 of 15 | 14.7x | 98% |
| Black | 7 of 15 | 2.1x | 98% |
| Bait | 2 of 15 | 7.4x | 98.67% |
Three greens in a row means three consecutive round numbers that all land on green; a missing round breaks the run, and each green counts toward one payout only. The round after two greens in a row gives 45s to bet instead of 14s: that changes only when it rolls, never what it rolls, which still comes from its own seed, EOS block and round number alone. The pot a payout splits is 0.75% of every stake on the rounds up to its third green, counted in round order, less the earlier payouts. Shares are rounded down to the cent and whatever is left stays in the pot. The pot is paid by the house on top of every bet, so the payouts in the table above do not change, and every payout follows from the public rolls and the stakes.