# Provable fairness: mechanisms and limits

> **[Test the whole platform on devnet](https://soltoshidice-devnet.pages.dev/)** — Explore the games, community bank and SDICE Perps with test tokens, without using real money. Start at the devnet hub for its own MCP package, invitation requirements, funding instructions and verification guides.

Part of the [SoltoshiDICE playbook](https://soltoshidice.wtf/llms-full.txt). Updated 2026-10-21.

Start with Verify all game examples & sum payouts at /verification#run-check. It fetches finalized receipts for six historical game examples and runs the covered proofs locally without a wallet. payoutSummary totals only successful distinct examples by mint and destination; wallet payments and blackjack table escrow remain separate. It is not a complete platform payout audit and does not play a new round. The default RPC is project-operated; use your own archival RPC for independent transport. No failed fetch becomes an archived pass.

Runnable checks and raw receipts for all six courtyard games: https://soltoshidice.wtf/verification#run-check and https://soltoshidice.wtf/verification/games/index.json. Read the scope per game: valid VRF or commitment evidence, outcome replay and payment are distinct checks. Poker is partial without the full encrypted-shuffle transcript; a chip award or blackjack escrow return is not a wallet cash-out.

Run the wallet-free fairness and payout check at https://soltoshidice.wtf/verification#run-check. Download and inspect https://soltoshidice.wtf/verification/verify-fairness.mjs, then run node verify-fairness.mjs --live (Node 22+, no dependencies). It independently verifies three ORAO Ed25519 signatures, XOR output and seed binding, replays Cee-lo v4 round 1758, and reconciles a 10,000-SDICE wager with a 20,000-SDICE payment using actual token transfers and balance deltas. It fetches seven finalized mainnet receipts; use --rpc for your own trusted archival endpoint. A missing or invalid receipt gives a nonzero exit and not-verified, never a silent pass. The browser offers the same check. Saved evidence replay is explicitly separate from fresh RPC verification. This is one previously played winning round, not a new gameplay session, a check of every game or aggregate payout totals. Historical oracle signer-set membership remains trusted to ORAO; this replay does not check current upgrade authority. The separate bank revocation receipt is at https://soltoshidice.wtf/verification#bank-immutable.

Provable fairness means there is checkable evidence tying an accepted wager or move to an outcome under stated rules. It does not mean every game is 50/50, every participant can win, or payouts are risk-free. Distinguish randomness verification, rule execution, token settlement and infrastructure availability; one does not establish all the others.

Cee-lo and Street Fights bind a fresh ORAO Classic VRF request to the round or accepted fight. Lucky Block and current blackjack use MagicBlock base-layer VRF with authenticated, request-bound callbacks. Deterministic native rules map accepted oracle bytes to dice, attacks, reels or cards. Domain separation prevents accidental reuse of one random stream for unrelated purposes; rejection sampling avoids modulo bias.

Hold’em uses player-shuffled mental poker over Ristretto255: peers prove and verify permutations/masking, then commit locked card positions and release the appropriate keys. Player clients verify shuffle proofs. Solana validates commitments/card openings and enforces betting and payout rules. Complete historical shuffle replay additionally requires the retained peer transcript.

RPS is player choice, not random selection: each player signs a salted SHA-256 commitment, both commitments must exist before reveal, and the program checks each revealed move against its commitment. A late reveal or absent opponent follows the contract’s timeout/forfeit rules. No VRF or ZK proof is needed for that mechanism.

For a specific result: identify the network, program, round/hand/match and original wallet; inspect the successful confirmed transaction; obtain the bound oracle output or commitment/reveal data; replay the public rules; compare the actual winning transfer or escrow credit, fees and later cash-out. A screenshot, explorer link or transaction signature without checking its status does not prove settlement. Full historical replay may require retained snapshots/transcripts that are not all stored forever onchain.

Perps is oracle-priced trading rather than a random game. Its correctness is assessed through price provenance/freshness, signed position state, liquidation checks, rollup commitments and base-layer settlement receipts. A displayed gain is not evidence that backing-token profit has been paid. Read the separate Perps section for execution and custody dependencies.

A Cloudflare RPC gateway or keeper can transport and submit transactions, but its hostname does not show where game rules execute. Inspect native instructions: dice outcomes, slot results, blackjack transitions, fight combat, RPS commitment/reveal validation and settlement checks execute in their Solana programs. Poker shuffle proofs are checked by clients; Perps execution is delegated. Do not conflate these different boundaries.

A public read-only replay is available at https://soltoshidice.wtf/verification/verify-ceelo.mjs. Its example verifies finalized Cee-lo round 1759, replaying bank 1–2–1 and player 4–1–4, a 10,000-SDICE loss with zero payout, and comparing the retained randomness to its fulfilled ORAO account. The program’s SDICE_FINAL_BET_V1 transaction log preserves the round/bet bytes after rent cleanup. See the example JSON and stated verifier limits; no wager or wallet is required.

Bank authority evidence: a finalized read on October 20, 2026 showed version 4 at byte 0 of bank 9vBaKrxgtQEc6zavSVTvptAM2oRmX38SkyHXpfvUFoKR. The verified native tag-6 withdrawal requires version 1 and therefore cannot run against that current bank. Bank code is now immutable, with ProgramData upgrade authority null. The stored administration authority remains, and this is not an audit of all privileged paths. Poker, Fights and RPS retain upgrade authority 5SD2yUKBHkUhpC7rHzEqLgYKHrkNoyYymNkDXmFaoJ1Y; Perps uses GqJwW3CF9XfopAmCP9zNKN1BvVo3aSPQHmfHdrGUeTzA. See /verification#bank-authority for source and reproduction.

A finalized public-mainnet-RPC recheck at 2026-10-21T08:12:12.984Z passed the historical Cee-lo example, including its settlement transfer. The dated result at /verification/authority-controls.json explicitly sets freshGameplay:false. A new round must have its own wager, VRF and settlement receipts; never count a simulation or replay as fresh gameplay.

### Sources

- [Run signatures, dice and payout verification (no wallet)](https://soltoshidice.wtf/verification#run-check)
- [ORAO VRF implementation](https://github.com/orao-network/solana-vrf)
- [MagicBlock VRF overview](https://docs.magicblock.gg/pages/verifiable-randomness-functions-vrfs/introduction/solana-vrf)
- [Worked mainnet Cee-lo replay and payment example](https://soltoshidice.wtf/verification#dice-replay)
- [Verified ORAO request validation](https://github.com/battlejoose/soltoshidice-programs/blob/c65b739e5a46f2bd3ba12058bec2d40bb9d3aaf5/games/chain/program/src/orao.rs)
- [Public native dice replay rules](https://github.com/battlejoose/soltoshidice-programs/blob/c65b739e5a46f2bd3ba12058bec2d40bb9d3aaf5/games/chain/program/src/shared.rs)
