RollupNC in Noir

  • 0 Raised
  • 0 Judges


  • Main track - $45.500
  • ZkDay x LambdaZK Week


Fairly Broken - built as much as possible in 48 hours.

As mentioned below, our circuit experienced a "memory out of bounds" bug that prevented us from using the actual update state circuit we wrote. To test some of the functionality, we hardcoded prover.toml inputs into a native noir test. this 

1. `git clone`
2. `cd circuits/update_state_1`
3. `nargo test`

Desired Case:

1. `git clone`

2. `cd rollup-noir`

3. `yarn`

4. `yarn hardhat test`

  - This is very messy since we did it in 48 hours, and especially messy since we spent the last hour frantically hardcoding the js outputs into noir due to memory out of bounds
  - This is a port of rollupnc
  - The presented unit test demonstrates the proof of transition for a single transfer. The inputs were generated by js and written to a prover.toml then copy/pasted into noir. We ran out of time before debugging an issue with the tx tree inclusion proof 

  - The barretenberg library is not usable with the current version of noir, so we tried to drive it with bash from js. Given the reliance on Circomlibjs for hashing trees, this was a significant obstacle. Because of this, testing our circuits was incredibly difficult.

  - EdDSA recently pushed to noir is not compatible with circomlibjs eddsa. We spent ~5 hours trying to manually compute eddsa pubkeys and signatures that were compatible with Noir's stdlib to no avail. It should be noted that the unit test for eddsa in noir has hardcoded parameters that were taken from a python shell - there is no native flow for computing eddsa in noir.

 - For our circuit on 0.7.1 noir we experienced memory overflow errors. This could be because of the significant public inputs to our circuit, however the circuit was only 200,000 constraints where the storage proof demo was ~400,000. Further, the proving time was considerably slower than Circom (which we have experimented with this rollup as well). This further complicated the process of driving inputs from js considerably, since we have to manually copy in the circuit inputs to unit test the circuit natively.

- Ultimately, we will likely revisit this repository through Aztec office hours or a similar opportunity to attempt to resolve the issues we faced over time