尚未偵測到更新。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.