The cryptography behind fair casino games was solved years ago. Getting a suspicious player to actually believe it is design work, and most games skip it. Notes from building the fairness layer across six live games.
Every serious crypto casino game is "provably fair." The server commits to a result before you bet, you can check the commitment after the round, and the math makes cheating detectable. This is standard. It's also, in most games I've studied, completely invisible: a link in the footer, a wall of hex strings, maybe a link to a third-party verifier site.
Here's the thing I kept coming back to while building the MYBC lineup: a fairness system nobody uses builds no trust. The player who suspects the game is rigged is not going to copy a server seed into an external SHA-256 calculator. They're going to close the tab. So the real brief was never "implement provably fair." It was: make checking a round so easy that a suspicious player actually does it once. Once is usually enough.
The pattern we landed on across the lineup is boring on purpose. Every game has a round history, one tap away. Every row in that history opens a drawer that shows the round's seeds and result, and verifies it right there, in the game, with no external tools. You watch the same numbers the game just paid you on get recomputed in front of you.
Two details matter more than they look. First, verification happens locally, so it works without trusting our server twice. Second, it's per round, not per session: the round you're angry about is the round you can check. Anger is specific. The UX has to be specific too.
The clearest lesson came from a bug that wasn't really a bug. During the Keno port, QA found that free-round wins sometimes displayed the wrong total. The engine was correct the whole time: for one type of free round it reports the payout already net of the stake, and our client was helpfully re-deriving the number and getting a different one.
The fix was one rule: display the engine's number verbatim, never recompute it in the client. But the lesson was bigger than the fix. Trust dies at the first mismatch between two numbers on the same screen. A player who sees the win popup say one thing and the history say another doesn't file a bug report. They decide the game is broken in the way casinos are always broken, and they leave. Fairness UX is mostly the discipline of never showing two versions of the truth.
Hammer King is a crash game: the multiplier climbs, you cash out before the bust, and an auto-cashout lets you set a target in advance. Early on I had to decide what happens when a round's crash point and a player's auto target are close. The tempting implementation resolves the crash first, because it's simpler. The result is a game where players who set 2.00x sometimes lose rounds that crashed at 2.00x, and every one of them is certain they were robbed.
So the loop resolves auto-cashout before the crash check. If your target was reachable in this round, you win at exactly that number. It cost some care in the game loop and it removed an entire category of complaint, the "it busted just as I clicked" feeling that poisons crash games. Players don't read your code, but they feel its priorities.
A small war story. While testing Keno on a plain HTTP connection inside our LAN, the in-game verification quietly stopped working. The browser's crypto API is only available in secure contexts, so on http:// the whole fairness feature just wasn't there, with no error and no explanation. In production this would likely never happen. But "likely never" is a bad property for the one feature whose entire job is being reliable.
I wrote a pure JavaScript SHA-256 and HMAC fallback so verification works in any context. Was it necessary? Arguably not. But it fixed how I think about fairness features: they're not allowed to silently disappear, ever, because their absence looks exactly like guilt.
Treat fairness like onboarding, not like documentation. It's a ritual you're designing: the player arrives suspicious, performs a small verification act, and leaves calmer. Make the ritual one tap deep, make it specific to the round they care about, make the numbers match everywhere, and never let the feature fail silently. The math earns you the right to say "provably fair." The design decides whether anyone believes it.