尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证A social prediction Market
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Social prediction for sport, on Solana. Make a call on a match, someone takes the other side, you watch it together, and the winners split the pool, paid on-chain in seconds. People play people, never the house.
Live app · How it works · Program on Solana Explorer · X / @Rivaly_fun
Predicting sport has always been social. Every weekend, group chats call the match, argue about it, and say "bet you". 38% of US sports bettors already bet with friends (Conjointly, 2025).
But the products built for it make you do it alone:
| 1 · Make a call | Pick a match and a prediction: "Arsenal to win", "Over 2.5 goals". It takes four taps and becomes a room with a pool. |
| 2 · Someone takes the other side | Share the link in the group chat. Anyone can back YES or NO, with $1 minimum stakes in USDC. |
| 3 · Watch it together | The room has live scores, a match timeline, line-ups, stats and a chat for everyone with a stake. All of it is fed by official match data. |
| 4 · Winners split the pool | When the result is certain, the room settles itself. Winners share the pool pro rata, paid on Solana in seconds. A void or one-sided room refunds everyone. |
Rivaly is the referee, never a player. It never takes a side. When fees are on, they're 5% of the winners' profit, never of a stake: 3% to Rivaly and 2% to the room's host, so the people who bring their crowd earn when that crowd plays. Losers never pay a fee.
flowchart LR
U["Phone / web app<br/>email or Google sign-in<br/>Dynamic embedded wallet"] --> N["Next.js on Vercel<br/>TypeScript · server actions<br/>builds & verifies every transaction"]
N <--> S[("Supabase<br/>Postgres + row-level security<br/>Realtime to every room")]
W["Worker on Render<br/>one live stream per provider"] --> S
F["Official match data<br/>TxLINE · Big Balls Data"] --> W
N --> P["rivaly_rooms program<br/>Rust + Anchor on Solana<br/>one USDC vault per room"]
U -. signs stake .-> P
| Layer | Stack |
|---|---|
| App & backend | Next.js 16 (App Router, React 19, TypeScript), Tailwind v4, on Vercel |
| Data & live updates | Supabase: Postgres with row-level security on every table, Realtime, Storage |
| Identity & wallets | Dynamic: email / Google sign-in with an embedded Solana wallet. No seed phrase, no SOL needed |
| Money | USDC on Solana, held by the rivaly_rooms program (Rust, Anchor). Rivaly pays all network fees |
| Live sport | An always-on TypeScript worker on Render streaming TxLINE and Big Balls Data |
sequenceDiagram
participant U as User (embedded wallet)
participant A as Rivaly server
participant P as rivaly_rooms program
U->>A: Back YES, $10
A->>A: Validate room, balance, minimum stake
A->>U: Stake transaction (Rivaly is fee payer)
U->>A: Signed by the user
A->>A: Check it's exactly the transaction we built
A->>P: Co-sign and send
P-->>A: USDC is in the room's vault
A->>A: Only now record the stake, with its signature as the receipt
Before Rivaly co-signs, it refuses anything that isn't exactly what it built (verify-stake-tx.ts, unit-tested). That means:
resolve.ts decides each market from the official result.planSettlement, and the on-chain program uses the same arithmetic. A 400-room parity test proves the two always agree.rivaly_rooms is live on devnet at FwPoC3NgmMVwoHk7QUGGotmx7dbsSNF5E6N7enxx7kLF.
What it guarantees, whatever the server does:
Who holds which key:
| Key | Can | Can't |
|---|---|---|
| Operator (Rivaly server) | Post results from official data, trigger payouts and refunds, pay fees | Send stakes anywhere but that room's stakers; exceed the fee cap |
| Admin / upgrade authority | Change settings, upgrade the program | Nothing is limited here yet. It moves to a Squads multisig before mainnet. |
| Users | Stake into a vault; void an expired room | Move another person's stake |
What it doesn't do yet: decide results. Rivaly's operator posts them from official match data. The program hasn't been audited; that happens before mainnet.
devnet-e2e.mts also runs the app's own transaction code against the deployed program.src/app/ pages and server actions: rooms, arena, wallet, profile, admin
src/components/ UI (src/components/ui/ is the design-system kit)
src/lib/ settlement, markets, fees, escrow + program client, data providers
supabase/ migrations: schema, RLS policies, triggers, SQL functions
worker/ the live-scores worker (TxLINE + Big Balls Data)
onchain/ the rivaly_rooms Anchor program, its tests and deploy scripts
docs/ security reviews and README assets
rivaly_rooms, then the admin key moves to a Squads multisig.Secrets (the database service key, escrow and welcome-wallet keys, API tokens) live only in the hosting providers' environment settings and are never committed. To report a vulnerability, email [email protected] rather than opening a public issue.
onchain/) is MIT (onchain/LICENSE), so anyone can read, verify, reuse and build on the contract that holds the money."Rivaly" and the Rivaly logo are not covered by these licences.