Crypto Casino — Technical Architecture

What it actually takes to build a platform in the class of Shuffle, Stake, and BC.Game.
Status: Draft / exploratory Scope: Engineering architecture, product surfaces, integration contracts & operational flows Out of scope: Game design discipline; business/licensing strategy; go-to-market Date: 2026-06-06

The visible “casino” is a thin real-time UI over two hard systems: a money ledger and a crypto wallet. Roughly 80% of the genuine engineering difficulty lives there, not in the games. This document maps the full system — the player-facing surface, the money internals, the third-party integration contracts, the account/identity/responsible-gambling subsystem, the operator back-office, and the operational flows that tie them together — ranks every component by how optional it is to launch, and goes one level into the parts that are actually hard.

On sourcing. The feature inventories, integration contracts, and account/logging requirements below were cross-checked against primary sources, not asserted from memory: the GLI-19 v3.0 Interactive Gaming Systems standard and the Delaware iGaming technical spec (for account, session, logging, retention and reporting mechanics); the Hub88 / St8 / 568win seamless-wallet API docs (for the aggregator money contract); the Fireblocks developer + withdrawals-at-scale docs (for custody); the SOFTSWISS / EveryMatrix / SoftGamings platform pages (for back-office module inventory); and the Stake / BC.Game / Shuffle help centers (for the player surface). The standards are used purely as an engineering completeness checklist — what mechanisms a real platform builds — not as a compliance/licensing position. Numeric thresholds (lockout counts, cool-off windows, RTP floors, confirmation depths) are representative defaults; verify against a chosen reference before shipping. Full source map in §22.

1What these platforms are

People call them “casinos,” but technically each is four products fused into one balance and one real-time session:

  1. In-house provably-fair games (Dice, Crash, Plinko, Mines, Limbo, Keno, Wheel, Hilo) — built and run by the operator. The cryptographic differentiator and the highest-margin surface. OPTIONAL
  2. Aggregated third-party content — thousands of slots + live dealer (Evolution, Pragmatic, Hacksaw…) pulled in through an aggregator over a seamless-wallet API. The operator runs none of it.
  3. A sportsbook — usually a third-party turnkey (BetBy, Digitain, Altenar) bolted onto the same balance.
  4. A multi-chain crypto bank — deposits/withdrawals + custody across BTC/ETH/TRON/SOL/LTC/BNB + stablecoins, with an internal ledger.

The “casino” you see is a UI over a money ledger and a wallet service. Everything else either sits on those two, or is integrated rather than built.

Two products are easy to forget because of where they sit. The first is the player-facing application itself (§4) — the ~150-feature real-time client (wallet, lobby, bonus center, VIP, social, provably-fair verifier, responsible-gambling controls) that is the casino to the user. The second is the invisible operator back-office (§14) — a 15-plus-module admin panel for players, payments, bonuses, affiliates, risk, and analytics. Beneath both is a fifth load-bearing subsystem players only half-see: accounts, identity & responsible gambling (§13) — registration, authentication, KYC, limits, self-exclusion, geolocation. Each of these is as much engineering as the games, and you cannot run real money without at least their cores.

2Component optionality ranking

The single most useful lens on this system: most of what makes it look like Stake is optional. The mandatory core is small. Axis = can you ship and operate without it?

TIER 0

Non-negotiable — no product exists without it

Even a fully bought white-label has these; the vendor just owns them.

ComponentWhy mandatory
Accounts / auth / sessionsNo identity → no balance to bet. Registration, login, session lifecycle (§13).
Player client (wallet UI, lobby, game launch, history)The product the user touches. A backend with no usable client is not a casino (§4).
Money ledger (multi-asset, double-entry, integer money)Holds player funds, survives concurrency. A bug here is direct, unrecoverable loss.
Crypto wallet / payments (deposit + withdraw, ≥1 chain)It’s a crypto casino. No deposit/withdraw → no product.
≥1 game content sourceYou need something to bet on. Which source is a Tier-1/2 choice — “games exist” is mandatory, “games are original” is not.
Edge / DDoS / basic securityConstant attack target; unprotected it doesn’t stay up.
Geo-blocking + legal wrapperMust hard-block prohibited jurisdictions to exist at all (§13.5).
TIER 1

Required in practice — but buyable & scale-deferrable

ComponentOptionality
Aggregated content (slots + live)The default answer to “≥1 game source,” and the reason originals are optional. Bought over a seamless-wallet API; for most entrants this is the whole catalog.
KYC / AML pipelineRequired for compliant withdrawals and high-risk flows; often tiered and vendor-integratable. Regulated models may require verification before play; crypto/offshore models commonly gate stricter checks on withdrawals, volume, bonus/risk events and source-of-funds thresholds (§13.3).
Responsible-gambling controls (limits, self-exclusion)Server-side limit enforcement + self-exclusion is small to build and present in every serious platform (§13.4).
Custody hardening (hot/cold, MPC/HSM, policy)Wallet is Tier 0; its hardening is Tier 1. Can start simple, harden as float grows (§6).
Chain-analysis screeningBanking/licensing requirement at scale; skippable very early, mandatory fast.
Reconciliation (on-chain vs ledger liabilities)Near-mandatory ops automation; operators who skip it find the hole the hard way.
Logging / audit / significant-eventsWithout a queryable, tamper-evident event & game log you cannot resolve disputes, reconcile, or prove fairness (§17).
Back-office / admin — core (player lookup, withdrawal approval queue, balance adjust, ban/lock)You cannot operate real money without it. The minimum operations console is mandatory; the 15-tab suite is Tier 2.
Provider settlement / reconciliation (GGR rev-share)Mandatory the moment you have third-party providers; it’s how you pay them and stay solvent.
TIER 2

