pub fn trim_start(&mut self, count: usize) {
        assert!(self.hashes.len() >= count, "not enough leaves to trim");
        let mut new_cache = vec![];
        // Cache is a left subset of the path to the first untrimmed leaf.
        let root = self.compute_merkle_root_and_path(count, Some(&mut new_cache), Some(Side::Left));
        self.hashes.drain(..count);
        self.start_index += count;
        if self.start_index == self.binary_tree_size {
            // If the tree is completely trimmed *and* will grow on the next push,
            // we need to cache the root.
            new_cache.push(Some(root));
        }
        self.cache = new_cache;
    }
Trims and caches the leftmost `count` leaves.
Does not affect the root hash, but makes it impossible to get the paths to the cached leaves.
# Panics
Panics if `count` is greater than the number of untrimmed leaves in the tree.
core/lib/mini_merkle_tree/src/lib.rs