DOC.INTRO.001START
[ INTRODUCTION ]

The manual

TICKERWAR is a PvP arena on Solana. Two modes: token war (pick a memecoin, pump harder over a chosen window from 5 minutes to 24 hours) or SOL direction (UP vs DOWN, fixed 60-second round). Winner takes 95% of the pot, 5% goes to rake. No judges, no locked custody.

[ 01 ]What you can do

01 · FIGHT

Token war

Pick a memecoin. Match someone who picked another. Whoever pumps harder over the chosen window takes 95% of both stakes

02 · DIRECTION

UP vs DOWN

Skip the token-picking, take a side on SOL. One opponent takes the opposite, 60s later Pyth oracle picks the winner

03 · WATCH

Spectator bets

Not playing? Bet SOL on the side you think wins. Pari-mutuel coefs shift live as the pool fills, cap 5 SOL per bet

04 · EXIT

Cancel + refund

No opponent in 30 min? Creator can cancel and walk with full stake

[ 02 ]Quick start

  1. Connect a Solana wallet (Phantom, Solflare, Backpack)
  2. Pick a mode in the create dialog. Tickers: choose a memecoin and round window. Direction: choose UP or DOWN on SOL, fixed 60s window
  3. Stake 0.01 to 1 SOL. Sign one tx, your SOL locks on the platform wallet until settle
  4. Wait or join. Either someone joins your open match, or you join theirs. Second deposit starts the timer
  5. Watch. Live charts (Tickers) or live Pyth price (Direction). When the window closes the resolver decides
  6. Get paid. Winner receives 95% of the pot. Tie refunds both stakes in full

[ 03 ]Match flow

Every match sits in one of five states:

open
Awaiting opponent
active
Both stakes locked
settled
Winner paid
cancelled
Refunded
failed
Operator-resolved

Open flips to active the moment the second player signs. Active flips to settled after the chosen window. A precise per-match timer fires exactly at ended_at (no cron-lag), then the resolver pulls fresh prices and signs the payout tx.

Resolvers per mode

  • Tickers (pump): snapshot of each token price at match start vs current price at settle (DexScreener / SolanaTracker). Higher % wins, tie refunds both
  • Direction: snapshot of SOL/USD at match start (Pyth Hermes) vs current price at settle. Price up → long wins, price down → short wins, equal → tie refund

[ 04 ]Token requirements

Tickers-mode only. Direction-mode uses SOL exclusively.

  • Listed on DexScreener, Solana mainnet
  • ≥ $5,000 liquidity in the deepest pair
  • Not SOL, USDC, USDT, or other stablecoins
  • Non-zero current price

The liquidity floor blocks trivial manipulation. Moving an illiquid pair's price for an hour costs more than the typical pot.

[ 05 ]Cancel & refund

No challenger after 30 min on an open match? Creator hits Cancel on the match page, full stake comes back, zero rake.

  • Window applies to open matches only. Once the second player joins, the match becomes active and cancel is gone. Both sides committed
  • Refund signs automatically. Platform wallet sends an outbound transfer to the creator address
  • Spectator bets on a cancelled match refund 1:1 to every bettor. No winners, no rake

[ 06 ]Edge cases

A token rugs mid-match?
Its price craters from snapshot, opponent wins, match settles as normal
Resolver can't read price at settle time?
Status flips to failed. Cron retries the payout automatically on the next tick. If retries keep failing an operator refunds manually within 24h
Both tokens have identical change?
Tie. Both stakes refunded in full, zero rake. Same applies to Direction-mode if SOL price is unchanged to the pip
Someone tries to play themselves with two wallets?
Same wallet can't take both sides. Blocked at create + join. Wallet-age and on-chain-history checks can be added if exploit traffic shows up
Server crashes during a match?
Stakes are sitting on the platform wallet, they don't go anywhere. On restart the per-match timer recovers from instrumentation.ts, picks up active matches, and resumes the settle schedule. Failed payouts retry on the cron tick

[ 07 ]Spectator betting

Every match page has a side pool for non-players. Stake SOL on either fighter while the match is open or active. Pools close the moment the resolver fires.

How a bet works

  1. Open the match page, scroll to the side pool, pick a side
  2. Enter SOL amount: min 0.001 SOL, max 5 SOL per bet. UI shows live projected payout from current pool sizes
  3. Sign one tx. SOL joins the side pool. Backend re-checks the match is still open: if it just closed, automatic refund
  4. When the match settles, winning pool pays out pari-mutuel (see section 08). Losing pool funds the payout
RULES
  • Players of the match cannot bet on their own match
  • Tie or cancellation: every bettor refunded 1:1
  • Winning side has zero bets? Losing side also refunded, no orphan payout
  • Hard cap 5 SOL per single bet. Stops one whale from collapsing the coef for everyone else on that side

[ 08 ]Coefficients & payout

Side pools are pari-mutuel. No fixed-odds engine, the coefficient on each side is just:

coef(side) = total_pool × (1 − spectator_rake) ÷ side_pool

Coefs drift live as new bets land. Early bets on the eventual winner pay more than late bets, when the crowd has already piled on.

Worked example

Pool A: 4 SOL · Pool B: 1 SOL · Total: 5 SOL · Rake 3% → 4.85 SOL distributable

If A wins: A bettors share 4.85 SOL pro-rata. Coef ≈ 1.21× (1.21 SOL back per 1 SOL bet on A)

If B wins: B bettors share 4.85 SOL pro-rata. Coef ≈ 4.85×. Underdog pays huge because the side was a minority