Optional — differentiation & retention

None required to launch or operate. How you compete, not how you exist.

ComponentWhat it buysCost of skipping
Original in-house gamesThe differentiator, best margin, “verify it yourself” trust.You’re a reskinned aggregator. Viable, undifferentiated.
Real-time tierShared-round games (Crash), live feed, chat.Largely skippable if you skip originals — see cascade.
Bonus / VIP / rakeback / gamificationRetention; the main reason crypto players stay.Higher churn; not a blocker.
SportsbookA second product on one balance.Pure bolt-on; integrate later or never.
Chat / social / rain / tipsCommunity + virality (BC.Game’s signature).Quieter product; no functional loss.
Advanced anti-fraudLoss prevention at scale.Basic checks are Tier 1; advanced scales with size.
Back-office depth (bonus builder, affiliate/agent system, CRM, analytics/graphs, VIP host tooling)Operational leverage; the 15-tab admin suite.You run on spreadsheets + manual ops. Works small, breaks at scale.

Key cascades

3System architecture

                         ┌─────────────────────────────────────────┐
                         │              Edge / CDN                   │
                         │  Cloudflare (DDoS, WAF, geo, bot mgmt)    │
                         └───────────────┬──────────────────────────┘
                                         │
            ┌────────────────────────────┼────────────────────────────┐
            │                            │                             │
     ┌──────▼──────┐            ┌────────▼────────┐           ┌────────▼────────┐
     │  Web/App     │  WS/REST  │   API Gateway    │  gRPC     │  Realtime / WS   │
     │ (Next/React) │◄─────────►│ (auth, rate-     │◄─────────►│  fan-out (NATS/  │
     │  + mobile    │           │  limit, routing) │           │  Redis pub/sub)  │
     └──────────────┘           └────────┬─────────┘           └─────────────────┘
                                         │
   ┌───────────────┬─────────────────────┼─────────────────────┬──────────────────┐
   │               │                     │                     │                  │
┌──▼───────┐  ┌────▼──────┐      ┌────────▼────────┐    ┌───────▼───────┐   ┌──────▼──────┐
│  LEDGER   │  │Wager engine│      │ Wallet / Chain  │    │  Aggregator   │   │ Sportsbook  │
│ (double-  │  │ + in-house │      │ Service (HD     │    │  Adapter      │   │  Adapter    │
│  entry,   │  │  games +   │      │ wallets, hot/   │    │ (seamless     │   │ (3rd party) │
│  balances)│  │  RNG)      │      │ cold, signing)  │    │  wallet API)  │   │             │
└──┬────────┘  └────┬───────┘      └────────┬────────┘    └───────┬───────┘   └─────────────┘
   │                │                       │                     │
   │           ┌────▼─────┐          ┌───────▼──────┐      ┌───────▼────────┐
   │           │ seed     │          │ Custody (MPC/ │      │ Game providers │
   │           │ commit/  │          │ HSM) + nodes/ │      │ (Evolution,    │
   │           │ reveal   │          │ RPC + indexer │      │  Pragmatic...) │
   │           └──────────┘          └───────────────┘      └────────────────┘
   │
┌──▼─────────────────────────────────────────────────────────────────────────┐
│  Cross-cutting: Accounts/Identity/KYC · Bonus/VIP · Anti-fraud/AML · Risk    │
│  Geolocation · Responsible-gambling limits · Notifications (email/SMS/push)  │
│  Event pipeline → data warehouse · Audit/significant-events log · Observability│
├──────────────────────────────────────────────────────────────────────────────┤
│  BACK-OFFICE / ADMIN (§14): players · payments · bonuses · affiliates ·       │
│  reports/graphs · risk · CMS · staff RBAC · PROVIDER SETTLEMENT (GGR rev-share)│
└──────────────────────────────────────────────────────────────────────────────┘

Cross-cutting services in the lower box are not optional plumbing details: accounts/identity (§13), the significant-events/audit log and event pipeline → warehouse (§17), and notifications are load-bearing subsystems referenced throughout. They’re drawn flat here because every vertical column depends on them.

4Player-facing application core TIER 0/1 depth TIER 2

The product the user actually touches — and the surface the original document omitted entirely. A mature crypto casino client is ~150 features across roughly a dozen areas. It is a real-time single-page app: one seamless balance, updated over WebSocket, shared across originals, slots, live, and sport. Below is the surface map drawn from the Stake / BC.Game / Shuffle help centers, tiered by how much you need at launch.

4.1 Surface map

