@@ -18,20 +18,30 @@ use std::collections::BTreeMap;
1818use super :: VerifiedCompactedAddressBalanceChanges ;
1919
2020/// Extract KV entries from merk proof bytes using the proper decoder.
21- fn extract_kv_entries_from_merk_proof ( merk_proof : & [ u8 ] ) -> Vec < ( Vec < u8 > , Vec < u8 > ) > {
21+ #[ allow( clippy:: type_complexity) ]
22+ fn extract_kv_entries_from_merk_proof ( merk_proof : & [ u8 ] ) -> Result < Vec < ( Vec < u8 > , Vec < u8 > ) > , Error > {
2223 let mut entries = Vec :: new ( ) ;
2324
24- for op in MerkProofDecoder :: new ( merk_proof) . flatten ( ) {
25+ let decoder = MerkProofDecoder :: new ( merk_proof) ;
26+
27+ for op in decoder {
2528 match op {
26- MerkProofOp :: Push ( MerkProofNode :: KV ( key, value) )
27- | MerkProofOp :: PushInverted ( MerkProofNode :: KV ( key, value) ) => {
29+ Ok ( MerkProofOp :: Push ( MerkProofNode :: KV ( key, value) ) )
30+ | Ok ( MerkProofOp :: PushInverted ( MerkProofNode :: KV ( key, value) ) ) => {
2831 entries. push ( ( key, value) ) ;
2932 }
33+ Err ( e) => {
34+ tracing:: error!( %e, "merk proof decode error" ) ;
35+ return Err ( Error :: Proof ( ProofError :: CorruptedProof ( format ! (
36+ "failed to decode merk proof op: {}" ,
37+ e
38+ ) ) ) ) ;
39+ }
3040 _ => { }
3141 }
3242 }
3343
34- entries
44+ Ok ( entries)
3545}
3646
3747impl Drive {
@@ -81,6 +91,7 @@ impl Drive {
8191 // if there's a containing range for start_block_height
8292 let kv_entries = compacted_layer
8393 . map ( |layer| extract_kv_entries_from_merk_proof ( & layer. merk_proof ) )
94+ . transpose ( ) ?
8495 . unwrap_or_default ( ) ;
8596
8697 // Look for a KV entry where the range contains start_block_height
0 commit comments