A zk adaptation of the classic Guess Who game, implemented in Mina protocol using ZKnoid (and Protokit).
"Guess Who" is a two-player game where each player tries to guess the identity of the other player's hidden character by asking a series of yes or no questions. By integrating with ZKnoid, the game would offer fast, gasless transactions and secure gameplay where each player's moves are verified without exposing their strategy by creating runtime modules for the game logic.
In this game, each player selects their character, verified using ZK proofs. Players take turns asking yes-or-no questions about the physical characteristics of the hidden character (e.g., "Does your character wear glasses?"). Based on the opponent's answer, players eliminate characters from their board that do not match the description.
GW's runtime module ensures that all questions and answers are processed within a zero-knowledge circuit, meaning that no sensitive information is revealed during gameplay. It also maintains the record for each game, the player's score, and the reproducible state of the game.
In this game, each player selects their character, verified using ZK proofs. Players take turns asking yes-or-no questions about the physical characteristics of the hidden character (e.g., "Does your character wear glasses?"). Based on the opponent's answer, players eliminate characters from their board that do not match the description.
GW's runtime module ensures that all questions and answers are processed within a zero-knowledge circuit, meaning that no sensitive information is revealed during gameplay. It also maintains the record for each game, the player's score, and the reproducible state of the game.
Zk Noid is the framework in use over here. The GuessWhoGame Runtime Module handles all the game logic. And for each move made in the game, it is sent to the chain for verification. Once verified by the ZKCircuits written in o1js, we then continue the game.
Some of the featuers included in the game are:
Tech Stack for the project: