100% Blockchain. 0% Server.
Every bet, every random number, every payout is verifiable on the blockchain. We can't cheat you because we don't have the infrastructure to.
Live Odds from Smart Contract
These odds are read directly from the blockchain in real-time. They cannot be changed without a public transaction.
Your Win Rate
50.0%
Playing vs House
House Win Rate
50.0%
House games
House Edge
0.0%
Fair (0%)
P2P Games Are Always 50/50
When you play against another player (not the house), the odds are exactly 50/50 with zero house edge. The contract code proves this.
Verify These Odds On-Chain
0x10ff96bf...f04751cf
How Chainlink VRF Works
You Place Your Bet
When you bet, the smart contract locks your funds and calls Chainlink VRF to request a random number. At this point, nobody knows the outcome.
playHouseGame(betAmount) → requestRandomWords(roomId)VRF Oracle Receives Request
Chainlink's decentralized oracle network receives the request. Multiple independent node operators participate to generate the random number.
VRFCoordinator.requestRandomWords(keyHash, subId, confirmations, gasLimit, numWords)Cryptographic Randomness Generated
Chainlink generates a 256-bit random number using cryptographic proofs. This number is verifiable on-chain and nobody could have predicted it.
randomWords[0] → 256-bit cryptographically secure random numberWinner Determined & Paid
The random number is used to determine the winner (e.g., odd/even for coin flip). The smart contract automatically transfers winnings to the winner.
winner = randomWords[0] % 2 == 0 ? playerA : playerBMathematical Fairness Guaranteed
Chainlink VRF generates a 256-bit cryptographically secure random number. This number has a mathematically perfect 50/50 distribution for binary outcomes.
256-bit Random Number
A truly random 256-bit number has exactly 50% probability of ending in 0 (even) and 50% probability of ending in 1 (odd). This is mathematical fact, not an approximation.
The Modulo Operation
randomWords[0] % 2We use modulo 2 (% 2) to determine the winner. If the random number is even, the result is 0. If odd, the result is 1.
0
Even number
Player A wins
1
Odd number
Player B wins
Cryptographic Proof Prevents Manipulation
Chainlink VRF includes a cryptographic proof with every random number. This proof verifies the number was generated correctly - even the VRF node operator cannot choose a specific outcome.
Room Creator = Room Joiner
A common question: Does creating a room give you an advantage? The answer is NO. Here's why both players have exactly the same odds:
Room Creator (Player A)
- Creates the room and sets bet amount
- Assigned to outcome 0 (even numbers)
- Waits for opponent to join
Win Chance
Room Joiner (Player B)
- Joins an existing room
- Assigned to outcome 1 (odd numbers)
- Triggers the game to start
Win Chance
Why It's Mathematically Equal
The random number is generated AFTER both players have joined. Neither player can influence the outcome. Since even and odd numbers are equally distributed in any random set, both outcomes have exactly 50% probability. Creating a room does NOT give any advantage.
// Player A wins if random % 2 == 0 (50%)
// Player B wins if random % 2 == 1 (50%)
// The assignment is arbitrary - neither position has an advantageWhy Zero Server Matters
Traditional Online Casinos
- ✗Server controls the random number generator
- ✗Backend can adjust odds in real-time
- ✗You can't verify game outcomes
- ✗House always has hidden advantage
PeetBet (100% Blockchain)
- Chainlink VRF generates random numbers
- Odds are stored on-chain and immutable
- Every game outcome is publicly verifiable
- Code is the law - no hidden manipulation
Verify It Yourself
You don't have to trust us. Here's how to verify any game outcome:
Go to Etherscan
Open the contract address on Etherscan. All transactions and events are public.
Find the Game Transaction
Look for the transaction hash of your game. You can find it in your wallet history.
Check the VRF Callback
Find the fulfillRandomWords event. This shows the exact random number used.
Verify the Math
Use the random number to verify the outcome: randomWord % 2 = 0 means Player A wins, 1 means Player B wins.
The Actual Contract Code
This is the real code that determines winners. It's deployed on Ethereum and cannot be changed.
// Winner determination logic (from PeetBet.sol)
function fulfillRandomWords(uint256 requestId, uint256[] calldata randomWords) internal {
uint256 roomId = requestIdToRoomId[requestId];
GameRoom storage room = rooms[roomId];
address winner;
if (room.isHouseGame && houseEdgeBps > 0) {
// House game with edge: use 10000-based calculation
uint256 userWinThreshold = 5000 - (houseEdgeBps / 2);
uint256 randomResult = randomWords[0] % 10000;
winner = randomResult < userWinThreshold ? room.playerA : room.playerB;
} else {
// P2P or house game with no edge: pure 50/50
uint256 randomResult = randomWords[0] % 2;
winner = randomResult == 0 ? room.playerA : room.playerB;
}
room.winner = winner;
balances[winner] += (room.betAmount * 2);
emit GameResult(roomId, winner);
}