Blackjack — Rules, Payouts and Provable Fairness

Blackjack is a card game where you try to finish with a hand total closer to 21 than the dealer's, without going over. You are dealt two cards face up; the dealer takes one face up and one face down. You then choose how to play the hand — draw more cards, stand, double, split a pair, or surrender. Go over 21 and you lose immediately. Stop at 21 or under and the dealer plays out their hand by a fixed rule — no judgement, no discretion — and the higher total wins. Ganbate deals from a six-deck shoe that is shuffled from a provably-fair byte stream you can recompute yourself, card for card.

Ganbate is a free-to-play social casino. Coins are play money. They have no cash value and can never be withdrawn, cashed out, redeemed, transferred, or traded.


How to play

Blackjack lives at /blackjack. Betting happens on the table itself, in the strip along the bottom of the felt.

Before the deal:

ControlWhat it does
Bet amountHow many Coins you stake on the hand.
Perfect PairsOptional side bet, its own stake. Leave it blank to skip it.
21+3Optional side bet, its own stake. Leave it blank to skip it.
BetDeals the hand.

You can only deal if your balance covers the main stake plus both side bets. A blank or unparseable side-bet field simply means "not placed" — it is never an error.

While the hand is live, the bet form is replaced by the actions that are legal on the hand in front of you:

ActionWhat it does
HitTakes the next card from the shoe. Over 21 and you bust — that hand settles at once. Exactly 21 and it stands automatically.
StandEnds your turn on this hand. Once no hand is left to play, the dealer flips the hole card and plays out against all of them.
DoubleDoubles that hand's stake, deals exactly one card, then stands it. Offered on any two-card hand, split hands included; a busted doubled stake is still lost in full.
SplitOffered when your two cards share a rank. Makes two hands, each drawing a second card and matching your original stake. You may split again up to three hands in all. Split aces get one card each and cannot be resplit.
SurrenderOffered on a fresh two-card hand you have not drawn to: give it up and take half the stake back.
Insurance / Even moneyOffered when the dealer shows an ace — a separate 2:1 bet, costing half your main stake, that the dealer has a natural. Decline it: it is the worst bet at the table (see below). "Even money" is the same offer when you already hold a natural.

The full action set in the code is BLACKJACK_ACTIONS = ['hit', 'stand', 'double', 'split', 'surrender', 'insurance_accept', 'insurance_decline'], and each is offered only when it is actually legal on the hand you are looking at — the buttons you see are the moves you can make.

While a hand is open, only the dealer's up-card is sent to your browser; the hole card stays on the server until the round settles. Reload mid-hand and the open round — every split hand, whose turn it is, and any pending insurance decision — is restored exactly where you left it.

Limits, from the code: the main stake is validated to 0 – 100,000.00 Coins and each side bet to 0 – 100,000.00 Coins (MIN_BET_CENTS = 0, MAX_BET_CENTS). A stake of zero is allowed on purpose: the whole game, provably fair, with nothing staked.


The rules

The shoe. Six decks — 312 cards (BLACKJACK_DECKS = 6). The shoe is shuffled fresh at the start of every hand, so cards are never carried between hands and counting has nothing to count.

Card values. 2–10 are face value; J, Q, K are 10; an ace is 11, reduced to 1 as many times as needed to keep you at 21 or under.

The deal. Four cards come off the shoe: cards 1 and 3 to you, cards 2 and 4 to the dealer. Card 2 is the dealer's up-card; card 4 is the hole card. Hits, split cards and dealer draws all continue from card 5 onwards, in shoe order — nothing is shuffled in mid-round.

The dealer's peek, and insurance. The dealer checks the hole card for a natural before you act, so you never double or split into a dealer blackjack:

  • Ten up: the check is silent and immediate. A natural settles the round at once; otherwise play begins.
  • Ace up: the round pauses and offers insurance first — a 2:1 side bet, for half your main stake, that the hole card completes a natural. Only after you accept or decline does the dealer peek. If you already hold a natural, the same offer appears as even money. Insurance is a losing bet (odds in the house-edge section below); correct play always declines.

