Trust, but verify
Provably fair on Solana Garden
Every chance game on solana.garden uses the same commit-reveal pattern: you see a hash before you pay, the server seed is revealed after, and anyone can recompute the outcome. No black box — just SHA-256 and public formulas.
How commit-reveal works
-
Commit. The game picks a random 32-byte server seed and shows you
SHA-256("garden-<game>:v1:" + serverSeed)— the commit hash. Changing the outcome after this point would require breaking SHA-256. - Pay. You send SOL with a memo that includes the commit prefix and (for single-round games) the precomputed outcome. Your transaction signature often becomes the client seed.
- Reveal. After payment confirms, the full server seed appears on screen. Recompute the hash and the outcome — they must match what you saw before paying.
Real-payout bet modes (/bet/) store the full 64-character commit in the
on-chain memo; the settlement server reveals the seed when paying winners.
Games + hash formulas
| Game | Commit | Outcome |
|---|---|---|
| Garden Dice | SHA-256("garden-dice:v1:" + seed) |
1 + (int(SHA-256("garden-dice:roll:" + seed + ":" + client)[0:8], 16) mod 6) |
| Coin Flip | SHA-256("garden-coin:v1:" + seed) |
H if even, T if odd — from garden-coin:flip: hash |
| Mines | SHA-256("garden-mines:v1:" + seed) |
Mine tile indices from repeated garden-mines:pos: hashes |
| Plinko | SHA-256("garden-plinko:v1:" + seed) |
8 left/right decisions → bucket → multiplier |
| Crash | SHA-256("garden-crash:v1:" + seed) |
Bust multiplier from garden-crash:bust: hash (2.5% house edge) |
Pay-per-play (treasury)
Memo stores a short commit prefix + outcome, e.g. dice:4:abc123. You pay the treasury; entertainment + bragging rights.
Real SOL payouts (bet mode)
Memo stores full commit + client seed, e.g. settle-dice:4:64hex…:sig. Server settles wins from the hot wallet bankroll (2.5% house edge, capped bets).
On-chain verifier
Paste any payment signature, enter the revealed server seed, and recompute the result yourself.
Open verifierWhy client seeds matter
The client seed mixes your input into the outcome so the server cannot pick a seed after seeing your payment. By default Garden games use your transaction signature (first 64 chars) — unpredictable to the server when the commit was published. You can also set a custom client seed before paying on dice and coin pages.
Go deeper
- On-chain result verifier — paste tx + server seed
- Provably fair dice guide — step-by-step with live demo
- Provably fair Solana games hub — compare fairness models
- Technical build log — RPC proxy, Solana Pay, commit-reveal implementation
- Transaction lookup — confirm payment landed (no fairness math)