Poker
Pipoke poker is provably fair Texas Hold'em on chain. Hole cards are sealed with a NaCl box and only revealed post-hand. The deck commits before the hand and reveals after, so neither the dealer nor a player can manipulate the order. The pot, the chip stacks, the rake, and the payouts all settle on-chain.
Pipoke runs on Octra Devnet today. Any fee, price, or limit referred to here is a contract setting chosen for testing. Every one is owner-settable, and mainnet values will be different. These docs describe how the mechanics work, not what the numbers are.
#Cash and tournaments
| Format | Contract | Players |
|---|---|---|
| Cash tables | PokerShard |
6-max ring games. You buy in, you cash out any time. |
| Tournaments | PokerTournament |
Single-table SnGs and multi-table tournaments up to 180 players. |
#Base constants
| Constant | Value |
|---|---|
| Small blind | 5 |
| Big blind | 10 |
| Default starting stack | 1,000 |
| Turn timer | 60,000 ms (60 seconds) |
POKE decimals |
1,000,000 raw per POKE |
#Table status enum
| Status | Number | Meaning |
|---|---|---|
OPEN |
0 | Open for buy-ins. |
RUNNING |
1 | Hand in progress. |
SETTLED |
2 | Final settlement. |
CANCELLED |
3 | Table cancelled. |
#Hand state on chain
While a hand is live, the table record tracks:
street(0 = preflop, 1 = flop, 2 = turn, 3 = river, 4 = showdown)board[](community card numbers as they reveal)pot,current_bet,min_raisecommitted[](per-seat chip commitments)to_act(whose turn it is)folded[],all_in[]act_deadline(epoch + ms by which the current player must act)resultat showdown:winner,split,by_fold,pot,hand_name,hands[],best5[],awards[],pots[]
#Cash table flow
You join a table with a buy-in. The dealer assigns you a seat. Each hand:
- The dealer commits to a deck order (a hash on chain).
- Hole cards are dealt and sealed to each player with a per-hand symmetric key, wrapped to that player's box pubkey.
- The board reveals as community cards in normal Hold'em order: flop, turn, river.
- Players act in turn. Each action (check, call, bet, raise, fold) is a signed transaction.
- At showdown, the dealer reveals the deck commit and players reveal their hole cards. The contract checks every reveal against the commit.
- The pot pays out, the rake is collected.
#Tournament structure
A tournament has a starting stack, a blind schedule, a payout table, and a re-entry policy.
| Setting | Value |
|---|---|
| Tournament rake | 5% (500 basis points) |
| Re-entry hard cap | 5 |
| Minimum starting stack | 10,000 chips |
| Locked payout split | p1 = 50%, p2 = 30%, p3 = 20% (in basis points: 5000 / 3000 / 2000) |
Three blind schedules ship out of the box. Each is a BlindLevel[] with per-level small blind, big blind, ante, and epochs per level. Octra runs ~4 epochs per minute, so an epochs value of 20 is a 5-minute level.
| Schedule | Per-level duration |
|---|---|
| Turbo | 5 minutes (20 epochs) |
| Standard | 12 minutes (48 epochs) |
| DeepStack | 20 minutes (80 epochs) |
Starting stack presets: 10,000 / 15,000 / 20,000 chips. Payout structures: winner-take-all, top 2, or top 3.
#Tournament status enum
| Status | Number | Meaning |
|---|---|---|
REGISTERING |
0 | Late registration open. |
RUNNING |
1 | Tournament in progress. |
FINISHED |
2 | Final table settled. |
CANCELLED |
3 | Cancelled. |
#Provability
Hole-card seal. Your hole cards are sealed to your wallet only. The dealer cannot peek.
Deck commit. The dealer publishes a commit to the deck order before the hand. After the hand, the dealer reveals the salt. Players can verify the commit and the reveal match. A dealer who tries to swap the deck mid-hand fails the verification.
Open seed. The seed used to shuffle the deck is publicly revealed post-hand. Anyone can replay the shuffle to confirm the order.
#Session-keyed
Every cash and tournament action other than the buy-in goes through the session key. No popup per fold.