Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/hybrid snark agg #1438

Draft
wants to merge 25 commits into
base: v0.13
Choose a base branch
from
Draft
Changes from 1 commit
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
7ec5588
pin rust to 1.77 (#1429)
lispc Oct 9, 2024
252b8d9
use revm v3.5.0 instead of snark-verifier sdk
roynalnaruto Oct 9, 2024
5b3d535
export deploy_and_call
roynalnaruto Oct 9, 2024
6dd70e7
feat: add chunk kind
roynalnaruto Oct 16, 2024
21b4093
initial work | to be tested
roynalnaruto Oct 17, 2024
73efa6e
fix: borrow ctx from loader only once
roynalnaruto Oct 17, 2024
dbe3d93
more logs
roynalnaruto Oct 17, 2024
756f4af
read from protocol json files
roynalnaruto Oct 18, 2024
e7b778e
dir + name
roynalnaruto Oct 18, 2024
7bb4d86
reference already duplicated somewhere in
roynalnaruto Oct 18, 2024
0ad5448
minor updates, bump snark-verifier
roynalnaruto Oct 18, 2024
dc52147
refactor
roynalnaruto Oct 18, 2024
b621bce
clean up + refactor
roynalnaruto Oct 22, 2024
1beeb35
chunk prover error and refactor
roynalnaruto Oct 23, 2024
667ace4
layer-2 compress only (sp1 chunk proof)
roynalnaruto Oct 23, 2024
a8c2733
more refactoring and better inline docs
roynalnaruto Oct 24, 2024
d684c06
refactor prover::aggregator module
roynalnaruto Oct 24, 2024
b849391
return BatchProverError instead of using anyhow
roynalnaruto Oct 24, 2024
c8cd343
tidy up lib.rs of prover crate
roynalnaruto Oct 25, 2024
fc050c4
refactor prover::types and minor changes
roynalnaruto Oct 25, 2024
65b7c7c
more refactoring
roynalnaruto Oct 25, 2024
f8fdd32
move more modules into prover::utils
roynalnaruto Oct 25, 2024
80f2e52
proof v2
roynalnaruto Oct 26, 2024
44595ac
use bundle proof v2
roynalnaruto Oct 26, 2024
3aaf9c4
fix(soundness): init_state depends on halo2/sp1 route
roynalnaruto Nov 4, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
fix(soundness): init_state depends on halo2/sp1 route
roynalnaruto committed Nov 4, 2024
commit 3aaf9c4560d8c6b20a6ad8b0350c2a0024fb4d27
36 changes: 21 additions & 15 deletions aggregator/src/aggregation/circuit.rs
Original file line number Diff line number Diff line change
@@ -2,8 +2,8 @@ use crate::{
aggregation::decoder::WORKED_EXAMPLE,
blob::BatchData,
witgen::{zstd_encode, MultiBlockProcessResult},
FixedProtocol, LOG_DEGREE, PI_CHAIN_ID, PI_CURRENT_BATCH_HASH, PI_CURRENT_STATE_ROOT,
PI_CURRENT_WITHDRAW_ROOT, PI_PARENT_BATCH_HASH, PI_PARENT_STATE_ROOT,
FixedProtocol, LOG_DEGREE, MAX_AGG_SNARKS, PI_CHAIN_ID, PI_CURRENT_BATCH_HASH,
PI_CURRENT_STATE_ROOT, PI_CURRENT_WITHDRAW_ROOT, PI_PARENT_BATCH_HASH, PI_PARENT_STATE_ROOT,
};
use ark_std::{end_timer, start_timer};
use halo2_base::{
@@ -364,6 +364,12 @@ impl<const N_SNARKS: usize> Circuit<Fr> for BatchCircuit<N_SNARKS> {
log::info!("populating constants OK");

// Commitments to the preprocessed polynomials.
//
// check_1: halo2-route
// check_2: sp1-route
//
// OR(check_1, check_2) == 1
let mut route_check = Vec::with_capacity(MAX_AGG_SNARKS);
for preprocessed_polys in preprocessed_poly_sets.iter() {
let mut preprocessed_check_1 =
config.flex_gate().load_constant(&mut ctx, Fr::ONE);
@@ -391,6 +397,7 @@ impl<const N_SNARKS: usize> Circuit<Fr> for BatchCircuit<N_SNARKS> {
Existing(check_2),
);
}
route_check.push(preprocessed_check_1);
let preprocessed_check = config.flex_gate().or(
&mut ctx,
Existing(preprocessed_check_1),
@@ -402,27 +409,26 @@ impl<const N_SNARKS: usize> Circuit<Fr> for BatchCircuit<N_SNARKS> {
}

// Transcript initial state.
for transcript_init_state in transcript_init_states {
//
// If the SNARK belongs to halo2-route, the initial state is the halo2-initial
// state. Otherwise sp1-initial state.
for (transcript_init_state, &route) in
transcript_init_states.iter().zip_eq(route_check.iter())
{
let transcript_init_state = transcript_init_state
.expect("SNARK should have an initial state for transcript");
let transcript_check_1 = config.flex_gate().is_equal(
let init_state_expected = config.flex_gate().select(
&mut ctx,
Existing(transcript_init_state),
Existing(transcript_init_state_halo2),
);
let transcript_check_2 = config.flex_gate().is_equal(
&mut ctx,
Existing(transcript_init_state),
Existing(transcript_init_state_sp1),
Existing(route),
);
let transcript_check = config.flex_gate().or(
GateInstructions::assert_equal(
config.flex_gate(),
&mut ctx,
Existing(transcript_check_1),
Existing(transcript_check_2),
Existing(transcript_init_state),
Existing(init_state_expected),
);
config
.flex_gate()
.assert_is_const(&mut ctx, &transcript_check, Fr::ONE);
}

ctx.print_stats(&["protocol check"]);