Splitting. Two cards of the same rank can be split into two hands, each taking a fresh card and its own stake equal to your first. You may split again up to three hands in total (BLACKJACK_MAX_HANDS = 3). Split aces are special: each takes exactly one card and then stands, and split aces cannot be resplit. A two-card 21 made on a split hand is a plain 21 — it pays even money and only pushes a dealer 21; it is not a 3:2 blackjack (blackjackSplitHandResult).

Doubling and surrender. Double any two-card hand — split hands included — to add a stake equal to that hand's stake, draw exactly one card, and stand. Or surrender a fresh two-card hand you have not yet drawn to, and take half the stake back.

Naturals. A two-card 21 dealt to your opening hand is a blackjack:

  • You have blackjack, the dealer does not → blackjack, 3:2.
  • Both have blackjack → push.
  • The dealer has blackjack, you do not → loss — the case where insurance, had you taken it, would pay 2:1.

The dealer's rule. The dealer draws while their total is under 17 and stands on all 17s, including a soft 17 (dealerShouldDraw: draw while total < 17). The dealer plays once, after every hand of yours is done, and only if at least one of them finished at 21 or under.

Settlement. Each hand you played settles on its own against that single dealer hand, in the order the code checks it:

  1. The hand is over 21 → loss (even if the dealer also busts).
  2. On the opening hand only: both naturals → push; your natural only → blackjack; dealer's natural only → loss. A 21 made on a split hand is settled as an ordinary total, below.
  3. The dealer busts → win.
  4. Higher total wins. Equal totals → push.

Insurance and each side bet settle separately from the hands, on their own terms.

Payouts

Multipliers are of each hand's total stake — so after a double, of the doubled stake (BLACKJACK_PAYOUT_X100):

ResultReturned
Blackjack (opening two-card 21)2.50× the stake — 3:2, plus your stake back
Win (includes a 21 made after a split)2.00× — 1:1, plus your stake back
Push1.00× — stake returned
Surrender0.50× — half the stake back, the hand ends
Loss0
payout_cents = floor(hand_total_stake_cents × multiplier_x100 ÷ 100)

A two-card 21 is a blackjack (2.50×) only on your opening hand. The same 21 made on a hand you split into pays as an ordinary win (2.00×): it beats a dealer 20 and only pushes a dealer 21 (blackjackSplitHandResult). Insurance settles apart from the hands, returning 3.00× its own stake (2:1) when the dealer turns a natural and nothing otherwise (BLACKJACK_INSURANCE_PAYS_X100).

Side bets

Both side bets are placed with the main wager and settle at the deal, off your first two cards and the dealer's up-card. They are independent of how the hand plays out — you can win the side bet and lose the hand, or the reverse. Payouts below are the total returned per 1 Coin staked (stake included), which is how the code stores them; the "Advertised" column is the same tier written in the odds notation the felt uses — the Coins added on top of the returned stake.

Perfect Pairs — graded on your two cards (PERFECT_PAIRS_PAYOUT_X100):

TierMeaningReturnedAdvertised
PerfectSame rank, same suit (only reachable because the shoe has six decks)26.00×25:1
ColoredSame rank, same color, different suit13.00×12:1
MixedSame rank, different color7.00×6:1
No pair0

21+3 — a three-card poker hand from your two cards plus the dealer's up-card (TWENTY_ONE_PLUS_THREE_PAYOUT_X100). Only the highest tier that applies is paid:

TierReturnedAdvertised
Suited trips101.00×100:1
Straight flush41.00×40:1
Three of a kind31.00×30:1
Straight (aces play high or low)11.00×10:1
Flush6.00×5:1
Nothing0

House edge and RTP

Blackjack is one of the two games on Ganbate whose edge is not set by a constant in the code — Video Poker is the other. Dice has a literal 9900 (PAYOUT_NUMERATOR_BP); Mines multiplies by 99; Blackjack has nothing of the sort. Its edge is the value of the whole game tree under optimal play, set by the rules above and by every hit, stand, split and surrender a round can take. (The computed answer is recorded in the code as BLACKJACK_DESIGNED_RTP = 0.996622424, so the payout monitors and the invariant tests can hold the game to it — but that constant documents the number; nothing reads it to price a hand.)

The rules, plainly: six decks, dealer stands on all 17s, blackjack pays 3:2 (2.50× returned), double on any two cards including after a split, split and resplit to three hands, late surrender, and insurance offered on a dealer ace.