AreaFeatures (representative)Tier
OnboardingRegister by email / social (Google, Twitch) / wallet; username + strong-password; email verification; age & geo gate; referral-code entry; first-run KYC-lite (name, address, DOB).T0
Auth & sessionLogin, 2FA/TOTP prompt, password reset, “remember device,” active-sessions list + revoke, login history, last-login-time display.T0
Wallet / cashierMulti-currency balance + fiat-equivalent display; deposit (per-chain address + QR, network select, memo/tag warning, confirmation tracker); withdraw (address, network + fee, 2FA, whitelist); currency swap/convert; on-ramp (MoonPay/Swapped); Vault / savings pocket (lock funds out of play; BC.Game-style VaultPro yield is a separate optional product); transaction history.T0/T1
Casino lobbyCategory nav (Favourites, Originals, Slots, Live, Game Shows, New); global search; provider filter; favorites; recently played; personalized “Picks for You”; live big-win / winners feed; jackpots; per-game info pages (RTP, house edge).T1
Game playLaunch (iframe / native), fullscreen, in-game balance + currency switch, demo / play-for-fun, per-game bet history, provably-fair seed panel (client seed, server-seed hash, nonce, cursor, rotate, verify) + standalone verifier.T1
SportsMarkets (pre-match + live), bet slip (single / multi / same-game), cash-out, odds-format switch, bet-protection (e.g. “Stake Shield”).T2
Bonus centerActive bonuses + wagering progress; promo/“bonus drop” code redemption; welcome/deposit match; reload; cashback/lossback; free spins; daily/weekly races + leaderboard; raffles; quests/challenges; flash-drops in chat.T2
VIP / loyaltyTier & XP progress (Stake-style long tier ladder; Shuffle publishes 50+ levels); instant rakeback claim; level-up / daily / weekly / monthly bonuses; reload/recharge; BC.Game-style SVIP / VIP host contact.T2
Profile & securitySettings hub (Preferences / Security / Offers / Verification / Sessions); 2FA setup + recovery; withdrawal-address whitelist; email/withdrawal/login locks; public profile + hideable stats; account closure / self-exclusion entry.T1
Responsible gamblingSet deposit / loss / wager / session limits; cool-off (“break in play”); self-exclude; reality-check / session timer; self-assessment + help links — surfaced from every play screen.T1
SocialLive chat (often gated by account age / wager volume), rain/rainbot drops, tips/send where allowed (2FA-guarded), leaderboards/races, public stats, winners feed.T2
SupportHelp center, 24/7 live chat, ticketing, FAQ/forum, dedicated email channels (support / recovery / account-closure).T1
Notifications & settingsIn-app notification center, Do-Not-Disturb, email/SMS/push prefs; language (15+), currency-display + local-currency toggle, theme, accessibility/haptics, odds format, hide-balance; native app / APK.T2

4.2 Engineering notes

4.3 Reference-product observations

5The money ledger TIER 0

The hardest correctness problem in the system. You are running a multi-asset bank with adversarial users; a single double-spend or lost-update is a direct, unrecoverable loss.

Non-negotiable design: true double-entry, append-only

Never store balance as a single mutable integer you UPDATE. Store append-only ledger transactions made of balancing ledger lines; balance is a derived (and cached) sum.

ledger_transactions
  id                 (monotonic)
  type               (deposit, withdrawal_hold, withdrawal_settle, bet, payout, bonus, rollback, adjustment)
  ref_type / ref_id   (chain tx / provider txn / game round / admin action)
  idempotency_key    UNIQUE
  status             (posted, reversed, voided)
  created_at

ledger_lines
  id
  transaction_id
  account_id         (player, house, provider_payable, bonus_liability, jackpot_pool, fee, onchain_inventory...)
  asset              (BTC, ETH, USDT...)
  balance_bucket     (withdrawable, bonus_locked, withdrawal_hold, vault, promo, provider_settlement...)
  amount             (signed integer minor units — NEVER float)
  created_at

Invariant: for each ledger_transaction, the sum of all ledger_lines.amount per asset equals zero. A bet moves value from player withdrawable balance to house/game clearing; a payout moves value back; a withdrawal moves player funds into a hold, then settles the hold against on-chain inventory. Money is conserved by construction because every credit has an equal debit.

The five invariants

  1. Atomicity — all ledger lines for one money event are committed in one DB transaction. Instant in-house games may debit stake and credit payout in one transaction; aggregated content often arrives as separate bet, win, and rollback callbacks, each atomic and linked by round/transaction ids.
  2. Idempotency — every mutating op carries an idempotency key; retries (network, provider callbacks, chain reorgs) must not double-credit. Essential for crypto deposits and aggregator callbacks, which retry aggressively (§9).
  3. No spendable negative balance — enforced at write time (conditional update / serializable isolation / row lock), not read-then-write. Under concurrency this is the classic lost-update bug. One provider-specific exception is a correction_debit after resettlement: model it explicitly as a negative receivable / recovery balance, not as an invisible overdraft.
  4. Integers only — satoshis, wei, micro-USDT. Floats anywhere in the money path is a defect.
  5. Auditability — reconstruct any balance at any timestamp from the log alone; reconcile against on-chain holdings daily.
Concurrency. Per-account mutations are serialized — a row lock (SELECT … FOR UPDATE) or routing all of one account’s writes to a single actor/partition. High-frequency autobet makes this a throughput problem: a heavy player fires hundreds of bets/sec, so the hot path (check → debit → settle → credit) must be low-latency. The durable ledger/event log is committed before acknowledging the money event; caches are read-through/write-through mirrors or actor-local state, never an async write-behind source of truth.
Bonus & locked balances. The ledger must distinguish withdrawable funds from restricted/bonus funds and (per the public standards) wager restricted credits first. Model bonus money as separate sub-accounts or tagged entries, never as a flat balance — wagering-requirement tracking and bonus clawback both depend on it (§12).

6Crypto wallet, custody & payments TIER 0 hardening TIER 1

Three money layers, don’t conflate them. (a) the player custodial wallet/ledger below — the one balance; (b) the seamless wallet API (§9) every game source debits/credits against; (c) the operator↔provider B2B settlement (§9.1) where you pay providers their GGR share. Players touch (a); providers integrate via (b); finance reconciles (c).

Unified (seamless) wallet — one balance, many consumers

