
Kana Mutti
කණ මුට්ටි - the blindfolded pot-smashing game from the Avurudu festival, turned into a cash-out game where you can’t read the board until the round is over.
- Role
- Genre
- Return
- 97% (Careful, Risky)
- Stack
- Accessibility
- WebGL + full DOM mirror
- Fairness
- Block seed, sealed reveal
01The Game
Four clay pots hang from a rope tied between two trees. You place a bet, choose how many of the four pots are empty, and then guide a blindfolded striker to one pot at a time. Every pot full of coins raises your multiplier, but an empty one ends the round.
The ladder itself isn’t the interesting part. The hard part is trust. Afterwards, anyone has to be able to check the board (that’s what provably fair means), but while you’re still picking, it has to be impossible to work out. Kana Mutti is the game in the arcade that shows how to do both at the same time.
Verifiable
The board is built from a public block value that anyone can check independently, rather than a hidden roll on a server.
Secret while it matters
The shuffle code is included in the game’s files, so the seed is kept hidden until the round is over.
A festival pastime
A blindfolded striker, hanging pots, coins and broken shards. It’s a festival game from Avurudu, played in 3D.
02Screenshots
These screenshots were captured straight from the game. Tap any of them to see it bigger.





03Core Loop
- 1
Stake & risk
Choose Careful (1 empty pot), Risky (2) or Daredevil (3).
- 2
Shuffle
The block value and a round counter seed mulberry32, which then shuffles the four pots using a Fisher-Yates shuffle.
- 3
Sealed
The trust badge shows SEALED, and the audit details are kept somewhere the interface can’t read them.
- 4
Smash
Point the striker at a pot. Coins raise your multiplier, and an empty pot ends the round.
- 5
Unsealed
Whether you cash out, hit an empty pot or clear the whole board, the block, hash, counter and board are all revealed.
04Key Features
Three risk levels
More empty pots means bigger payouts. With only four pots, two of the risk levels would end up with the same odds, so that tie is settled in the player’s favour.
Three-state trust chip
The badge shows FAIR before a round, SEALED during one and the block number once it’s over. It’s built in real HTML with a data table, closes with Escape and keeps keyboard focus inside while it’s open.
Blindfolded striker
The striker walks over and swings at the pot you chose, and a hit bursts into coins and shards.
Accessible from day one
There’s an HTML copy underneath the WebGL scene, so you can play with a keyboard or a screen reader.
WebAudio
Festival sound effects, all generated in code.
05The Maths
The multiplier after k safe picks is one over the chance of drawing k safe pots in a row without putting any back. That’s a standard hypergeometric calculation rather than a made-up curve, and it’s then scaled by each risk level’s return.
The ladder
m = Π (n − j) / (n − d − j) for j < k, multiplied by the level’s return, which is 0.97 for Careful and Risky.
The Daredevil promise
With four pots, choosing 1 of 4 and 3 of 4 give the same number of combinations, so Careful and Daredevil would end up with the same top prize. That would break the promise that more empty pots means bigger payouts. Daredevil keeps that promise on purpose, and so it pays back 175%.
No positional bias
I ran an exact copy of the shuffle code for 400,000 rounds per risk level, across the full range of block values. Empty pots landed in each position 24.96-25.07%, 49.80-50.17% and 74.84-75.09% of the time, and the biggest difference from perfect was just 0.39 percentage points.
Prime-stride nonce
New blocks come roughly every 12 seconds, but rounds can be quicker than that. So I use a counter that never resets and steps forward by a prime number, which keeps back-to-back boards independent. Boards repeat about 1 time in 6, which is exactly what you’d expect from two independent draws.
06Under the Hood
The seal is a ref
The audit details are stored in a ref that the rendering code can’t read. The visible state resets to empty every round and is only filled in at three moments: when you cash out, when you hit an empty pot, or when you clear the board.
Server seed route
The server route keeps its token private, retries when the block clock lags, caches good results for 9 seconds and failures for 5 seconds, backs off more each time it fails, and always responds with a 200 along with a flag if it had to fall back.
Injectable generator
The shuffle takes its random generator as an input, so I could switch the seed source from the browser’s crypto RNG to the blockchain block without touching the shuffle logic.
Chrome-free corner
The trust badge sits in the bottom-left corner, the one spot the 3D scene never draws into during any phase.
07Challenges & Solutions
08Results & Takeaways
- A finished 3D game based on an Avurudu pastime, which also serves as the arcade’s reference example of sealed-reveal fairness.
- Next up: bringing the sealed reveal to the racing games, and moving the results to the server so the seal still holds even if someone tampers with their game.
What I learned
- Trust features are engineering, not decoration. The seal means something because it’s stored in a ref the rendering code can’t read.
- Showing a lock icon is better than leaving an empty space that looks like a bug.
- Each game needs its own kind of fairness. A poker deal has to stay secret forever, but a pot board only needs to stay secret until the round ends.