Last updated: March 1, 2026
Every game outcome in Beach Bingo is determined by cryptographic randomness that neither the players nor the developers can predict or manipulate. You can independently verify every game result using only publicly available on-chain data.
Beach Bingo uses Switchboard On-Demand for all randomness. Switchboard is a decentralized oracle network that generates cryptographically verifiable random numbers. Here is how it works:
Each bingo number is derived as follows:
hash = SHA-256(vrf_result || round_id || number_index || attempt)
number = hash[0..2] as u16 // First 2 bytes as 16-bit integer
if number > max_valid: // Rejection sampling (no modulo bias)
increment attempt, retry
final_number = (number % 75) + 1 // Range: 1-75
Rejection sampling eliminates modulo bias, ensuring every number from 1-75 has an exactly equal probability of being selected.
The VRF account is bound to the round before randomness is generated. This prevents anyone from generating multiple random values and choosing a favorable one.
VRF results expire after 300 Solana slots (approximately 2 minutes). If a VRF result is older than this, it is rejected. This prevents "VRF shopping" where someone might try to reuse old random values.
Each VRF account can only be used once per round. The program tracks the last VRF account used and rejects duplicates. A monotonically incrementing VRF call counter provides additional replay protection.
Admin wallets are explicitly blocked from participating in games (AdminCannotPlay error). This prevents insider gaming.
Bingo cards are generated using a Fisher-Yates shuffle seeded with:
seed = VRF_result XOR player_pubkey XOR slot_index XOR purchase_nonce XOR clock_slot
This ensures every card is unique and unpredictable. The Fisher-Yates shuffle uses rejection sampling to eliminate modulo bias in the shuffle permutation.
Win verification is performed entirely on-chain:
Every significant action emits an on-chain event that you can verify:
CardPurchased: Player, round, amount, card typePrizeCalculatedEvent: Total pool, multipliers, net prize, winner statusSalaryDistributed: Primary amount, split amount, total distributedAdminTaxDistribution: Amount, remaining balanceTournamentFinished: All prize amounts, total distributedPaymentProcessed: Amount, price, product, category| Fee | Rate |
|---|---|
| Prize Pool (Player Winnings) | 60% |
| House Treasury | 40% |
| Tournament Platform Fee | 5% |
| Community Raffle Fee | 15% |
| Maximum Tax Rate (capped) | 20% |
Every game can be independently verified:
vrf_account field links to the Switchboard randomness account. Verify it was generated by an authorized Switchboard oraclecalled_bitmask field contains all called numbers. Apply the SHA-256 derivation algorithm above to the VRF result to confirm each number matchesPrizeCalculatedEvent with the full fee breakdownProgram ID: G3qG9A87VSrHqMcQ56HHs5eTN4iwBFUTDmEwgS95eQ5y
Questions about fairness? Reach us at info@fetelabs.com or on X at @BeachBingoSol.