There is exactly one player balance (the custodial ledger, §5). Every content source — in-house games and every third-party provider — debits and credits that same balance in real time; providers never hold player funds. This is the “seamless wallet” model, as opposed to the legacy “transfer wallet” where players manually move funds into a per-provider sub-wallet.

Deposits

Withdrawals

6.1 Custody model (Fireblocks-class infrastructure)

Whether you run your own nodes + HSM or use a custody provider, the object model is the same and worth naming explicitly:

6.2 Withdrawals at scale

A single hot wallet is a throughput and stuck-transaction bottleneck. The at-scale pattern:

6.3 Authorization policy (the money-out control surface)

Withdrawal safety is a policy-engine problem, not an if amount > X check. A transaction-authorization policy evaluates rules top-down, first match wins, default-deny:

6.4 Transaction lifecycle & webhooks

Deposits and withdrawals move through an explicit status machine you consume via webhooks. A representative lifecycle:

SUBMITTED → PENDING_AML_SCREENING → PENDING_ENRICHMENT → PENDING_AUTHORIZATION
          → QUEUED → PENDING_SIGNATURE → BROADCASTING → CONFIRMING → COMPLETED
terminal-negative: BLOCKED (policy) · REJECTED · FAILED · CANCELLED

6.5 Pricing & reconciliation

7Original games TIER 2 — OPTIONAL

Framing. There is no “provably-fair engine” as a product. Provable fairness is a property a game gets by drawing randomness from a pre-committed seed instead of Math.random() — a few hundred lines of shared plumbing. The real undertaking is building original games; fairness lives inside each one. Game-session rules that apply to all games (recovery, display, autoplay, RTP) are in §8.
Out of scope. This section covers the technical substrate (randomness, wager lifecycle, the shape of the payout/RTP math). It does not cover game design as a discipline — inventing games, tuning paytables/volatility for feel, the actuarial modelling of RTP and exposure, UX/animation. That’s a separate, large body of work.

Precision. Formulas below are the canonical/reference forms of the public commit–reveal model (bustabit-style Crash, Stake-style float derivation). Exact constants vary by operator and are not asserted as any platform’s source — treat them as “representative; verify against a chosen reference before shipping.”

7.1 The thin shared substrate (not a game)

Everything “provably fair” reduces to one deterministic function: RNG(serverSeed, clientSeed, nonce, cursor) → stream of floats in [0,1).

// byte stream: chain HMACs by round index
function* byteStream(serverSeed, clientSeed, nonce) {
  let round = 0;
  while (true) {
    const d = hmacSha256(serverSeed, `${clientSeed}:${nonce}:${round}`); // 32 bytes
    for (const b of d) yield b;
    round++;
  }
}
// 4 bytes -> uniform float, base-256 positional
function bytesToFloat(b) {
  let f = 0;
  for (let i = 0; i < 4; i++) f += b[i] / Math.pow(256, i + 1);
  return f; // [0,1)
}

Selection over a finite set uses a Fisher–Yates shuffle driven by the stream; any non-power-of-two integer draw uses rejection sampling, never modulo (modulo bias is an exploitable fairness defect). On seed rotation the old serverSeed is revealed; a public verifier re-hashes it (must equal the commitment) and replays every outcome with the same code.

Fairness invariants (and how they break)

  1. Commit SHA256(serverSeed) before the first bet; never mutate the seed in use.
  2. nonce strictly monotonic per seed pair, enforced atomically.
  3. Outcome derivation is pure — a function of (serverSeed, clientSeed, nonce, cursor) only. No wall-clock, no post-bet input.
  4. No modulo bias anywhere randomness maps to a finite set.
  5. The verifier uses the same code path as production — drift is the classic silent-cheat surface.

Note: provable fairness is the crypto-casino alternative/supplement to traditional certified-RNG. The public standards still expect server-side-only outcome generation, RNG strength against state-compromise/known-input attacks, and statistical testing (§8.1) — provable fairness gives the player self-verification on top.

7.2 The shared wager engine (the real reusable layer)

This — not fairness — is the engine worth factoring out. Every game runs the same lifecycle:

1. validate bet (limits, balance, RG limits, session)
2. atomically DEBIT stake        (idempotency_key = bet_id)
3. nonce = next(seedPair)         (atomic increment)
4. outcome = game.resolve(rng(...), betParams)
5. payout  = game.payout(outcome, betParams)   // house edge baked in
6. atomically CREDIT payout (if > 0)            (same bet_id txn)
7. record bet (seeds-hash, nonce, params, outcome, payout)  // replay/dispute

Shared concerns that live here: limits & max exposure (cap max payout per round so one hit can’t blow the bankroll), autobet (the main ledger-load multiplier), deterministic replay, and the real-time fabric for shared-round games.

7.3 The intellectual core: house-edge / RTP / exposure

The genuinely hard part — and nothing to do with crypto. For each game you design the payout function so that:

For any single-outcome game the fair multiplier is just (1 − edge) / P(win). The work is in multi-outcome games where you shape a whole distribution.

7.4 Per-game summary

