How Kubrai works
Kubrai runs parimutuel pools on the numbers of the apps in the Solana dApp Store: how much Jupiter trades and earns, what Phantom and the pump.fun app make, how much SOL is staked with Jito, JupSOL and Sanctum, what ORE miners deploy, how many Seekers get activated. You bet SKR on a range, winners split the losing pools, and every settlement is backed by hourly snapshots whose hashes sit on-chain.
Three minutes: connect, get test tokens, bet on a range, and see a settled market with its snapshots checked against the on-chain hash. Recorded on devnet.
Why bet on Seeker's dApps
Seeker owners use these apps every day and already have a view on how they are doing: is Jupiter busier this week, did the pump.fun app cool off, is staking with Jito growing? Kubrai turns that view into a position: pick the range you believe in, put SKR behind it, and get paid from the people who believed otherwise. No order book, no market maker, no spread: one pot per range, and the pools decide the odds.
- Only numbers that cost money to move. Fees and revenue have to be paid by someone, so pushing them up costs what it measures; staked SOL has to stay parked for the whole window; a new Seeker is a $500 device. Counts that are cheap to fake (transactions, wallets, store reviews) are deliberately not markets.
- New markets every day. Each market counts one full day. Betting opens 13 hours before that day begins, at 11:00 UTC (your time), and closes halfway through it, at 12:00 UTC.
- Seeker-native. The Android app signs with Seed Vault Wallet through Mobile Wallet Adapter; Genesis Token holders and ORE miners pay a lower fee, proven on-chain from their own wallet.
A market, step by step
- One metric, 2 to 8 ranges. A yes/no market is two ranges around one threshold; a multi-range market is cut at the quantiles of the metric's own recent history, so every range starts out roughly equally likely.
- Betting stops halfway through the day. A market opens 13 hours before the day it counts and stops taking bets 12 hours into it, so nobody bets having seen more than half of the day. The next day's market opens an hour before that, so there is always one open.
- Three kinds. Counters (Seekers activated, SOL deployed in ORE) resolve on the increase between the hourly snapshots at the start and the end of the day. Levels (staked SOL, SKR staked, prices, reserves) resolve on the median of every hourly snapshot of the day, so a last-minute move cannot swing them. Figures a source publishes once a day (fees, revenue, volume) are read at a fixed hour after the day ends: between 6 hours and 2 days later, depending on how long that source keeps adjusting the figure, and each market's page says when. What the source shows at that hour settles the market, and later revisions do not count; if the source moves the figure into another range before the result is final, the market is voided and every stake is refunded.
- The server proposes a number, never a winner. The observed value and the hash of the snapshots it came from go on-chain; the program derives the winning range from the market's own thresholds.
- Six hours to dispute, then payout. Anyone can dispute a proposal inside the window. After it, a permissionless crank pays every winner and refunds every loser's rent. Nobody has to claim.
Every market page shows this as a timeline in your own time zone, with a countdown to the next step, and lists the exact snapshots behind the result with their hashes and memo transactions.
How the money works
- Each range has its own pool in SKR. Winners get their stake back plus a pro-rata share of every losing pool. Losers lose their stake.
- The fee is 3% of what a winner takes from the losing pools, never of the winner's own stake. It is locked into your position at the moment you bet.
- There is no house prize: a pool is only what bettors put in. If nobody picked the winning range, everyone is refunded in full.
- A voided market refunds every stake in full, no fee. A market that still has no verifiable evidence a day after it could have settled is voided automatically.
- Deposits sit in a program-owned vault; only the program's payout math can move them. The server holds no funds.
Discounts
- Early bird, −1%: bets placed in the first quarter of a market's betting window (about the first 6 hours).
- Seeker Genesis Token, −1%: the bet carries your token account and its mint; the program checks on-chain that the mint belongs to the Genesis Token group. Nothing is taken on the app's word.
- ORE miner, −1%: the bet carries your ORE Miner account; the program checks it names you as its authority and holds unclaimed mining rewards worth at least $500, the price of a Seeker. The threshold is repriced daily from the ORE price.
- Discounts stack and never take the fee below 1%. On devnet the faucet hands every wallet a stand-in Genesis Token and a stand-in Miner account so anyone can try them; on mainnet only the real things count.
Where the numbers come from
Every hour the server reads each metric, writes the bundle to disk with its SHA-256, and records that hash in a memo transaction on Solana. A market resolves only from bundles whose bytes still match both the sidecar hash and the on-chain memo. Sources are labelled on every market:
- on-chain: token supplies (JitoSOL, JupSOL, Sanctum INF), Seeker Genesis Tokens, SKR in the staking vault, the ORE board and round accounts. Anyone can recompute them.
- third-party: DefiLlama for protocol fees, revenue, volume and exchange reserves; Jupiter for prices. Every reading is stored in the hourly snapshot, so what a market settled on can always be checked.
- store data: the Solana dApp Store catalog, read from the store's own API, decides which apps qualify: only apps listed in the store get markets.
Open any market and expand “Snapshots” to see the opening and closing readings, their hashes and the memo transactions. That is the whole evidence; there is nothing else to trust.
Trust model, stated plainly
- What a compromised server can do: delay a market, or propose a wrong number that everyone can check against the published snapshots and dispute within six hours. It cannot pick a winner and it cannot move a pool.
- What the admin key can do: void a market (full refunds), finalize early, change fees within the hard-coded 10% ceiling. On mainnet it is a Squads multisig held by the operator's own Seeker and hardware wallet; the server is not a member.
- What nobody can do: take a winner's stake, charge a fee above the ceiling, or settle a market from snapshots that do not match their on-chain hash.
- Test network: everything you see on devnet.kubrai.xyz uses test tokens with no value. Mainnet follows the hackathon.
Points and invites
- Points: one point per SKR staked in a market that paid out, every range counted, won or lost. Voided markets score nothing. The leaderboard ranks wallets by points over 7 days, 30 days or all time.
- Invites: your link unlocks with your first bet. A friend who bets through it gets 10% of the fee on their winnings back, forever; you earn 20% of that fee, rising to 25% at 10,000 points and 30% at 100,000. Paid every Monday in SKR. See Invite.
Build on it
Everything the site shows is public, free and needs no key. Bets are transactions your own wallet signs; there is no server-side bet endpoint, so nobody can bet with your tokens but you.
GET /markets every market (cached 15 s) GET /markets/:id
GET /config fees, dispute window, discounts GET /evidence?metric&open&close&baseline&id
GET /snapshots hourly slots GET /snapshots/:slot (bundle + sha256 + memo tx)
GET /leaderboard?window=7d points ranking GET /positions/:wallet settled history
GET /referral/:wallet invite link and earnings POST /faucet {"address"} (devnet)
Base URL https://api-devnet.kubrai.xyz. The program IDL is in the repository; examples/automate.mjs lists markets, places a bet and reads results from a script. Source, program and tests: github.com/kubraixyz/kubrai.