ISS
← Field Notes
GAMES
December 28, 2025 · Games · 2 min read

A 60-Second Grid Betting Game on the Monad Blockchain

A real-time multiplayer betting game on Monad where players stake MON on a 6x6 grid in timed rounds, with custodial wallets and a backend game loop keeping rounds honest.

Syrup Supply is a real-time multiplayer betting game on the Monad blockchain, live at syrup.supply. Players bet MON tokens on a 6x6 grid of 36 squares in timed rounds. Winners split 90 percent of the pool, and bonus MAPLE token rewards get distributed randomly on top. Rounds run 60 seconds, which is the whole point: short rounds keep the loop fast and the game alive.

Fairness through weighted randomness

The betting model has a nice property. More bets on a square means a higher probability that square wins. That is weighted random resolution, and it keeps the game fair in a specific sense: your odds scale with your stake rather than being warped by some hidden house edge. Bets are recorded on Monad and payouts are automated and verifiable, so the transparency claim rests on the chain rather than on trust in the operator.

Architecture decisions worth defending

A few choices in this build are the interesting part, and each was a tradeoff I would make the same way again.

SQLite instead of a hosted database. It simplifies deployment, removes an external dependency, and makes local development fast. For a game like this, the operational simplicity is worth more than the scale ceiling.

Custodial wallets. The backend manages user wallets, derived from a master secret, so players do not sign every transaction. That is a real UX call. It trades some decentralization purity for a flow that ordinary players will actually tolerate, and for a fast-round game the friction of per-bet signing would kill the experience.

A backend game loop. Round progression runs on a backend cron job rather than depending on the frontend. This matters more than it sounds. If rounds only advanced when a browser was watching, a disconnect could stall the game. Putting the loop on the backend means rounds progress and pay out reliably even when clients drop.

Production runs on LXD containers, with the nginx frontend and the PM2-managed backend isolated from each other. The stack itself is conventional and modern: React with TypeScript and Vite on the front, Privy for wallet auth, wagmi and viem for chain interactions, Node on the back.

Honest status

Not everything is finished, and the readme is candid about it. The 36-square betting, automated round management and payouts, referral tracking, live chat, and the winners feed all work. MAPLE token rewards are configured but not fully distributed. Referral tracking is track-only with no rewards yet. An autobet bot exists and works but is not enabled for users.

The lesson I carry from this one is that for a real-time game, reliability of the loop beats decentralization ideology. Custodial wallets and a backend cron are not the pure design, but they are what makes the game trustworthy to play, and a game nobody can finish a round on is worth nothing.

Have something that needs building, or stabilizing?

These notes are the work log. The paid work runs through Moonshine Labs, my product and engineering studio. Tell us what you're building, or grab a call.

Work with us →
the studio: moonshinelabs.io