diff --git a/src/bridgetree.rs b/src/bridgetree.rs index 436b7b5..d73ece9 100644 --- a/src/bridgetree.rs +++ b/src/bridgetree.rs @@ -118,7 +118,7 @@ impl NonEmptyFrontier { self.leaf = Leaf::Right(a.clone(), value); } Leaf::Right(a, b) => { - carry = Some((H::combine(Altitude::zero(), &a, &b), Altitude::one())); + carry = Some((H::combine(Altitude::zero(), a, b), Altitude::one())); self.leaf = Leaf::Left(value); } }; @@ -128,7 +128,7 @@ impl NonEmptyFrontier { for (ommer, ommer_lvl) in self.ommers.iter().zip(self.position.ommer_altitudes()) { if let Some((carry_ommer, carry_lvl)) = carry.as_ref() { if *carry_lvl == ommer_lvl { - carry = Some((H::combine(ommer_lvl, &ommer, &carry_ommer), ommer_lvl + 1)) + carry = Some((H::combine(ommer_lvl, ommer, carry_ommer), ommer_lvl + 1)) } else { // insert the carry at the first empty slot; then the rest of the // ommers will remain unchanged @@ -225,7 +225,7 @@ impl NonEmptyFrontier { digest = H::combine( ommer_lvl, - &ommer, + ommer, // fold up to ommer.lvl pairing with empty roots; if // complete_lvl == ommer.lvl this is just the complete // digest to this point @@ -560,7 +560,7 @@ impl MerkleBridge { /// `self` had had every leaf used to construct `next` appended to it /// directly. fn fuse(&self, next: &Self) -> Option> { - if next.can_follow(&self) { + if next.can_follow(self) { let fused = MerkleBridge { prior_position: self.prior_position, auth_fragments: self @@ -763,37 +763,32 @@ impl BridgeTree { } fn witness_internal(&mut self, btype: BoundaryType) -> Option { - let next = self.bridges.last().map(|current| { - ( - current.leaf_value().clone(), - current.successor(self.bridges.len() - 1), - ) - }); + let blen = self.bridges.len(); + let (leaf, succ) = self + .bridges + .last() + .map(|current| (current.leaf_value().clone(), current.successor(blen - 1)))?; - next.map(|(leaf, succ)| { - let blen = self.bridges.len(); + // a duplicate frontier might occur when we observe a previously witnessed + // value where that value was subsequently removed. + let is_duplicate_frontier = + blen > 1 && self.bridges[blen - 1].frontier == self.bridges[blen - 2].frontier; - // a duplicate frontier might occur when we observe a previously witnessed - // value where that value was subsequently removed. - let is_duplicate_frontier = - blen > 1 && self.bridges[blen - 1].frontier == self.bridges[blen - 2].frontier; + let save_idx = if is_duplicate_frontier { + // By saving at `blen - 2` we effectively restore the original witness. + // We do not push new duplicate frontiers. + blen - 2 + } else { + // only push the successor if its frontier is not a duplicate + self.bridges.push(succ); + blen - 1 + }; - let save_idx = if is_duplicate_frontier { - // By saving at `blen - 2` we effectively restore the original witness. - // We do not push new duplicate frontiers. - blen - 2 - } else { - // only push the successor if its frontier is not a duplicate - self.bridges.push(succ); - blen - 1 - }; + if btype == BoundaryType::Witness { + self.saved.entry(leaf).or_insert(save_idx); + } - if btype == BoundaryType::Witness { - self.saved.entry(leaf).or_insert(save_idx); - } - - save_idx - }) + Some(save_idx) } } @@ -913,7 +908,7 @@ impl Tree for BridgeTree self.max_checkpoints { @@ -1038,7 +1033,7 @@ impl Recording for BridgeRe fn play(&mut self, recording: &Self) -> bool { if let Some((current, next)) = self.bridge.as_ref().zip(recording.bridge.as_ref()) { - if let Some(fused) = current.fuse(&next) { + if let Some(fused) = current.fuse(next) { self.bridge = Some(fused); true } else {