a16z / jolt

The simplest and most extensible zkVM. Fast and fully open source from a16z crypto and friends. ⚡
https://jolt.a16zcrypto.com
MIT License
653 stars 137 forks source link

Improve JoltPolynomial / JoltCommitments logic #382

Closed sragss closed 1 week ago

sragss commented 3 months ago

Flow is currently:

vm/mod.rs
fn prove(...) {
    let instruction_polys = InstructionLookupsProof::polynomialize();
    let memory_polys = ReadWriteMemory::new();
    let bytecode_polys = BytecodePolynomials::new();
    let rangecheck_polys = RangecheckPolynomials::new();
    let (witness_segments, r1cs_commitments) = Self::r1cs_setup();
    let jolt_commitments = jolt_polynomials.commit();

    jolt_commitments.r1cs = Some(r1cs_commitments);
}

Instead let's return the R1CS specific stuff from r1cs_setup(), use it to construct JoltPolynomials then commit them all together. Additionally R1CSInputs is a duplicate of JoltPolynomials.