Skip to content

Truly Fair and Verifiable

Truly Fair and Verifiable

Every game outcome on Pachinko is cryptographically verifiable using ORAO VRF. Trust, but verify.

What is VRF?

VRF = Verifiable Random Function

A cryptographic primitive that produces random output with proof of correctness. Unlike traditional random number generators, VRF output can be verified by anyone.

PropertyMeaning
RandomOutput is unpredictable before generation
VerifiableAnyone can verify the output is correct
UniqueSame input always produces same output
Non-manipulableEven the generator can't bias results

ORAO Network

Pachinko uses ORAO Network for all randomness.

Why ORAO?

FeatureBenefit
Solana NativeFast, integrated with our programs
On-chain ProofsAll seeds published publicly
DecentralizedMultiple oracle nodes
Battle-testedUsed by major Solana projects

How It Works

The VRF Flow

1. ROUND ENDS


2. SERVER REQUESTS RANDOMNESS

   └── Sends request to ORAO oracle network


3. ORAO GENERATES SEED

   ├── Creates 32-byte random seed
   └── Generates cryptographic proof


4. SEED PUBLISHED ON-CHAIN

   └── Transaction visible on Solana


5. WINNER SELECTED

   ├── Blockpad: seed mod 25 = winning tile
   └── Pachinko: Fisher-Yates shuffle with seed


6. ANYONE CAN VERIFY

   └── Check seed → confirm winner calculation

Blockpad Verification

Winner Selection

winning_tile = VRF_seed mod 25

Example:
VRF seed: 0x7a3b...f2e1 (as integer: 1234567890)
1234567890 mod 25 = 15
Winner: Tile #15

How to Verify

  1. Find the round on Solscan
  2. Locate the VRF transaction (ORAO response)
  3. Extract the seed from transaction data
  4. Calculate: seed mod 25
  5. Confirm it matches the announced winner

Verification Example

StepValue
Round ID#12345
VRF TX5Kx7...
Seed (hex)0x7a3bf2e1...
Seed (int)1234567890
Calculation1234567890 % 25 = 15
WinnerTile #15 ✅

Lotto Verification

Winner Selection (Fisher-Yates)

Lotto uses Fisher-Yates shuffle for unbiased selection:

1. Get VRF seed (32 bytes)
2. Initialize random state with seed
3. Create array of all ball IDs
4. Fisher-Yates shuffle the array
5. Select first 5 balls
6. Deduplicate by wallet address
7. Assign prizes by position

Algorithm (Simplified)

javascript
function selectWinners(balls, seed) {
  let rng = initRNG(seed);
  
  // Fisher-Yates shuffle
  for (let i = balls.length - 1; i > 0; i--) {
    let j = rng.nextInt(i + 1);
    [balls[i], balls[j]] = [balls[j], balls[i]];
  }
  
  // Select up to 5 unique winners
  return deduplicateByWallet(balls.slice(0, 5));
}

How to Verify

  1. Find round's VRF transaction
  2. Get the seed value
  3. Run Fisher-Yates with that seed
  4. Confirm winning balls match

On-Chain Proof

What's Recorded

Every round records:

DataLocation
VRF Request TXSolana blockchain
VRF Response TXSolana blockchain
Random SeedIn response TX data
Winner(s)Game program state
Prize DistributionTransfer transactions

Transaction Trail

Round #12345 Timeline:
├── 12:00:00 - Round starts
├── 12:00:45 - Last bet placed (TX: abc123...)
├── 12:01:00 - Round ends
├── 12:01:01 - VRF requested (TX: def456...)
├── 12:01:02 - VRF response (TX: ghi789...)
├── 12:01:03 - Winner selected (Tile #15)
└── 12:01:04 - Prizes distributed (TX: jkl012...)

Security Guarantees

What We Guarantee

GuaranteeHow
UnpredictableVRF seed unknown until generated
UnbiasedCryptographic randomness, not pseudo-random
VerifiableAll proofs on-chain
Tamper-proofCannot modify after generation

What This Means

  • We cannot predict outcomes
  • We cannot manipulate results
  • We cannot favor certain players
  • Anyone can verify any round
  • All data is public on Solana

Verification Tools

Solscan

  1. Go to solscan.io
  2. Search for transaction ID
  3. View instruction data
  4. Find VRF seed in logs

Our Verification Page

Each round shows:

  • VRF transaction link
  • Seed value
  • Winner calculation
  • "Verify" button

Smart Contract Security

Program IDs (Devnet)

For up-to-date devnet program IDs for Blockpad, Lotto, and the Unified Wallet, see the Smart Contracts page.

Security Features

FeatureImplementation
Checked ArithmeticOverflow protection
Access ControlAuthority-only admin functions
PDA VaultsFunds in program-controlled accounts
Input ValidationAll inputs sanitized

Server Security

LayerProtection
APIRate limiting, CORS
AuthSignature verification
InputValidation middleware
DatabaseParameterized queries

User Security

Protect Yourself

✅ Do❌ Don't
Bookmark official URLClick random links
Verify transactionsApprove blindly
Keep SOL for feesDrain entire balance
Use official channelsTrust random DMs
Store recovery phrase offlineShare private keys

Scam Warnings

No admin will ever DM you first.

No one from Pachinko will ask for your recovery phrase.

Only use official links from this documentation.

FAQ

For common questions about Security and Fairness, see the FAQ → Security & Fairness section.

Resources

ResourceLink
ORAO Networkorao.network
Solscansolscan.io
Solana Explorerexplorer.solana.com

Built on Solana