Oracle3
Oracle3: 예측시장 거래 엔진·MCP 서버
Rivaly는 경기 결과를 예측하고, 다른 사람과 맞대결해 자동으로 당첨자에게 지급됩니다
Rivaly is social prediction for sport. Create a prediction on a match, others back it or take the other side, you watch it together, and the winners are paid automatically — you play people, never a b
금융TypeScript · PLpgSQLGitHub @alexshaw3065-hash온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.