INSPECT EVERY ROUND

Provably fair.

← Gaming dashboard

A commitment before your wager

  1. The server generates a random 32-byte seed and publishes its SHA-256 hash before your bet. The active seed stays private.
  2. Choose your client seed. After reading the commitment, your browser generates another fresh 16 random bytes for this bet. The receipt records both inputs, the game, settings, wager, season and sequential bet number.
  3. HMAC-SHA-256 generates the outcome from those inputs. Balance, wager, result and receipt save in one transaction.
  4. The one-time server seed is revealed when the round ends. Blackjack keeps it and the dealer hole card private until the hand is complete. Hold’em keeps its seed, opponent cards and unrevealed community cards private until the hand ends. Your browser checks its earlier commitment and independently reproduces the result and payout before showing “Verified.” A fresh committed seed is used for the next bet.

Keep the commitment you saw before playing. A receipt alone proves its calculation is consistent; it does not independently prove when its commitment was first published. This is an inspectable algorithm, not third-party certification, identity verification, a payout guarantee, or a connection to real-money Shuffle games.

Verify a saved receipt

Runs entirely in your browser. Paste one downloaded receipt, or an array of receipts. Nothing in this form is sent to the server.

The published rules

Dice: An unbiased integer from 0 to 9,999 is displayed as 0.00–99.99. For a win chance of C percent, Under wins below C × 100; Over wins at or above 10,000 − C × 100. A winning bet returns floor(wager × 99 ÷ C) points, including the wager.

Keno: Select 1–10 numbers from 1–40. Ten different numbers are drawn using a partial Fisher–Yates shuffle. Your match count selects the published multiplier. The table updates before betting whenever picks or risk change.

Plinko: Each of 8, 12 or 16 steps is an unbiased left/right decision. The sum of right steps selects the slot. The animation only illustrates those committed decisions; physics does not decide the result.

Blackjack: A fresh six-deck shoe is sampled without replacement each hand. Cards are dealt player, dealer, player, dealer. Aces count as 1 or 11; face cards count as 10. The dealer checks for a natural before player decisions and stands on all 17s. Hit, Stand, and Double on the first two cards are supported. Double adds the original wager and allows one final card. No splitting, insurance, or surrender. A natural pays 3:2 profit; other wins pay 1:1; ties return the stake. Whole-point returns round down. An opening pair of naturals is a push. An active hand reserves its wager and survives reloads. At the weekly cutoff it automatically stands, is settled under the old week, then the new weekly balance is granted.

Limbo: Choose a target from 1.01× to 1,000,000× in 0.01 steps. Let N = 2³² and r be the next unbiased integer from 0 through N−1. The result in hundredths is max(100, floor(99 × N ÷ (N−r))). Reach your target or higher to win. A win returns floor(wager × target-hundredths ÷ 100), regardless of how much higher the result goes. For target T in hundredths, the exact win probability is floor(99 × N ÷ T) ÷ N. Expected return is at most 99% before whole-point rounding.

Coinflip: Choose Heads or Tails. An unbiased bit maps 0 to Heads and 1 to Tails. Each side has a 50% chance. A win returns floor(wager × 198 ÷ 100), including the stake. A loss returns zero. Expected return is 99% before whole-point rounding.

Texas Hold’em: Two private cards, five community cards, real betting rounds and pot-based returns against the published RedBot computer opponent. Rules, accounting and verifier specification below.

Legacy Video Poker · v3/v4 rules

Video Poker: Single-player five-card draw Video Poker, using a 52-card deck and a 9/6 Jacks or Better paytable. Deal five cards, hold any subset, then draw once from the remaining deck. Discards never return; held cards stay in their original positions. Total returns are: royal flush 800×, straight flush 50×, four of a kind 25×, full house 9×, flush 6×, straight 4×, three of a kind 3×, two pair 2×, and a pair of jacks, queens, kings or aces 1×. All other hands return zero. The 800× royal applies to every valid wager. Aces may be high or low in a straight. Strategy affects returns, so no fixed player RTP is claimed. The original five cards and your selected holds are included in the final verifiable receipt. At the weekly cutoff, an unfinished hand keeps all five initial cards and settles under the old week before the new balance begins.

