BuzzPot Play
Whitepaper

Whitepaper

Last updated 30 October 2026

BuzzPot is a lowest-unique-number game on Solana. A room fills with players, everybody secretly picks a number, and whoever picked the lowest number that nobody else picked wins the pot. The rules and the money live in one public program, so no server of ours decides anything. This page describes the program as it is deployed on the date above.

The short version

The game

Every room has an entry fee, a number of seats and a range of numbers to pick from. A room with 10 seats lets everyone pick from 1 to 10. It starts the moment the last seat fills. There is no countdown.

Once the room is full, everyone locks in a number in secret. When the numbers come out, the winner is the player with the lowest number that exactly one player picked. If two players both picked 2 and one player picked 5, the 2s are out and the 5 wins. If no number is unique, nobody wins the room.

Winning has a price. Every number costs a fixed amount. In most rooms a number costs 1 USDC, so winning with a 3 costs 3 USDC. You only pay if you win, and you pay at the end. The smallest rooms use smaller steps (0.1 USDC in the 5-player room with a 1 USDC entry, 0.2 USDC in the 10-player room) so the price of winning stays small next to the pot.

A worked example: 10 USDC entry, 10 players, 1 USDC per number, 5% fee.

Ten players each pay 10 USDC100.00 USDC
BuzzPot's 5% comes off the entry fees−5.00 USDC
The pot95.00 USDC
The winner picked 3, the lowest number only one player picked, and pays for it−3.00 USDC
The winner receives the pot+95.00 USDC
The winner's result after the 10 USDC entry and the 3 USDC+82.00 USDC
Each of the other nine players−10.00 USDC
What BuzzPot keeps: the fee plus the winner's 3 USDC8.00 USDC

If no number had been unique, the 95 USDC would have gone to the Grand Pots instead. BuzzPot never puts its own money into a pot. A pot is only ever made of the players' entry fees.

Fair play: commit and reveal

If picks were visible, the last player to act could look at them and choose a winner. So a pick is locked in two steps.

Step one: lock in

Your browser makes a random 32-byte secret (the salt) and posts only a fingerprint of your number and that secret:

commitment = keccak256( "buzzpot-seal-v2" || room || your wallet || number as 4 bytes || salt )

The fingerprint hides your number: with a 32-byte salt there is nothing to guess against. It also pins you to it, because you cannot later claim that a different number produces the same fingerprint. Your number and salt stay in your browser until step two.

Your wallet and the room are part of the fingerprint, so it only opens for you, in this room. If another player copies your fingerprint and later tries to reveal your number as their own, the program recomputes it with that player's wallet and it does not match.

Step two: reveal

Your browser sends the number and the salt. The program recomputes the fingerprint and rejects anything that does not match. The game needs no randomness, so there is no random-number service or oracle to trust.

StepTimeWhat happens
Lock inUp to 27 seconds after the room fills (the page shows 25)Everyone locks in a fingerprint. After the deadline the program refuses new lock-ins.
Reveal20 secondsReveals open as soon as every seat has locked in, or when the 27 seconds are over, whichever comes first. Nobody can reveal while someone else can still choose.
SettleAfter the revealsAnyone can settle the room. The program works out the winner itself.

A seat that never locks in forfeits, and its entry fee stays in the pot. Lock-in closes before anyone has to reveal, so a player who waits cannot read the other numbers and then choose. The deadline is enforced by the program, not by the timer on the page.

Where the money goes

Players deposit USDC into one vault. The vault is a token account owned by the program, with no private key behind it. Your balance is a record on the blockchain, and you can withdraw whatever is not in play at any moment.

