verified_userVerified Fair — Cryptographically Proven

We Literally Can't Cheat

Every dice roll and card shuffle on Naija Game Arena is generated using a commit-reveal cryptographic system. The randomness is locked before the game starts, and you can verify every outcome yourself after the game ends.

This is the same provably fair standard used by international poker platforms and licensed crypto casinos. We adapted it for board games.

psychology

The Core Idea in 30 Seconds

Before the game, the server picks a secret number and shows you its fingerprint (a hash). You also contribute your own random number. During the game, every random event is mathematically derived from both numbers combined. After the game, the server reveals its secret — and you can check that the fingerprint matches and that every event was computed correctly. If the server changed anything, the fingerprint wouldn't match. That's the whole trick.

Step by Step

How Provable Fairness Works

lock
Before the Game
Commit
arrow_rightServer generates a random 256-bit server seed
arrow_rightServer computes hash = HMAC-SHA256(server_seed)
arrow_rightServer sends you the hash (the commitment)
arrow_rightA client seed is generated (you can set your own)
arrow_rightNeither side can change their seed after this point
server_seed → HMAC-SHA256 → hash hash is public, seed is secret
casino
During the Game
Generate
arrow_rightEvery random event gets a sequential nonce (0, 1, 2...)
arrow_rightInput = server_seed + client_seed + nonce
arrow_rightOutput = HMAC-SHA256(input) → 32 random bytes
arrow_rightBytes are converted to game outcomes (dice, shuffle)
arrow_rightSame input always produces the same output
HMAC-SHA256(server_seed : client_seed : nonce) → 32 bytes → dice roll / shuffle
verified
After the Game
Reveal & Verify
arrow_rightServer reveals the original server seed
arrow_rightYou hash it → does it match the commitment from Step 1?
arrow_rightYou recalculate every event using both seeds + nonces
arrow_rightCompare results to what actually happened in the game
arrow_rightVerification runs in your browser — zero trust required
hash(revealed_seed) === committed_hash? ✅ recalculate all events → match? ✅
Under the Hood

The Cryptography

For those who want the technical details. We don't hide the math — we show it.

fingerprint

HMAC-SHA256

The hash function behind everything

HMAC-SHA256 is a keyed-hash message authentication code that produces a 256-bit (32-byte) output. Three properties make it perfect for provable fairness:

Deterministic

Same inputs always produce the exact same output. server_seed + client_seed + nonce → identical result every time.

One-way

Given the hash output, it's computationally infeasible to reverse-engineer the input. The server seed stays secret until revealed.

Avalanche Effect

Changing a single bit of input produces a completely different output. You can't tweak a seed slightly to get a desired result.

// Seed commitment (before game)
hash = HMAC-SHA256(server_seed, "naija-game-arena")

// Random event generation (during game)
combined = server_seed + ":" + client_seed + ":" + nonce
bytes = HMAC-SHA256(combined, server_seed)

// Dice: take 4 bytes → unsigned 32-bit int → mod 6 + 1
dice = (bytes[0..3] as uint32) % 6 + 1

// Shuffle: Fisher-Yates using deterministic bytes
for i = n-1 down to 1:
j = (bytes[offset..+4] as uint32) % (i + 1)
swap deck[i], deck[j]
shield

Why Cheating is Mathematically Impossible

dnsServer can't cheat

The server commits to its seed via the hash before the game begins. Changing the seed after would change the hash — and you'd catch it during verification. Breaking SHA-256 would require ~2²⁵⁶ operations.

personPlayer can't cheat

The server seed is secret during the game, so you can't predict future random events. Even knowing your client seed, you can't compute outputs without both seeds combined.

handshakeNeither side controls outcomes

Random events depend on both server_seed AND client_seed. Neither party alone determines the output. The client seed adds entropy the server can't predict.

paymentsPlatform has no incentive

We take a flat 5% fee from every pot regardless of who wins. Our revenue is identical whether Player A or Player B wins. Zero financial incentive to rig any game.

Game by Game

What Gets Verified in Each Game

style
Whot!
Card shuffle (54 cards)
NONCE 0

Fisher-Yates shuffle of the full 54-card deck

SUBSEQUENT NONCES

None — all randomness is determined by the initial shuffle. Draw pile order, dealt hands, everything flows from nonce 0.

