Skip to content

Commit d515f51

Browse files
committed
refactor: make validate_merkle_proof more efficient
1 parent 64c77ee commit d515f51

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

src/utils.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
33
use bitcoin::hash_types::TxMerkleNode;
44
use bitcoin::hashes::sha256d::Hash as Sha256d;
5-
use bitcoin::hashes::Hash;
5+
use bitcoin::hashes::{Hash, HashEngine};
66
use bitcoin::Txid;
77
use types::GetMerkleRes;
88

@@ -22,20 +22,20 @@ pub fn validate_merkle_proof(
2222
let mut index = merkle_res.pos;
2323
let mut cur = txid.to_raw_hash();
2424
for bytes in &merkle_res.merkle {
25-
let mut reversed = [0u8; 32];
26-
reversed.copy_from_slice(bytes);
25+
let mut reversed = bytes.to_owned();
2726
reversed.reverse();
28-
// unwrap() safety: `reversed` has len 32 so `from_slice` can never fail.
29-
let next_hash = Sha256d::from_slice(&reversed).unwrap();
27+
let next_hash = Sha256d::from_byte_array(reversed);
3028

3129
let (left, right) = if index % 2 == 0 {
3230
(cur, next_hash)
3331
} else {
3432
(next_hash, cur)
3533
};
3634

37-
let data = [&left[..], &right[..]].concat();
38-
cur = Sha256d::hash(&data);
35+
let mut engine = Sha256d::engine();
36+
engine.input(left.as_ref());
37+
engine.input(right.as_ref());
38+
cur = Sha256d::from_engine(engine);
3939
index /= 2;
4040
}
4141

0 commit comments

Comments
 (0)