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

  1. 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.
  2. 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.
  3. 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

GameCommitOutcome
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.

Browse arcade

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).

Try bet dice

On-chain verifier

Paste any payment signature, enter the revealed server seed, and recompute the result yourself.

Open verifier

Why 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