So the edge had to be computed rather than read off. It is a 0.3378% house edge at optimal play — an RTP of 99.6622% — measured per Coin of your opening stake. Per Coin actually wagered — splitting and doubling put more money on the felt — it is 0.2986% (99.7014%); both sit comfortably under 1%. That is not a textbook figure lifted from a table with different rules, and it is not a simulation: it is an exact evaluation — dynamic programming with full card-removal effects — of the rules above, calling the real blackjackResult, the real dealer-drawing rule and the real payout constants (main/tools/scripts/analysis/rtp-blackjack-rules.ts, ruleset "B"). The split is the one part that is not closed form — sibling hands draw from a shoe they have already thinned — so the same script replays twenty million split rounds under the fully exact sequential game and measures the residual at +0.0007% ± 0.0024% of RTP. And it re-derives the old no-split game to exactly −0.009714136 — the number this page used to print — or it refuses to run, so the engine cannot drift without being caught.

Read it carefully, because it says less than it looks like. Optimal means optimal: it is the return of a player making the best available decision on every hand, and any deviation costs more, with nothing bounding how much.

This makes blackjack the cheapest bet on the entire site, by a wide margin — about a third of the flat ~1% edge every other game charges, and below even the 0.97% the old no-split game ran at. The reason is the whole design decision: the single option worth most to the player is the split, and it is worth more than every house-favourable trim combined. Adding split hands the player about 0.37% of RTP; hitting soft 17, more decks, banning double-after-split or resplit, dropping surrender — all of them together claw back less. Computed exactly from the rule matrix (rtp-blackjack-rules.ts), no 3:2 blackjack that still lets you double reaches even a 1% edge; the house-friendliest such game tops out at 0.92%. A split game clears 1% only if you gut it — dropping double-down entirely reaches ~2.1% but costs the player 1.4% of return, more than three times what cutting the natural to 7:5 (a 0.4% cost) would take. Every route to 1% is a worse deal than blackjack's own price. So blackjack keeps 3:2 and stays the most generous bet in the house, on purpose. Played perfectly, it is still a losing game.

One caveat on small, odd stakes. The payout is floored to whole cents, and 2.50× (a natural) and 0.50× (a surrender) are the multipliers that can land on a half-cent — so on an odd-cent stake they are paid down to the cent. Stakes in whole Coins (any multiple of 100 cents) are exact and unaffected. It is a rounding artefact, not a fee, and it bites in inverse proportion to the stake — largest on the smallest bets — so it is stated here because it is real.

Three things follow from the rules alone, with nothing to compute:

  • The edge is better than the same table with split and surrender taken away — the game this page in fact described until today. Handing a player more options can only raise their best possible return, and split is the richest of them.
  • 3:2 blackjack and stand-on-all-17s both cut in your favour, and both are better than what has become standard on modern casino floors.
  • Insurance is the one move to refuse. It is offered on a dealer ace and it is a straight losing bet — the worst at the table. Its odds are counted exactly in the next section.

The side bets, exactly counted

The side bets are a different matter. They settle at the deal and do not care how you play the hand, so every opening the shoe can produce can simply be counted. Grading the paytables above with the real code over every combination of your two cards and the dealer's up-card, with exact without-replacement weights off the 312-card shoe:

Side betHitsRTPHouse edge
Perfect Pairs7.40%93.8907%6.1093%
21+39.68%95.3790%4.6210%

Tier by tier: Perfect Pairs lands perfect 1.61% of the time, colored 1.93%, mixed 3.86%. For 21+3 it is suited trips 0.02%, straight flush 0.21%, three of a kind 0.50%, straight 3.10%, flush 5.84%.

Those are the standard six-deck tiers, and the standard six-deck tiers are expensive. Against the ~1% the rest of the site charges, Perfect Pairs costs about six times as much and 21+3 about four and a half. They have not been repriced the way the baccarat pairs were: they are correct for a six-deck shoe rather than wrong for it — but correct is not the same as cheap. Perfect Pairs takes 6.11% and 21+3 takes 4.62%, every single time you place them. They are printed here so that if you bet one, you bet it knowing. Full workings are on Odds & House Edge.