GameOutcome & bytesPayout / house-edgeState / real-time
Dice 1 float → roll ∈ [0,100) mult = (100/winChance%)·(1−e); edge uniform across targets Stateless. Throughput-bound (autobet).
Limbo 1 float, inverse-CDF heavy tail P(result ≥ m) = (1−e)/m; payout = target Stateless. Distribution carries the edge.
Crash h from HMAC, reduced mod M=2⁵²; instant-bust carries edge floor((100·M−h)/(M−h))/100; P(≥m) ≈ (1−e)/m Shared round. Server-authoritative curve + cashout race + WS fan-out. The only truly hard real-time game.
Plinko n floats (L/R per row) → bucket, k ~ Binomial(n,½) Designed paytable per risk; Σ C(n,k)/2ⁿ · payoutₖ = (1−e) Stateless. Rare edge bucket must be inside max-payout cap.
Mines Fisher–Yates board (25 tiles, M mines), committed at start payout(k) = [C(25,k)/C(25−M,k)]·(1−e) Stateful round. Committed-board invariant is the whole game.
Keno Partial Fisher–Yates draw; hits = overlap Hypergeometric paytable; balanced per pick-count Stateless.
Wheel 1 float → segment via cumulative weights edge = 1 − Σ segProb·segPayout Stateless. Simplest multi-outcome.
Card games
(Hilo, Blackjack…)
Full 52-card Fisher–Yates shoe, committed at deal Rules-driven edge (dealer rules, 3:2, etc.) Stateful + decision tree. Most code-heavy; fairness = committed shoe.

8Game session & round integrity TIER 1

A layer the original document skipped: the rules every game round must obey regardless of who built it. These come straight out of the public iGaming technical standards (GLI-19 / Delaware) and they constrain in-house games and shape how you consume aggregated content. They are the difference between “the math is right” and “the round survives a disconnect, a crash, and a dispute.”

8.1 Outcome authority & RNG

8.2 RTP & fairness bounds

8.3 Mandatory in-session display

During play the client must surface, at minimum: current funds available to wager; current wager amount + active wagers; and for the last completed game — the outcome and amount won. The credit meter is shown whenever a wager can be placed; restricted/bonus credits are wagered before unrestricted funds (§5 callout).

8.4 Game recall / history

Every round must be reconstructable and re-presentable as a labeled replay: date/time, stake (incl. bonus), outcome, funds before/after, player choices, intermediate phases, and any jackpot award. Bonus/feature rounds retain at least the last ~50 events. This is the dispute-resolution substrate and feeds the per-game log (§17.2).

8.5 Interrupted-game recovery load-bearing

The rule that bites. On any interruption — lost connection, server restart, client crash, game-disable — wagers are held by the platform and the account must reflect the held funds. The system must provide a way to complete the interrupted round, and that round must be resolved before the player can start another instance of the same game. No-input games auto-complete; input games restore the exact pre-interruption state; if a round can’t be continued because of a system fault, all wagers are returned, balances + history updated, and the game disabled if the fault could recur.

This applies to stateful originals (Mines mid-board, Blackjack mid-hand, a Crash position) and to aggregated games — where you handle it via the provider’s rollback and round-status semantics (§9). Either way it must be idempotent against the ledger.

8.6 Autoplay, demo & jackpots

9Aggregated content & the seamless wallet TIER 1

You will not build slots or live dealer — you integrate them. This is the default game catalog and the reason originals are optional.

The novel engineering is not the games — it’s implementing the money callback contract correctly and idempotently. The original doc summarized this as “/bet, /win, /rollback, HMAC.” The real contract is more demanding. Hub88, St8, 568win and similar integrations differ in endpoint names, signature schemes, amount scaling, status codes, token rules and rollback behavior; your platform should implement a provider adapter per integration and normalize those callbacks into one internal wallet protocol.

9.1 The callback contract (operator-hosted endpoints)

The provider/aggregator is the client; you expose signed callbacks it calls on every money event:

EndpointPurposeNotes
balanceBalance inquiryRead-only; must be fast.
bet / debitDebit stake, open/continue a roundInsufficient funds → dedicated decline status, balance unchanged.
win / creditCredit winnings, may close the roundAmount may be 0. References the bet via parent-transaction id.
rollback / cancelReverse a referenced transaction (voided round)New txn id for the rollback + reference to the original.
Specialized credits a full build must also accept: free_credit (free spins — may arrive with no preceding debit), jackpot_credit, promo_credit, bonus_buy_debit/credit, correction_debit/credit (sports/odds resettlement), and out-of-session buyin/payout (tournament/jackpot entry & prize).

9.2 Idempotency — two levels, not one

9.3 Authentication & money semantics

9.4 Round lifecycle, status codes & the rollback rule

Latency is a money problem, not just UX. The seamless model puts your wallet in the synchronous hot path of every spin. As St8’s own docs warn, in high-latency regions “this amount of network calls is the most widespread reason for poor player experience… bet lags, not being able to place a bet in time, and straight-up transaction fails due to timeouts.” Every timeout becomes a retry and possibly a rollback — so the wallet must be exactly-once at the transaction level, cache responses by request key, and answer in single-digit-to-low-tens of ms.

9.5 Reconciliation hooks & settlement

Providers expose a transactions/round list pull (by time range / round / user) for reconciliation — store every callback yourself and reconcile against it. That feeds the B2B layer:

Operator ↔ provider settlement (the B2B money layer)

Distinct from the player wallet, and easy to forget. Per bet, no funds move to the provider — their game server calls your seamless wallet to debit/credit the player’s balance. The money you owe providers is settled separately, B2B:

So the “seamless wallet that pays different providers” is two mechanisms: real-time player-balance callbacks (per bet) + periodic GGR rev-share settlement (B2B). Conflating them is a common modelling error.

10Sportsbook TIER 2 — OPTIONAL

Almost always a turnkey provider (BetBy, Digitain, Altenar) integrated like the aggregator: their odds engine + trading + settlement, your wallet + identity. In-house (rare, very expensive) means real-time odds feeds, a risk engine, bet-slip + cash-out logic, automated settlement, and a trading team — a whole company on its own. Note the sportsbook reuses the seamless-wallet contract (§9), including correction_debit/credit for odds resettlement and bet-builder/cash-out as multi-leg round semantics.

