Custom opcodes

Specialization sometimes beats general purpose zkVM. Use custom opcodes and provers to get the best of both worlds.

The NovaNet zkFramework initially supports standard WASM opcodes. But it may be the case that different opcodes (circuits) are more efficient for specific use-case, or even different prover paradigms. NovaNet is written in Rust using R1CS via the Bellpepper crate. If you can code with Bellpepper you can create an custom opcode with relative ease. Moreover, one could use the Circom-scotia crate to convert Circom circuits into something that can be used with NovaNet.

Common pitfalls and a balancing act

Commitment key parameters are determined by the largest circuit in the execution trace. Larger circuits need larger parameters which can result in longer proof generation times.

The step circuit size proportionately increases the prover memory requirements which may limit the types of machines your custom opcode supports.

Custom provers

NovaNet will have open-source libraries that allow for proof composition for various prover schemes. For example these could be used to make the JOLT verifier into an R1CS circuit which can be proved recursively in NovaNet. This allows for NovaNet to capitalize on new or specialized proving schemes.

*Proof composition is required for almost all proving systems as this is the most direct way to get proofs into constrained environments and blockchains.

Advanced If you have the Rust verifier code of another proving system, you could take that and its resulting proof data, compile it into WASM and run that in NovaNet. In this way you can have proof composition without custom circuit work. Benefits of zkVM proof composition are from what the underlying Nova proof lib supports: KZG (ETH compatible proofs), aggregation, and better memory profiles where needed.


Prizes Do you think you have what it takes to make a custom but highly optimized circuit? Be our guest and win prizes for your work in NovaNet's decentralized prize pool. All code must be open-sourced and on Github with proper licensing to be eligible.

Last updated