Insurance is the dearest bet blackjack offers — dearer than either side bet — though you only see it when the dealer shows an ace. It pays 2:1 that the hole card is worth ten; on a six-deck shoe, with the dealer's ace removed, that card is a ten 96/311 = 30.87% of the time, so it returns 3 × 96/311 = 288/311 = 92.6045%, a 7.3955% house edge. It never turns positive — the best a player can ever see, holding no ten in their own hand, is 31.07%, short of the 33.33% break-even — and because the shoe is reshuffled every round there is nothing to count that would find the spot. Correct play declines it every time, and even money (insurance offered against your own natural) is the identical bet. The felt offers it with no warning; the warning is here.

No strategy beats a negative-expectation game. There is no way to play, and no way to size your bets, that turns the game's expectation positive — the shoe is reshuffled every hand, so nothing carries over from the last one, and each hand is independent of every other. Anyone selling you a "system" is selling you arithmetic that does not work. Play Blackjack because the shoe is transparent and checkable, not to come out ahead.

Neither edge lever reaches blackjack, and that is deliberate. Edge Rebate — the daily 0%-edge allowance — covers instant, one-shot bets only, so a multi-step round like Blackjack is excluded, along with Crash and poker. And the casino's global edge control skips Blackjack too. That control rescales the other games' payouts toward an admin-set target, and its safety argument assumes a game designed at or below 99% RTP — scale such a game up to the control's 100% ceiling and it lands exactly at break-even, never past it. Blackjack is designed above that line: rescaled the same way it would return 100.71% per Coin wagered, a game the house pays you to play. So Blackjack is exempt (RESCALE_EXEMPT_GAMES): every round is quoted at the baseline rate and settles at its designed price, wherever the control is set, in either direction.


How the result is derived (provably fair)

Everything about the hand — the shoe, your two cards, the dealer's hole card, every hit, every double card, every card a split hand draws, every dealer draw — is fixed the moment the round starts. The server does not choose a card in response to your decisions; it just walks down a shoe that was already shuffled.

Step 1 — the byte stream. From your 32-byte server seed (committed to you in advance as a SHA-256 hash), your client seed, and the round's nonce:

bytes = HMAC_SHA256(key = serverSeed, message = "clientSeed:nonce:cursor")

Each HMAC block is 32 bytes = 8 floats. Blackjack shuffles a full 312-card shoe, so it needs 312 floats = 1,248 bytes = 39 blocks, with cursor running 0…38 and the blocks concatenated in order. It is by far the heaviest RNG consumer on the site.

Encoding detail for anyone writing their own verifier: the HMAC key is the 64-character hex string, UTF-8 encoded — not the 32 decoded bytes.

Step 2 — bytes to floats. Every 4 bytes become one uniform float in [0, 1):

float_i = b0/256 + b1/65536 + b2/16777216 + b3/4294967296

Step 3 — floats to a shoe. A partial Fisher–Yates over a pool of 312 cards (drawShoe). The pool starts as [0, 1, 2, …, 51, 0, 1, 2, …] — each of the 52 card indices six times. Then for i = 0 … 311:

index    = floor(float_i × (312 − i))
card_i   = pool[index]                 // the i-th card of the shoe
pool[index] = pool[311 − i]            // swap the tail card into the hole

A card index c decodes as rank = c mod 13 (0 = 2, … , 9 = J, 10 = Q, 11 = K, 12 = A) and suit = floor(c ÷ 13) (0 = ♠, 1 = ♥, 2 = ♦, 3 = ♣).

Step 4 — the deal. card_0 and card_2 are yours; card_1 is the dealer's up-card and card_3 the hole. Every later card comes off the shoe in order — card_4, card_5, … — whoever it goes to: your hits, a double's one card, the second card each split hand draws, and finally the dealer's draws, continuing from wherever play stopped. A split changes who holds the cards, never which cards come.

Your nonce starts at 0 on a fresh seed pair and advances by one per round, inside the same locked transaction that moves your balance — so round order and nonce order can never disagree. The round response carries the nonce that produced it.

Seeing your server seed: the raw seed is revealed only when you rotate your seed pair on /fairness. Rotation reveals the old seed (check it against the hash you were given), issues a fresh pair, and resets the nonce to 0. You can supply your own client seed (1–64 characters) at rotation time.

