CUPCULT · how it works (on-chain)
Klarifikasi penting: live odds bukan berarti CUPCULT tanpa vault. Pola yang dipakai sama seperti MemeMarket — vault contract milik sendiri, odds di-sign off-chain lalu dikunci on-chain, hasil pertandingan dari Oracle independen. Halaman ini adalah blueprint kontrak vault CUPCULT jika token di-launch via flap.sh.
| Komponen | Sumber | On-chain? |
|---|---|---|
| Token $CUPCULT (BEP-20) | Launch via flap.sh, tax 4%/4% hard-coded | Ya — BSC |
| Odds & pasar (1X2, AH, O/U…) | Agregasi sportsbook (Bet365, Pinnacle, dst) → signer EIP-712 | Di-lock saat bet |
| Hasil pertandingan | WorldCupViewer Oracle 0x0003…333e | 100% on-chain |
| Dana, payout, jackpot, burn, cap | CUPCULT Vault Contract (milik sendiri) | 100% on-chain |
| Harga BNB/USD untuk lock notional | Chainlink BNB/USD feed | 100% on-chain |
Aliran bet — end to end
User wallet
│ 1. pilih market → request odds
▼
Odds Service (off-chain) ← agregasi: Bet365, Pinnacle, William Hill, 1xBet, Betano
│ 2. sign EIP-712 ticket
│ { matchId, market, pick, odds, expiry=15s, nonce }
▼
User wallet — 3. submit placeBet(ticket, stakeToken) ──┐
▼
┌──────────────────────────┐
Chainlink BNB/USD ───lock USD────▶│ CUPCULT VAULT (BSC) │
$CUPCULT (flap.sh) ───transferIn─▶│ - verify EIP-712 sig │
│ - lock stakeUsd notional│
│ - enforce caps 15/30/40 │
└────────────┬─────────────┘
│ on match settled
WorldCupViewer Oracle ──getMatchResult(id)────▶│
▼
resolve() → win? burn 10% → pay 90%
│ lose? stake → reserve
▼
on final whistle: distributeJackpot()
pro-rata by Σ stakeUsd per userVault Contract — desain modul
Satu kontrak inti CupcultVault.sol + helper. Tidak ada ownerWithdraw(), tidak ada pauseSettlement(). Semua parameter di-hardcode di konstruktor.
Catat per bet: (user, matchId, market, pick, oddsBps, stakeUsd, stakeTokenAmt, ticketHash). stakeUsd = bobot permanen untuk Jackpot.
EIP-712 domain "CUPCULT-Odds", validitas 15s. Signer = multisig odds-service. Replay-protected via nonce + ticketHash.
Saat placeBet: stakeUsd = stakeTokenAmt × tokenPriceBnb × bnbUsdFeed. Setelah lock, USD permanen — fluktuasi harga tidak menggerus.
3 hard cap: single 15% / user×match 30% / option 40%. Yang paling ketat menang. Revert kalau lewat.
Saat payout: 10% kirim ke 0x…dead, 90% ke user. Burn dihitung di kontrak, bukan tax token — tidak bisa dimatikan.
Dua bucket: BNB Jackpot (50% tax) + Token Payout Reserve (50% tax buyback). distributeJackpot() bisa dipanggil siapa pun setelah final, pro-rata berdasarkan Σ stakeUsd.
Integrasi token launch via flap.sh
flap.sh meng-handle token genesis (BEP-20, LP, tax router). Vault tinggal di-wire sebagai recipient tax:
- Launch
$CUPCULTdi flap.sh dengan buy tax 4% / sell tax 4%. - Set
taxRecipient = CupcultVault.address(atauTaxSplitteryang langsung membagi 50/50). - Tax masuk →
TaxSplitter.split():- 50% swap ke BNB →
vault.bnbJackpot - 50% tetap CUPCULT →
vault.tokenPayoutReserve
- 50% swap ke BNB →
- Renounce ownership token setelah LP locked → flap.sh anti-rug standard.
Kenapa ini trustless — “tim tidak bisa kabur”
- Vault tanpa owner withdraw — fungsi tidak ada di bytecode.
- Settlement tidak bisa di-pause — siapa pun bisa panggil
resolve(matchId)setelah Oracle menulis hasil. - Odds signer ≠ vault admin — signer hanya bisa rewrite odds untuk bet baru, tidak bisa mengubah bet yang sudah on-chain.
- Jackpot distribution permissionless — setelah final, siapa pun bisa eksekusi pembagian.
- Oracle eksternal — WorldCupViewer di kontrak terpisah, vault hanya membacanya.
- Tax token di-renounce via flap.sh standard, recipient tax dikunci ke alamat vault.
CUPCULT vs MemeMarket — perbedaan & persamaan
| Aspek | MemeMarket | CUPCULT |
|---|---|---|
| Token launch | In-house | flap.sh (tax router siap pakai) |
| Vault contract | Sendiri | Sendiri (blueprint di atas) |
| Odds feed | Bet365, Unibet, 1xBet, Betano, 22Bet | Bet365, Pinnacle, William Hill, 1xBet, Betano |
| Oracle hasil | Flap WorldCup Viewer | WorldCupViewer (0x0003…333e) |
| Tax distribution | 50% BNB Jackpot / 50% buyback | Sama persis |
| Burn on win | 10% | 10% |
| Caps treasury | 15 / 30 / 40 % | Sama persis |
Aturan gameplay lengkap untuk user (bukan kontrak) ada di halaman Rules.