Game ini sekarang sudah terintegrasi dengan Base Network untuk tournament entry fees dan prize distribution.
Base Mainnet: 0x70Ad1125767E7721023cf43c8809c52c1B507E0a
- Menggunakan OnchainKit untuk koneksi ke Base Network
- Support untuk Coinbase Wallet, MetaMask, dan wallet lainnya
- Otomatis connect ke Base Mainnet
- Entry fee: 0.00001 ETH
- Payment langsung ke smart contract
- Verifikasi on-chain sebelum game dimulai
Setelah game over, score otomatis di-submit ke:
- SpacetimeDB: Untuk real-time leaderboard
- Smart Contract: Untuk prize distribution
Score submission ke contract mencakup:
- Final score
- Completion time (dalam detik)
- Tier (0=S, 1=A, 2=B, 3=C berdasarkan score)
Contract mendukung fungsi distributePrizes() yang:
- Bisa dipanggil setelah 24 jam
- Distribute prizes ke top 1000 players
- Prize distribution berdasarkan ranking
Contract memiliki fungsi-fungsi berikut:
enterTournament()- Payable, untuk pay entry feesubmitScore(uint256 score, uint256 time, uint8 tier)- Submit hasil gamedistributePrizes()- Trigger prize distribution (bisa diatur auto via backend)
entryFee()- Cek entry fee amountprizePool()- Cek total prize pool saat inihasEntered(address)- Cek apakah address sudah enterplayerScores(address)- Get score player tertentu
- Klik "Start Game"
- Pilih class dan element
- Pilih "Prize Pool Mode"
- Connect wallet (akan muncul OnchainKit wallet modal)
- Confirm payment 0.00001 ETH
- Main game
- Score otomatis submit ke blockchain setelah game over
- Tidak perlu connect wallet
- Score tetap tersimpan di SpacetimeDB
- Tidak eligible untuk prize pool
Prize distribution bisa dilakukan dengan 2 cara:
Bisa buat button untuk admin yang panggil distributePrizes() setelah 24 jam
Setup backend service atau script yang:
- Check contract every hour
- Panggil
distributePrizes()jika sudah 24 jam - Bisa pakai Gelato Network atau Chainlink Automation
- src/lib/contracts/tournamentABI.ts - Contract ABI definition
- src/hooks/useTournamentContract.ts - Hook untuk interact dengan contract
- src/components/game/WalletStatus.tsx - Display wallet connection status
- src/components/game/TournamentInfo.tsx - Show tournament info dan wallet connect
Tidak perlu tambahan env variables. OnchainKit sudah dikonfigurasi dengan:
- API Key: Sudah hardcoded di providers.tsx
- Chain: Base Mainnet
- Contract Address: 0x70Ad1125767E7721023cf43c8809c52c1B507E0a
Untuk testing di testnet:
- Ganti contract address di
src/lib/game/constants.ts - Ganti chain di
src/app/providers.tsxdaribasekebaseSepolia - Get testnet ETH dari Base Sepolia faucet
- Smart contract harus sudah deployed dan verified di Base Network
- Contract harus memiliki fungsi-fungsi sesuai ABI yang didefinisikan
- Pastikan contract owner setup prize distribution logic dengan benar
- Consider gas fees saat submit score (bisa disubsidi via paymaster)