You do not have to write anything down. A finished Blackjack hand is listed on /bets like any other wager, carrying the client seed, the committed hash and the nonce it was dealt from — and the server seed itself once you have rotated that pair, which is everything /verify needs to replay the shoe. This used to be a real gap, and it is worth naming rather than quietly fixing. Multi-step rounds (Mines, Tower, Chicken, HiLo, Blackjack, Video Poker) are recorded on casino_game_rounds, while the history query read only casino_bets — so these hands were missing from your history entirely. A wager you cannot see is a wager you cannot verify. That is a hole in a provably-fair promise, not a missing convenience, and the history query now reads both tables. Hands still in progress are deliberately not listed: an open round's state holds the dealer's hole card and the rest of the shoe, and publishing it mid-hand would hand you the answer. The hand appears the moment it is settled. The server seed is still revealed only when you rotate the pair — that part has not changed, and cannot.

Checking a hand: paste the revealed server seed, the client seed and the nonce into the verifier at /verify and pick Blackjack. It rebuilds the shoe in your browser and prints your two cards, the dealer's two cards, and the full 312-card shoe order — so you can follow every hit, every split hand's draw, every double card and every dealer draw down the list. It also checks the committed hash against the revealed seed. Nothing is sent to the server; the maths runs client-side.


A worked example

Say your seed pair is:

  • Server seed: 3d1a9f7c0b5e42a8d6c39f10847be25c9a0f3d6b8e17c45291fa07db3c68e5f4
  • Committed hash (shown before you play): dea709568dbb87b2ea12bdebaeaff5d47a665888856701808bbf8d0e5b3bc437
  • Client seed: ganbate-demo
  • Nonce: 5

You stake 100.00 Coins, no side bets.

  1. HMAC_SHA256("3d1a…e5f4", "ganbate-demo:5:0") → the digest begins 5a 91 ce 0c | 7d 70 18 09 | 7e 28 4e a0 | 4c 61 ae 59 | 3e ac 8d a0. (Blocks for cursors 1…38 follow, giving the other 292 floats.)
  2. The first five floats are 0.35378730…, 0.48999166…, 0.49280253…, 0.29836549…, 0.24482045…
  3. Fisher–Yates picks pool indices floor(f₀ × 312) = 110, floor(f₁ × 311) = 152, floor(f₂ × 310) = 152, floor(f₃ × 309) = 92, floor(f₄ × 308) = 75 → card indices 6, 48, 50, 40, 238♠, J♣, K♣, 3♣, Q♥.
  4. The deal: you get card 0 and card 2 → 8♠ K♣ = 18. The dealer gets card 1 (up) and card 3 (hole) → J♣ + 3♣ = 13, of which you only see the J♣.
  5. You stand on 18. The dealer turns the hole card (13), must draw below 17, and takes the next card in the shoe — card 4, Q♥23. Bust.
  6. Dealer bust → winfloor(10000 cents × 200 ÷ 100) = 20000 cents200.00 Coins returned, i.e. 100.00 Coins more than the 100.00 Coins staked.

Note what did not happen: the dealer's Q♥ was already sitting at position 5 of the shoe before you clicked anything. Had you hit instead of standing, you would have taken the Q♥ (18 + 10 = 28, bust) and the dealer would have drawn card 5 instead. The cards are fixed; your decisions only determine who receives them. A split obeys the same rule: both hands draw from the same fixed sequence, in shoe order.

A side-bet example from the same seed pair. At nonce 0, the same derivation deals you 2♥ 2♣ against a 7♥ up-card. Same rank, one red and one black → the mixed Perfect Pairs tier → 7.00× returned (6:1). A 10.00-Coin Perfect Pairs stake returns floor(1000 × 700 ÷ 100) = 7000 cents = 70.00 Coins, settled at the deal, whatever the hand does afterwards. The 21+3 spot (2♥, 2♣, 7♥) makes no flush, straight or trips, so it pays nothing.


Rules, odds and fairness: Odds & House Edge · Provably Fair · Verify a bet · Your bets · How Coins work · Responsible Play

Ganbate is a free-to-play social casino for adults 18+. Coins have no cash value. They cannot be withdrawn, cashed out, redeemed, transferred between players, gifted, sold, or traded. There are no prizes of monetary value. Free Coins are always available, so you never need to buy any.