project screenshot 1
project screenshot 2
project screenshot 3
project screenshot 4
project screenshot 5

GameChat

GameChat is a web3-native chat client implementation to enable gamers to chat with other gamers while enforcing identity claims using ZK

GameChat

Created At

ETHSanFrancisco 2022

Winner of

trophy

🥇 Findora — Best Use

trophy

❤️ XMTP — Honorable Mention

Project Description

Currently, players of Web3 games have no way to communicate with other gamers unless the game itself implements a chat interface or by using some third-party tool like Discord. We’re aiming to allow players to talk to any other player on an EVM game.

By integrating identity verficiation with our chat interface, we enable new methods of communication and community building directly from within the game itself, thus providing benefit for both the developers and the players.

We’re also granting more privileges to the game developer by allowing them to select which identity claims they wish to enforce before allowing a user to access the chat feature for their game. For example, a game may not wish to allow children under the age of 16 to use the chat functionality for their game to protect them from profanity or other dangerous activities.

How it's Made

We’ve built GameChat primarily on top of the XMTP protcol and by implementing Findora zkDiD.

  1. XMTP Protocol: We built a “group client” application which facilitates group chat discussions over the existing XMTP protocol hence making communication over XMTP suitable for gaming situations. The group client application has been implemented as a NodeJS application using the XMTP Javascript SDK. The group client accepts inputs of a certain format and parses them to perform various actions (registering a game onto XMTP, allowing users to join a chat room, leave a chat room, banning users in a chatroom, unbanning users, and sending plaintext messages). We currently transmit messages in JSON format, for example, to register a game, a game developer would send {"type": “register”, "data": {“channel_id” :123}} to register their game which has ID 123 and a user would send {"type": "join", "data": ""} to join a chatroom. We’ve used the developer network of XMTP deployed at xmtp.vercel.app as our XMTP client, but in the future we aim to build our own version of the client which removes the need for a user to have to manually construct the JSON payloads. For now, we redirect the user from our Chrome browser extension to the xmtp.vercel.app site to continue messaging.

  2. Findora zkDiD: There are two parts to this: First is Credential Generation. To generate credentials, go to <hostname>/issue Here, you can enter your date of birth, name, and role. The generated credentials along with zkCircuits are used to grant you access and privileges in GameChat world.

  3. Put in your information (Ideally sourced using WorldCoin)

  4. Issue Credentials stores both your zkCredentials and relevant zkCircuit in the localStorage

Second is Credential Verification Credential verification is done by the GameChat extension to grant you access to the chat. Additionally, if you have the mod role as part of your DID, then you can also get special access in the chat. If your role is mod or admin you have privileges to 'ban', 'unban', etc. other users on the GamerChat chat server (based on XMTP).

background image mobile

Join the mailing list

Get the latest news and updates