Overview
OUTSIDEMAXXING is a location game on Solana. Every named public park on the map holds a chest. Walk there, open it, and keep what's inside: SOL, or $OUTSIDE once the token is live. Prizes are funded by creator fees from $OUTSIDE trading: 80% goes to the prize treasury and 20% to buyback & burn.
There is no human in the loop: presence is checked by the server, outcomes come from a provably fair roll, and payouts are plain transfers from a public treasury wallet.
Chests
A chest holds a prize 45% of the time before your Outside meter (at most 90% with a full meter). A prize is one of four tiers:
| Tier | Share of prizes | Value |
|---|---|---|
| Common | 65% | 0.0040 – 0.012 SOL |
| Rare | 25% | 0.012 – 0.04 SOL |
| Epic | 8% | 0.04 – 0.15 SOL |
| Grail | 2% | 0.15 – 0.6 SOL |
- You can open each park's chest once a day, 20 chests a day, with 3 minutes between opens.
- A park can be opened 60 times a day by everyone together, and rests 2 minutes after each open. It refills at midnight UTC.
- Once $OUTSIDE is live, about 50% of prizes are paid in $OUTSIDE at the market price (bought by the treasury from the market), the rest in SOL.
Outside meter
While the app is open it reports your GPS readings every 30 seconds. Every metre you walk between opens fills the meter; after 1.5 km it's full at 2.5×. Opening a chest empties it.
- Only walking counts: segments faster than 3.2 m/s (a vehicle), readings worse than ±35 m, gaps over 10 minutes and movement inside the phone's own GPS noise add nothing.
- Odds with an empty meter: 45%. Half full: 79%. Full: 90%.
Starter chest
The first chest is right where you stand when you open the app — no park, no wallet needed. It always holds 0.003 SOL. Sign in to keep it; it's paid right away. One per phone and one per account, for new players only, and at most 3 per network a day.
Payouts
- Daily budget. The treasury promises at most 0.05 SOL of prizes per UTC day. A prize bigger than what's left is trimmed to it; when nothing is left, chests are empty until midnight and the app says so.
- Ripening. A brand-new wallet's first-day prizes are recorded and paid together with its first open on a later day. Nothing is lost; only a wallet used for a single day is never paid. The starter chest doesn't ripen.
- On-chain. Payouts are plain transfers from the treasury wallet to the wallet linked to your account. Every one links to Solscan.
Treasury & fees
Every buy and sell of $OUTSIDE pays a creator fee. Once the token is live, that fee is what funds the prizes, and it is split two ways:
| Share | Goes to | What it does |
|---|---|---|
| 80% | Prize treasury | Pays every park chest, the starter chests and the daily Legendary. |
| 20% | Buyback & burn | Buys $OUTSIDE on the open market and burns it, permanently shrinking the supply. |
- From treasury to chest. Fees collect in the public treasury wallet. The daily prize budget (0.05 SOL today) is set from SOL the treasury already holds and is raised as trading volume grows. Every prize on the map is paid out of that budget.
- Backed, not promised. The budget never exceeds what the treasury can pay. When it's spent, chests are empty until midnight UTC and the app shows it on the map before anyone walks.
- Prizes in $OUTSIDE. When a chest pays in $OUTSIDE, the treasury buys it from the market at the current price. That is extra buy pressure on top of the 20% buyback.
- Burns. Bought-back $OUTSIDE is burned with an on-chain transaction, so anyone can check the amount and the reduced supply on Solscan.
- Before launch. The split applies to creator fees from the $OUTSIDE launch on. Until then, the treasury is seeded by the team.
- Check it. The treasury wallet is 9doEB4we7KRLhVeNcn8vBY47DHzsXvkHNozrTyJmU9HJ. Every prize is paid from it, and the server refuses to pay from any other wallet. The split, the budget and the balance are also published at /api/vault.
Provably fair
Each UTC hour has a secret seed. Its SHA-256 hash is published before the hour starts; the seed is published when it ends. Every chest is decided by:
roll = HMAC-SHA256(hour seed, "<park id>:<wallet>:<random nonce from your phone>") hit = u32(roll[0..4]) < 0.45 × meter (max 0.9) tier = u32(roll[4..8]) over common 0.65 · rare 0.25 · epic 0.08 · grail 0.02 value = min + (max − min) × u32(roll[8..12]) asset = $OUTSIDE if u32(roll[12..16]) < 0.5 and the token is live, else SOL
Your phone picks the nonce before the seed is known, and we can't change the seed once its hash is out. The Fair page recomputes any chest or legendary draw in your browser.
Legendary
Once a day the server schedules one legendary: a single big SOL prize at one famous park, at 18:00 local time, announced at least 24 hours ahead with a live countdown.
- It's open for 60 minutes. Enter by being within 30 m — the same presence checks as a chest — while signed in.
- The entering wallet must hold 5,000 $OUTSIDE (read, never taken). One entry per account, wallet and phone.
- No videos, no judges. The moment the hour closes, the winner is drawn: index = ⌊u32(HMAC(seed of the closing hour, "legendary:<id>")) × entries⌋, entries in entry order.
Anti-cheat
GPS can be faked and wallets are free, so per-wallet limits alone are worthless. Every rule below is keyed on something a fresh wallet doesn't reset.
- Sign-in. Opening chests needs an account (email, Google, X or a wallet via Privy). Limits apply to the account as well as the wallet.
- GPS log. The app sends at least 4 readings over 15+ seconds. Identical coordinates, round fixed accuracies with zero movement, five-decimal positions and impossible jumps are refused.
- Range. Within 40 m plus half your phone's reported error, with accuracy under ±65 m.
- Network location. Where the platform geolocates your connection, a fix more than 500 km away is refused.
- Device clock. Your UTC offset must be within 3 hours of the park's time zone.
- Motion. A phone reading perfectly still is refused; one with no motion data is asked for photos.
- Travel. No opens in two different cities within 60 minutes, and nothing faster than a car on the ground or a plane in the air — per phone, wallet and account.
- Per phone and network. 25 chests and 2 wallets per phone per day; 80 chests and 30 wallets per network per day.
- Photos. First chests (and a random share later) need three photos taken live. A machine fingerprints them; a picture already used by anyone is refused. Nobody looks at them.
- Atomic limits. Limits are re-checked inside a database write lock. A refused open consumes nothing.
Public API
GET /api/world stats, city clusters, every park, next legendary GET /api/spawns?lat=&lng= nearest parks with today's availability POST /api/open open a chest (multipart: payload JSON + up to 3 photos) GET /api/walk · POST /api/walk the Outside meter for this phone POST /api/starter open the starter chest POST /api/starter/claim keep it (signed in) GET /api/feed[?wallet=] recent prizes, or one wallet's history GET /api/vault treasury, today's budget and every rule in force GET /api/fair hourly seed hashes and revealed seeds GET /api/fair/open/:id inputs + result of one chest, for re-checking GET /api/legendary next, queued and past legendaries (with draws) POST /api/legendary/ticket enter the legendary (signed in, presence + hold)
Errors come back as { ok: false, error, code } with a 4xx status and a sentence a human can read.