How ARENA works
A token launchpad on Solana where new tokens fight 1v1 in live, 20-minute rounds. The crowd does not vote – it buys. Every animated move is a real purchase on that token's bonding curve, the first curve to sell out wins by KO and graduates to Raydium.
- sells out a curve
- 85 SOL
- = KO = graduation
- trading fee
- 1–3 %
- creator's choice · standard 1.25 %
- to launch
- 0.01 SOL
- + ~0.003 SOL of rent
- per round
- 20 min
- after a 20 s lobby
- price at sell-out
- ×25
- vs the launch price
- admin keys on curves
- 0
- no arbiter, no pause
01What is ARENA
Think TikTok Live gifts, but instead of buying virtual coins you buy the token you are cheering for. A creator launches a token, it gets its own bonding curve, and it is automatically matched against another token for a live round. Spectators pick a side, choose a move (Spark, Rocket, Jet, Whale, Moon) and the purchase plays as an animation in the arena for everyone watching.
- Built for Solana (SOL for gas, ~0.00001 SOL per trade). Mainnet-beta and devnet (NEXT_PUBLIC_SOLANA_CLUSTER picks one).
- Trades run on ARENA's own bonding-curve contracts, not on an external DEX – until a curve sells out and moves to Raydium.
- Battles, chat and taps are social layers on top – they never move money.
02How a battle works
- Matchmaking – purely random, instant. A newly launched token is pending and gets paired at random with any other pending token – a fresh launch, a token that just came out of a round, one that was waiting – the moment one is available. Nothing is preferred: not the pair asset (WIF/xAAPL vs BONK/SOL is fine – progress is compared in %), not the queue order, not progress. The one rule: two tokens never meet twice. A token whose only candidates are old opponents simply stays pending until a new token shows up. Names always read SYMBOL/PAIR.
- Lobby (20 s). The pair shows up in "Up next". You can already buy; those buys move the curve but the round's "leads by" delta is measured from the reserve at round start.
- Round (20 min). The server clock is authoritative – your screen only renders the countdown. Every confirmed purchase advances that token's bonding curve and plays its move.
- Result – KO only. The only way to win is to sell out your bonding curve first: the moment a token reaches its 85 SOL target during the round it wins on the spot, the round ends and the token graduates – its liquidity moves to a Raydium pool on Solana (LP burned) and it never battles again. If the clock runs out with no KO there is no winner: both tokens keep their curves, holders and record and are pending again – looking for a new opponent, never the same one.
Nothing is taken from anyone. A round without a KO changes nothing on-chain – no funds move, no curve closes. The only thing that ever moves liquidity is a curve selling out, and that is enforced by the contract itself, not by a battle result: there is no admin or "arbiter" key that can close a curve.
03Moves = purchases
A move is the visual of a purchase. The price on the card is the total you spend, including the 1.25 % trading fee and excluding gas. For SOL-paired tokens:
Under every move you see its live USD value. Presets are shortcuts, not limits: the sixth card, Custom, takes any amount – typed in the pair asset or in USD (e.g. $200), with quick picks from $10 to $500 – and plays as the biggest move that amount reaches. The token page has the same free amount field. Before you confirm you see the estimated tokens, the minimum after slippage, the fee split and the deadline. Then:
- You confirm in your wallet (demo mode: instantly, simulated).
- The transaction is pending; nothing plays yet.
- The server verifies the confirmed
Buyevent from the chain (or the demo ledger). - Only then the move plays – small in the arena and big across the whole screen – for every viewer, with your name, the token and the amount. Consecutive buys within 60 s stack into a Combo ×N.
Tokens go straight to your wallet. Failed or rejected transactions never play an animation. Pairs that are not SOL use their own presets in that asset's units.
Selling is always open. The curve buys back at any moment – during a round, in the lobby, between battles – at the same fee. You sell from three places: the Sell tab on the token page, Your position under the move bar in a battle, or the Sell button on each holding in your portfolio. Quick 25/50/75/Max buttons, the quote and the minimum after slippage are shown before you confirm. Selling lowers that token's curve progress – nobody is locked in, and a round is never a trap. The only thing you cannot sell on the curve is a graduated token: it trades on its Raydium pool instead.
04Fees & what creators get
| Creation fee | 0.01 SOL per launch, fixed, paid in SOL regardless of the pair asset. 100 % to the platform treasury. Collected atomically with the launch – a failed launch pays nothing, a retry cannot pay twice. |
|---|---|
| Trading fee | 1 % to 3 % of every buy and sell on the curve – the creator picks it at launch (standard 1.25 %), it is fixed for the life of the curve and enforced on chain. A higher fee shows on the move cards, so buyers always know. |
| → platform | A fixed 0.625 % of every trade, whatever fee the creator chose. Optionally a migration fee of up to 10 % of the reserve at graduation (currently 0). |
| → reward share | Everything above the platform's 0.625 %: 0.375 % at a 1 % fee, 0.625 % at the standard 1.25 %, up to 2.375 % at 3 %. At launch the creator decides where it goes: to the creator (curve account, claim any time) or to the holders. |
| Rewards to holders | Chosen at launch, irreversible. The reward share of every trade is paid into the token contract and split pro-rata among all holders by balance, in the pair asset. Tokens bought later never earn from earlier trades; the curve and the DEX pair are excluded. Holders claim whenever they like (Portfolio → Holder rewards, or the token page). The creator earns only on what they hold themselves. |
| Gas | Paid by the sender in SOL (~0.00001 SOL per transaction, plus one-off rent for the accounts a launch creates). |
| After graduation | Raydium's own 0.25 % pool fee goes to the pool (the LP is burned, so it simply deepens the liquidity). ARENA takes nothing on DEX trades. |
Fees are credited in the curve account and claimed by the creator from the Portfolio (a wallet that cannot receive transfers never blocks trades). Integer arithmetic only: the total rounds down, and when it is odd the extra unit goes to the creator.
05Bonding curve
Each token has a constant-product curve with virtual reserves: x = virtualPair + reserve, y = virtualToken − tokensSold, x · y = k. Buying adds the net amount (after fee) to the reserve and takes tokens out; selling returns pair asset from the reserve minus the fee.
- 1 000 000 000 tokens per launch (SPL mint, 6 decimals), 80 % sold on the curve, 20 % held back for the Raydium pool.
- SOL curves: virtual reserve 21.25 SOL → the curve sells out at 85 SOL net.
- Progress is the net reserve divided by the target. It goes down again when people sell – it is never cumulative volume.
- The buy that would cross 100 % is clamped to what is left; the unused part of the payment is refunded in the same transaction.
06Graduation → Raydium
- Sell-out. 800 000 000 tokens sold, 85 SOL net in the curve. The curve flips to graduated (no more buys or sells on ARENA); if it happened during a round that is the KO.
- Migration. Anyone can call the migration once (the page offers the button; in demo mode it runs automatically). The whole reserve plus the matching part of the retained 200 000 000 tokens are deposited into the token/SOL pool at the curve's final price – no gap between the last curve price and the first pool price.
- Burn. The LP tokens are burned with the SPL token program (the supply is destroyed): nobody – not the creator, not ARENA – can ever withdraw that liquidity. Whatever part of the retained supply was not needed for the price match is burned too (≈ 40 000 000 tokens).
- Trade on the DEX. From then on the token trades on Raydium like any other SPL token. ARENA keeps following the pool: the token page shows the live pool price, liquidity, DEX trades in the history and chart, and a "Trade on Raydium" link (Solana mainnet).
Anti front-run: the Raydium pool does not exist until the migration transaction creates it, and the whole retained supply sits in the curve's vault until then – nobody can seed a pool at a fake price first. Raydium's program id differs between devnet and mainnet; see the deployment docs for what is real and what is demo.
07Portfolio & claiming
Your Portfolio shows what you own and earned: net worth (wallet + holdings at the current price), unrealised and realised P&L from average cost, every holding with its allocation and arena status, the full trade history (curve and DEX) and your creator fees.
- Balances are read from the chain (or the demo ledger) – connecting a wallet proves nothing by itself.
- Selling is one wallet transaction on the curve (
sell, with slippage and deadline). After graduation you swap on Raydium instead. - Claiming creator fees is one wallet transaction:
claim_creator_fees. Fees for SOL-paired tokens arrive as SOL, for stock-paired tokens in that stock token. No extra program is needed – the reward share sits on the token's own curve account and only ever pays the wallet that earned it. - Values on the curve are "if sold now", net of that token's own trading fee; graduated tokens are marked at the pool price.
08Launching a token
- Name, symbol, image, description, optional website / X / Telegram.
- Pick the pair asset: SOL, a tokenised stock, or an allow-listed SPL mint.
- Choose the trading fee (1–3 %) and where the reward share goes – to you or to your holders.
- Dev buy (optional). Buy your own token inside the launch transaction, at the first price on the curve. It is one transaction, so nothing can trade before it and no bot can front-run you. It is capped at 50 % of the curve, so a token can never sell out before it has fought.
- Review the curve summary and the 0.01 SOL creation fee.
- Confirm in your wallet. The token, its curve, your first buy and its place in the random matchmaking queue are created in one go.
As the creator you earn the reward share of every trade on your token – 0.625 % at the standard 1.25 % fee, up to 2.375 % at 3 % – win or lose, unless you hand it to your holders at launch. You do not receive any of the creation fee.
09Pair assets
- SOL – always available.
- Stock Tokens – Tokenised stocks on Solana (xStocks and friends) are ordinary SPL mints, enabled one by one after their transfer rules are checked.
- Custom pairs – any SPL mint that passes validation: decimals ≤ 9, no transfer fee, no transfer hook, no freeze surprises.
Every pair has its own move presets in its own units; in a mixed battle each side is bought in its own asset. USD values come from a public spot feed refreshed every 60 s – display only, nothing on the curve depends on it.
11Safety & limits
Banned words. Token names, symbols and descriptions, display names and chat messages are checked on the server against a banned-word list (profanity, slurs) that also sees through leetspeak, spacing and repeated letters. Anything that matches is rejected with a clear error – nothing is masked silently. Names and symbols use a stricter check that also rejects compounds.
Chat anti-spam. One message per 1.5 s (burst of 3), at most 12 per minute, the same content at most 3 times per wallet in 30 minutes – cosmetic changes (capitals, punctuation, emoji, stretched letters) count as the same message – never the same message twice within 30 s, and floods (one character hammered, one word repeated) are rejected outright.
- Slippage protection, deadlines and a sale-supply cap on every trade; reentrancy guards on the curve and the vault.
- Purchases only count when the server has verified the on-chain receipt or log – never from a browser message. Every event is deduplicated by transaction hash + log index.
- Rate limits on taps, chat, reactions and reports; moderators can hide messages and mute wallets.
- Demo mode is clearly labelled and cannot send real transactions. It also runs bots that buy, sell, chat and tap so the arena is never empty, and they launch a token when every waiting token has already fought every other one. They exist only in demo mode – the chain build never starts them.
- Writes are refused across origins, the session cookie is
httpOnly+SameSite=Lax, and sign-in is a single-use nonce signed with your wallet (no gas, no transaction). - The contracts are not audited and nothing has been deployed to mainnet. Treat everything as a preview.
12FAQ
- Is a move a donation?
- No. It is a purchase of tokens that land in your wallet. You can sell them back to the curve any time.
- What does the winner get?
- Graduation: the winner is by definition the token that sold out its curve, so its liquidity goes to Raydium and it trades freely from then on. Plus a KO on its record and visibility. Nothing is transferred between tokens.
- Do taps help my team win?
- No. Only selling out the bonding curve decides.
- What happens to the losing token?
- Nothing bad – it stays tradable and is pending again until a token it has not fought yet shows up.
- Can I buy outside of a battle?
- Yes, from the token page. The animation plays only inside a live battle.
- Do I need a separate contract to claim my fees?
- No. The curve account is part of the core deployment; you claim with one transaction from the Portfolio.
- Where can I sell?
- Anywhere your position is shown: the Sell tab on the token page, "Your position" under the move bar in a battle, or the Sell button on a holding in your Portfolio. Any time – during a round too.
- Can the creator buy their own token?
- Yes, in the launch transaction itself (the "dev buy"), capped at 50 % of the curve. It is visible to everyone: it is the first trade in the token's history and the creator's wallet is on it.
- How long is a round?
- 20 minutes, after a 20-second lobby. The server clock decides; your screen only renders it.
10Taps, chat & combos