Skip to content

Commit 69fc6e8

Browse files
author
Mason Liang
committed
move assign padding method into impl file
1 parent 269f89a commit 69fc6e8

File tree

3 files changed

+25
-105
lines changed

3 files changed

+25
-105
lines changed

src/gadgets/mpt_update.rs

+15-74
Original file line numberDiff line numberDiff line change
@@ -342,88 +342,29 @@ impl MptUpdateConfig {
342342
&self,
343343
region: &mut Region<'_, Fr>,
344344
proofs: &[Proof],
345+
n_rows: usize,
345346
randomness: Value<Fr>,
346-
) -> usize {
347-
self.assign_inner(region, proofs, randomness)
348-
}
347+
) {
348+
let mut n_rows_used = 1; // selector on first row is disabled.
349+
for proof in proofs {
350+
n_rows_used += self.assign_proof(region, n_rows_used, proof, randomness);
351+
}
352+
353+
let expected_offset = Self::n_rows_required(proofs);
354+
debug_assert!(
355+
n_rows_used == expected_offset,
356+
"assign used {n_rows_used} rows but {expected_offset} rows expected from `n_rows_required`",
357+
);
349358

350-
/// Valid assignment proving that the address 0 doesn't exist in an empty MPT.
351-
pub fn assign_padding_row(&self, region: &mut Region<'_, Fr>, offset: usize) {
352-
self.proof_type
353-
.assign(region, offset, MPTProofType::AccountDoesNotExist);
354-
self.key.assign(region, offset, *ZERO_PAIR_HASH);
355-
self.other_key.assign(region, offset, *ZERO_PAIR_HASH);
356-
self.domain.assign(region, offset, HashDomain::Pair);
359+
for offset in n_rows_used..n_rows {
360+
self.assign_padding_row(region, offset);
361+
}
357362
}
358363

359364
pub fn n_rows_required(proofs: &[Proof]) -> usize {
360365
// +1 because assigment starts on offset = 1 instead of offset = 0.
361366
proofs.iter().map(Proof::n_rows).sum::<usize>() + 1
362367
}
363-
364-
// fn assign_account_trie_rows(
365-
// &self,
366-
// region: &mut Region<'_, Fr>,
367-
// starting_offset: usize,
368-
// rows: &TrieRows,
369-
// ) -> usize {
370-
// let n_rows = self.assign_trie_rows(region, starting_offset, rows);
371-
// for i in 0..n_rows {
372-
// self.segment_type
373-
// .assign(region, starting_offset + i, SegmentType::AccountTrie);
374-
// }
375-
// n_rows
376-
// }
377-
378-
// fn assign_storage_trie_rows(
379-
// &self,
380-
// region: &mut Region<'_, Fr>,
381-
// starting_offset: usize,
382-
// rows: &TrieRows,
383-
// ) -> usize {
384-
// let n_rows = self.assign_trie_rows(region, starting_offset, rows);
385-
// for i in 0..n_rows {
386-
// self.segment_type
387-
// .assign(region, starting_offset + i, SegmentType::StorageTrie);
388-
// }
389-
// n_rows
390-
// }
391-
392-
// fn assign_trie_rows(
393-
// &self,
394-
// region: &mut Region<'_, Fr>,
395-
// starting_offset: usize,
396-
// rows: &TrieRows,
397-
// ) -> usize {
398-
// for (i, row) in rows.0.iter().enumerate() {
399-
// let offset = starting_offset + i;
400-
// self.depth
401-
// .assign(region, offset, u64::try_from(i + 1).unwrap());
402-
// self.path_type.assign(region, offset, row.path_type);
403-
404-
// if let Some(next_row) = rows.0.get(i + 1) {
405-
// if !matches!(next_row.path_type, PathType::Start | PathType::Common)
406-
// && row.path_type == PathType::Common
407-
// {
408-
// self.intermediate_values[2].assign(
409-
// region,
410-
// offset,
411-
// next_domain(row.domain, row.direction),
412-
// );
413-
// }
414-
// }
415-
// for (value, column) in [
416-
// (row.sibling, self.sibling),
417-
// (row.old, self.old_hash),
418-
// (row.new, self.new_hash),
419-
// (row.direction.into(), self.direction),
420-
// (row.domain.into(), self.domain),
421-
// ] {
422-
// column.assign(region, offset, value);
423-
// }
424-
// }
425-
// rows.len()
426-
// }
427368
}
428369

429370
fn old_left<F: FieldExt>(config: &MptUpdateConfig) -> Query<F> {

src/gadgets/mpt_update/assign.rs

+8-19
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use halo2_proofs::{
1818
use itertools::izip;
1919

2020
impl MptUpdateConfig {
21-
fn assign_proof(
21+
pub fn assign_proof(
2222
&self,
2323
region: &mut Region<'_, Fr>,
2424
offset: usize,
@@ -257,24 +257,13 @@ impl MptUpdateConfig {
257257
return proof.n_rows();
258258
}
259259

260-
pub fn assign_inner(
261-
&self,
262-
region: &mut Region<'_, Fr>,
263-
proofs: &[Proof],
264-
randomness: Value<Fr>,
265-
) -> usize {
266-
let mut offset = 1; // selector on first row is disabled.
267-
for proof in proofs {
268-
offset += self.assign_proof(region, offset, proof, randomness);
269-
}
270-
271-
let expected_offset = Self::n_rows_required(proofs);
272-
debug_assert!(
273-
offset == expected_offset,
274-
"assign used {offset} rows but {expected_offset} rows expected from `n_rows_required`",
275-
);
276-
277-
offset - 1
260+
// Valid assignment proving that the address 0 doesn't exist in an empty MPT.
261+
pub fn assign_padding_row(&self, region: &mut Region<'_, Fr>, offset: usize) {
262+
self.proof_type
263+
.assign(region, offset, MPTProofType::AccountDoesNotExist);
264+
self.key.assign(region, offset, *ZERO_PAIR_HASH);
265+
self.other_key.assign(region, offset, *ZERO_PAIR_HASH);
266+
self.domain.assign(region, offset, HashDomain::Pair);
278267
}
279268

280269
fn assign_storage_trie_rows(

src/mpt.rs

+2-12
Original file line numberDiff line numberDiff line change
@@ -126,18 +126,8 @@ impl MptCircuitConfig {
126126
layouter.assign_region(
127127
|| "mpt circuit",
128128
|mut region| {
129-
let n_assigned_rows = self.mpt_update.assign(&mut region, proofs, randomness);
130-
131-
assert!(
132-
2 + n_assigned_rows <= n_rows,
133-
"mpt circuit requires {n_assigned_rows} rows for mpt updates + 1 initial \
134-
all-zero row + at least 1 final padding row. Only {n_rows} rows available."
135-
);
136-
137-
for offset in 1 + n_assigned_rows..n_rows {
138-
self.mpt_update.assign_padding_row(&mut region, offset);
139-
}
140-
129+
self.mpt_update
130+
.assign(&mut region, proofs, n_rows, randomness);
141131
Ok(())
142132
},
143133
)?;

0 commit comments

Comments
 (0)