Baccarat: Eight decks, freshly sampled each round. Bet on Player, Banker or Tie. Ace=1; 2–9 keep their value; 10/J/Q/K=0. Totals use the last digit. Deal Player, Banker, Player, Banker. An initial 8 or 9 in either hand stops all draws. Otherwise Player draws on 0–5. If Player stands, Banker draws on 0–5. If Player draws, Banker draws on 0–2; on 3 except against an 8; on 4 against 2–7; on 5 against 4–7; on 6 against 6–7; never on 7. Higher final total wins. Player returns 2×, Banker 1.95× after 5% commission, Tie 9×. Player/Banker wagers push on a tie. Returns include the stake and round down to whole points. No side bets, burn cards or carried-over shoes.

Returns: Keno uses probability-weighted tables targeting 99% expected return before rounding. Plinko uses fixed, symmetric tables: 16-row High has a maximum of 1000×, 12-row High 170×, and 8-row High 29×. Its exact expected return depends on the board and risk. All payouts round down to whole points; small wagers can have lower effective returns. Open Payouts before betting for exact multipliers and returns. Outcome probabilities are also available on table entries.

RedPoints are play-only. There are no purchases, cash-outs or Botrix transfers. Your balance is shared across the eight games and resets to 100,000 at Tuesday 6 PM America/New_York, including daylight saving changes. Each signed player has a separate wallet; people sharing an IP can all play. Browser refreshes restore that player’s available balance to 100,000; server restarts restore every saved wallet to 100,000. Game winnings and unfinished hands are kept until the normal weekly rollover. A recovery code restores your own player in another browser; an IP or display name cannot access someone else’s wallet. There is no daily or weekly play-count limit. Duplicate requests cannot settle the same bet twice.

Payout tables and earlier receipts

Let p = 2 for Low, 4 for Medium, or 7 for High. For Keno with k selected numbers and h matches, use probability P(h) = choose(k,h) × choose(40−k,10−h) ÷ choose(40,10), and weight w(h) = hp.

For Plinko with n rows and landing slot s, the probability is P(s) = choose(n,s) ÷ 2n. redpoints-v2, redpoints-v3, redpoints-v4 and redpoints-v5 use the fixed integer tables published in PLINKO_TABLES in both verifier implementations. The exact expected return is Σ P(s) × multiplier(s). Earlier redpoints-v1 receipts instead use weight w(s) = ½ + |2s−n|p and the weighted formula below. Earlier receipts keep their original outcomes and payouts.

For Keno and legacy v1 Plinko, calculate the probability-weighted mean M = Σ P(i)w(i). Each multiplier in integer units is floor((99 ÷ 100) × w(i) ÷ M × 10,000). Divide units by 10,000 to display the multiplier. For these table games the return is floor(wager × units ÷ 10,000). Blackjack and Poker have no fixed RTP claim: their expectation depends on the chosen rules and player decisions. The admin panel reports actual settled totals, not an estimated house return. The server uses exact fractions and the independent browser verifier uses integer ratios.

Whole-point rounding can make small wagers return materially less than the listed expectation; the payout table shows the exact returned points before each wager.

Exact versioned byte format

Decode the 64-character server-seed hex string into 32 bytes. SHA-256 of those bytes is the commitment. For HMAC, use those bytes as the key. The ASCII message is compact JSON of:

[rules_version, season, game, client_seed, client_salt,
 nonce, wager, options, block_number]

Use the receipt’s rules_version: redpoints-v5 for new bets. Earlier v1–v4 receipts remain verifiable. Saved Blackjack and Video Poker hands finish under their original rules; the next bet uses v5. Object keys are sorted, with no spaces around separators. Block numbers start at zero. Read the HMAC digest in four-byte big-endian integers. To choose from N outcomes, reject values at or above 2³² − (2³² mod N), then use value mod N. Consume the next four bytes for the next draw; generate the next HMAC block when necessary.

Blackjack uses options {"decks":6}. Start with card IDs 0–311, where an ID equals deck × 52 + suit × 13 + rank − 1. Suits are spades, hearts, clubs, diamonds; ranks are A=1 through K=13. For each draw at index i, draw j uniformly from i through 311, swap those shoe positions, and consume the card at i. Replay the saved actions in order against this sequence. Actions are not added to the HMAC context, so changing a decision cannot reshuffle the shoe. The completed receipt includes the decisions and total stake (including Double); net winnings equal payout minus that total stake. The browser verifies the full replay after seed reveal.

