“Provably fair” is the most abused phrase in crypto gaming. It is on landing pages, in whitepapers, in Telegram bios, and in the marketing copy of platforms that could not produce a single verifiable game outcome if you held a gun to their server rack. The phrase has been drained of meaning because almost nobody ever checks.
So let us fix that. This post is not an argument that Satoshie is fair. It is a set of instructions for proving it yourself, without asking us anything, using nothing but a block explorer and about four minutes.
TL;DR
- Satoshie games settle with Chainlink VRF v2.5 on Base, so the random number is generated off-chain but its cryptographic proof is verified on-chain before the result can be used.
- Every coinflip emits a
BetPlacedand aBetResolvedevent; every raffle emitsRandomnessRequestedandWinnerSelected. All of it is public on BaseScan forever. - A coinflip result is literally
randomWords[0] % 2. You can recompute it in a browser console and compare it against what the contract paid out. - The randomness request is committed before the outcome exists, so there is no window in which anyone, including us, can see the result and change the game.
- If a gaming platform cannot give you a transaction hash and a formula, it is not provably fair. It is just fair-ish, and you have their word for it.
The difference between a claim and a receipt
Most crypto casinos run what the industry politely calls “commit and reveal” fairness. The server picks a secret seed, shows you a hash of it, you play, and afterwards the server reveals the seed so you can check the hash matched. It sounds rigorous. It is not nothing. But it has a structural hole you could drive a lorry through: the server chose the seed, the server holds the seed, and the server decides which seed to reveal. If it maintains a pool of pre-hashed seeds and picks the convenient one after seeing your bet, the hash still checks out and you never know.
That is not verification. That is a magic trick performed with real cards.
On-chain verifiable randomness closes the hole by removing the platform from the process entirely. Chainlink VRF generates a random number along with a cryptographic proof that the number was derived from a pre-committed key and the specific request that produced it. The VRF coordinator contract on Base verifies that proof in the transaction itself. If the proof does not check out, the transaction reverts and the number never reaches the game. No human is trusted at any step, including us.
What actually happens when you flip a coin on Satoshie
Four things, in this order, all of them public:
- You place the bet. The contract records your stake and your chosen side, emits
BetPlaced, and immediately calls the Chainlink coordinator with a request for randomness. The request specifies three block confirmations and exactly one random word. - The request is committed. At this moment the outcome does not exist yet, not in our database, not in a queue, nowhere. There is nothing to leak and nothing to manipulate, because the number has not been generated.
- Chainlink fulfils. The coordinator submits the random word plus its proof. The proof is verified on-chain. Only then does our contract’s
fulfillRandomWordscallback run. - The contract resolves the bet. The result is computed as
randomWords[0] % 2. Heads or tails. The contract compares it to your call, pays out or keeps the stake, and emitsBetResolved.
That is the whole game. There is no step where anyone decides anything.
How to verify a result yourself
Open BaseScan and find your bet transaction. Click the Logs tab. You will see the BetPlaced event with your address, stake and chosen side, and alongside it the randomness request going out to the coordinator with a requestId.
Now find the fulfilment. It is a separate transaction, submitted by Chainlink, calling back into the Satoshie contract with the same requestId. In its logs you will find the raw random word: a 77-digit unsigned integer.
Take that number. Divide by two and look at the remainder. That single bit is your result. Compare it to the BetResolved event and to what actually landed in your wallet. If they match, the game was fair, and you did not have to believe a word we said to establish that.
The step people miss is that you do not need to verify the VRF cryptography by hand. Base already did it. The proof was checked by the coordinator contract as a precondition of the fulfilment transaction succeeding. The fact that the transaction exists in a finalised block is the verification. Your job is only to check the arithmetic that turns the number into an outcome.
Raffles work the same way, with different maths
A Satoshie raffle emits TicketPurchased for every ticket, so the complete entrant list is reconstructible from chain history by anyone. When the raffle closes, the contract emits RandomnessRequested with its requestId, and on fulfilment it hashes the VRF word together with the previous block hash, takes the remainder against the number of tickets minted, and selects that index from the ticket array. Then it emits WinnerSelected with the winning ticket ID.
Both inputs to that hash are public. The ticket array is public. The formula is in verified source code. Anyone with a laptop can recompute the winner and confirm the contract picked the same one. Not “audit the platform” in the vague, expensive, PDF-in-a-footer sense. Recompute the actual result.
The test you should apply everywhere
Here is the uncomfortable exercise. Go to whichever crypto game you played last week and try to answer three questions: what transaction hash produced my result, what number came out of it, and what formula turned that number into an outcome?
On the overwhelming majority of platforms calling themselves provably fair, you cannot answer any of the three. There is no transaction, because the randomness never touched a chain. There is a seed, maybe, revealed on a settings page nobody visits, generated by the same company that takes the other side of your bet.
We built Satoshie on Base with Chainlink VRF specifically so those three questions always have answers, and so the answers do not depend on our continued goodwill, our uptime, or our company existing. The contracts are immutable. The events are permanent. If we vanished tomorrow, every game we ever settled would remain independently checkable.
That is the actual standard. Not a badge on a homepage. A transaction hash and a formula, and the freedom to never trust us again.
Ready to check our work? Play a coinflip or enter a raffle at satosh.ie, then go and verify it on BaseScan yourself. We would rather you did.
📷 Photo by Markus Winkler on Unsplash


