From d51cba589a7f56b88df915bc3640c743804221fc Mon Sep 17 00:00:00 2001 From: dante <45801863+alexander-camuto@users.noreply.github.com> Date: Wed, 23 Oct 2024 23:12:00 -0400 Subject: [PATCH] feat: dynamic lookup overflow (#853) --- Cargo.lock | 16 +++- Cargo.toml | 1 + src/circuit/ops/chip.rs | 183 +++++++++++++++++++++--------------- src/circuit/ops/layouts.rs | 58 +++++++++--- src/circuit/ops/mod.rs | 2 +- src/circuit/ops/region.rs | 35 +++++-- src/circuit/tests.rs | 2 +- src/execute.rs | 5 +- src/graph/mod.rs | 9 ++ src/graph/model.rs | 12 +++ src/graph/node.rs | 9 ++ src/graph/vars.rs | 2 +- src/tensor/val.rs | 2 +- src/tensor/var.rs | 47 +++++++++ tests/assets/model.compiled | Bin 1801 -> 1809 bytes tests/assets/proof.json | 2 +- tests/assets/settings.json | 1 + 17 files changed, 279 insertions(+), 107 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 52057da39..61ab8f44d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2543,6 +2543,12 @@ dependencies = [ "allocator-api2", ] +[[package]] +name = "hashbrown" +version = "0.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e087f84d4f86bf4b218b927129862374b72199ae7d8657835f1e89000eea4fb" + [[package]] name = "heck" version = "0.4.1" @@ -2811,12 +2817,12 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.5" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" dependencies = [ "equivalent", - "hashbrown 0.14.3", + "hashbrown 0.15.0", ] [[package]] @@ -5628,9 +5634,9 @@ checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" [[package]] name = "tower-service" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" [[package]] name = "tracing" diff --git a/Cargo.toml b/Cargo.toml index 577d5470c..8e55321bb 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -56,6 +56,7 @@ alloy = { git = "https://github.com/alloy-rs/alloy", version = "0.1.0", rev = "5 "rpc-types-eth", "signer-wallet", "node-bindings", + ], optional = true } foundry-compilers = { version = "0.4.1", features = ["svm-solc"], optional = true } ethabi = { version = "18", optional = true } diff --git a/src/circuit/ops/chip.rs b/src/circuit/ops/chip.rs index 8deb27686..446ff069e 100644 --- a/src/circuit/ops/chip.rs +++ b/src/circuit/ops/chip.rs @@ -177,7 +177,7 @@ impl<'source> FromPyObject<'source> for Tolerance { #[derive(Clone, Debug, Default)] pub struct DynamicLookups { /// [Selector]s generated when configuring the layer. We use a [BTreeMap] as we expect to configure many dynamic lookup ops. - pub lookup_selectors: BTreeMap<(usize, usize), Selector>, + pub lookup_selectors: BTreeMap<(usize, (usize, usize)), Selector>, /// Selectors for the dynamic lookup tables pub table_selectors: Vec, /// Inputs: @@ -209,7 +209,7 @@ impl DynamicLookups { #[derive(Clone, Debug, Default)] pub struct Shuffles { /// [Selector]s generated when configuring the layer. We use a [BTreeMap] as we expect to configure many dynamic lookup ops. - pub input_selectors: BTreeMap<(usize, usize), Selector>, + pub input_selectors: BTreeMap<(usize, (usize, usize)), Selector>, /// Selectors for the dynamic lookup tables pub reference_selectors: Vec, /// Inputs: @@ -646,57 +646,73 @@ impl BaseConfig { } for t in tables.iter() { - if !t.is_advice() || t.num_blocks() > 1 || t.num_inner_cols() > 1 { + if !t.is_advice() || t.num_inner_cols() > 1 { return Err(CircuitError::WrongDynamicColumnType(t.name().to_string())); } } + // assert all tables have the same number of inner columns + if tables + .iter() + .map(|t| t.num_blocks()) + .collect::>() + .windows(2) + .any(|w| w[0] != w[1]) + { + return Err(CircuitError::WrongDynamicColumnType( + "tables inner cols".to_string(), + )); + } + let one = Expression::Constant(F::ONE); - let s_ltable = cs.complex_selector(); + for q in 0..tables[0].num_blocks() { + let s_ltable = cs.complex_selector(); - for x in 0..lookups[0].num_blocks() { - for y in 0..lookups[0].num_inner_cols() { - let s_lookup = cs.complex_selector(); + for x in 0..lookups[0].num_blocks() { + for y in 0..lookups[0].num_inner_cols() { + let s_lookup = cs.complex_selector(); - cs.lookup_any("lookup", |cs| { - let s_lookupq = cs.query_selector(s_lookup); - let mut expression = vec![]; - let s_ltableq = cs.query_selector(s_ltable); - let mut lookup_queries = vec![one.clone()]; + cs.lookup_any("lookup", |cs| { + let s_lookupq = cs.query_selector(s_lookup); + let mut expression = vec![]; + let s_ltableq = cs.query_selector(s_ltable); + let mut lookup_queries = vec![one.clone()]; - for lookup in lookups { - lookup_queries.push(match lookup { - VarTensor::Advice { inner: advices, .. } => { - cs.query_advice(advices[x][y], Rotation(0)) - } - _ => unreachable!(), - }); - } + for lookup in lookups { + lookup_queries.push(match lookup { + VarTensor::Advice { inner: advices, .. } => { + cs.query_advice(advices[x][y], Rotation(0)) + } + _ => unreachable!(), + }); + } - let mut table_queries = vec![one.clone()]; - for table in tables { - table_queries.push(match table { - VarTensor::Advice { inner: advices, .. } => { - cs.query_advice(advices[0][0], Rotation(0)) - } - _ => unreachable!(), - }); - } + let mut table_queries = vec![one.clone()]; + for table in tables { + table_queries.push(match table { + VarTensor::Advice { inner: advices, .. } => { + cs.query_advice(advices[q][0], Rotation(0)) + } + _ => unreachable!(), + }); + } - let lhs = lookup_queries.into_iter().map(|c| c * s_lookupq.clone()); - let rhs = table_queries.into_iter().map(|c| c * s_ltableq.clone()); - expression.extend(lhs.zip(rhs)); + let lhs = lookup_queries.into_iter().map(|c| c * s_lookupq.clone()); + let rhs = table_queries.into_iter().map(|c| c * s_ltableq.clone()); + expression.extend(lhs.zip(rhs)); - expression - }); - self.dynamic_lookups - .lookup_selectors - .entry((x, y)) - .or_insert(s_lookup); + expression + }); + self.dynamic_lookups + .lookup_selectors + .entry((q, (x, y))) + .or_insert(s_lookup); + } } + + self.dynamic_lookups.table_selectors.push(s_ltable); } - self.dynamic_lookups.table_selectors.push(s_ltable); // if we haven't previously initialized the input/output, do so now if self.dynamic_lookups.tables.is_empty() { @@ -729,57 +745,72 @@ impl BaseConfig { } for t in references.iter() { - if !t.is_advice() || t.num_blocks() > 1 || t.num_inner_cols() > 1 { + if !t.is_advice() || t.num_inner_cols() > 1 { return Err(CircuitError::WrongDynamicColumnType(t.name().to_string())); } } + // assert all tables have the same number of blocks + if references + .iter() + .map(|t| t.num_blocks()) + .collect::>() + .windows(2) + .any(|w| w[0] != w[1]) + { + return Err(CircuitError::WrongDynamicColumnType( + "references inner cols".to_string(), + )); + } + let one = Expression::Constant(F::ONE); - let s_reference = cs.complex_selector(); + for q in 0..references[0].num_blocks() { + let s_reference = cs.complex_selector(); - for x in 0..inputs[0].num_blocks() { - for y in 0..inputs[0].num_inner_cols() { - let s_input = cs.complex_selector(); + for x in 0..inputs[0].num_blocks() { + for y in 0..inputs[0].num_inner_cols() { + let s_input = cs.complex_selector(); - cs.lookup_any("lookup", |cs| { - let s_inputq = cs.query_selector(s_input); - let mut expression = vec![]; - let s_referenceq = cs.query_selector(s_reference); - let mut input_queries = vec![one.clone()]; + cs.lookup_any("lookup", |cs| { + let s_inputq = cs.query_selector(s_input); + let mut expression = vec![]; + let s_referenceq = cs.query_selector(s_reference); + let mut input_queries = vec![one.clone()]; - for input in inputs { - input_queries.push(match input { - VarTensor::Advice { inner: advices, .. } => { - cs.query_advice(advices[x][y], Rotation(0)) - } - _ => unreachable!(), - }); - } + for input in inputs { + input_queries.push(match input { + VarTensor::Advice { inner: advices, .. } => { + cs.query_advice(advices[x][y], Rotation(0)) + } + _ => unreachable!(), + }); + } - let mut ref_queries = vec![one.clone()]; - for reference in references { - ref_queries.push(match reference { - VarTensor::Advice { inner: advices, .. } => { - cs.query_advice(advices[0][0], Rotation(0)) - } - _ => unreachable!(), - }); - } + let mut ref_queries = vec![one.clone()]; + for reference in references { + ref_queries.push(match reference { + VarTensor::Advice { inner: advices, .. } => { + cs.query_advice(advices[q][0], Rotation(0)) + } + _ => unreachable!(), + }); + } - let lhs = input_queries.into_iter().map(|c| c * s_inputq.clone()); - let rhs = ref_queries.into_iter().map(|c| c * s_referenceq.clone()); - expression.extend(lhs.zip(rhs)); + let lhs = input_queries.into_iter().map(|c| c * s_inputq.clone()); + let rhs = ref_queries.into_iter().map(|c| c * s_referenceq.clone()); + expression.extend(lhs.zip(rhs)); - expression - }); - self.shuffles - .input_selectors - .entry((x, y)) - .or_insert(s_input); + expression + }); + self.shuffles + .input_selectors + .entry((q, (x, y))) + .or_insert(s_input); + } } + self.shuffles.reference_selectors.push(s_reference); } - self.shuffles.reference_selectors.push(s_reference); // if we haven't previously initialized the input/output, do so now if self.shuffles.references.is_empty() { diff --git a/src/circuit/ops/layouts.rs b/src/circuit/ops/layouts.rs index 37bbc02e1..12966f4f8 100644 --- a/src/circuit/ops/layouts.rs +++ b/src/circuit/ops/layouts.rs @@ -979,8 +979,16 @@ pub(crate) fn dynamic_lookup, CircuitError>>()?; @@ -1023,20 +1039,23 @@ pub(crate) fn dynamic_lookup, CircuitError>>()?; } - region.increment_dynamic_lookup_col_coord(table_len); + region.increment_dynamic_lookup_col_coord(table_len + flush_len_0); region.increment_dynamic_lookup_index(1); region.increment(lookup_len); @@ -1064,22 +1083,33 @@ pub(crate) fn shuffles, CircuitError>>()?; } - region.increment_shuffle_col_coord(reference_len); + region.increment_shuffle_col_coord(reference_len + flush_len_ref); region.increment_shuffle_index(1); region.increment(reference_len); diff --git a/src/circuit/ops/mod.rs b/src/circuit/ops/mod.rs index 47aee6529..552a782fc 100644 --- a/src/circuit/ops/mod.rs +++ b/src/circuit/ops/mod.rs @@ -255,7 +255,7 @@ impl Constant { self.raw_values = Tensor::new(None, &[0]).unwrap(); } - /// + /// Pre-assign a value pub fn pre_assign(&mut self, val: ValTensor) { self.pre_assigned_val = Some(val) } diff --git a/src/circuit/ops/region.rs b/src/circuit/ops/region.rs index 90f0ec134..aa66df1ac 100644 --- a/src/circuit/ops/region.rs +++ b/src/circuit/ops/region.rs @@ -180,6 +180,7 @@ pub struct RegionCtx<'a, F: PrimeField + TensorType + PartialOrd + std::hash::Ha statistics: RegionStatistics, settings: RegionSettings, assigned_constants: ConstantsMap, + max_dynamic_input_len: usize, } impl<'a, F: PrimeField + TensorType + PartialOrd + std::hash::Hash> RegionCtx<'a, F> { @@ -193,11 +194,16 @@ impl<'a, F: PrimeField + TensorType + PartialOrd + std::hash::Hash> RegionCtx<'a self.settings.legs } + /// get the max dynamic input len + pub fn max_dynamic_input_len(&self) -> usize { + self.max_dynamic_input_len + } + #[cfg(all(feature = "ezkl", not(target_arch = "wasm32")))] /// pub fn debug_report(&self) { log::debug!( - "(rows={}, coord={}, constants={}, max_lookup_inputs={}, min_lookup_inputs={}, max_range_size={}, dynamic_lookup_col_coord={}, shuffle_col_coord={})", + "(rows={}, coord={}, constants={}, max_lookup_inputs={}, min_lookup_inputs={}, max_range_size={}, dynamic_lookup_col_coord={}, shuffle_col_coord={}, max_dynamic_input_len={})", self.row().to_string().blue(), self.linear_coord().to_string().yellow(), self.total_constants().to_string().red(), @@ -205,7 +211,9 @@ impl<'a, F: PrimeField + TensorType + PartialOrd + std::hash::Hash> RegionCtx<'a self.min_lookup_inputs().to_string().green(), self.max_range_size().to_string().green(), self.dynamic_lookup_col_coord().to_string().green(), - self.shuffle_col_coord().to_string().green()); + self.shuffle_col_coord().to_string().green(), + self.max_dynamic_input_len().to_string().green() + ); } /// @@ -223,6 +231,11 @@ impl<'a, F: PrimeField + TensorType + PartialOrd + std::hash::Hash> RegionCtx<'a self.dynamic_lookup_index.index += n; } + /// increment the max dynamic input len + pub fn update_max_dynamic_input_len(&mut self, n: usize) { + self.max_dynamic_input_len = self.max_dynamic_input_len.max(n); + } + /// pub fn increment_dynamic_lookup_col_coord(&mut self, n: usize) { self.dynamic_lookup_index.col_coord += n; @@ -274,6 +287,7 @@ impl<'a, F: PrimeField + TensorType + PartialOrd + std::hash::Hash> RegionCtx<'a statistics: RegionStatistics::default(), settings: RegionSettings::all_true(decomp_base, decomp_legs), assigned_constants: HashMap::new(), + max_dynamic_input_len: 0, } } @@ -310,6 +324,7 @@ impl<'a, F: PrimeField + TensorType + PartialOrd + std::hash::Hash> RegionCtx<'a statistics: RegionStatistics::default(), settings, assigned_constants: HashMap::new(), + max_dynamic_input_len: 0, } } @@ -331,6 +346,7 @@ impl<'a, F: PrimeField + TensorType + PartialOrd + std::hash::Hash> RegionCtx<'a statistics: RegionStatistics::default(), settings, assigned_constants: HashMap::new(), + max_dynamic_input_len: 0, } } @@ -583,9 +599,12 @@ impl<'a, F: PrimeField + TensorType + PartialOrd + std::hash::Hash> RegionCtx<'a &mut self, var: &VarTensor, values: &ValTensor, - ) -> Result, CircuitError> { + ) -> Result<(ValTensor, usize), CircuitError> { + + self.update_max_dynamic_input_len(values.len()); + if let Some(region) = &self.region { - Ok(var.assign( + Ok(var.assign_exact_column( &mut region.borrow_mut(), self.combined_dynamic_shuffle_coord(), values, @@ -596,7 +615,11 @@ impl<'a, F: PrimeField + TensorType + PartialOrd + std::hash::Hash> RegionCtx<'a let values_map = values.create_constants_map_iterator(); self.assigned_constants.par_extend(values_map); } - Ok(values.clone()) + + let flush_len = var.get_column_flush(self.combined_dynamic_shuffle_coord(), values)?; + + // get the diff between the current column and the next row + Ok((values.clone(), flush_len)) } } @@ -605,7 +628,7 @@ impl<'a, F: PrimeField + TensorType + PartialOrd + std::hash::Hash> RegionCtx<'a &mut self, var: &VarTensor, values: &ValTensor, - ) -> Result, CircuitError> { + ) -> Result<(ValTensor, usize), CircuitError> { self.assign_dynamic_lookup(var, values) } diff --git a/src/circuit/tests.rs b/src/circuit/tests.rs index f4e4c4386..3ba499544 100644 --- a/src/circuit/tests.rs +++ b/src/circuit/tests.rs @@ -1516,7 +1516,7 @@ mod add_w_shape_casting { // parameters let a = Tensor::from((0..LEN).map(|i| Value::known(F::from(i as u64 + 1)))); - let b = Tensor::from((0..1).map(|i| Value::known(F::from(i as u64 + 1)))); + let b = Tensor::from((0..1).map(|i| Value::known(F::from(i + 1)))); let circuit = MyCircuit:: { inputs: [ValTensor::from(a), ValTensor::from(b)], diff --git a/src/execute.rs b/src/execute.rs index 500258876..620403617 100644 --- a/src/execute.rs +++ b/src/execute.rs @@ -1203,6 +1203,7 @@ pub(crate) async fn calibrate( num_rows: new_settings.num_rows, total_assignments: new_settings.total_assignments, total_const_size: new_settings.total_const_size, + total_dynamic_col_size: new_settings.total_dynamic_col_size, ..settings.clone() }; @@ -1320,7 +1321,9 @@ pub(crate) async fn calibrate( let lookup_log_rows = best_params.lookup_log_rows_with_blinding(); let module_log_row = best_params.module_constraint_logrows_with_blinding(); let instance_logrows = best_params.log2_total_instances_with_blinding(); - let dynamic_lookup_logrows = best_params.dynamic_lookup_and_shuffle_logrows_with_blinding(); + let dynamic_lookup_logrows = + best_params.min_dynamic_lookup_and_shuffle_logrows_with_blinding(); + let range_check_logrows = best_params.range_check_log_rows_with_blinding(); let mut reduction = std::cmp::max(lookup_log_rows, module_log_row); diff --git a/src/graph/mod.rs b/src/graph/mod.rs index acf9af412..763630abf 100644 --- a/src/graph/mod.rs +++ b/src/graph/mod.rs @@ -408,6 +408,8 @@ pub struct GraphSettings { pub total_const_size: usize, /// total dynamic column size pub total_dynamic_col_size: usize, + /// max dynamic column input length + pub max_dynamic_input_len: usize, /// number of dynamic lookups pub num_dynamic_lookups: usize, /// number of shuffles @@ -485,6 +487,13 @@ impl GraphSettings { .ceil() as u32 } + /// calculate the number of rows required for the dynamic lookup and shuffle + pub fn min_dynamic_lookup_and_shuffle_logrows_with_blinding(&self) -> u32 { + (self.max_dynamic_input_len as f64 + RESERVED_BLINDING_ROWS as f64) + .log2() + .ceil() as u32 + } + fn dynamic_lookup_and_shuffle_col_size(&self) -> usize { self.total_dynamic_col_size + self.total_shuffle_col_size } diff --git a/src/graph/model.rs b/src/graph/model.rs index 809fefcfd..eb89344ad 100644 --- a/src/graph/model.rs +++ b/src/graph/model.rs @@ -103,6 +103,8 @@ pub struct DummyPassRes { pub num_rows: usize, /// num dynamic lookups pub num_dynamic_lookups: usize, + /// max dynamic lookup input len + pub max_dynamic_input_len: usize, /// dynamic lookup col size pub dynamic_lookup_col_coord: usize, /// num shuffles @@ -360,6 +362,14 @@ impl NodeType { NodeType::SubGraph { .. } => SupportedOp::Unknown(Unknown), } } + + /// check if it is a softmax + pub fn is_softmax(&self) -> bool { + match self { + NodeType::Node(n) => n.is_softmax(), + NodeType::SubGraph { .. } => false, + } + } } #[derive(Clone, Debug, Default, Serialize, Deserialize, PartialEq)] @@ -562,6 +572,7 @@ impl Model { num_rows: res.num_rows, total_assignments: res.linear_coord, required_lookups: res.lookup_ops.into_iter().collect(), + max_dynamic_input_len: res.max_dynamic_input_len, required_range_checks: res.range_checks.into_iter().collect(), model_output_scales: self.graph.get_output_scales()?, model_input_scales: self.graph.get_input_scales(), @@ -1465,6 +1476,7 @@ impl Model { let res = DummyPassRes { num_rows: region.row(), linear_coord: region.linear_coord(), + max_dynamic_input_len: region.max_dynamic_input_len(), total_const_size: region.total_constants(), lookup_ops: region.used_lookups(), range_checks: region.used_range_checks(), diff --git a/src/graph/node.rs b/src/graph/node.rs index 2290c7588..34b1fbdb1 100644 --- a/src/graph/node.rs +++ b/src/graph/node.rs @@ -623,6 +623,15 @@ impl Node { num_uses, }) } + + /// check if it is a softmax node + pub fn is_softmax(&self) -> bool { + if let SupportedOp::Hybrid(HybridOp::Softmax { .. }) = self.opkind { + true + } else { + false + } + } } #[cfg(all(feature = "ezkl", not(target_arch = "wasm32")))] diff --git a/src/graph/vars.rs b/src/graph/vars.rs index 292593a81..595fbaf5f 100644 --- a/src/graph/vars.rs +++ b/src/graph/vars.rs @@ -443,7 +443,7 @@ impl ModelVars { let dynamic_lookup = VarTensor::new_advice(cs, logrows, 1, dynamic_lookup_and_shuffle_size); if dynamic_lookup.num_blocks() > 1 { - panic!("dynamic lookup or shuffle should only have one block"); + warn!("dynamic lookup has {} blocks", dynamic_lookup.num_blocks()); }; advices.push(dynamic_lookup); } diff --git a/src/tensor/val.rs b/src/tensor/val.rs index 579d81f3e..13ac0a792 100644 --- a/src/tensor/val.rs +++ b/src/tensor/val.rs @@ -541,7 +541,7 @@ impl ValTensor { let mut is_empty = true; x.map(|_| is_empty = false); if is_empty { - return Ok::<_, TensorError>(vec![Value::::unknown(); n + 1]); + Ok::<_, TensorError>(vec![Value::::unknown(); n + 1]) } else { let mut res = vec![Value::unknown(); n + 1]; let mut int_rep = 0; diff --git a/src/tensor/var.rs b/src/tensor/var.rs index 677c855c6..2e53ce65b 100644 --- a/src/tensor/var.rs +++ b/src/tensor/var.rs @@ -396,6 +396,53 @@ impl VarTensor { Ok(res) } + /// Helper function to get the remaining size of the column + pub fn get_column_flush( + &self, + offset: usize, + values: &ValTensor, + ) -> Result { + if values.len() > self.col_size() { + error!("Values are too large for the column"); + return Err(halo2_proofs::plonk::Error::Synthesis); + } + + // this can only be called on columns that have a single inner column + if self.num_inner_cols() != 1 { + error!("This function can only be called on columns with a single inner column"); + return Err(halo2_proofs::plonk::Error::Synthesis); + } + + // check if the values fit in the remaining space of the column + let current_cartesian = self.cartesian_coord(offset); + let final_cartesian = self.cartesian_coord(offset + values.len()); + + let mut flush_len = 0; + if current_cartesian.0 != final_cartesian.0 { + debug!("Values overflow the column, flushing to next column"); + // diff is the number of values that overflow the column + flush_len += self.col_size() - current_cartesian.2; + } + + Ok(flush_len) + } + + /// Assigns [ValTensor] to the columns of the inner tensor. Whereby the values are assigned to a single column, without overflowing. + /// So for instance if we are assigning 10 values and we are at index 18 of the column, and the columns are of length 20, we skip the last 2 values of current column and start from the beginning of the next column. + pub fn assign_exact_column( + &self, + region: &mut Region, + offset: usize, + values: &ValTensor, + constants: &mut ConstantsMap, + ) -> Result<(ValTensor, usize), halo2_proofs::plonk::Error> { + let flush_len = self.get_column_flush(offset, values)?; + + let assigned_vals = self.assign(region, offset + flush_len, values, constants)?; + + Ok((assigned_vals, flush_len)) + } + /// Assigns specific values (`ValTensor`) to the columns of the inner tensor but allows for column wrapping for accumulated operations. /// Duplication occurs by copying the last cell of the column to the first cell next column and creating a copy constraint between the two. pub fn dummy_assign_with_duplication< diff --git a/tests/assets/model.compiled b/tests/assets/model.compiled index cfc1cf862ca51db9a13342a2e13788c12f779cb0..2794a23dec0dc4b8a6341202c95b02d1d1a85dd4 100644 GIT binary patch delta 31 mcmeC=o5;6e66?eUj>&VGI3~vc@m^+u$+j#Un|HDLGXempnhDDQ delta 43 ycmbQp*U7hG66@r-OdOMAfOs#nz+_t%j)@*Tljk#wOy*^ln7o#WV>1&QKO+Dpn+xs$ diff --git a/tests/assets/proof.json b/tests/assets/proof.json index 86740a513..6db6c2445 100644 --- a/tests/assets/proof.json +++ b/tests/assets/proof.json @@ -1 +1 @@ -{"protocol":null,"instances":[["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"]],"proof":[10,24,139,13,210,89,222,197,128,121,114,51,235,60,238,15,130,118,61,94,252,63,117,61,140,72,161,55,119,83,66,223,22,215,181,217,46,151,185,35,35,146,54,140,26,17,241,36,234,173,171,14,227,201,125,211,234,217,171,109,111,220,254,16,25,226,61,59,189,206,219,149,183,239,146,245,137,125,161,255,201,4,115,31,20,147,230,171,45,25,6,78,40,82,190,38,16,219,163,30,157,183,210,73,76,132,145,236,64,69,44,123,13,173,168,7,88,183,149,237,154,111,239,32,136,41,254,0,1,170,100,206,193,101,74,240,105,77,217,160,105,46,101,208,14,108,96,3,123,90,9,157,8,214,83,126,99,99,149,97,40,217,59,182,197,127,194,50,56,233,175,76,12,165,209,246,194,97,34,8,51,51,109,32,242,167,179,44,103,169,22,35,45,224,70,2,69,197,34,99,70,246,198,64,186,213,182,163,245,153,43,72,110,147,72,219,99,109,66,226,233,135,74,18,32,198,254,66,85,184,130,129,161,101,96,152,102,104,95,32,13,110,197,117,128,48,214,8,103,220,40,151,193,44,246,224,12,73,158,7,156,44,114,216,16,145,185,229,120,90,101,192,246,37,236,184,247,23,92,223,82,17,79,110,118,222,165,193,29,177,46,205,212,18,125,142,235,134,221,30,124,130,192,1,8,18,219,190,178,2,85,63,81,210,220,5,182,233,0,133,19,148,105,3,207,24,169,129,152,16,223,22,63,193,98,125,66,123,237,28,2,236,235,133,229,9,78,168,11,60,59,99,0,88,73,159,241,250,184,122,100,65,149,27,224,94,102,39,71,131,135,165,167,153,37,229,54,90,94,89,179,109,161,137,9,207,169,136,53,34,166,195,225,22,236,10,200,246,61,4,236,31,71,161,12,17,126,135,26,197,8,101,142,82,231,57,44,76,64,86,37,222,181,85,166,186,2,138,108,70,116,45,60,86,220,44,23,240,162,185,141,196,147,50,163,42,197,7,29,215,253,51,30,13,160,202,14,34,89,185,112,183,170,9,43,64,87,86,87,223,238,221,185,181,181,105,132,245,167,217,24,206,84,81,109,69,112,31,14,90,22,99,59,222,83,190,241,72,86,103,39,90,98,201,42,29,5,149,233,120,234,57,42,29,23,75,127,138,84,57,241,193,71,212,213,184,25,163,131,79,55,28,182,52,178,65,193,214,211,84,24,52,155,247,21,200,242,170,146,244,46,164,38,166,5,201,19,214,103,89,20,8,5,173,157,189,211,53,137,20,32,222,97,102,44,188,29,215,253,51,30,13,160,202,14,34,89,185,112,183,170,9,43,64,87,86,87,223,238,221,185,181,181,105,132,245,167,217,24,206,84,81,109,69,112,31,14,90,22,99,59,222,83,190,241,72,86,103,39,90,98,201,42,29,5,149,233,120,234,57,29,215,253,51,30,13,160,202,14,34,89,185,112,183,170,9,43,64,87,86,87,223,238,221,185,181,181,105,132,245,167,217,24,206,84,81,109,69,112,31,14,90,22,99,59,222,83,190,241,72,86,103,39,90,98,201,42,29,5,149,233,120,234,57,29,215,253,51,30,13,160,202,14,34,89,185,112,183,170,9,43,64,87,86,87,223,238,221,185,181,181,105,132,245,167,217,24,206,84,81,109,69,112,31,14,90,22,99,59,222,83,190,241,72,86,103,39,90,98,201,42,29,5,149,233,120,234,57,29,215,253,51,30,13,160,202,14,34,89,185,112,183,170,9,43,64,87,86,87,223,238,221,185,181,181,105,132,245,167,217,24,206,84,81,109,69,112,31,14,90,22,99,59,222,83,190,241,72,86,103,39,90,98,201,42,29,5,149,233,120,234,57,36,225,38,205,240,204,130,230,196,88,117,95,175,177,110,114,108,183,167,245,107,166,186,43,148,229,153,89,81,47,178,83,42,231,140,41,30,141,66,135,209,192,6,201,197,190,20,7,94,121,121,93,118,186,184,98,35,185,239,178,181,51,131,218,30,141,96,220,134,211,149,123,144,113,166,64,174,53,227,3,7,220,147,15,131,195,207,82,119,249,170,88,203,207,206,188,18,149,242,3,88,174,58,127,67,230,83,16,29,76,28,93,249,128,35,92,104,230,239,92,19,226,37,136,59,178,208,251,17,248,239,169,201,155,13,182,121,231,182,40,242,130,98,1,75,44,46,245,133,253,117,220,205,150,16,5,167,31,22,35,8,44,254,181,146,80,128,255,168,80,80,193,141,7,180,124,25,215,51,127,91,54,4,238,41,236,170,33,253,123,241,39,36,119,60,40,110,41,19,25,219,118,40,242,1,0,110,155,156,228,238,52,184,144,114,77,244,34,143,82,121,75,200,78,22,165,170,47,152,113,183,99,78,125,167,104,204,33,212,60,224,93,224,135,209,242,150,118,223,145,220,6,32,21,104,17,27,91,225,238,217,58,250,216,232,214,8,62,4,112,17,174,237,174,108,79,36,243,246,140,121,111,105,29,55,206,25,126,41,235,19,105,69,94,110,25,249,102,163,228,116,249,184,142,5,7,227,148,212,138,69,86,172,112,155,220,62,190,190,170,36,59,202,0,96,147,151,158,220,107,95,170,97,215,78,234,236,29,115,46,226,178,174,241,199,58,247,228,217,16,233,26,0,126,192,149,213,146,104,222,251,168,117,27,252,38,130,127,121,150,138,61,243,162,112,184,45,219,112,125,254,74,79,154,36,59,202,0,96,147,151,158,220,107,95,170,97,215,78,234,236,29,115,46,226,178,174,241,199,58,247,228,217,16,233,26,0,126,192,149,213,146,104,222,251,168,117,27,252,38,130,127,121,150,138,61,243,162,112,184,45,219,112,125,254,74,79,154,6,124,66,146,215,217,237,195,177,1,176,142,133,255,230,181,8,144,59,36,96,30,105,83,46,229,62,84,47,80,10,224,32,193,167,179,33,134,217,129,72,59,201,234,189,211,92,18,247,142,14,96,73,221,196,106,6,195,213,56,235,203,248,218,6,124,66,146,215,217,237,195,177,1,176,142,133,255,230,181,8,144,59,36,96,30,105,83,46,229,62,84,47,80,10,224,32,193,167,179,33,134,217,129,72,59,201,234,189,211,92,18,247,142,14,96,73,221,196,106,6,195,213,56,235,203,248,218,5,248,147,46,148,157,33,167,125,9,106,129,180,123,76,218,166,121,148,131,77,34,149,19,184,58,176,133,49,240,222,247,46,31,216,20,247,144,255,117,149,33,154,117,222,137,205,209,33,44,255,118,210,32,50,32,234,20,22,247,184,58,205,136,21,183,48,86,43,208,65,185,175,203,175,245,31,223,8,238,63,102,55,110,145,10,155,70,4,97,44,237,217,137,126,155,37,136,102,13,105,194,170,96,58,157,212,39,130,65,181,0,92,242,19,30,58,3,114,53,164,127,180,33,199,31,199,85,33,138,239,4,131,3,218,16,68,65,231,120,239,148,183,3,68,84,82,87,55,126,92,152,76,118,255,227,210,178,180,137,1,58,69,45,203,164,188,161,252,252,238,90,14,160,247,12,105,208,146,72,163,6,147,16,64,113,185,128,135,16,35,101,7,190,97,79,181,121,69,100,228,29,25,30,162,236,97,242,161,121,215,174,181,109,50,215,155,122,106,211,151,55,245,67,46,186,40,51,65,183,59,170,78,141,117,230,36,255,117,8,234,164,116,232,130,188,140,164,164,31,174,105,249,182,71,173,47,2,58,217,70,53,124,216,225,59,191,239,91,84,46,35,233,113,233,135,94,102,119,211,206,135,18,78,182,54,29,31,33,121,200,210,251,201,85,190,204,173,127,249,191,129,222,20,148,7,236,162,116,190,212,192,234,31,127,116,158,145,121,50,14,90,38,155,105,255,147,0,214,163,220,97,89,66,43,120,54,97,31,92,176,45,254,5,104,117,10,41,241,11,246,67,13,193,63,148,102,11,73,251,94,49,251,203,203,241,3,172,81,48,71,18,245,204,216,169,75,20,209,227,202,169,125,74,4,86,255,73,53,173,0,164,172,205,215,219,159,201,10,219,191,132,185,156,69,23,148,103,7,249,91,109,19,48,49,89,29,5,213,202,180,57,134,176,99,203,157,217,131,80,225,191,164,82,2,30,102,78,164,12,195,121,135,144,36,191,144,39,38,124,126,167,125,251,179,66,188,51,6,146,89,145,178,153,88,238,252,17,122,160,115,72,12,91,56,119,49,45,110,200,16,189,11,117,98,151,179,233,78,148,238,159,80,198,194,85,221,174,175,29,35,121,99,150,232,17,150,13,133,123,205,61,26,132,58,20,185,68,74,69,38,20,152,80,45,88,243,59,192,135,96,167,32,154,39,105,28,123,128,200,218,69,13,20,29,98,43,247,32,184,217,197,227,108,142,241,106,113,194,132,125,170,82,168,165,210,219,168,93,46,131,12,204,121,117,121,44,50,133,117,138,44,59,198,238,230,206,191,117,58,171,42,138,51,113,181,248,207,29,232,172,111,11,132,103,255,231,109,22,170,116,108,195,91,144,51,49,156,57,202,96,219,95,119,137,80,138,220,81,130,73,157,20,139,254,51,204,23,8,139,4,158,91,4,102,209,78,82,247,74,62,204,8,54,231,160,55,60,214,95,66,206,97,158,127,120,210,113,22,213,236,218,12,41,79,119,197,243,129,182,215,124,10,87,216,173,7,100,35,175,22,24,52,247,237,171,127,68,202,255,230,252,138,142,18,67,115,99,73,12,197,221,150,29,95,168,122,242,247,110,70,128,135,0,32,11,203,83,230,227,71,223,234,145,172,211,3,143,44,23,142,58,154,157,156,59,80,191,248,125,49,196,235,157,71,227,149,42,181,166,72,53,228,38,6,120,104,245,14,229,96,20,67,20,20,38,73,36,198,201,42,248,133,92,151,17,168,226,52,143,154,213,70,57,185,191,235,18,8,160,40,101,247,214,180,5,15,249,166,196,93,187,126,69,137,157,216,252,49,96,205,212,103,79,129,198,198,94,1,181,213,163,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38,191,137,133,143,30,17,9,249,125,254,184,167,219,122,72,8,35,194,117,71,242,138,236,188,124,225,183,247,248,34,119,17,68,35,92,141,54,201,237,190,229,164,127,74,82,205,20,132,207,3,85,23,52,231,68,74,194,7,52,43,173,179,58,17,68,35,92,141,54,201,237,190,229,164,127,74,82,205,20,132,207,3,85,23,52,231,68,74,194,7,52,43,173,179,58,48,69,26,145,162,100,51,146,40,222,245,182,153,120,222,187,105,150,193,204,202,132,99,242,64,238,189,32,162,63,137,122,10,146,230,155,214,213,9,106,208,98,120,229,7,107,40,213,28,175,77,158,156,212,176,164,129,221,92,125,28,25,105,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32,206,24,84,17,164,29,223,0,93,127,124,242,210,94,76,90,23,122,216,49,98,233,67,139,25,17,185,255,215,245,206,33,89,240,41,66,69,199,50,248,114,96,72,185,109,45,11,136,218,182,245,178,23,179,45,16,9,26,212,220,145,254,130,11,4,92,127,19,149,83,24,140,136,161,123,232,246,147,64,100,45,95,71,241,203,181,178,189,209,163,3,247,185,242,41,13,126,136,135,70,128,61,249,145,241,242,158,229,113,155,223,29,237,142,33,199,74,212,149,48,69,33,204,167,171,50,67,16,29,174,187,70,231,180,86,221,170,56,239,186,166,79,31,249,0,147,45,69,95,145,47,60,66,24,121,2,33,219,47,9,170,64,49,31,140,92,30,193,129,235,167,50,22,208,35,237,241,85,121,146,133,198,111,120,16,187,182,147,29,213,22,42,228,42,136,36,69,226,136,101,216,120,176,215,96,184,236,43,220,238,197,171,199,151,209,246,94,194,9,19,93,225,23,22,65,2,161,233,202,98,232,140,89,1,173,150,40,185,153,157,12,63,154,137,123,107,27,52,142,24,144,213,228,230,147,7,40,123,184,230,199,123,109,146,41,251,65,54,71,30,136,93,143,177,101,184,110,155,145,89,45,72,194,133,60,203,248,25,238,210,133,6,47,29,28,70,203,166,189,10,89,27,191,52,6,51,127,22,88,226,56,29,140,235,184,184,38,47,161,35,180,182,7,110,128,108,138,30,255,137,2,164,101,198,120,179,197,156,138,143,252,108,95,237,26,231,73,112,121,86,30,47,115,8,180,40,148,169,108,25,212,211,132,208,16,94,162,181,33,137,152,88,34,193,159,90,245,34,4,49,143,90,155,0,233,24,35,194,160,148,2,241,21,253,2,62,59,202,92,45,210,17,233,233,191,213,93,130,85,241,64,184,37,160,103,29,140,255,103,101,123,34,217,200,7,106,162,153,111,86,166,158,212,121,25,136,234,218,229,112,74,100,209,85,113,117,118,9,166,100,250,131,191,144,81,142,11,151,211,231,238,20,170,193,149,121,18,181,42,104,37,134,208,225,56,36,234,171,148,34,7,125,69,119,216,9,145,250,245,227,22,113,2,106,105,83,217,226,153,215,57,16,59,155,33,101,93,31,155,51,254,11,165,63,255,209,69,114,211,205,71,22,82,192,76,242,53,34,132,62,186,159,23,193,241,9,218,81,171,96,167,131,189,34,17,243,207,243,165,116,7,50,155,168,36,140,19,238,119,29,193,90,58,255,244,132,210,102,157,137,190,159,224,187,100,31,255,158,11,190,129,13,254,130,16,151,10,186,1,81,47,15,138,140,114,0,56,157,255,223,143,234,156,2,201,155,41,41,246,50,58,136,202,128,166,44,186,126,199,178,232,29,158,151,203,140,242,23,42,18,29,242,24,244,79,110,10,157,212,8,5,174,31,203,51,237,63,18,183,134,55,135,66,20,49,191,254,37,48,201,156,198,33,38,48,196,191,237,77,76,97,33,198,162,233,124,233,232,247,70,120,190,244,236,152,139,97,210,182,23,168,115,47,37,157,6,14,9,17,75,148,134,180,18,19,92,56,41,172,146,87,88,220,221,65,142,230,44,243,178,236,154,17,1,167,32,100,91,163,82,239,226,156,229,234,33,230,176,231,131,159,136,212,36,232,231,210,12,75,113,109,52,155,159,220,252,122,6,33,52,235,159,52,164,32,189,73,40,196,85,162,45,117,145,113,171,111,209,17,60,123,226,133,40,2,117,135,208,49,157,246,14,255,177,6,58,164,98,183,41,246,50,58,136,202,128,166,44,186,126,199,178,232,29,158,151,203,140,242,23,42,18,29,242,24,244,79,110,10,157,212,33,230,176,231,131,159,136,212,36,232,231,210,12,75,113,109,52,155,159,220,252,122,6,33,52,235,159,52,164,32,189,73,40,196,85,162,45,117,145,113,171,111,209,17,60,123,226,133,40,2,117,135,208,49,157,246,14,255,177,6,58,164,98,183,41,246,50,58,136,202,128,166,44,186,126,199,178,232,29,158,151,203,140,242,23,42,18,29,242,24,244,79,110,10,157,212,8,86,192,54,184,126,39,70,181,140,35,202,54,43,79,212,134,119,69,89,61,191,53,33,168,191,183,123,96,175,165,181,23,82,220,3,156,67,112,73,107,77,57,137,23,65,46,79,93,208,15,45,143,148,163,245,37,23,0,84,194,229,90,171,41,246,50,58,136,202,128,166,44,186,126,199,178,232,29,158,151,203,140,242,23,42,18,29,242,24,244,79,110,10,157,212,8,86,192,54,184,126,39,70,181,140,35,202,54,43,79,212,134,119,69,89,61,191,53,33,168,191,183,123,96,175,165,181,23,82,220,3,156,67,112,73,107,77,57,137,23,65,46,79,93,208,15,45,143,148,163,245,37,23,0,84,194,229,90,171,41,246,50,58,136,202,128,166,44,186,126,199,178,232,29,158,151,203,140,242,23,42,18,29,242,24,244,79,110,10,157,212,11,42,239,207,100,225,135,65,215,166,61,34,85,233,61,97,129,146,139,44,21,178,235,128,146,92,6,117,104,146,202,30,24,151,62,245,151,6,139,5,154,206,74,207,154,224,96,184,17,241,93,249,103,68,228,109,40,54,207,136,111,241,63,97,37,213,216,60,19,109,99,130,24,39,194,217,181,255,175,210,105,178,118,146,226,134,167,85,194,7,9,230,2,3,176,220,2,95,167,62,219,167,12,145,158,230,196,96,186,59,69,9,186,223,54,118,230,252,75,23,42,0,26,248,17,64,6,159],"hex_proof":"0x0a188b0dd259dec580797233eb3cee0f82763d5efc3f753d8c48a137775342df16d7b5d92e97b9232392368c1a11f124eaadab0ee3c97dd3ead9ab6d6fdcfe1019e23d3bbdcedb95b7ef92f5897da1ffc904731f1493e6ab2d19064e2852be2610dba31e9db7d2494c8491ec40452c7b0dada80758b795ed9a6fef208829fe0001aa64cec1654af0694dd9a0692e65d00e6c60037b5a099d08d6537e6363956128d93bb6c57fc23238e9af4c0ca5d1f6c261220833336d20f2a7b32c67a916232de0460245c5226346f6c640bad5b6a3f5992b486e9348db636d42e2e9874a1220c6fe4255b88281a165609866685f200d6ec5758030d60867dc2897c12cf6e00c499e079c2c72d81091b9e5785a65c0f625ecb8f7175cdf52114f6e76dea5c11db12ecdd4127d8eeb86dd1e7c82c0010812dbbeb202553f51d2dc05b6e9008513946903cf18a9819810df163fc1627d427bed1c02eceb85e5094ea80b3c3b630058499ff1fab87a6441951be05e6627478387a5a79925e5365a5e59b36da18909cfa9883522a6c3e116ec0ac8f63d04ec1f47a10c117e871ac508658e52e7392c4c405625deb555a6ba028a6c46742d3c56dc2c17f0a2b98dc49332a32ac5071dd7fd331e0da0ca0e2259b970b7aa092b40575657dfeeddb9b5b56984f5a7d918ce54516d45701f0e5a16633bde53bef1485667275a62c92a1d0595e978ea392a1d174b7f8a5439f1c147d4d5b819a3834f371cb634b241c1d6d35418349bf715c8f2aa92f42ea426a605c913d66759140805ad9dbdd335891420de61662cbc1dd7fd331e0da0ca0e2259b970b7aa092b40575657dfeeddb9b5b56984f5a7d918ce54516d45701f0e5a16633bde53bef1485667275a62c92a1d0595e978ea391dd7fd331e0da0ca0e2259b970b7aa092b40575657dfeeddb9b5b56984f5a7d918ce54516d45701f0e5a16633bde53bef1485667275a62c92a1d0595e978ea391dd7fd331e0da0ca0e2259b970b7aa092b40575657dfeeddb9b5b56984f5a7d918ce54516d45701f0e5a16633bde53bef1485667275a62c92a1d0595e978ea391dd7fd331e0da0ca0e2259b970b7aa092b40575657dfeeddb9b5b56984f5a7d918ce54516d45701f0e5a16633bde53bef1485667275a62c92a1d0595e978ea3924e126cdf0cc82e6c458755fafb16e726cb7a7f56ba6ba2b94e59959512fb2532ae78c291e8d4287d1c006c9c5be14075e79795d76bab86223b9efb2b53383da1e8d60dc86d3957b9071a640ae35e30307dc930f83c3cf5277f9aa58cbcfcebc1295f20358ae3a7f43e653101d4c1c5df980235c68e6ef5c13e225883bb2d0fb11f8efa9c99b0db679e7b628f28262014b2c2ef585fd75dccd961005a71f1623082cfeb5925080ffa85050c18d07b47c19d7337f5b3604ee29ecaa21fd7bf12724773c286e291319db7628f201006e9b9ce4ee34b890724df4228f52794bc84e16a5aa2f9871b7634e7da768cc21d43ce05de087d1f29676df91dc06201568111b5be1eed93afad8e8d6083e047011aeedae6c4f24f3f68c796f691d37ce197e29eb1369455e6e19f966a3e474f9b88e0507e394d48a4556ac709bdc3ebebeaa243bca006093979edc6b5faa61d74eeaec1d732ee2b2aef1c73af7e4d910e91a007ec095d59268defba8751bfc26827f79968a3df3a270b82ddb707dfe4a4f9a243bca006093979edc6b5faa61d74eeaec1d732ee2b2aef1c73af7e4d910e91a007ec095d59268defba8751bfc26827f79968a3df3a270b82ddb707dfe4a4f9a067c4292d7d9edc3b101b08e85ffe6b508903b24601e69532ee53e542f500ae020c1a7b32186d981483bc9eabdd35c12f78e0e6049ddc46a06c3d538ebcbf8da067c4292d7d9edc3b101b08e85ffe6b508903b24601e69532ee53e542f500ae020c1a7b32186d981483bc9eabdd35c12f78e0e6049ddc46a06c3d538ebcbf8da05f8932e949d21a77d096a81b47b4cdaa67994834d229513b83ab08531f0def72e1fd814f790ff7595219a75de89cdd1212cff76d2203220ea1416f7b83acd8815b730562bd041b9afcbaff51fdf08ee3f66376e910a9b4604612cedd9897e9b2588660d69c2aa603a9dd4278241b5005cf2131e3a037235a47fb421c71fc755218aef048303da104441e778ef94b70344545257377e5c984c76ffe3d2b2b489013a452dcba4bca1fcfcee5a0ea0f70c69d09248a30693104071b9808710236507be614fb5794564e41d191ea2ec61f2a179d7aeb56d32d79b7a6ad39737f5432eba283341b73baa4e8d75e624ff7508eaa474e882bc8ca4a41fae69f9b647ad2f023ad946357cd8e13bbfef5b542e23e971e9875e6677d3ce87124eb6361d1f2179c8d2fbc955beccad7ff9bf81de149407eca274bed4c0ea1f7f749e9179320e5a269b69ff9300d6a3dc6159422b7836611f5cb02dfe0568750a29f10bf6430dc13f94660b49fb5e31fbcbcbf103ac51304712f5ccd8a94b14d1e3caa97d4a0456ff4935ad00a4accdd7db9fc90adbbf84b99c4517946707f95b6d133031591d05d5cab43986b063cb9dd98350e1bfa452021e664ea40cc379879024bf9027267c7ea77dfbb342bc3306925991b29958eefc117aa073480c5b3877312d6ec810bd0b756297b3e94e94ee9f50c6c255ddaeaf1d23796396e811960d857bcd3d1a843a14b9444a45261498502d58f33bc08760a7209a27691c7b80c8da450d141d622bf720b8d9c5e36c8ef16a71c2847daa52a8a5d2dba85d2e830ccc7975792c3285758a2c3bc6eee6cebf753aab2a8a3371b5f8cf1de8ac6f0b8467ffe76d16aa746cc35b9033319c39ca60db5f7789508adc5182499d148bfe33cc17088b049e5b0466d14e52f74a3ecc0836e7a0373cd65f42ce619e7f78d27116d5ecda0c294f77c5f381b6d77c0a57d8ad076423af161834f7edab7f44caffe6fc8a8e12437363490cc5dd961d5fa87af2f76e46808700200bcb53e6e347dfea91acd3038f2c178e3a9a9d9c3b50bff87d31c4eb9d47e3952ab5a64835e426067868f50ee56014431414264924c6c92af8855c9711a8e2348f9ad54639b9bfeb1208a02865f7d6b4050ff9a6c45dbb7e45899dd8fc3160cdd4674f81c6c65e01b5d5a3000000000000000000000000000000000000000000000000000000000000000026bf89858f1e1109f97dfeb8a7db7a480823c27547f28aecbc7ce1b7f7f822771144235c8d36c9edbee5a47f4a52cd1484cf03551734e7444ac207342badb33a1144235c8d36c9edbee5a47f4a52cd1484cf03551734e7444ac207342badb33a30451a91a264339228def5b69978debb6996c1ccca8463f240eebd20a23f897a0a92e69bd6d5096ad06278e5076b28d51caf4d9e9cd4b0a481dd5c7d1c196940000000000000000000000000000000000000000000000000000000000000000020ce185411a41ddf005d7f7cf2d25e4c5a177ad83162e9438b1911b9ffd7f5ce2159f0294245c732f8726048b96d2d0b88dab6f5b217b32d10091ad4dc91fe820b045c7f139553188c88a17be8f69340642d5f47f1cbb5b2bdd1a303f7b9f2290d7e888746803df991f1f29ee5719bdf1ded8e21c74ad495304521cca7ab3243101daebb46e7b456ddaa38efbaa64f1ff900932d455f912f3c4218790221db2f09aa40311f8c5c1ec181eba73216d023edf155799285c66f7810bbb6931dd5162ae42a882445e28865d878b0d760b8ec2bdceec5abc797d1f65ec209135de117164102a1e9ca62e88c5901ad9628b9999d0c3f9a897b6b1b348e1890d5e4e69307287bb8e6c77b6d9229fb4136471e885d8fb165b86e9b91592d48c2853ccbf819eed285062f1d1c46cba6bd0a591bbf3406337f1658e2381d8cebb8b8262fa123b4b6076e806c8a1eff8902a465c678b3c59c8a8ffc6c5fed1ae7497079561e2f7308b42894a96c19d4d384d0105ea2b52189985822c19f5af52204318f5a9b00e91823c2a09402f115fd023e3bca5c2dd211e9e9bfd55d8255f140b825a0671d8cff67657b22d9c8076aa2996f56a69ed4791988eadae5704a64d15571757609a664fa83bf90518e0b97d3e7ee14aac1957912b52a682586d0e13824eaab9422077d4577d80991faf5e31671026a6953d9e299d739103b9b21655d1f9b33fe0ba53fffd14572d3cd471652c04cf23522843eba9f17c1f109da51ab60a783bd2211f3cff3a57407329ba8248c13ee771dc15a3afff484d2669d89be9fe0bb641fff9e0bbe810dfe8210970aba01512f0f8a8c7200389dffdf8fea9c02c99b2929f6323a88ca80a62cba7ec7b2e81d9e97cb8cf2172a121df218f44f6e0a9dd40805ae1fcb33ed3f12b7863787421431bffe2530c99cc6212630c4bfed4d4c6121c6a2e97ce9e8f74678bef4ec988b61d2b617a8732f259d060e09114b9486b412135c3829ac925758dcdd418ee62cf3b2ec9a1101a720645ba352efe29ce5ea21e6b0e7839f88d424e8e7d20c4b716d349b9fdcfc7a062134eb9f34a420bd4928c455a22d759171ab6fd1113c7be28528027587d0319df60effb1063aa462b729f6323a88ca80a62cba7ec7b2e81d9e97cb8cf2172a121df218f44f6e0a9dd421e6b0e7839f88d424e8e7d20c4b716d349b9fdcfc7a062134eb9f34a420bd4928c455a22d759171ab6fd1113c7be28528027587d0319df60effb1063aa462b729f6323a88ca80a62cba7ec7b2e81d9e97cb8cf2172a121df218f44f6e0a9dd40856c036b87e2746b58c23ca362b4fd4867745593dbf3521a8bfb77b60afa5b51752dc039c4370496b4d398917412e4f5dd00f2d8f94a3f525170054c2e55aab29f6323a88ca80a62cba7ec7b2e81d9e97cb8cf2172a121df218f44f6e0a9dd40856c036b87e2746b58c23ca362b4fd4867745593dbf3521a8bfb77b60afa5b51752dc039c4370496b4d398917412e4f5dd00f2d8f94a3f525170054c2e55aab29f6323a88ca80a62cba7ec7b2e81d9e97cb8cf2172a121df218f44f6e0a9dd40b2aefcf64e18741d7a63d2255e93d6181928b2c15b2eb80925c06756892ca1e18973ef597068b059ace4acf9ae060b811f15df96744e46d2836cf886ff13f6125d5d83c136d63821827c2d9b5ffafd269b27692e286a755c20709e60203b0dc025fa73edba70c919ee6c460ba3b4509badf3676e6fc4b172a001af81140069f","transcript_type":"EVM","split":null,"pretty_public_inputs":{"rescaled_inputs":[],"inputs":[],"processed_inputs":[],"processed_params":[],"processed_outputs":[],"rescaled_outputs":[["0","0","0","0"]],"outputs":[["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"]]},"timestamp":1726430885098,"commitment":"KZG"} \ No newline at end of file +{"protocol":null,"instances":[["0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000","0000000000000000000000000000000000000000000000000000000000000000"]],"proof":[7,102,87,190,153,229,59,6,250,221,10,63,210,51,26,207,46,194,145,97,237,1,245,42,248,173,49,189,21,0,216,125,34,9,199,125,171,108,12,101,89,75,31,133,179,147,239,237,218,207,81,198,82,129,144,247,68,204,166,44,217,66,221,35,17,33,29,160,129,121,229,44,82,145,52,107,213,158,203,98,129,56,97,204,34,80,245,3,34,5,252,31,167,58,56,2,46,210,50,211,53,35,250,143,122,31,14,84,171,83,208,117,236,3,97,98,59,102,89,161,167,18,194,233,26,45,58,38,42,83,206,156,150,9,69,180,201,190,62,248,116,104,6,168,207,112,166,244,168,160,60,83,250,74,40,63,19,85,44,27,30,165,252,35,212,69,204,145,255,18,204,249,66,245,192,116,111,38,175,106,252,101,33,182,129,200,188,246,224,111,18,116,29,136,21,25,83,69,48,217,153,96,162,102,210,156,188,8,183,175,181,194,45,244,231,154,102,19,18,152,102,167,34,175,2,92,46,210,136,40,78,202,251,77,209,104,254,116,21,37,168,44,135,119,129,216,252,171,70,50,243,103,194,115,18,125,22,42,29,183,17,110,66,169,83,226,46,203,216,91,21,148,167,252,33,157,201,156,20,233,149,244,87,184,248,255,14,144,44,49,13,249,77,141,69,211,180,110,63,67,91,75,235,138,88,93,74,113,253,66,111,192,243,132,182,86,184,22,135,179,2,112,0,135,178,191,162,208,159,58,198,75,119,147,118,211,123,5,216,206,242,48,38,98,156,215,28,70,97,33,224,149,28,145,250,188,1,52,183,235,236,117,6,140,80,29,215,31,254,156,17,10,29,184,124,55,228,139,63,193,3,207,68,16,9,207,169,136,53,34,166,195,225,22,236,10,200,246,61,4,236,31,71,161,12,17,126,135,26,197,8,101,142,82,231,57,44,76,64,86,37,222,181,85,166,186,2,138,108,70,116,45,60,86,220,44,23,240,162,185,141,196,147,50,163,42,197,7,29,215,253,51,30,13,160,202,14,34,89,185,112,183,170,9,43,64,87,86,87,223,238,221,185,181,181,105,132,245,167,217,24,206,84,81,109,69,112,31,14,90,22,99,59,222,83,190,241,72,86,103,39,90,98,201,42,29,5,149,233,120,234,57,42,29,23,75,127,138,84,57,241,193,71,212,213,184,25,163,131,79,55,28,182,52,178,65,193,214,211,84,24,52,155,247,21,200,242,170,146,244,46,164,38,166,5,201,19,214,103,89,20,8,5,173,157,189,211,53,137,20,32,222,97,102,44,188,29,215,253,51,30,13,160,202,14,34,89,185,112,183,170,9,43,64,87,86,87,223,238,221,185,181,181,105,132,245,167,217,24,206,84,81,109,69,112,31,14,90,22,99,59,222,83,190,241,72,86,103,39,90,98,201,42,29,5,149,233,120,234,57,29,215,253,51,30,13,160,202,14,34,89,185,112,183,170,9,43,64,87,86,87,223,238,221,185,181,181,105,132,245,167,217,24,206,84,81,109,69,112,31,14,90,22,99,59,222,83,190,241,72,86,103,39,90,98,201,42,29,5,149,233,120,234,57,29,215,253,51,30,13,160,202,14,34,89,185,112,183,170,9,43,64,87,86,87,223,238,221,185,181,181,105,132,245,167,217,24,206,84,81,109,69,112,31,14,90,22,99,59,222,83,190,241,72,86,103,39,90,98,201,42,29,5,149,233,120,234,57,29,215,253,51,30,13,160,202,14,34,89,185,112,183,170,9,43,64,87,86,87,223,238,221,185,181,181,105,132,245,167,217,24,206,84,81,109,69,112,31,14,90,22,99,59,222,83,190,241,72,86,103,39,90,98,201,42,29,5,149,233,120,234,57,5,97,158,236,112,200,133,205,196,108,135,251,243,47,53,102,214,117,81,123,223,159,154,3,168,145,32,206,56,130,244,126,30,123,25,247,42,138,80,13,204,246,88,185,216,221,11,188,68,43,30,137,242,63,67,148,239,99,199,15,250,236,239,178,26,209,34,200,138,140,206,3,67,51,120,204,73,126,249,188,48,66,238,66,204,200,133,243,45,13,1,207,81,184,238,53,33,84,61,78,74,147,16,193,71,46,210,204,179,17,101,87,102,136,143,222,76,225,178,69,62,245,63,20,142,102,17,94,43,74,104,11,146,4,125,21,142,126,135,189,149,143,205,140,34,111,163,62,109,210,31,204,175,50,7,217,26,191,190,60,37,94,107,29,204,10,222,124,188,245,129,125,217,165,220,135,35,91,49,229,85,96,27,25,99,9,225,32,116,153,215,134,13,183,224,204,233,128,102,238,97,14,254,157,39,96,4,145,139,222,112,155,177,102,13,204,135,28,105,114,71,135,178,11,37,61,49,167,12,140,165,109,159,47,215,57,192,92,118,228,228,54,109,17,225,220,56,103,249,249,180,156,65,141,223,161,38,42,160,63,164,253,134,50,29,64,123,102,101,110,56,229,245,8,229,190,244,56,138,30,64,224,126,14,113,160,14,77,9,45,12,94,228,153,98,165,193,202,194,26,128,181,157,153,242,225,127,254,16,186,93,108,0,238,185,30,194,230,7,12,18,221,99,250,238,234,234,195,200,50,226,31,74,56,205,29,227,45,40,5,203,46,50,5,158,63,195,133,196,246,132,193,3,10,109,191,2,167,137,30,58,26,46,165,32,122,120,160,79,101,189,105,241,63,168,45,233,249,123,111,33,198,5,1,18,221,99,250,238,234,234,195,200,50,226,31,74,56,205,29,227,45,40,5,203,46,50,5,158,63,195,133,196,246,132,193,3,10,109,191,2,167,137,30,58,26,46,165,32,122,120,160,79,101,189,105,241,63,168,45,233,249,123,111,33,198,5,1,36,210,211,5,222,163,212,162,90,216,137,227,17,182,242,62,205,101,157,131,103,67,158,89,10,55,203,240,128,163,67,46,11,84,104,82,21,171,88,223,111,11,21,150,190,181,104,80,103,7,135,27,78,112,81,153,55,27,135,206,199,220,51,99,36,210,211,5,222,163,212,162,90,216,137,227,17,182,242,62,205,101,157,131,103,67,158,89,10,55,203,240,128,163,67,46,11,84,104,82,21,171,88,223,111,11,21,150,190,181,104,80,103,7,135,27,78,112,81,153,55,27,135,206,199,220,51,99,5,87,243,180,208,140,106,184,142,189,134,102,168,43,255,122,164,248,72,102,123,91,180,237,154,185,198,160,149,144,188,148,35,193,184,193,223,79,161,201,109,58,212,63,205,212,88,198,28,177,44,24,246,186,130,79,196,42,127,191,219,98,150,210,30,27,55,193,204,141,174,160,179,0,37,53,36,136,216,198,141,151,234,89,24,169,108,27,187,206,93,252,81,9,114,250,11,86,193,237,94,156,198,129,86,30,189,73,132,76,233,115,138,196,104,103,157,87,116,229,106,78,21,39,106,226,58,77,29,111,130,131,204,12,252,184,28,57,227,239,53,123,25,91,179,75,13,217,59,7,184,36,162,99,114,255,33,93,151,64,31,154,80,215,92,243,125,75,158,129,2,100,62,109,114,145,207,19,64,188,194,238,188,161,105,82,215,187,255,129,66,42,0,4,227,243,247,86,220,10,203,72,59,67,3,196,123,150,4,19,206,36,62,73,89,61,9,86,228,15,142,253,131,156,14,182,251,152,110,37,82,148,89,49,233,165,68,238,94,1,242,10,63,217,215,238,27,1,199,122,153,227,5,252,162,130,5,84,176,32,206,60,5,239,203,180,11,27,6,199,83,154,165,93,110,178,50,238,206,176,69,218,52,216,57,244,188,173,22,16,12,205,152,202,57,69,249,46,210,51,37,153,2,62,41,217,203,156,11,168,90,54,97,133,51,192,111,38,80,219,16,1,222,166,157,12,66,31,148,19,80,244,221,88,178,169,184,221,126,138,53,253,22,130,170,205,119,159,63,236,213,154,48,17,177,98,173,245,156,79,8,196,139,150,246,244,48,154,11,52,70,174,209,194,49,64,211,67,102,141,99,90,158,70,11,45,168,40,110,106,228,61,196,238,177,145,125,1,103,223,97,141,114,176,15,30,190,33,51,177,193,109,105,189,236,96,46,207,101,18,69,57,75,81,149,182,24,233,96,82,188,9,85,198,157,14,136,25,78,168,136,0,5,28,43,248,184,141,37,148,167,49,97,233,139,198,187,25,120,167,13,107,231,166,194,199,101,203,82,173,217,251,156,249,122,114,82,6,12,203,38,87,199,54,5,31,32,49,16,106,205,102,32,166,254,116,189,178,128,32,108,46,244,211,79,66,185,42,58,205,128,138,16,88,244,74,214,73,232,99,4,155,116,240,57,196,80,218,213,15,4,34,143,84,229,48,113,131,78,9,225,194,17,183,11,192,60,161,238,58,29,156,145,100,141,166,247,142,233,184,196,87,175,125,170,235,48,91,201,123,62,33,221,99,177,221,43,39,19,164,127,176,230,133,125,253,148,31,156,219,58,108,152,171,61,204,249,46,189,5,187,215,50,97,223,228,176,1,39,173,107,240,75,53,172,163,139,6,192,61,176,75,42,86,117,250,74,97,25,214,9,111,111,14,128,154,243,34,2,5,28,233,147,56,38,111,161,171,144,119,135,81,240,223,184,72,230,156,128,84,158,22,107,182,165,149,176,230,138,10,206,123,43,109,175,154,150,13,135,23,212,71,68,197,70,18,189,50,107,49,87,20,164,202,92,155,125,15,140,12,251,188,133,162,14,14,143,225,255,95,174,138,38,229,15,251,168,183,155,96,255,223,56,223,246,57,163,220,138,153,171,97,87,224,62,138,24,130,72,20,9,31,78,124,205,14,38,55,70,71,212,71,167,145,164,143,163,107,23,245,186,128,204,1,225,98,30,174,30,59,152,201,17,147,225,50,235,78,28,193,217,239,218,64,94,97,248,187,7,90,57,43,117,143,49,237,87,144,166,187,21,156,106,78,40,241,0,35,195,49,160,107,234,81,224,62,5,8,225,77,235,25,14,19,208,212,166,243,206,249,180,45,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,209,230,242,37,228,69,205,67,153,28,239,220,6,0,195,188,151,40,65,227,90,205,58,252,183,16,238,166,199,77,134,47,230,73,212,139,158,187,8,53,166,234,25,168,58,76,24,116,175,163,11,18,45,217,81,195,120,53,233,31,96,85,242,47,230,73,212,139,158,187,8,53,166,234,25,168,58,76,24,116,175,163,11,18,45,217,81,195,120,53,233,31,96,85,242,12,67,227,37,50,43,130,91,122,84,125,197,38,133,90,47,96,150,174,235,177,51,214,171,202,230,232,176,43,109,178,26,8,108,157,152,171,9,26,58,107,148,231,177,48,183,30,242,168,195,109,162,187,190,64,190,125,146,228,228,205,184,97,197,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31,44,15,191,195,193,77,155,13,55,48,113,153,233,41,195,53,125,11,255,167,24,114,218,2,220,72,61,73,218,221,139,11,99,215,229,180,215,209,6,19,123,184,99,138,80,231,157,237,137,32,61,6,29,222,33,124,96,82,28,42,176,241,251,12,176,99,105,181,216,72,247,50,143,35,80,6,204,182,51,189,39,225,145,6,26,231,20,29,218,200,194,17,223,96,20,47,139,109,17,222,86,252,37,134,134,198,119,57,121,40,152,12,25,72,63,139,209,76,145,32,151,188,157,31,22,131,73,23,110,9,219,148,170,204,193,76,230,103,31,40,85,128,202,125,35,189,238,83,31,184,233,210,81,50,92,8,155,33,214,18,61,43,29,168,40,4,71,164,214,18,196,56,203,148,184,221,234,211,183,226,115,105,62,239,199,183,167,20,166,247,21,34,215,1,130,242,85,38,152,103,203,234,214,112,141,213,117,46,99,234,76,87,208,3,251,82,109,175,0,173,100,189,77,28,194,58,222,71,65,217,224,83,53,139,138,60,227,88,45,117,222,99,63,74,212,33,203,168,63,183,221,28,63,134,109,28,80,55,120,86,20,124,205,5,240,63,12,112,181,6,4,172,175,2,169,241,187,67,96,135,100,32,211,126,244,221,107,36,204,131,86,21,144,77,92,240,222,146,77,159,37,236,59,193,67,236,142,185,145,167,168,170,156,245,2,15,204,59,88,46,118,114,111,58,58,230,71,234,166,194,91,23,248,139,81,66,136,193,183,173,194,81,124,110,221,46,231,96,123,130,45,33,241,149,44,132,156,251,101,21,95,71,220,21,155,130,195,243,187,14,140,248,34,251,139,147,47,185,183,37,90,205,31,37,200,111,28,95,103,99,4,171,149,97,147,169,192,77,171,193,149,132,171,167,195,192,178,85,168,200,196,49,213,244,184,16,88,33,137,116,140,151,178,238,15,146,16,248,146,153,108,50,59,130,22,186,242,140,95,177,0,51,238,14,210,71,209,34,61,97,202,128,151,46,145,122,152,217,65,95,248,189,2,136,214,240,171,229,110,145,188,215,182,8,52,243,14,226,145,18,160,41,151,114,188,26,90,85,2,139,127,163,35,144,223,203,157,150,128,65,202,50,67,51,60,242,36,213,44,48,82,33,36,50,182,205,69,229,243,26,72,38,180,225,226,179,27,247,185,198,174,136,165,72,228,38,148,93,31,19,107,238,142,41,199,22,205,245,224,214,71,188,237,216,213,115,228,209,160,78,63,59,69,222,17,250,233,199,111,89,147,73,139,0,103,35,96,82,23,227,150,177,37,241,154,115,86,92,117,175,197,62,82,107,233,230,61,81,252,145,59,216,143,216,174,138,81,31,249,191,189,64,116,209,78,148,76,46,239,141,8,128,34,239,3,66,244,142,162,112,62,185,78,71,128,183,7,36,17,32,17,45,199,45,34,199,4,145,34,163,169,2,182,40,151,49,143,135,207,61,209,229,194,0,38,3,68,214,212,166,112,20,197,7,53,166,81,26,213,22,30,23,143,90,146,71,199,110,123,253,84,11,70,40,179,11,190,248,106,176,231,43,170,1,42,114,249,140,209,20,164,133,251,247,197,84,218,50,249,8,182,131,185,250,2,216,165,109,70,21,158,92,100,202,125,30,69,77,86,47,40,219,238,36,226,31,173,188,66,254,142,224,13,10,51,153,42,67,81,254,91,94,23,126,233,121,142,2,233,107,159,217,115,4,28,161,193,77,100,158,193,130,245,233,12,20,209,131,18,86,35,85,80,169,95,232,203,22,96,31,249,191,189,64,116,209,78,148,76,46,239,141,8,128,34,239,3,66,244,142,162,112,62,185,78,71,128,183,7,36,17,30,69,77,86,47,40,219,238,36,226,31,173,188,66,254,142,224,13,10,51,153,42,67,81,254,91,94,23,126,233,121,142,2,233,107,159,217,115,4,28,161,193,77,100,158,193,130,245,233,12,20,209,131,18,86,35,85,80,169,95,232,203,22,96,31,249,191,189,64,116,209,78,148,76,46,239,141,8,128,34,239,3,66,244,142,162,112,62,185,78,71,128,183,7,36,17,26,185,14,39,29,113,251,188,111,49,60,223,55,168,77,109,159,84,171,170,54,214,30,138,177,101,97,193,47,255,208,51,18,89,132,247,167,124,98,64,133,234,83,109,113,86,74,12,227,9,51,94,187,10,44,224,137,186,225,121,105,161,49,126,31,249,191,189,64,116,209,78,148,76,46,239,141,8,128,34,239,3,66,244,142,162,112,62,185,78,71,128,183,7,36,17,26,185,14,39,29,113,251,188,111,49,60,223,55,168,77,109,159,84,171,170,54,214,30,138,177,101,97,193,47,255,208,51,18,89,132,247,167,124,98,64,133,234,83,109,113,86,74,12,227,9,51,94,187,10,44,224,137,186,225,121,105,161,49,126,31,249,191,189,64,116,209,78,148,76,46,239,141,8,128,34,239,3,66,244,142,162,112,62,185,78,71,128,183,7,36,17,19,240,242,58,204,225,223,144,187,3,145,166,71,107,28,123,131,253,65,142,25,76,124,50,30,39,184,114,62,3,53,139,11,122,182,186,105,40,180,249,42,240,92,199,89,116,89,160,60,58,127,129,83,196,215,93,163,127,133,158,68,156,174,247,46,120,152,224,87,12,202,201,126,6,248,193,57,31,12,179,161,38,94,175,197,89,79,154,29,72,50,28,32,154,137,73,47,6,116,7,31,25,50,207,207,218,19,188,25,184,99,248,210,83,242,134,143,245,11,77,53,80,40,200,153,62,79,165],"hex_proof":"0x076657be99e53b06fadd0a3fd2331acf2ec29161ed01f52af8ad31bd1500d87d2209c77dab6c0c65594b1f85b393efeddacf51c6528190f744cca62cd942dd2311211da08179e52c5291346bd59ecb62813861cc2250f5032205fc1fa73a38022ed232d33523fa8f7a1f0e54ab53d075ec0361623b6659a1a712c2e91a2d3a262a53ce9c960945b4c9be3ef8746806a8cf70a6f4a8a03c53fa4a283f13552c1b1ea5fc23d445cc91ff12ccf942f5c0746f26af6afc6521b681c8bcf6e06f12741d881519534530d99960a266d29cbc08b7afb5c22df4e79a6613129866a722af025c2ed288284ecafb4dd168fe741525a82c877781d8fcab4632f367c273127d162a1db7116e42a953e22ecbd85b1594a7fc219dc99c14e995f457b8f8ff0e902c310df94d8d45d3b46e3f435b4beb8a585d4a71fd426fc0f384b656b81687b302700087b2bfa2d09f3ac64b779376d37b05d8cef23026629cd71c466121e0951c91fabc0134b7ebec75068c501dd71ffe9c110a1db87c37e48b3fc103cf441009cfa9883522a6c3e116ec0ac8f63d04ec1f47a10c117e871ac508658e52e7392c4c405625deb555a6ba028a6c46742d3c56dc2c17f0a2b98dc49332a32ac5071dd7fd331e0da0ca0e2259b970b7aa092b40575657dfeeddb9b5b56984f5a7d918ce54516d45701f0e5a16633bde53bef1485667275a62c92a1d0595e978ea392a1d174b7f8a5439f1c147d4d5b819a3834f371cb634b241c1d6d35418349bf715c8f2aa92f42ea426a605c913d66759140805ad9dbdd335891420de61662cbc1dd7fd331e0da0ca0e2259b970b7aa092b40575657dfeeddb9b5b56984f5a7d918ce54516d45701f0e5a16633bde53bef1485667275a62c92a1d0595e978ea391dd7fd331e0da0ca0e2259b970b7aa092b40575657dfeeddb9b5b56984f5a7d918ce54516d45701f0e5a16633bde53bef1485667275a62c92a1d0595e978ea391dd7fd331e0da0ca0e2259b970b7aa092b40575657dfeeddb9b5b56984f5a7d918ce54516d45701f0e5a16633bde53bef1485667275a62c92a1d0595e978ea391dd7fd331e0da0ca0e2259b970b7aa092b40575657dfeeddb9b5b56984f5a7d918ce54516d45701f0e5a16633bde53bef1485667275a62c92a1d0595e978ea3905619eec70c885cdc46c87fbf32f3566d675517bdf9f9a03a89120ce3882f47e1e7b19f72a8a500dccf658b9d8dd0bbc442b1e89f23f4394ef63c70ffaecefb21ad122c88a8cce03433378cc497ef9bc3042ee42ccc885f32d0d01cf51b8ee3521543d4e4a9310c1472ed2ccb311655766888fde4ce1b2453ef53f148e66115e2b4a680b92047d158e7e87bd958fcd8c226fa33e6dd21fccaf3207d91abfbe3c255e6b1dcc0ade7cbcf5817dd9a5dc87235b31e555601b196309e1207499d7860db7e0cce98066ee610efe9d276004918bde709bb1660dcc871c69724787b20b253d31a70c8ca56d9f2fd739c05c76e4e4366d11e1dc3867f9f9b49c418ddfa1262aa03fa4fd86321d407b66656e38e5f508e5bef4388a1e40e07e0e71a00e4d092d0c5ee49962a5c1cac21a80b59d99f2e17ffe10ba5d6c00eeb91ec2e6070c12dd63faeeeaeac3c832e21f4a38cd1de32d2805cb2e32059e3fc385c4f684c1030a6dbf02a7891e3a1a2ea5207a78a04f65bd69f13fa82de9f97b6f21c6050112dd63faeeeaeac3c832e21f4a38cd1de32d2805cb2e32059e3fc385c4f684c1030a6dbf02a7891e3a1a2ea5207a78a04f65bd69f13fa82de9f97b6f21c6050124d2d305dea3d4a25ad889e311b6f23ecd659d8367439e590a37cbf080a3432e0b54685215ab58df6f0b1596beb568506707871b4e705199371b87cec7dc336324d2d305dea3d4a25ad889e311b6f23ecd659d8367439e590a37cbf080a3432e0b54685215ab58df6f0b1596beb568506707871b4e705199371b87cec7dc33630557f3b4d08c6ab88ebd8666a82bff7aa4f848667b5bb4ed9ab9c6a09590bc9423c1b8c1df4fa1c96d3ad43fcdd458c61cb12c18f6ba824fc42a7fbfdb6296d21e1b37c1cc8daea0b30025352488d8c68d97ea5918a96c1bbbce5dfc510972fa0b56c1ed5e9cc681561ebd49844ce9738ac468679d5774e56a4e15276ae23a4d1d6f8283cc0cfcb81c39e3ef357b195bb34b0dd93b07b824a26372ff215d97401f9a50d75cf37d4b9e8102643e6d7291cf1340bcc2eebca16952d7bbff81422a0004e3f3f756dc0acb483b4303c47b960413ce243e49593d0956e40f8efd839c0eb6fb986e2552945931e9a544ee5e01f20a3fd9d7ee1b01c77a99e305fca2820554b020ce3c05efcbb40b1b06c7539aa55d6eb232eeceb045da34d839f4bcad16100ccd98ca3945f92ed2332599023e29d9cb9c0ba85a36618533c06f2650db1001dea69d0c421f941350f4dd58b2a9b8dd7e8a35fd1682aacd779f3fecd59a3011b162adf59c4f08c48b96f6f4309a0b3446aed1c23140d343668d635a9e460b2da8286e6ae43dc4eeb1917d0167df618d72b00f1ebe2133b1c16d69bdec602ecf651245394b5195b618e96052bc0955c69d0e88194ea88800051c2bf8b88d2594a73161e98bc6bb1978a70d6be7a6c2c765cb52add9fb9cf97a7252060ccb2657c736051f2031106acd6620a6fe74bdb280206c2ef4d34f42b92a3acd808a1058f44ad649e863049b74f039c450dad50f04228f54e53071834e09e1c211b70bc03ca1ee3a1d9c91648da6f78ee9b8c457af7daaeb305bc97b3e21dd63b1dd2b2713a47fb0e6857dfd941f9cdb3a6c98ab3dccf92ebd05bbd73261dfe4b00127ad6bf04b35aca38b06c03db04b2a5675fa4a6119d6096f6f0e809af32202051ce99338266fa1ab90778751f0dfb848e69c80549e166bb6a595b0e68a0ace7b2b6daf9a960d8717d44744c54612bd326b315714a4ca5c9b7d0f8c0cfbbc85a20e0e8fe1ff5fae8a26e50ffba8b79b60ffdf38dff639a3dc8a99ab6157e03e8a18824814091f4e7ccd0e26374647d447a791a48fa36b17f5ba80cc01e1621eae1e3b98c91193e132eb4e1cc1d9efda405e61f8bb075a392b758f31ed5790a6bb159c6a4e28f10023c331a06bea51e03e0508e14deb190e13d0d4a6f3cef9b42d000000000000000000000000000000000000000000000000000000000000000023d1e6f225e445cd43991cefdc0600c3bc972841e35acd3afcb710eea6c74d862fe649d48b9ebb0835a6ea19a83a4c1874afa30b122dd951c37835e91f6055f22fe649d48b9ebb0835a6ea19a83a4c1874afa30b122dd951c37835e91f6055f20c43e325322b825b7a547dc526855a2f6096aeebb133d6abcae6e8b02b6db21a086c9d98ab091a3a6b94e7b130b71ef2a8c36da2bbbe40be7d92e4e4cdb861c500000000000000000000000000000000000000000000000000000000000000001f2c0fbfc3c14d9b0d37307199e929c3357d0bffa71872da02dc483d49dadd8b0b63d7e5b4d7d106137bb8638a50e79ded89203d061dde217c60521c2ab0f1fb0cb06369b5d848f7328f235006ccb633bd27e191061ae7141ddac8c211df60142f8b6d11de56fc258686c677397928980c19483f8bd14c912097bc9d1f168349176e09db94aaccc14ce6671f285580ca7d23bdee531fb8e9d251325c089b21d6123d2b1da8280447a4d612c438cb94b8ddead3b7e273693eefc7b7a714a6f71522d70182f255269867cbead6708dd5752e63ea4c57d003fb526daf00ad64bd4d1cc23ade4741d9e053358b8a3ce3582d75de633f4ad421cba83fb7dd1c3f866d1c50377856147ccd05f03f0c70b50604acaf02a9f1bb4360876420d37ef4dd6b24cc835615904d5cf0de924d9f25ec3bc143ec8eb991a7a8aa9cf5020fcc3b582e76726f3a3ae647eaa6c25b17f88b514288c1b7adc2517c6edd2ee7607b822d21f1952c849cfb65155f47dc159b82c3f3bb0e8cf822fb8b932fb9b7255acd1f25c86f1c5f676304ab956193a9c04dabc19584aba7c3c0b255a8c8c431d5f4b810582189748c97b2ee0f9210f892996c323b8216baf28c5fb10033ee0ed247d1223d61ca80972e917a98d9415ff8bd0288d6f0abe56e91bcd7b60834f30ee29112a0299772bc1a5a55028b7fa32390dfcb9d968041ca3243333cf224d52c3052212432b6cd45e5f31a4826b4e1e2b31bf7b9c6ae88a548e426945d1f136bee8e29c716cdf5e0d647bcedd8d573e4d1a04e3f3b45de11fae9c76f5993498b006723605217e396b125f19a73565c75afc53e526be9e63d51fc913bd88fd8ae8a511ff9bfbd4074d14e944c2eef8d088022ef0342f48ea2703eb94e4780b707241120112dc72d22c7049122a3a902b62897318f87cf3dd1e5c200260344d6d4a67014c50735a6511ad5161e178f5a9247c76e7bfd540b4628b30bbef86ab0e72baa012a72f98cd114a485fbf7c554da32f908b683b9fa02d8a56d46159e5c64ca7d1e454d562f28dbee24e21fadbc42fe8ee00d0a33992a4351fe5b5e177ee9798e02e96b9fd973041ca1c14d649ec182f5e90c14d1831256235550a95fe8cb16601ff9bfbd4074d14e944c2eef8d088022ef0342f48ea2703eb94e4780b70724111e454d562f28dbee24e21fadbc42fe8ee00d0a33992a4351fe5b5e177ee9798e02e96b9fd973041ca1c14d649ec182f5e90c14d1831256235550a95fe8cb16601ff9bfbd4074d14e944c2eef8d088022ef0342f48ea2703eb94e4780b70724111ab90e271d71fbbc6f313cdf37a84d6d9f54abaa36d61e8ab16561c12fffd033125984f7a77c624085ea536d71564a0ce309335ebb0a2ce089bae17969a1317e1ff9bfbd4074d14e944c2eef8d088022ef0342f48ea2703eb94e4780b70724111ab90e271d71fbbc6f313cdf37a84d6d9f54abaa36d61e8ab16561c12fffd033125984f7a77c624085ea536d71564a0ce309335ebb0a2ce089bae17969a1317e1ff9bfbd4074d14e944c2eef8d088022ef0342f48ea2703eb94e4780b707241113f0f23acce1df90bb0391a6476b1c7b83fd418e194c7c321e27b8723e03358b0b7ab6ba6928b4f92af05cc7597459a03c3a7f8153c4d75da37f859e449caef72e7898e0570ccac97e06f8c1391f0cb3a1265eafc5594f9a1d48321c209a89492f0674071f1932cfcfda13bc19b863f8d253f2868ff50b4d355028c8993e4fa5","transcript_type":"EVM","split":null,"pretty_public_inputs":{"rescaled_inputs":[],"inputs":[],"processed_inputs":[],"processed_params":[],"processed_outputs":[],"rescaled_outputs":[["0","0","0","0"]],"outputs":[["0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000","0x0000000000000000000000000000000000000000000000000000000000000000"]]},"timestamp":1729639678889,"commitment":"KZG"} \ No newline at end of file diff --git a/tests/assets/settings.json b/tests/assets/settings.json index 227c2d71f..a123fc99d 100644 --- a/tests/assets/settings.json +++ b/tests/assets/settings.json @@ -33,6 +33,7 @@ "total_assignments": 92, "total_const_size": 3, "total_dynamic_col_size": 0, + "max_dynamic_input_len": 0, "num_dynamic_lookups": 0, "num_shuffles": 0, "total_shuffle_col_size": 0,