@@ -182,6 +182,8 @@ impl BasicSnippet for VerifyMmrSuccessor {
182
182
/* nominal case */
183
183
dup 2 dup 2
184
184
dup 7 dup 7
185
+ // _ [old_num_leafs: u64] *old_peaks [new_num_leafs: u64] *new_peaks [new_num_leafs: u64] [old_num_leafs: u64]
186
+
185
187
call { leaf_index_to_mti_and_pki} hint num_unchanged_peaks = stack[ 0 ]
186
188
hint merkle_tree_idx: u64 = stack[ 1 ..3 ]
187
189
// _ [old_num_leafs: u64] *old_peaks [new_num_leafs: u64] *new_peaks [mt_index: u64] num_unchanged_peaks
@@ -199,6 +201,8 @@ impl BasicSnippet for VerifyMmrSuccessor {
199
201
addi -1
200
202
push { Digest :: LEN }
201
203
mul
204
+ // _ [mt_index: u64] [old_num_leafs: u64] [new_num_leafs: u64] *new_peaks num_unchanged_peaks *old_peaks[0] (old_num_peaks-1)*DIGEST_LENGTH
205
+
202
206
dup 1
203
207
add hint last_old_peak: Pointer = stack[ 0 ]
204
208
place 1
@@ -381,6 +385,7 @@ impl BasicSnippet for VerifyMmrSuccessor {
381
385
fn sign_offs ( & self ) -> HashMap < Reviewer , SignOffFingerprint > {
382
386
let mut sign_offs = HashMap :: new ( ) ;
383
387
sign_offs. insert ( Reviewer ( "ferdinand" ) , 0xeb1e81bd042d7a0c . into ( ) ) ;
388
+ sign_offs. insert ( Reviewer ( "alan" ) , 0xeb1e81bd042d7a0c . into ( ) ) ;
384
389
sign_offs
385
390
}
386
391
}
@@ -434,16 +439,19 @@ mod tests {
434
439
let dummy_proof = MmrSuccessorProof :: new_from_batch_append ( & old_mmr, & new_dummy_leafs) ;
435
440
let auth_path_len = dummy_proof. paths . len ( ) ;
436
441
437
- let mut paths = vec ! [ ] ;
442
+ // grab first path element from nd tokens
443
+ let mut path = vec ! [ ] ;
438
444
if auth_path_len > 0 {
439
445
let first_element = ( 0 ..Digest :: LEN ) . rev ( ) . map ( |i| nd_tokens[ i] ) . collect_vec ( ) ;
440
- paths . push ( Digest :: new ( first_element. try_into ( ) . unwrap ( ) ) ) ;
446
+ path . push ( Digest :: new ( first_element. try_into ( ) . unwrap ( ) ) ) ;
441
447
}
448
+
449
+ // grab remaining path elements from nd digests
442
450
if auth_path_len > 1 {
443
- paths . extend ( ( 0 ..auth_path_len - 1 ) . map ( |i| nd_digests[ i] ) ) ;
451
+ path . extend ( ( 0 ..auth_path_len - 1 ) . map ( |i| nd_digests[ i] ) ) ;
444
452
}
445
453
446
- assert ! ( MmrSuccessorProof { paths } . verify( & old_mmr, & new_mmr) ) ;
454
+ assert ! ( MmrSuccessorProof { paths: path } . verify( & old_mmr, & new_mmr) ) ;
447
455
}
448
456
449
457
fn pseudorandom_initial_state (
0 commit comments