11Real-time tier TIER 2 — coupled to originals

Cascade. Aggregated content needs none of this — it runs in the provider’s iframe. The hard real-time stack exists almost entirely to serve Crash. Skip originals and most of this disappears.

12Bonus / VIP / gamification TIER 2 — OPTIONAL

Retention machinery — the main reason crypto players stay. It is tightly coupled to the ledger (locked balances), the anti-fraud engine (abuse), and the back-office (campaign builder). The surface is broad; vendor platforms ship all of it.

12.1 Bonus & reward taxonomy

12.2 Accounting & wagering requirements

12.3 Gamification & loyalty

12.4 Abuse — the coupled threat

13Accounts, identity & responsible gambling core TIER 0/1

The subsystem the original document scattered into a single 2FA bullet. It is its own product: registration, the account state machine, authentication, KYC, responsible-gambling enforcement, and geolocation. Most of it is mandatory to operate real money, and the public standards specify it in detail — presented here as engineering requirements (what the platform must do), not as a licensing position.

13.1 Account lifecycle & states

13.2 Authentication & access

13.3 KYC / AML

13.4 Responsible gambling (enforcement, not just UI)

Don’t over-claim “reality checks.” A periodic elapsed-time / net-loss reminder pop-up is a common product feature (Stake’s “Stake Smart”, UKGC/MGA regimes) but is not mandated by GLI-19 v3.0 — the standard’s named controls are limits, self-exclusion, the RG page, and the last-login display. Build reality checks because they’re good product, not because a checklist forces them.

13.5 Geolocation & eligibility

14Operator back-office / admin panel core TIER 1 depth TIER 2

The largest piece of the platform players never see — commonly 15+ modules, and frequently as much code as the player-facing app. A minimal operations console is mandatory to run real money; the full CRM/bonus/affiliate/analytics suite is where a lot of the actual engineering goes and grows mandatory at scale. The module list below is triangulated across SOFTSWISS, EveryMatrix, and SoftGamings.

14.1 Typical modules

ModuleWhat it doesTier
Player management / single customer viewSearch, profile, KYC state, balance adjustments, lock/ban/self-exclude, notes, device/login history, RG limits, tags & segments, duplicate/linked-account detection.T1
Player activityBet/round history, sessions, IP/device, full game logs + game-round replay for dispute resolution.T1
Player financials (“player calculation”)Per-player deposits, withdrawals, GGR/NGR, bonus cost, lifetime value, P&L.T2
Transactions + withdrawal reviewDeposit/withdrawal queues with manual approve/reject, risk-scored sign-off, adjustments, AML flags. The money-out control (§6.3, §18-ii).T1
Bonus managementCampaign builder: deposit match, free spins, cashback, reload, no-deposit, rakeback, lootbox; wagering requirements, eligibility, schedules, budgets; event-triggered bonus API; bonus-abuse guard.T2
Commissions / affiliate / agentPrograms (rev-share, CPA, CPL, hybrid, tiered), affiliate hierarchies / sub-affiliate NGR-share, tracking links + postbacks, statements, fiat + crypto payouts.T2
VIP / loyalty & gamificationTiers, XP, rakeback config, loyalty shop, missions, tournaments/leaderboards, manual VIP assignment, host tooling.T2
Payments configMethods, chains, currencies, deposit/withdrawal limits + fees, PSP/cashier orchestration, per-currency bet limits.T1
Game managementEnable/disable games & providers, categories, featured slots, per-jurisdiction game gating, RTP config for in-house games, recommendation-engine tuning.T1
Reports & analytics (graphs)GGR/NGR trends, deposits/withdrawals, DAU/MAU, retention cohorts, game & provider performance, conversion funnels; configurable reports (60+ dimensions), real-time transaction monitoring.T2
Risk & fraudFlagged accounts, multi-account graphs, review queue, transaction monitoring, AML alerts.basic T1
CRM / marketingSegments, campaigns (email/SMS/push), promotions, mailing, A/B.T2
Content / CMSBanners, pages, lobby/CMS management, localization, promo display.T2
SupportTickets, player notes, live-chat integration.T2
Provider settlementPer-provider GGR, rev-share, invoices vs internal records (§9.5).T1
Staff / RBACAdmin roles & permissions + immutable audit log of every admin action (§17).T1
Responsible gamblingLimits, self-exclusion register, reality-check config, multi-jurisdiction RG engine.T1
Tournaments / races / leaderboardsCreate and manage prize events.T2

14.2 Engineering notes

15Security & anti-fraud

16Compliance — as a technical constraint parts TIER 0

Even treated purely as engineering, these shape the schema and the money path, so they’re designed in, not appended. Most of the mechanics live in the sections cross-referenced below — this is the index:

17Logging, audit, reporting & retention TIER 1

Absent from the original document, and the part of the public standards that reads most like a system spec. You cannot resolve a dispute, reconcile a discrepancy, pass an audit, or prove fairness without a queryable, tamper-evident record of what happened. Treat this as a first-class subsystem, not logging-as-an-afterthought.

17.1 One clock

A single system clock is the time source for all time-stamping (transactions, game rounds, significant events) and the reporting reference; all components are time-synchronized, and a change to the master time is itself a logged event. Stamp everything UTC.

17.2 The log set

17.3 Tamper-evidence & immutability

