In another article, I researched how Monad, a new EVM-compatible, Layer 1 blockchain, uses parallel execution to process multiple transactions simultaneously.
It got me curious about whether parallel execution is better. Ethereum, the second-most popular blockchain, processes transactions in sequential order and is often perceived as slow.
Many newer, separate Ethereum-compatible (also known as Ethereum Virtual Machine (EVM) compatible) blockchains that process transactions in parallel, such as Sei and Monad, claim to be “autobahn” chains, suggesting that they can scale and are much faster than Ethereum.
In Eryx we made a Plonky2 backend called Noirky2. Now, there are so many things we wish we had known from the start. Besides, a lot changed in Noir structurally in the process and that’s why so many backends need updating: the specification changed recently.
What just happened?
Many things are happening here, so let’s start by talking about the ACIR standard (the ACIR program part of the workflow). ACIR stands for Abstract Circuit Intermediate Representation, and it’s the intermediate set of instructions that every Noir program compiles to. There are two distinct but similar things: on the one hand, we have the ACIR standard in an abstract sense, the specification of its instructions and how they should be interpreted.
On the other hand there’s the ACIR implementation in rust. Luckily for us, Plonky2 is also implemented in Rust, so we took the ACIR implementation from Noir and used it as a dependency in Noirky2. This is not the case for proving systems that are not written in Rust, so deserializing the instructions produced by the Nargo compilation will be the first challenge for other proving systems.