The zkFramework and WASM

NovaNet at its core is based on the memory efficient non-uniform incremental verifiable computation scheme SuperNova (NIVC). The core code is in Rust with many components open-sourced and built with other prominent teams in the IVC space.

Anyone can add custom opcodes for use-case specific proving, or use the opcodes that are already there for more standard applications. NovaNet's zkFramework has been first implemented for the WASM virtual machine. This allows for high portability. You can have zkApps run in browsers, on blockchains, or anywhere else WASM can run. Why is NovaNet fast?

TLDR; With 'folding schemes' most of the heavy SNARK machinery (math) is only done at the last step. More specifically, by using IVC, as described in the Nova paper, NovaNet can do zero-knowledge computations incrementally with very little costs on each iteration. Moreover, we can parallelize computation by breaking problems into chunks. Each chunk becomes its own SuperNova instance. When recombining we prove that the chunks followed each other and had the claimed output for each portion of the execution trace. These parallelization schemes are known in the literature and also used in Risc0 as 'continuations'. In contrast, NovaNet does not use merkle trees or sorting to achieve this. But rather offline memory checking as described in JOLT and prior to that by Blum et al. The checking procedure has been modified for folding scheme.

How do I get a WASM file? Rust developers should be able to run this command on their existing Rust code (with a few caveats).

sudo cargo build --target=wasm32-unknown-unknown --release

Golang devs:

GOOS=js GOARCH=wasm go build -o main.wasm

30+ languages can compile into WASM. It also works natively on most modern browsers. Now that you have your WASM file how do you use it with NovaNet? Read on.

Last updated