CatalystBet (Web3)
Horse-racing themed betting dApp (Umamusume-style): a proof of concept for on-chain randomness without oracles, on Sonic testnet. Frontend + smart contracts only.
Horse-racing themed betting dApp, inspired by Umamusume, that I built with a fellow Web3 dev and auditor. The idea was a proof of concept: generating on-chain random numbers via a relayer, without depending on oracles like Chainlink, aiming to contribute a standard on Ethereum. It runs on Sonic testnet (EVM): the user picks a character, bets test USDC and waits for the phases to end to see if they won. No backend — just frontend and smart contracts.
Randomness without oracles
The project's purpose: to show that on-chain random numbers can be generated with a relayer, without relying on external oracles (Chainlink and similar). We aimed to lay down a reusable standard on Ethereum.
Block counter against manipulation
We used a block counter to prevent validators from knowing the outcome in advance and manipulating the race — key for the randomness to be trustworthy.
No backend: frontend + contracts
The app talks directly to the already-deployed contracts via wagmi + viem (ABIs and addresses on the client). I handled design and frontend; my colleague built and audited the smart contracts.
Sign-in with wallet (SIWE)
Beyond connecting the wallet with RainbowKit, the user signs a message (Sign-In With Ethereum + NextAuth) for a real session, not just a connected wallet.
- Achieving trustworthy on-chain randomness without external oracles was the core challenge; solving it broadened our Web3 perspective a lot.
- Syncing the phase-based flow (betting → race → claim) with on-chain state without an intermediary backend.