Append-only; alterations to accounting/reporting/event data only via supervised controls and themselves logged with before-value, after-value, element, time, and user. Keep the audit store separated from the operational DB (WORM / hash-chaining is the common implementation). No mechanism may auto-clear data on error.

17.4 Reporting

Generate reports on demand, daily, and over MTD/YTD/LTD intervals; each report carries operator id, title, interval, generation time, a “no activity” indicator, and is exportable (CSV/XLS). The standards-named set: Game Performance (theoretical vs actual RTP, wagers/wins/voids, rake, funds held in interrupted games), Operator Liability (total held for players), Large Jackpot Payout, and Significant Events & Alterations (with before/after values). Build these off the warehouse (§14.2), not the live ledger.

17.5 Retention

17.6 System integrity & recovery

18Operational flows / lifecycles

The seven end-to-end sequences that tie the sections together. Each names where idempotency, authorization, and logging live — the recurring failure points.

(i) Deposit lifecycle

player requests deposit address
  → wallet derives per-user address (HD) / tag-memo  [§6]
on-chain tx arrives
  → indexer matches tx → user → asset
  → wait for confirmation threshold (reorg safety)   [§6 deposit]
  → on "cleared": atomic CREDIT ledger (idempotency_key = tx hash)  [§5]
  → notify player; tx visible in history             [§4, §17.2]
  → sweep address → omnibus (gas-station fuels fee)  [§6.1]

(ii) Withdrawal lifecycle

player requests withdrawal (address, network, amount, 2FA)  [§4, §13.2]
  → RG / limit / self-exclusion check                      [§13.4]
  → debit ledger to a pending/hold entry (idempotent)      [§5]
  → authorization policy: AML screen → amount rule →
        auto-approve | route to N-of-M manual review       [§6.3, §14]
  → sign (hot co-signer) → broadcast → confirm             [§6.2, §6.4]
  → on COMPLETED: settle hold; on FAILED/REJECTED: refund
  → watch COMPLETED_BUT_3RD_PARTY_FAILED (funds left!)     [§6.4]
  → log significant event if large / adjusted              [§17.2]

(iii) Bet / win / rollback lifecycle (aggregated)

provider → POST /bet  (signed, transaction_uuid, round)     [§9.1–9.3]
  → verify signature over whole body + IP allowlist
  → dedupe: transaction_uuid (money) + request_uuid (HTTP)
  → balance check; insufficient → decline status (NO rollback)
  → atomic DEBIT; respond {status, balance} fast (≈ low-tens ms) [§9.4]
provider → POST /win (may be 0; round_closed=true)
  → dedupe → atomic CREDIT → respond balance
on void/timeout → provider POST /rollback (ref = original)
  → reverse referenced txn; rollback-of-unknown = no-op      [§9.2]
all callbacks recorded for reconciliation                    [§9.5]

(iv) Bonus wagering lifecycle

grant bonus → credit LOCKED/bonus sub-balance              [§5, §12.2]
  → set wagering requirement + eligibility + expiry
play: restricted credits wagered first; track turnover     [§8.3]
  → on requirement met: convert bonus → withdrawable
  → on expiry / breach / cancel: void remaining bonus
abuse checks run throughout (multi-acct, collusion)        [§12.4, §15]

(v) Manual adjustment lifecycle

staff initiates balance adjust / correction in admin       [§14]
  → RBAC permission check
  → maker-checker: second admin approves (money-moving)
  → atomic ledger entry (type=adjustment, ref, reason)     [§5]
  → SIGNIFICANT EVENT logged: before/after, element, user  [§17.2–17.3]
  → player notified if required

(vi) Provider reconciliation

daily: pull provider transactions/round list  [§9.5]
  → match against your recorded callbacks (per provider)
  → compute GGR/NGR per provider
  → reconcile vs provider invoice (monthly rev-share)
  → flag discrepancies → back-office queue     [§14]
parallel: prove sum(on-chain) ≥ sum(liabilities) daily — drift = P0  [§6.5]

(vii) Player dispute investigation

player disputes a round / balance via support     [§4, §14]
  → pull game-round log + replay (seeds, nonce, outcome)  [§8.4, §17.2]
  → provably-fair: re-hash server seed = commitment? replay outcome  [§7]
  → pull financial-transaction + access log (with IP)     [§17.2]
  → reconstruct balance at timestamp from append-only ledger  [§5]
  → resolve; record correspondence (retain ~5y)            [§17.5]

19Representative tech stack

LayerCommon choices
FrontendReact / Next.js, TypeScript, WebSocket client; React Native / native for mobile
API / servicesNode.js (TS) or Go; gRPC internal; REST/WS external
RealtimeWebSocket gateways + Redis Streams / NATS / Kafka
Money / ledger DBPostgreSQL (serializable / row locks), strict integer money; sometimes event-sourced
Cache / hot balanceRedis
Game enginesGo / Node, deterministic, stateless where possible
Wallet / chainOwn nodes + indexer (Bitcoin Core, Geth/Erigon, TRON, Solana) or node providers; MPC/HSM custody (Fireblocks-class)
Aggregator / sportsbookThird-party (SoftSwiss/Slotegrator/Hub88; BetBy/Digitain)
Identity / KYCSumsub/Jumio; geolocation provider; chain-analysis (Chainalysis/Elliptic)
Analytics / warehouseETL → OLAP store / read replica (BigQuery/ClickHouse/Snowflake-class); BI dashboards
NotificationsEmail/SMS/push provider; in-app notification service
Edge / securityCloudflare (DDoS, WAF, bot, geo)
InfraKubernetes, multi-region, IaC; Prometheus/Grafana + tracing; append-only audit logs / WORM store