Spectator rake is 3%, split 50/50 between platform treasury and $WAR burn.

[ 09 ]Player profiles

Every wallet that touched a match has a public profile at /u/<wallet>. No login, no sign-up, an on-chain identity rendered from the database.

  • Match history: every fight with opponent, tokens, stakes, result
  • Win rate & volume: total matches, wins, losses, SOL staked, SOL won net
  • Spectator history: every bet placed as spectator, which side, outcome (won / lost / refund / live), net SOL profit aggregated separately from the fighter stats
  • Shareable identicon: unique colorful avatar derived from the wallet address, same one rendered next to a match
  • Editable: handle, display name, bio, twitter and telegram links, custom avatar. Owner verifies via wallet signature

Roadmap: streaks, rivalries, leaderboard.

[ 10 ]Rake & splits

5% commission on every settled match. Half stays as treasury, half feeds the $WAR burn loop.

MATCH PAYOUT
95%
Winner
2.5%
Treasury
2.5%
Burn $WAR

Spectator pools have a separate 3% rake on their total, same 50/50 split. See section 08.

[ 11 ]Holder discount

Hold ≥ $100 of the platform token, get 2% off the rake on your wins. Effective rake drops from 5% to 3%, winner share rises from 95% to 97% of the pot.

PRE-TGE
Balance counts as SOL

Until $WAR launches, the threshold reads your native SOL balance × current SOL/USD price. At ~$100/SOL that's roughly 1 SOL to unlock the discount

POST-TGE
Balance counts as $WAR

Once PVP_WAR_TOKEN_MINT is set in production, the threshold flips to $WAR balance × $WAR/USD. No UI change, no action required

One threshold, one discount. No tiers, no staking contract. Check runs on the winning wallet at settle time.

[ 12 ]$WAR tokenomics

$WAR is the native token of TICKERWAR. Two utilities: a deflationary burn loop fed by every settled match and spectator pool, plus the rake discount above the $100 threshold.

CONTRACT.ADDRESS
PRE-TGE
TBD — published at TGE

$WAR launches on pump.fun. Once the mint is live, the contract address appears here automatically along with copy and explorer links.

[1] Rake split per match

Winner
95%
of pot
Treasury
2.5%
ops fund
Burn slice
2.5%
goes to $WAR burn

Every settled match takes 5% rake. Half routes to the platform treasury (ops, RPC, dev). Other half feeds the burn loop.

[2] Burn loop (inline, after every settle)

Burn slice accumulates on the platform wallet across matches. When the accumulated balance crosses 1 SOL, the next settle fires a burn tx inline. No weekly cron, no manual button.

PRE-TGE

$WAR doesn't exist yet. Burning SOL directly would just destroy SOL. No token to deflate, so burn-slice accumulates on the platform wallet as a reserve

POST-TGE BURN

First settle after TGE sweeps entire SOL reserve through Jupiter into $WAR at best market price, transfers to the incinerator. Each next match adds to burn-slice, fires when cross 1 SOL

Incinerator: 1nc1nerator11111111111111111111111111111111

Net effect: every 1 SOL of accumulated burn slice buys $WAR on the market (post-TGE) and sends it to the incinerator. Match volume = buy pressure = deflation.

[3] Holder discount

Wallets above the $100 threshold get −2% off rake on their wins. Pre-TGE counts SOL balance, post-TGE counts $WAR. Full details in section 11.

[4]Supply & launch

  • Initial supply: fixed at TGE, zero ongoing emission
  • Distribution: announced before TGE (community, team vesting, treasury, LP)
  • Launch venue: pump.fun fair-launch. Mint address goes into PVP_WAR_TOKEN_MINT the moment the token graduates
  • Burn transparency: every burn tx is on-chain, visible on Solscan. Public burn dashboard is on the roadmap

[5] Risks

  • Auto-swap depends on Jupiter liquidity for $WAR. Thin liquidity means high price impact on burns. Platform can throttle swap size
  • Burn trigger is platform-operated (backend call, not an on-chain program), so cadence can adjust with volume and RPC conditions
  • $WAR is utility, not a security. No yield, no dividends. Value comes from supply burn plus in-product discount

[ 13 ]Trust model

CUSTODIAL · v1

TICKERWAR runs in custodial modefor v1. Deposits sit on the platform wallet during the match. Backend signs payouts after settle. On-chain Anchor escrow is on the roadmap. If this trust model isn't acceptable to you, wait for that release.

[ 14 ]Custodial mode in detail

One platform wallet receives both stakes and every spectator bet. The secret lives in backend env config, never exposed to client code. On settle, backend signs one tx paying the winner and treasury slice. Burn slice accumulates until the inline burn trigger in section 12.

Failure path: if a payout tx fails (RPC drop, batch limit), the match is marked failed. Cron retries on the next tick. If retries exhaust, an operator resolves manually within 24h.

[ 15 ]Anti-collusion

Same wallet can't take both sides of a match. Blocked at create + join. Players of a match also can't bet in its spectator pool. v1 ships with these hard checks. If sock-puppet traffic appears, extra gates can flip on: wallet-age threshold, recent on-chain volume, randomized matchmaking.

[ 16 ]Disclaimer

TICKERWAR is provided as-is, without warranty. Token prices are volatile and you may lose your entire stake. Participation is restricted in jurisdictions where this kind of activity is regulated or prohibited. By using TICKERWAR you confirm you are eligible under your local laws.

[ EOF ]