Legacy Video Poker uses options {"variant":"jacks_or_better"} and card IDs 0–51 with the same suit/rank encoding. Partially shuffle and consume five cards first. At Draw, iterate positions 0 through 4; retain held positions and replace each other position with the next card sampled from the remaining deck. The sorted holds array contains positions 0–4. Holds are not part of the HMAC context, so choosing cards never reseeds or reshuffles the committed sequence.

Baccarat uses {"decks":8,"side":"banker"}, where the side is player, banker or tie. Use card IDs 0–415 with the same encoding; partially shuffle by sampling j from i through 415, swap, then consume i. Deal opening cards alternately and any Player third card before Banker's. The receipt includes all cards, totals and the exact payout. Its independent verifier replays the full draw tableau.

Coinflip uses options {"side":"heads"} or {"side":"tails"}. Limbo uses {"target":200} for a 2.00× target; its result multiplier also uses hundredths. Legacy Video Poker result multipliers use whole units; Hold’em uses pot awards and has no paytable. Keno, Plinko and Coinflip multipliers use 1/10,000 units. Receipts are versioned so each verifier uses the correct scale.

The configured package includes fairness.py, the independent browser implementation static/fairness.js, and the optional offline verifier tools/verify_redpoints.py. These games have their own published rules; they do not claim compatibility with another operator's receipts or payout tables.

Texas Hold’em · redpoints-v5

Poker now means heads-up no-limit Texas Hold’em against RedBot, with two equal table stacks and no rake. Archived Jacks or Better hands and receipts above continue to use their original v3/v4 rules. They never become Hold’em results.

The chosen stack is reserved from the wallet. At settlement, the entire remaining table stack returns. Net is final table stack minus starting stack. Admin wagers count only matched committed chips; returned means pot awards. Uncalled chips are refunded. Equal best five-card hands split the pot; suits never break ties. The best five can use zero, one or two hole cards.

Options are {"button":"player","variant":"texas_holdem"} or button computer. The button alternates with settled Hold’em hands in this week, beginning with the player. Big blind is floor(stack/50), minimum 2; small blind is floor(big blind/2), minimum 1. Minimum buy-in is 20. Both seats start each hand with the same stack, limiting loss to that stack. No daily or weekly hand limit.

Use the existing HMAC stream with version redpoints-v5. Full Fisher–Yates shuffle of IDs 0–51: for i=0 through 50, sample j=i+below(52−i), then swap. Deal alternately, big blind first: deck positions 0–3 are hole cards. Burn position 4; flop is 5–7. Burn 8; turn is 9. Burn 10; river is 11. The deck never changes after betting choices. Hole cards remain hidden until showdown; the seed reveals the full deal after any completed hand, including a fold.

The button is small blind and acts first preflop; big blind acts first after the flop. There is a big-blind option after a preflop call. Opening bet minimum is the big blind; a full raise increases the highest street contribution by at least the last full raise. Smaller increases are allowed only all-in. An all-in opponent cannot face another bet. Unmatched chips return before a showdown or fold is settled.

Player decisions are recorded as action plus amount. Amount is a total street contribution for bet or raise, zero for check/call/fold/all_in. They are excluded from the shuffle context. The independent verifier reconstructs every legal action, RedBot response, revealed street, pot and final five-card evaluation. At the weekly boundary an unfinished hand folds without spending more points, recorded as weekly_reset.

Published opponent: redbot-v1

RedBot receives only its two cards, visible community cards, current pot, legal bet sizes, blind size, street and its own raise count. It does not receive your cards, the seed or the remaining deck. Its exact deterministic decision function is published in holdem.py and independently in static/holdem-fairness.js. It uses made-hand strength, price thresholds and an occasional deterministic bluff. Strength scores are heuristics, not claimed win probabilities. It raises at most once per street; a player can still raise legally in response.

Receipts prove that the committed deck, published opponent policy, recorded choices and accounting agree. They do not prove optimal opponent play or stop a server from refusing a request. Retain your pre-hand commitment and receipt when auditing. Texas Hold’em rules reference ↗