Skip to content

Commit b8ad5dd

Browse files
feat(drive): improve error handling in merk proof extraction (#3003)
1 parent 87f8385 commit b8ad5dd

File tree

1 file changed

+16
-5
lines changed
  • packages/rs-drive/src/verify/address_funds/verify_compacted_address_balance_changes/v0

1 file changed

+16
-5
lines changed

packages/rs-drive/src/verify/address_funds/verify_compacted_address_balance_changes/v0/mod.rs

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,30 @@ use std::collections::BTreeMap;
1818
use 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

3747
impl 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

Comments
 (0)