Preview a Live Pot
Protocol Documentation

How uPOT works.

The full mechanism: the tax, the weights, the draw, the anti-sniper rule, and what ships on-chain. No hand-waving. Every number here is the one the hook will enforce.

01 · The mechanism

In one sentence

Every buy pays a 5% tax. The tax makes the pot. At the end of the round, one winner is drawn, and your odds are proportional to the tax you paid, multiplied by a bonus if you got in early.

This is not a lottery where everyone holds one ticket. It is a parimutuel: your weight in the draw is your money. Someone putting in $1,000 has 200× the odds of someone putting in $5, because they put 200× more into the pot.

02 · Parameters

The round

ParameterValueNote
Buy tax5%buys only, taken in ETH off the input
Snipe tax7.5%1.5× the base rate, first 10 seconds
Snipe window10 sno rank assigned, barred from the draw
Ticket minimum0.01 ETHbelow this, no ticket (anti-spam)
Round closepot target or 24 htarget published when the round opens; whichever comes first
Payoutwinner-takes-allthe whole pot to one wallet, every round
03 · The draw

Your odds

One wallet gets one entry rank, on its first buy of the round. Rank sets a permanent multiplier on everything that wallet stakes:

Entry rankDraw weightEffect on expected value
1 to 3×3.00+136% vs your tax
4 to 10×2.00+57%
11 to 20×1.50+18%
21 and up×1.00−21% (funds the bonus above)
tax t = buy × 5% weight w = t × m m = your rank multiplier odds P = w ÷ Σw your weight over the whole field payout = the entire pot EV = t × m ÷ m̄ m̄ = the field’s average multiplier

Your edge is not your multiplier. It is your multiplier relative to the field average. If everyone had ×3, nobody would have anything. And buy size still dominates rank: a latecomer staking $5,000 out-odds a rank-1 buyer staking $1,500. That is deliberate, so hoarding early ranks with dust wallets buys nothing.

04 · Fairness

Zero-sum by design

With no bonus, everyone’s expected value equals their tax exactly: the pot is nothing but the sum of the taxes, and it is paid out in full. The pool’s swap fee is separate and never touches the pot.

The early-entry bonus creates no money. It moves expected value from latecomers to early buyers, to the cent: what the first 20 ranks gain, rank 21+ pays. That transfer is the product, and it is fully visible in the calculator.

Run the numbers yourself. Every figure on this page (odds, weights, expected value) is reproducible from the formulas above, and will be verifiable against the contract once live.
05 · Anti-sniper

The snipe window

The first 10 seconds after launch are hostile territory for bots: buys pay 7.5% instead of 5%, receive no entry rank, and are barred from the draw entirely.

Why full exclusion? Because half-measures backfire. A sniper taxed at a higher rate pays more tax per dollar, and if weight follows tax, the anti-sniper rule would hand snipers the best odds in the field. Tested on real trade data, that is exactly what happened. So they are out, completely.

Every dollar sniped is a dollar added to a pot only real buyers can win. The harder the bots try, the more your ticket is worth.

Rank 1, the ×3 seat, therefore belongs to the first genuine buyer after the window: reachable for a human with the interface open, not just for a bot.

06 · Dilution

Why your odds move

Your odds are not fixed at the moment you buy. They settle at close, across the full field: enter when the pot is at $500 on a round that closes at $5,000, and your displayed odds will have been divided by ten along the way.

That is why the interface always shows two numbers, never one: your odds now, computed on the current pot, and your odds at close, projected onto the target and labelled as an estimate. What never moves is your rank advantage: the m ÷ m̄ edge is locked the moment your rank is.

07 · Implementation

On-chain

uPOT is a Uniswap v4 hook on Ethereum. There is no separate staking contract and no custodian: the mechanism lives inside the pool.

PieceHow
The taxtaken in beforeSwap: 5% of the ETH input, held as ERC-6909 claims inside the hook. No token transfer, minimal gas.
The ticketregistered in the same call: a new wallet gets the next rank, a returning one accumulates weight.
The drawverifiable randomness: Chainlink VRF on Ethereum mainnet, requested when the round closes. A weighted binary search over the cumulative weights picks the winner.
The payoutpull pattern, always: the win is recorded, the winner calls claim(). Nothing is ever pushed from a swap callback.
The assetETH, the chain’s gas asset. The pot stays inside the PoolManager as ERC-6909 claims credited to the hook until the winner takes it.
Round closepermissionless: once the target or the 24 h are reached, anyone can call close(). It requests the randomness and refunds the caller’s gas from the pot, capped at 0.1% of it, so no round ever waits on the team.
The claim windowclaim() from the winning address, any time within 90 days of the draw. The whole pot, in one transfer.
Unclaimed potsafter 90 days an unclaimed pot rolls into the current round. It never goes to the team.
Admin keysnone. No owner, no pause, no withdraw, no upgrade path: the parameters of §02 are constants in verified code, and V2 / V3 switch on volume milestones measured on-chain, not on a key.
Roundstickets, weights and the pot are keyed by round id. The next round starts empty in the block after the draw.
Checking a winwinnerOf(round) and claimable(address) are public reads. The $uPOT page exposes both: paste an address, or connect the wallet and claim.
One thing to know before you trade. Tickets are registered by our router. A buy routed through another interface pays the tax into the pot but opens no ticket. Trade through the official interface; it is the only way your buy counts in the draw.
08 · Roadmap

What ships, and when

PhaseContentsStatus
V1 · launchParimutuel jackpot: 5% buy tax into the pot, one winner per round, verifiable random drawlive at launch
V2 · $1M volumeOn-chain referral: every buy can carry a referrer, paid from the pool’s swap fee, never from the pot, claimable on-chaincode public · activates at the milestone
V3 · $10M volumeProgressive bid wall: swap fees redeployed as a buy wall one tick below spot, climbing with volumeroadmap · testnet first

The hook ships deployed and verified on day one. The inactive modules are inactive by design, documented as such, with public activation milestones. Nothing is presented as working before it does.

09 · Tools

Try it before it exists

Two simulators, both running the exact formulas above: