The rules live on Solana.

Your money, every bet and the number of every round with bets are handled by a program on Solana, not by our server.

Your money, your safe

Your walletYour safeon Solanaput inonly you take out

Your dollars sit in a safe on Solana that belongs to your wallet. Only your wallet can take them out, whether our server is up or not. Wins are paid into the safe by the program itself.

One approval per session

Your walletsigns onceBrowser keybets onlyYour betslimit and end time you choose

When you sit down, your wallet signs once: it lets a key in this browser place bets for you, up to a limit you choose and until a time you choose. That key can only place bets. It can never take money out, and you can end the session at any time.

How a number is drawn

Seed sealed (hash)Bets placedBetting closesA later Solana blockSeed revealed, checkedProgram pays every bet
  1. The round opens: the fingerprint (a SHA-256 hash) of a secret seed is sealed on Solana, before any bet.
  2. Bets are placed and locked on Solana.
  3. Betting closes, and the program waits for a Solana block made after the lock.
  4. The seed is revealed, and the program checks it against the fingerprint.
  5. The program mixes the seed with that block’s hash to get the number, and pays every bet itself.

Nobody can choose the number: the seed was fixed before the bets, and the block did not exist when they closed. Anyone can check any round with money on it on the Verify page. Rounds where nobody bets are only the wheel turning: nothing is at stake, so they are not sent to Solana.

Check the latest round with real bets (round #1256, number 36), or see it on Solana’s explorer.

If the dealer goes silent

If a round is not revealed within 2 minutes of betting closing, it can only be cancelled, by anyone: every bet goes back to its safe, and nobody wins or loses. Every cancelled round is public on Solana, and the table then stops for 25 hours, longer than an investor’s notice, so it cannot happen quietly or often.

The bank

Investors own the bank in shares. Withdrawals take 24 hours’ notice and are paid only between rounds, and one round may risk at most a set share of the bank, between 0.5 % and 2 %. See the bank

The fee

Bank pays 1 % fee½ service fee½ buyback walletpublicfixed in the program

The bank pays a fee of 1 % of the bets out of its house edge; players pay nothing extra. Half is the service fee, paid to the owner’s wallet for running Roulana: the servers, the Solana network fees for every bet and every round, upkeep and support. Half goes to the public buyback wallet: a split fixed in the program. A new buyback wallet takes effect only after 7 days of public notice.

What the owner can and cannot do

Can

  • Pause the table (a round already running finishes)
  • Set the bank limit per round, between 0.5 % and 2 %, between rounds
  • Set the fee, never above 1 %
  • Name a new dealer or a new owner, who can take over only after 25 hours in public
  • Propose a new buyback wallet, which waits 7 days in public

Cannot

  • Take money from anyone’s safe
  • Change a bet or a payout
  • Pick or change the number
  • Change how the fee is split
  • Make a new buyback wallet count without the 7 days’ notice
  • Bring in a new dealer or owner without 25 hours’ public notice
  • Resume the table sooner than 25 hours after a cancelled round

These are the program’s own rules. The owner’s key can still upgrade the program: see Upgrades below.

Upgrades

The program can still be upgraded with the owner’s key, kept offline. Every upgrade is public on Solana.

Next: upgrades will need several keys and a 7-day wait, so everyone can leave first.

Addresses

The program
7FqV…gHBn
The table
AfyX…h63J
The vault (every dollar on the table)
BPJm…aw56
USDC
EPjF…Dt1v
The buyback wallet
6Pcu…LF9V
The owner
8K7a…SXCH
The dealer
9A83…c86c

For developers

The main instructions:

Players
deposit, withdraw, open_session, close_session
The session key
place_bets (the table co-signs: its dealer pays the fee)
The dealer
open_round, lock_round
Anyone
reveal (with the right seed, within 2 minutes), settle, forfeit (cancels, after 2 minutes), void_round (after 10 minutes), refund, close_bets, close_round, pay_buyback, apply_buyback (after 7 days), apply_dealer (after 25 hours)
Investors
invest, request_withdrawal, execute_withdrawal
The owner
set_paused, set_bank_limit, set_fee, propose_dealer, propose_owner, propose_buyback
A new owner
accept_owner (25 hours after being named)

The number: the key is the 32-byte seed followed by the 32-byte hash of the later block (64 bytes). The program computes HMAC-SHA256 of the text "roulette3:<round id>:<counter>" (the round’s id on Solana; counter 0, 1, 2 …), reads each result as 32-bit big-endian numbers and turns them into 0–36 by rejection sampling, so no number is favoured.

To recompute a round by hand you need its seed, the hash of the block mixed in and its id on Solana: the Verify page shows them for any round played since 25 September 2026, under “The raw values”.

import hashlib, hmac

def roulana_number(seed_hex, block_hash_hex, round_id):
    """A round's winning number, 0-36: its seed and the hash of the block mixed in
    (64 hex characters each) and its id on Solana."""
    key = bytes.fromhex(seed_hex) + bytes.fromhex(block_hash_hex)   # 64 bytes
    limit = (2**32 // 37) * 37                  # rejection sampling: no number is favoured
    counter = 0
    while True:
        h = hmac.new(key, f"roulette3:{round_id}:{counter}".encode(), hashlib.sha256).digest()
        for i in range(0, 32, 4):
            x = int.from_bytes(h[i:i + 4], "big")
            if x < limit:
                return x % 37
        counter += 1

def fingerprint(seed_hex):
    """What was sealed on Solana before the first bet: SHA-256 of the seed."""
    return hashlib.sha256(bytes.fromhex(seed_hex)).hexdigest()

Or check a round in one click, or run verify-round.py on your own computer.

Live data · The bank as data · The whole site as text