diff --git a/zebra-chain/src/sapling/tree.rs b/zebra-chain/src/sapling/tree.rs index 6e29849e..d0f70b6f 100644 --- a/zebra-chain/src/sapling/tree.rs +++ b/zebra-chain/src/sapling/tree.rs @@ -13,7 +13,7 @@ #![allow(clippy::unit_arg)] #![allow(dead_code)] -use std::fmt; +use std::{collections::VecDeque, fmt}; use bitvec::prelude::*; use lazy_static::lazy_static; @@ -112,31 +112,31 @@ impl From> for NoteCommitmentTree { let count = values.len() as u32; let mut height = 0u8; - let mut current_layer: Vec<[u8; 32]> = + let mut current_layer: VecDeque<[u8; 32]> = values.into_iter().map(|cm_u| cm_u.to_bytes()).collect(); while usize::from(height) < MERKLE_DEPTH { let mut next_layer_up = vec![]; while !current_layer.is_empty() { - let left = current_layer.remove(0); + let left = current_layer.pop_front().unwrap(); let right; if current_layer.is_empty() { right = EMPTY_ROOTS[height as usize]; } else { - right = current_layer.remove(0); + right = current_layer.pop_front().unwrap(); } next_layer_up.push(merkle_crh_sapling(height, left, right)); } height += 1; - current_layer = next_layer_up; + current_layer = next_layer_up.into(); } assert!(current_layer.len() == 1); NoteCommitmentTree { - root: Root(current_layer.remove(0)), + root: Root(current_layer.pop_front().unwrap()), height, count, }