Every chip, counted.
Twice, by construction.
11.3M
ledger entries reconciled in 28 s
about 990,000 accounts, no drift
8
round trips to settle a hand
plus the commit, whatever the table size — down from 39 for a six-handed hand
11 ms
to publish 500 hand events
as one batch to the broker, against 7,687 ms one at a time
0
chip-conservation violations
every hand, every run — checked after every state transition
The books
Double-entry, exactly once.
A retry never pays twice.
01
Double-entry, to the chip
02
Exactly once
03
Play money and real money never meet
Every command, once
01
A key with every command
The table, the gateway or the back office sends each command with an idempotency key.
02
The key is claimed
The key is inserted under a unique index. If it is already there, the first answer stands and nothing moves again.
03
Debits that cannot overdraw
A debit is a conditional update that never takes a balance below zero — however many spends race for it.
04
Written whole, or not at all
The entries and the new balances are written and committed in the command's one transaction.
/// <summary>
/// One movement of money, append-only. The amount leaves <see cref="DebitAccountId"/> and arrives at
/// <see cref="CreditAccountId"/>; both sides are always recorded, so every entry balances by construction.
/// </summary>
public sealed class LedgerEntry
{
/// <summary>Unique per tenant: a repeated call with the same key is a no-op, not a second movement.</summary>
public string IdempotencyKey { get; set; } = string.Empty;
public LedgerEntryType Type { get; set; }
public string Currency { get; set; } = string.Empty;
/// <summary>Where the money came from.</summary>
public long DebitAccountId { get; set; }
/// <summary>Where the money went.</summary>
public long CreditAccountId { get; set; }
/// <summary>Always positive, in the currency's minor units.</summary>
public long Amount { get; set; }
// …
Settlement
Settled in one transaction.
In eight round trips.
Settlement is the step every table waits on between hands. Done the obvious way — a guarded update per account per movement — it costs a round trip to the database for every chip that moves, and the wait grows with the table.
Ours locks every stack and escrow at the table in a fixed order, checks in code that every loser has the chips they lost, and writes everything in one save. A short loser refuses the whole settlement and nothing is kept. Because buy-ins and cash-outs lock in the same order, a rebuy and a settlement at the same table queue — they never deadlock.
8
round trips to settle a hand
0
chip-conservation violations
The eight round trips, whatever the table size
01
Claim the key
Insert the hand's idempotency key — a repeated settlement is answered Duplicate, and nothing moves twice.
02
Lock in order
Lock every seat's stack, then every seat's escrow, in player order — the order buy-ins and cash-outs use.
03
Read the stacks
One query for every seat's stack at the table.
04
Read the accounts
One query for the escrow, pot and rake-shard accounts.
05
Create what is new
The hand's pot account — rarely a winner's escrow or a rake shard.
06
Mark the hand
Mark the hand settled without reading it first.
07
Write once
One save: every ledger entry, every stack and escrow balance.
08
Rake last
Add the rake to the house's rake shard atomically, last — the one row other tables share is held only until the commit.
Per hand
Every hand balances on its own
Each hand gets its own pot account: losers pay in, winners and the rake are paid out, and it ends at zero — the check an auditor makes.
Per hand
House accounts that never queue
Each house account is sixteen rows, so busy tables never wait on one another to pay the rake — and still one account in the books.
Per hand
Rake per player
Each hand's rake is split over the seats that paid into the pot and recorded per player; the shares add up to what the ledger took.
Wallets
One wallet, many balances.
In the right order.
- Chips at a table sit in an escrow account of their own; a cash-out returns each part to the balance it was bought from.
- Entries, rebuys and add-ons are paid before they count, once per key; prizes are paid in one transaction that must empty the pool.
- Satellites pay tickets — a wallet asset with an expiry — into the target event.
Real money
1Bonus
locked until wagering releases it
2Cash
withdrawable
Play money
1Free chips
daily chips, rewarded ads, grants
2Purchased chips
bought in the chip store
Tickets
1Ticket
its target event only, once
A cash-out returns each part of a stack to the balance it was bought from — split by largest remainder, so not a chip is lost to rounding.
Checked every night
Reconciled, published, never lost.
The nightly reconciliation
- 1
Starts from the last run's checkpoints and reads only the entries written since.
- 2
Every wallet, escrow and house account: checkpoint plus new entries must equal the stored balance.
- 3
Every pot created since the last run nets to zero.
- 4
The books sum to zero, and every table stack matches its escrow.
- 5
Anything off is confirmed from scratch, from every entry the account ever had, and shown on the back office's Ledger page.
11.3M
ledger entries reconciled in 28 s
about 990,000 accounts, no drift
Reconciled every night
The archive waits for the books
The outbox, not a hope
Nothing lost, nothing hidden
Play money and real money
Play money. Real money.
One ledger, never mixed.
Payments arrive and leave through the house's payment-gateway account, so a deposit is just another balanced entry — reconciled every night like everything else, with play money kept apart as a currency of its own.
Deposits and withdrawals
Stablecoin deposits and withdrawals
In-app purchases
Crypto
Crypto, in stablecoins.
Screened, final, kept in fiat.
A player withdraws in the asset, and on the network, they deposited with. Every address is screened, every deposit is converted and recorded as it is credited, and the tables only ever see the operator's own currency.
Assets and networks
USDT on EthereumERC-20 · 12 confirmations
USDC on EthereumERC-20 · 12 confirmations
USDT on TronTRC-20 · 20 confirmations
Market by market
Crypto is a rule of each market's pack: on in Curaçao, allowed in Malta but off until the operator turns it on, and never in Great Britain, the US states or Ontario.
- CuraçaoOn
- MaltaOff by default
- Great BritainNever
- US statesNever
- OntarioNever
The controls
Every address screened
Every confirmed deposit and every withdrawal address is screened on chain: high risk holds the money and raises an AML alert, severe needs a second approver, and a screening that cannot be made is never read as no risk.
Final before it counts
A deposit is credited after 12 confirmations on Ethereum and 20 on Tron.
Addresses checked
Withdrawal addresses are checked by EIP-55 on Ethereum — an address typed in one case confirmed by the player in its checksum form — and Base58Check on Tron, the platform's own addresses are refused, and every address is stored encrypted.
Closed loop
A player withdraws only in an asset, and on a network, they have deposited with — and no more than they have deposited there, net.
One flat network fee
The player pays a flat fee per network, shown in the quote; the operator absorbs the real cost.
The ledger stays in fiat
Crypto is converted as it arrives, with the rate, its source and the time recorded and the amount rounded down — so the books never hold a coin.
Held for a person, never lost
A deposit in the wrong asset, to an address never issued, that cannot be attributed, too small, from a market without crypto, refused by the identity or safer-gambling checks, or high risk waits for a person to decide. Money on chain never expires.
Follow a hand's money.
From the buy-in to the books.
A live walkthrough of the ledger, the wallets and the nightly reconciliation — with the measurements behind every number on this page.
Social casino
A social casino, built in.
Play money that behaves like money.
01
A chip store that survives a crash
02
Daily chips and missions
03
Rewarded ads
04
The store follows the market
Grant play chips
Batch grants with per-player results, a ceiling staff can tune, and an audit row per batch.