What happensWhat the money does
You depositUSDC goes into the vault and your balance goes up.
You join a roomThe entry fee leaves your balance. 95% goes into the room's pot and 5% stays in the vault as BuzzPot's fee.
You lock in or revealNothing moves.
The room settles and someone winsThe winner receives the pot. The winner's number leaves their balance and stays in the vault as BuzzPot's.
The room settles and nobody winsThe whole pot is split between the Hourly Grand Pot and the 12-Hour Grand Pot (50/50 at the moment).
The room does not fill in time (15 minutes at the moment)Anyone can cancel it. Every player gets the full entry fee back, fee included.
You withdrawUSDC goes from the vault to your own wallet. Only you can sign for it.
BuzzPot collects its earningsThe config multisig can send up to the earned tally (explained below) to a USDC account it names, and not a cent more.

The rule that keeps it solvent: the vault always holds at least all player balances, plus every pot in play, plus the Grand Pot pools. Anything above that belongs to BuzzPot. Besides a player's own withdrawal, collecting BuzzPot's earnings is the only way USDC can leave the vault.

How BuzzPot takes its share out

The program keeps a running tally of what belongs to BuzzPot. Money only goes into the tally once it can never come back to a player: the 5% fee once a room has settled (a cancelled room refunds everything, fee included, so it counts nothing), the winner's number once it has been charged, and the 1 USDC Grand Pot entry fee. The instruction collect_fees lets the config multisig pay out up to that tally and not more. Player balances, rooms in play and Grand Pot pools are not part of the tally, so this instruction cannot reach them.

Grand Pots

There are two Grand Pots, an Hourly one and a 12-Hour one. Rooms where nobody won feed them, and qualified players compete for them.

The rooms

There are 24 room types: six entry fees (1, 5, 10, 50, 100 and 1,000 USDC) in four room sizes. A bigger room means a bigger pot.

Room sizeNumbers you can pickPrice of a number
5 players1 to 101 USDC (0.1 USDC in the 1 USDC room)
10 players1 to 101 USDC (0.2 USDC in the 1 USDC room)
50 players1 to 501 USDC
100 players1 to 1001 USDC

The pot is 95% of the entry fees, from 4.75 USDC (5 players at 1 USDC) up to 95,000 USDC (100 players at 1,000 USDC). Any room type can be switched off by the config multisig.

The website asks for your entry fee plus a reserve that stays in your game balance to pay your number if you win. Rooms you cannot afford are greyed out, and the number picker only offers numbers you could pay for. That is a rule of the website, not of the program (see the next section).

Things to know

Who can change what

The moving parts

How it was tested

Numbers and addresses

Fee, taken from each entry fee when you join5%
Busted pots, split Hourly / 12-Hour50% / 50%
Lock-in deadline after a room fills27 seconds
Reveal phase20 seconds
A room that does not fill is cancelled after15 minutes
Grand Pot entry1 USDC plus the seat's network fee
Rooms to qualify, Hourly / 12-Hour10 / 50
Grand Pot windows, lock in + reveal5 minutes + 5 minutes
Joining a Grand Pot closes before the reveal10 minutes
Instant play temporary key2 hours
Fingerprintkeccak256("buzzpot-seal-v2" || room || wallet || number as 4 bytes || 32-byte salt)

These are the settings on the date above. The config multisig can change some of them (the fee, the split, the windows). The program and the blockchain are what count.

NameAddress
ProgramE3uX7kUxFnENTKFC58HF2DsbYDekcgDzpjFNwaRVvVDi
Config multisig92RPRBM1dHhuMYVW45LTiKAMWt7VgycWZEV4Jr9mn1PX
Config vault (signs the admin actions)8G4gbkvXTi7ktVzf8Sk13b2EtQCvRaBsVso4PxA9sE9t
Upgrade multisigBdka34xHnYTpKTdGwZgZWVAxaRePpyW3njPrEKfRt4sU
Upgrade vault (the program's upgrade authority)CWjfbjbS5e6H1PdcKdxStm9qvQCXrwr9FRgz6nkx42R2
USDCEPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v

If this page and the program ever differ, the program is what counts. Playing can lose money: see the Terms of Use.