20Build vs buy — the three paths

PathTier 0Tier 1Tier 2
Turnkey / white-labelvendor-ownedvendor-ownedmostly vendor; little control
Hybrid (“be the next Stake”)buildintegrate (aggregator, KYC, chain-analysis)build originals + real-time, integrate sportsbook
Fully custombuildbuildbuild everything incl. sportsbook trading

Stake / Shuffle / BC.Game sit toward the custom/hybrid end: they own a substantial player product, wallet/ledger surface, rewards system and original-game surface, while still relying on integrated third-party content for much of the catalog. The highest-leverage parts to build yourself are the multi-asset double-entry ledger, the crypto wallet/custody service, the provably-fair originals, the player app, and the Crash-class real-time engine. Everything else is integration — but note that “integration” still means building the operator side of the seamless-wallet contract (§9), the account/identity/RG subsystem (§13), the logging/reporting layer (§17), and the player client (§4) correctly. Those are not vendor gifts in the hybrid path.

21Phased roadmap (from scratch)

  1. Foundations — auth/identity + account state machine, the double-entry ledger, internal transfer primitive, observability, audit/significant-events log. Get money correctness provable before any game touches it.
  2. Crypto wallet service — one chain end-to-end (e.g. a stablecoin on TRON/ETH): deposit detection → confirmations → credit → withdrawal signing → reconciliation. Then add chains, then custody hardening (MPC/HSM, authorization policy).
  3. Player client + content, fast path — the wallet/lobby/launch/history client (§4) + integrate an aggregator (seamless wallet callbacks, §9) + the provider-settlement ledger (GGR/rev-share reconciliation). This alone is a launchable casino.
  4. Back-office core — the moment real users exist: player lookup, withdrawal-approval queue, balance adjust, ban/lock, RBAC + audit log. Mandatory ops; don’t defer.
  5. Accounts/RG/KYC + geo-block + chain analysis — KYC tiers, server-side limits + self-exclusion, geo-block, withdrawal AML gate. Gate withdrawals before you scale deposits.
  6. Originals (optional) — provably-fair substrate + wager engine + game-session integrity (recovery/recall); ship Dice + Limbo first (stateless).
  7. Real-time tier — only if doing originals: WS gateway + pub/sub, then Crash and Mines/Plinko.
  8. Bonus/VIP/gamification + anti-fraud — built together (locked-balance accounting + abuse guard).
  9. Reporting/warehouse — ETL to OLAP, the standards-named reports, retention windows.
  10. Sportsbook — integrate a turnkey provider.
  11. Hardening — MPC/HSM custody at scale, withdrawal pools, DDoS, pen-test, RNG certification, reconciliation automation, on-call/runbooks.

The order is deliberate: money correctness → custody → client + content → ops → identity/RG → fairness → real-time → retention → reporting → scale. Every later stage assumes the ledger underneath it is provably correct and every event is logged.

22Sources & standards map

What each cluster of claims was checked against. Standards are used as an engineering completeness checklist; numeric thresholds are representative defaults, frequently overridable by a specific jurisdiction or provider.

SourceWhat it backs here
GLI-19 v3.0 — Interactive Gaming Systems (read in full)§8 game-session integrity (recovery, recall, RTP floor, autoplay, demo separation), §13 accounts/auth/RG/geolocation, §17 logging/significant-events/reporting/retention/system-integrity.
Delaware iGaming technical spec / RFP FIN13001 (adopts GLI-19)Corroborates §8/§13/§17; self-imposed-limit categories (deposit/wager/loss/session), 24h loosening delay, last-login display, geolocation re-checks.
Hub88 / St8 / 568win seamless-wallet API docs§9 callback contract, two-level idempotency, signature schemes, amount-scaling divergence, status codes + rollback-trigger rule, late-callback handling, the latency warning, §10 sportsbook resettlement.
Fireblocks developer + “withdrawals at scale” docs§6 vault/omnibus model, hot/cold = MPC-share location, withdrawal pools + per-TPS sizing, stuck-tx (RBF/CPFP/25-chain), gas station, transaction-authorization policy, webhook lifecycle + COMPLETED_BUT_3RD_PARTY_FAILED hazard.
SOFTSWISS · EveryMatrix · SoftGamings platform pages§14 back-office module inventory; §12 bonus taxonomy, gamification (loyalty shop/missions), bonus-abuse guard, unified bonus, jackpots, affiliate CPL/sub-affiliate, 60+ dimension reports, game-round replay, per-jurisdiction gating.
Stake · BC.Game · Shuffle help centers§4 player-facing surface map (Stake Vault as separated storage; BC.Game VaultPro as yield/savings; Shuffle wallet/verification/VIP/provably-fair docs), §12 reward types and rollover restrictions, §13 tiered KYC + 2FA/security recovery.

One-line summary. The mandatory core is ledger + wallet + accounts/identity + a player client + some content + edge security + geo-block + a logged, reconcilable record. Everything that makes it look like Stake — original games, the real-time engine they require, bonuses/gamification, sportsbook, social — is Tier-2 optional. The single highest-leverage product decision is whether to build originals, because that choice pulls the hard real-time stack and strengthens the case for owning Tier 0. The most under-estimated surfaces are the ones the first draft of this document omitted: the player client, the full seamless-wallet money contract, the account/identity/RG subsystem, and the logging/reporting/retention layer.

Draft, exploratory — architecture, product surfaces, integration contracts & operational flows. Game design, business/licensing strategy, and cost/team sizing are out of scope. Standards cited as engineering checklists, not legal advice.