Maximally on-chain, Pokémon-style game, with trustless NPC interaction via ZK-SNARKs
This project lets you play a fun, quirky maximally on-chain game in the style of Pokémon. Instead of playing as Pokémon you instead play as characters like "Degen", "Regulator" and "Bitcoin Maxi".
It's interesting because currently fully on-chain games are quite slow, but we instead chose to run the computation offchain and verify it onchain using zk proofs.
Our approach allows for really low latency between NPCs and players thanks to a state channel that uses cryptographic commitments to generate verifiable randomness.
Currently interaction betwen offchain agents and onchain behaviour is really difficult but it's really important to make complex NPC behaviour possible and we think we've pushed a little bit towards that direction.
Wrote to Scroll Alphanet using Ethers. Used Circom for arithmetic circuits and generating ZK proofs. We had to squeeze the structure of mini-battles into arithmetic circuits which was really tricky but really fun and informative! It goes way beyond simple maths-based games that are more suited to ZK circuits such as Sudoku. Used hash libraries for cryptographic commitments. Used react/redux for frontend. Express / node for server. Used hardhat / waffle for smart contract development.