Bot Arena
The same 200 people and 5 sniper bots go through Sealround, a bonding curve and a first-come fixed-price sale, with the bots acting first.
What bots made and what people paid, by launch type
Sealround
- Bot profit
- 0USDC
- 15.7% of supply bought
- People paid
- 1.00×
- the bots' price
Bonding curve
- Bot profit
- 1,269USDC
- 34.5% of supply bought
- People paid
- 2.61×
- the bots' price
Fixed price, first come
- Bot profit
- 177USDC
- 20.9% of supply bought
- People paid
- 1.00×
- the bots' price
Simulated: averages over 60 seeded runs, with demand from 0.5× to 4× supply. Real launches will vary.
Results by launch type
The average of 60 runs, with the lowest and highest run under it.
- Bot share of supplyLower is better
- Sealround
- 15.7%
- 9.1 to 34.3%
- Bonding curve
- 34.5%
- 28.7 to 43.1%
- Fixed price, first come
- 20.9%
- 14.7 to 34.3%
- Bot profitLower is better
- Sealround
- 0 USDC
- 0 to 0
- Bonding curve
- 1,269 USDC
- 700 to 2,068
- Fixed price, first come
- 177 USDC
- 0 to 683
- Human price premiumLower is better
- Sealround
- 1.00×
- 1.00 to 1.00×
- Bonding curve
- 2.61×
- 1.49 to 3.92×
- Fixed price, first come
- 1.00×
- 1.00 to 1.00×
- Humans filledHigher is better
- Sealround
- 59.5%
- 37.0 to 84.0%
- Bonding curve
- 50.1%
- 23.0 to 92.5%
- Fixed price, first come
- 58.2%
- 28.0 to 85.0%
- Holder concentrationLower is better
- Sealround
- 0.50
- 0.41 to 0.64
- Bonding curve
- 0.52
- 0.44 to 0.62
- Fixed price, first come
- 0.50
- 0.39 to 0.64
| Metric | Sealround | Bonding curve | Fixed price |
|---|---|---|---|
| Bot share of supplyLower is better | 15.7%9.1 to 34.3% | 34.5%28.7 to 43.1% | 20.9%14.7 to 34.3% |
| Bot profitLower is better | 0 USDC0 to 0 | 1,269 USDC700 to 2,068 | 177 USDC0 to 683 |
| Human price premiumLower is better | 1.00×1.00 to 1.00× | 2.61×1.49 to 3.92× | 1.00×1.00 to 1.00× |
| Humans filledHigher is better | 59.5%37.0 to 84.0% | 50.1%23.0 to 92.5% | 58.2%28.0 to 85.0% |
| Holder concentrationLower is better | 0.500.41 to 0.64 | 0.520.44 to 0.62 | 0.500.39 to 0.64 |
What each metric measures
- Bot share of supply
- Tokens bought by bots at launch ÷ all tokens bought at launch.
- Bot profit
- USDC bots receive selling to later human buyers, minus what they paid for the tokens they sold. Tokens they cannot sell count as zero.
- Human price premium
- Median price per token paid by humans who got tokens (launch plus pool) ÷ the average price bots paid at launch.
- Humans filled
- Share of the humans holding any tokens at the end, from the launch or the pool.
- Holder concentration
- Gini coefficient of final holdings across every account holding tokens. 0 = equal, 1 = one holder.
Each metric as demand rises
Tokens bought by bots at launch ÷ all tokens bought at launch.
All 60 runs as a table
| Run | Demand | Sealround | Bonding curve | Fixed price |
|---|---|---|---|---|
| 1 | 0.50× | 34.3% | 43.1% | 34.3% |
| 2 | 0.56× | 27.2% | 36.4% | 27.2% |
| 3 | 0.62× | 26.6% | 39.3% | 26.6% |
| 4 | 0.68× | 28.0% | 39.8% | 28.0% |
| 5 | 0.74× | 25.4% | 38.4% | 25.4% |
| 6 | 0.80× | 27.6% | 39.8% | 27.6% |
| 7 | 0.86× | 27.2% | 41.8% | 27.2% |
| 8 | 0.92× | 22.0% | 36.9% | 22.0% |
| 9 | 0.97× | 19.9% | 36.1% | 19.9% |
| 10 | 1.03× | 18.8% | 35.5% | 18.9% |
| 11 | 1.09× | 19.8% | 36.5% | 21.0% |
| 12 | 1.15× | 16.7% | 33.0% | 17.4% |
| 13 | 1.21× | 17.3% | 34.9% | 19.1% |
| 14 | 1.27× | 20.3% | 38.1% | 24.2% |
| 15 | 1.33× | 14.5% | 31.8% | 16.1% |
| 16 | 1.39× | 16.7% | 35.0% | 19.2% |
| 17 | 1.45× | 15.6% | 33.6% | 18.5% |
| 18 | 1.51× | 16.1% | 35.0% | 20.0% |
| 19 | 1.57× | 15.1% | 33.8% | 18.6% |
| 20 | 1.63× | 14.0% | 33.2% | 18.2% |
| 21 | 1.69× | 12.7% | 30.6% | 15.9% |
| 22 | 1.75× | 18.1% | 37.6% | 23.9% |
| 23 | 1.81× | 13.8% | 32.8% | 18.6% |
| 24 | 1.86× | 16.7% | 35.1% | 21.3% |
| 25 | 1.92× | 14.9% | 35.1% | 21.0% |
| 26 | 1.98× | 13.8% | 33.3% | 19.3% |
| 27 | 2.04× | 14.3% | 34.5% | 20.3% |
| 28 | 2.10× | 12.3% | 32.5% | 18.2% |
| 29 | 2.16× | 12.8% | 33.1% | 18.4% |
| 30 | 2.22× | 13.9% | 33.8% | 20.2% |
| 31 | 2.28× | 13.0% | 33.3% | 19.5% |
| 32 | 2.34× | 13.5% | 33.7% | 19.5% |
| 33 | 2.40× | 14.7% | 35.0% | 21.3% |
| 34 | 2.46× | 12.2% | 32.0% | 17.8% |
| 35 | 2.52× | 12.2% | 32.6% | 19.2% |
| 36 | 2.58× | 12.8% | 33.5% | 20.2% |
| 37 | 2.64× | 11.6% | 31.6% | 17.7% |
| 38 | 2.69× | 13.8% | 35.6% | 22.8% |
| 39 | 2.75× | 11.9% | 32.8% | 19.3% |
| 40 | 2.81× | 13.4% | 34.9% | 21.5% |
| 41 | 2.87× | 13.2% | 33.4% | 19.9% |
| 42 | 2.93× | 12.6% | 31.8% | 17.9% |
| 43 | 2.99× | 12.3% | 33.9% | 20.7% |
| 44 | 3.05× | 14.2% | 34.3% | 21.3% |
| 45 | 3.11× | 14.7% | 34.3% | 21.4% |
| 46 | 3.17× | 10.7% | 31.1% | 17.3% |
| 47 | 3.23× | 14.2% | 35.7% | 23.3% |
| 48 | 3.29× | 12.6% | 34.4% | 22.2% |
| 49 | 3.35× | 12.1% | 33.9% | 21.3% |
| 50 | 3.41× | 9.1% | 28.7% | 14.7% |
| 51 | 3.47× | 10.4% | 31.8% | 18.5% |
| 52 | 3.53× | 15.0% | 35.8% | 24.2% |
| 53 | 3.58× | 12.4% | 33.6% | 20.4% |
| 54 | 3.64× | 10.9% | 32.0% | 18.5% |
| 55 | 3.70× | 10.5% | 32.4% | 19.0% |
| 56 | 3.76× | 11.8% | 33.5% | 20.5% |
| 57 | 3.82× | 12.4% | 34.8% | 23.0% |
| 58 | 3.88× | 11.2% | 32.8% | 19.9% |
| 59 | 3.94× | 11.6% | 33.2% | 19.8% |
| 60 | 4.00× | 12.6% | 34.7% | 22.6% |
Sealround: supply burned as demand changes
Share of the 1,000,000 tokens for sale that nobody bought. Sealround burns them when the creator is paid, so the supply that reaches the market follows demand. Simulate your own sale
All 60 runs as a table
| Run | Demand | Burned | Clearing price |
|---|---|---|---|
| 1 | 0.50× | 38% | 0.01 USDC |
| 2 | 0.56× | 42% | 0.01 USDC |
| 3 | 0.62× | 26% | 0.01 USDC |
| 4 | 0.68× | 24% | 0.01 USDC |
| 5 | 0.74× | 22% | 0.01 USDC |
| 6 | 0.80× | 21% | 0.01 USDC |
| 7 | 0.86× | 3% | 0.01 USDC |
| 8 | 0.92× | 11% | 0.01 USDC |
| 9 | 0.97× | 2% | 0.01 USDC |
| 10 | 1.03× | 0% | 0.0101 USDC |
| 11 | 1.09× | 0% | 0.0106 USDC |
| 12 | 1.15× | 0% | 0.0105 USDC |
| 13 | 1.21× | 0% | 0.011 USDC |
| 14 | 1.27× | 0% | 0.012 USDC |
| 15 | 1.33× | 0% | 0.0111 USDC |
| 16 | 1.39× | 0% | 0.0115 USDC |
| 17 | 1.45× | 0% | 0.0119 USDC |
| 18 | 1.51× | 0% | 0.0124 USDC |
| 19 | 1.57× | 0% | 0.0123 USDC |
| 20 | 1.63× | 0% | 0.013 USDC |
| 21 | 1.69× | 0% | 0.0125 USDC |
| 22 | 1.75× | 0% | 0.0132 USDC |
| 23 | 1.81× | 0% | 0.0134 USDC |
| 24 | 1.86× | 0% | 0.0127 USDC |
| 25 | 1.92× | 0% | 0.0141 USDC |
| 26 | 1.98× | 0% | 0.014 USDC |
| 27 | 2.04× | 0% | 0.0142 USDC |
| 28 | 2.10× | 0% | 0.0148 USDC |
| 29 | 2.16× | 0% | 0.0144 USDC |
| 30 | 2.22× | 0% | 0.0145 USDC |
| 31 | 2.28× | 0% | 0.0151 USDC |
| 32 | 2.34× | 0% | 0.0145 USDC |
| 33 | 2.40× | 0% | 0.0145 USDC |
| 34 | 2.46× | 0% | 0.0145 USDC |
| 35 | 2.52× | 0% | 0.0158 USDC |
| 36 | 2.58× | 0% | 0.0159 USDC |
| 37 | 2.64× | 0% | 0.0152 USDC |
| 38 | 2.69× | 0% | 0.0165 USDC |
| 39 | 2.75× | 0% | 0.0163 USDC |
| 40 | 2.81× | 0% | 0.016 USDC |
| 41 | 2.87× | 0% | 0.0151 USDC |
| 42 | 2.93× | 0% | 0.0143 USDC |
| 43 | 2.99× | 0% | 0.0169 USDC |
| 44 | 3.05× | 0% | 0.015 USDC |
| 45 | 3.11× | 0% | 0.0146 USDC |
| 46 | 3.17× | 0% | 0.0162 USDC |
| 47 | 3.23× | 0% | 0.0164 USDC |
| 48 | 3.29× | 0% | 0.0176 USDC |
| 49 | 3.35× | 0% | 0.0177 USDC |
| 50 | 3.41× | 0% | 0.0161 USDC |
| 51 | 3.47× | 0% | 0.0178 USDC |
| 52 | 3.53× | 0% | 0.0162 USDC |
| 53 | 3.58× | 0% | 0.0164 USDC |
| 54 | 3.64× | 0% | 0.0169 USDC |
| 55 | 3.70× | 0% | 0.0182 USDC |
| 56 | 3.76× | 0% | 0.0173 USDC |
| 57 | 3.82× | 0% | 0.0186 USDC |
| 58 | 3.88× | 0% | 0.0179 USDC |
| 59 | 3.94× | 0% | 0.017 USDC |
| 60 | 4.00× | 0% | 0.018 USDC |
Run one yourself
The same simulator runs in your browser. A seed and a demand level always give the same result.
- Sealround, everyone
- 0.0147USDC
- Curve, bots
- 0.00387USDC
- Curve, median human
- 0.00958USDC
- 2.48× the bots' price
- Fixed price sold out
- at 8m 53s
- Bot share of supply
- Sealround
- 11.6%
- Bonding curve
- 31.4%
- Fixed price, first come
- 17.0%
- Bot profit
- Sealround
- 0 USDC
- Bonding curve
- 922 USDC
- Fixed price, first come
- 177 USDC
- Human price premium
- Sealround
- 1.00×
- Bonding curve
- 2.48×
- Fixed price, first come
- 1.00×
- Humans filled
- Sealround
- 58.5%
- Bonding curve
- 45.0%
- Fixed price, first come
- 54.5%
- Holder concentration
- Sealround
- 0.50
- Bonding curve
- 0.53
- Fixed price, first come
- 0.53
| Metric | Sealround | Bonding curve | Fixed price |
|---|---|---|---|
| Bot share of supply | 11.6% | 31.4% | 17.0% |
| Bot profit | 0 USDC | 922 USDC | 177 USDC |
| Human price premium | 1.00× | 2.48× | 1.00× |
| Humans filled | 58.5% | 45.0% | 54.5% |
| Holder concentration | 0.50 | 0.53 | 0.53 |
Method and assumptions
pnpm arenaOne command reruns all 60 runs and rewrites the data behind this page. The simulator is in packages/arena; its README.md covers the model.
- Base seed
- 20261114
- Runs
- 60, demand 0.5× to 4×
- Crowd per run
- 200 humans, 5 bots
Model assumptions 16
Written out from the simulator config on each run, so the list matches the code that made the charts.
- Supply for sale: 1,000,000 tokens. Reference launch price: 0.01 USDC per token, so selling the whole supply at that price raises 10,000 USDC.
- Demand level = total human budget ÷ (supply × launch price). 60 runs, evenly spaced from 0.5x to 4x. Each run draws a fresh crowd from its own seed, derived from base seed 20261114.
- 200 humans per run. Each has a private valuation, the most they would pay per token: lognormal, median 1.6x the launch price, sigma 0.55, clamped to 0.3x–12x. Valuations are never shown.
- Human budgets are lognormal weights (sigma 0.9, so a few whales) scaled to the demand level, at least 1 USDC each. Humans arrive between second 1 and second 1,800, more of them early.
- 5 sniper bots per run, each with a budget of 2%–6% of the supply value (200–600 USDC). Bots act at second 0, before any human. On the bonding curve and in the fixed-price sale they buy with their whole budget. In Sealround they bid their whole budget with a max price of 100x the launch price.
- Bonding curve: constant product x·y = k with virtual reserves in pump.fun proportions (virtual token reserve = 1.3529 × the curve supply). The virtual USDC reserve is set so buying the whole curve raises 10,000 USDC, the same as the fixed-price sale. The price runs from 0.002608 to 0.038335 USDC (0.26x to 3.83x the launch price).
- On the curve, buyers act in arrival order. A human buys until their budget runs out or the price reaches their valuation. The curve is a two-way market from second 0, so after each human buy, bots sell back into it with the same rule as the post-launch pool (below). The launch ends when the curve sells out or the last human has arrived.
- Fixed-price sale: 0.01 USDC per token, first come first served until supply runs out. A human buys only if their valuation is at least the price.
- Sealround: every human whose valuation is at or above the floor (the launch price) bids max price = valuation and max spend = deposit = whole budget. Humans below the floor do not bid. Clearing uses clear() from @fairground/clearing, the same rule the enclave runs. Unsold tokens are burned.
- Humans are honest and simple: they bid their true valuation in Sealround and stop at it on the curve. Nobody splits across wallets.
- Post-launch market, identical for all three: a constant-product pool opens at the launch's final price (curve: its last price; fixed price: 0.01; Sealround: the clearing price) with 2,000 USDC of liquidity (20% of the supply value) paired with tokens at that price.
- Humans with budget left and a valuation above the pool price buy from the pool in arrival order, each until their budget runs out or the price reaches their valuation.
- Bots sell into that demand: after each human buy, bots sell back until the price returns to where it was before that buy. A bot never sells below what it paid per token. Tokens bots cannot sell stay in their wallets.
- Bot profit counts only tokens actually sold, at the average price the bot paid. Unsold tokens count as zero, not at a market value. Bots follow this one simple selling rule everywhere; bots that time their sales better would likely make more on the curve and in the fixed-price sale, so those profits are conservative.
- No fees, gas, latency or MEV beyond bots acting first. Money is integer throughout (USDC 6 decimals, tokens 18 decimals); floats appear only in the reported metrics.
- Deterministic: the same seed and config give byte-identical output. No LLM calls, no network.