1 min read

zkGames

One way to categorize games is the amount of information players have.

Complete information games (like chess) are those where every player knows everything about the current state of the game. The only thing you don't know is what the other player(s) will do next.

Incomplete information games (like poker) are those where you don't know everything. Most sufficiently interesting competitive games fall into this category (but I'm biased).

Incomplete information is simple to implement in real life and in traditional video games. For tabletop, the complete state of the game is just the cards and pieces scattered across the table. No one else has seen your cards, but everyone can agree that the game is fair because they've been watching your cards the whole time. Video games handle this by storing information on a central server and only exposing your slice of the game state to your game client.

Crypto-native games need a little extra work to support incomplete information because blockchain data is publicly accessible. A lot of games decide to store their hidden information off-chain in a private, centralized service. But this goes against the first tenant of crypto-native games: all data is stored on-chain.

So, how do you hide information from other players in plain sight? Zero-Knowledge Proofs. I won't get into how these work, because it's very mathy, but the gist is that you can submit verifiably valid data without revealing the data itself. Any other player can confirm that you're not cheating (just like watching your cards in a game of poker), but they still don't know what you know until you reveal it.

Keep in mind that zero-knowledge proofs can be brute forced. This probably wouldn't be a valid solution for rock-paper-scissors because other players could just calculate the proof for each of the three options themselves until they find a result that matches the proof you submitted. You need to have a sufficiently large set of potential inputs to make cheating really difficult.

If you're building a game with incomplete information, you can still put it on blockchain.

-Luke

P.S. This post was inspired by The Dark Forest and especially their announcement article where they get into more detail on how zkSnark is used in the game logic.