infoSince all randomness is in the shuffle, a single verification at nonce 0 covers the entire game.
casino
Ludo
Dice rolls (two D6 per turn)
NONCE 0

First dice roll

SUBSEQUENT NONCES

Each subsequent dice roll increments the nonce. A 15-minute Ludo game might use 40–80 nonces.

infoEach roll is independently verifiable. You can check any specific roll or verify all of them.
swap_vert
Snakes & Ladders
Dice rolls (1–6)
NONCE 0

First dice roll

SUBSEQUENT NONCES

Every roll increments the nonce. Fast mode games use fewer nonces than classic mode.

infoSame dice verification as Ludo. Each nonce maps to exactly one roll.
grid_on
Draughts
None
NONCE 0

N/A

SUBSEQUENT NONCES

N/A — Draughts is a pure strategy game with zero random elements.

infoNo provable fair system needed. The game is fully deterministic — every outcome is the direct result of player decisions.
See It In Action

Watch a Verification

Step through the commit-reveal process as it happens in a real game.

play_circleInteractive Demo
lock
STEP 1Game Starts

Server commits to a secret seed by showing you its hash. You can't reverse the hash, but you can verify it later.

dnsServer:Generates seed, publishes hash
personYou see:Hash: a7f3b2c1d4e5f6789012...
casino
STEP 2You Play

Every random event (dice roll, card shuffle) is generated from: server_seed + client_seed + nonce. The nonce increments with each event.

visibility
STEP 3Game Ends

Server reveals the secret seed. Now you have all three ingredients and can recalculate every random event yourself.

verified
STEP 4You Verify

Hash the revealed seed → does it match the hash from Step 1? Recalculate all events → do they match what happened? If both yes: the game was fair.

For Players

How to Verify Your Game

1

Finish a game

Play any Whot!, Ludo, or Snakes & Ladders game to completion.

2

Tap "Verify Fairness"

On the result screen or in your game history, tap the verification button. It's available on every completed game.

3

Review the proof

The panel shows the server seed hash (from before the game), the revealed server seed, your client seed, and every random event — all verified with green checkmarks.

4

Verify independently (optional)

Copy the seeds and use any HMAC-SHA256 tool to recalculate the outcomes yourself. The verification runs in your browser — it never trusts the server.

FAQ

Technical Questions

No. The server commits to its seed (via the hash) before the game begins and before it knows what moves you'll make. Changing the seed after commitment would change the hash — and you'd see the mismatch during verification. The client seed adds player-contributed entropy, so even the server can't pre-determine a favourable sequence.

We generate one for you using a cryptographic random number generator. The system is provably fair either way — the server committed to its seed before your client seed was generated. A custom client seed is an extra layer of control, not a requirement for fairness.

HMAC-SHA256 is a cryptographic function that takes a key and a message and produces a 256-bit (32-byte) hash. The critical properties: it's deterministic (same inputs = same output, always), it's one-way (you can't reverse-engineer the inputs from the output), and even a tiny change in the input produces a completely different hash. This makes it perfect for commit-reveal schemes.

The server seed hash is visible to all players in a match during the game. After the game ends, the full server seed and client seed are available to all participants so anyone can verify. This is by design — transparency is the whole point.

Correct. Draughts is a pure strategy game with zero random elements — no dice, no card shuffles. There's nothing to verify because there's no randomness to manipulate. The game outcome is entirely determined by player decisions. The provably fair system applies to games with random elements: Whot! (card shuffle), Ludo (dice rolls), and Snakes & Ladders (dice rolls).

Yes, it's the same commit-reveal architecture used by platforms like Stake, Rollbit, and licensed poker rooms. HMAC-SHA256 based provable fairness is the industry standard. We adapted it for traditional board games instead of casino games, but the cryptographic guarantees are identical.

Entirely in your browser. When you tap "Verify Fairness" on a completed game, the verification code runs locally on your device — it doesn't trust our server's response. You can also copy the seeds and verify them independently using any HMAC-SHA256 tool or write your own verification script.

Don't Trust Us. Verify.

Play a game, check the math, and see for yourself. Every game. Every roll. Every shuffle. Verifiable.

sports_esports Play & Verify — ₦500 Welcome Bonus
verified_user Verified fairlock HMAC-SHA256visibility Fully auditablecode Open verification