zkVM is always such a BIG BLACK BOX where only a number of well-established protocols really know how it works, while normies just give up on reading 10k lines of those codes and numerous interacting components to understand it.
We use a high-level zk language like Noir to write the zkVM circuit and build components (DSL, DAPP, verifier smart contract, and interactive frontend) to make it easier for normies to visualize the program and understand the fundamental concept of the zkVM.
We ship 2 VMs: Turing zero and Type-5 ZKEVM.
Turing Zero is a zk circuit simulating a simple Turing machine. We also built an interactive frontend that allows users to write a simple DSL that dictates how that Turing machine runs. Last but not least, we provide a few simple on-chain puzzle games for users to play and PROVE that they can write a program that can solve the challenge without showing the actual program itself.
Type-5 zkEVM is a simplified EVM that captures important concepts like state transition proof, opcodes, etc. Users can easily add/modify opcodes or VM behaviour due to our small, easily-read codebase. We also built a frontend that shows how each of our opcode runs, while showing in the circuit code itself that we can write and generate proof for a simple P2P lending example (deposit, borrow, return function)
Building TWO zkVMs in a weekend is a challenge in itself.
-Require deep understanding of machine: Turing machine and EVM itself
-Our zkVM is not solidity compatible, so we need to write our own "bytecode"
-Design decision how much detailed we should write our machine: ease of readability while still showing important concepts
-Hard to visualize these complicated concepts, and make it interactive
-Although we use high-level zk language like Noir, its error is not clear, hence hard to debug.
-Tons of work stiching many components to get full app: interactive, yet can create zk proof.
-The food, cats, and the venue are too BEAUTIFUL, pretty distracting 😛