From 752adff9d1f322b6ee0caab96e3fedfb5e0c8948 Mon Sep 17 00:00:00 2001 From: "Tobin C. Harding" Date: Mon, 14 Nov 2022 11:13:43 +1100 Subject: [PATCH] Add method calc_height Add a private method to the `PartialMerkleTree` to calculate the height. Enables removal of duplicate code. --- bitcoin/src/merkle_tree/block.rs | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/bitcoin/src/merkle_tree/block.rs b/bitcoin/src/merkle_tree/block.rs index 98192359..9d1c1997 100644 --- a/bitcoin/src/merkle_tree/block.rs +++ b/bitcoin/src/merkle_tree/block.rs @@ -250,11 +250,8 @@ impl PartialMerkleTree { bits: Vec::with_capacity(txids.len()), hashes: vec![], }; - // calculate height of tree - let mut height = 0; - while pmt.calc_tree_width(height) > 1 { - height += 1; - } + let height = pmt.calc_tree_height(); + // traverse the partial tree pmt.traverse_and_build(height, 0, txids, matches); pmt @@ -286,11 +283,9 @@ impl PartialMerkleTree { if self.bits.len() < self.hashes.len() { return Err(NotEnoughBits); }; - // calculate height of tree - let mut height = 0; - while self.calc_tree_width(height) > 1 { - height += 1; - } + + let height = self.calc_tree_height(); + // traverse the partial tree let mut bits_used = 0u32; let mut hash_used = 0u32; @@ -308,6 +303,15 @@ impl PartialMerkleTree { Ok(TxMerkleNode::from_byte_array(hash_merkle_root.to_byte_array())) } + /// Calculates the height of the tree. + fn calc_tree_height(&self) -> u32 { + let mut height = 0; + while self.calc_tree_width(height) > 1 { + height += 1; + } + height + } + /// Helper function to efficiently calculate the number of nodes at given height /// in the merkle tree #[inline]