diff --git a/eth2/utils/ssz/src/cached_tree_hash.rs b/eth2/utils/ssz/src/cached_tree_hash.rs index 6e84233fc..d6ff884ef 100644 --- a/eth2/utils/ssz/src/cached_tree_hash.rs +++ b/eth2/utils/ssz/src/cached_tree_hash.rs @@ -145,30 +145,20 @@ impl TreeHashCache { }) } - pub fn single_chunk_splice(&mut self, chunk: usize, replace_with: I) -> Splice - where - I: IntoIterator, - { - self.chunk_splice(chunk..chunk + 1, replace_with) + pub fn single_chunk_splice(&mut self, chunk: usize, replace_with: Vec) { + self.chunk_splice(chunk..chunk + 1, replace_with); } - pub fn chunk_splice( - &mut self, - chunk_range: Range, - replace_with: I, - ) -> Splice - where - I: IntoIterator, - { + pub fn chunk_splice(&mut self, chunk_range: Range, replace_with: Vec) { let byte_start = chunk_range.start * BYTES_PER_CHUNK; let byte_end = chunk_range.end * BYTES_PER_CHUNK; // Update the `chunk_modified` vec, marking all spliced-in nodes as changed. self.chunk_modified.splice( chunk_range.clone(), - vec![true; chunk_range.end - chunk_range.start], + vec![true; replace_with.len() / HASHSIZE], ); - self.cache.splice(byte_start..byte_end, replace_with) + self.cache.splice(byte_start..byte_end, replace_with); } pub fn maybe_update_chunk(&mut self, chunk: usize, to: &[u8]) -> Result<(), Error> { diff --git a/eth2/utils/ssz/src/cached_tree_hash/impls.rs b/eth2/utils/ssz/src/cached_tree_hash/impls.rs index 37a3678c2..2d0ab5059 100644 --- a/eth2/utils/ssz/src/cached_tree_hash/impls.rs +++ b/eth2/utils/ssz/src/cached_tree_hash/impls.rs @@ -153,7 +153,6 @@ where // The item didn't exist in the old list and doesn't exist in the new list, // nothing to do. (None, None) => {} - _ => panic!("variable sized lists not implemented"), }; } } diff --git a/eth2/utils/ssz/src/cached_tree_hash/tests.rs b/eth2/utils/ssz/src/cached_tree_hash/tests.rs index 4110e29a1..d48ed9eb8 100644 --- a/eth2/utils/ssz/src/cached_tree_hash/tests.rs +++ b/eth2/utils/ssz/src/cached_tree_hash/tests.rs @@ -473,9 +473,14 @@ fn test_inner_vec_modifications(original: Vec, modified: Vec, refe full_bytes.append(&mut merkle); } + let num_leaves = leaves.len() / HASHSIZE; + let mut expected = merkleize(leaves); expected.splice(3 * HASHSIZE.., full_bytes); - expected.append(&mut vec![0; HASHSIZE]); + + for _ in num_leaves..num_leaves.next_power_of_two() { + expected.append(&mut vec![0; HASHSIZE]); + } // Compare the cached tree to the reference tree. assert_trees_eq(&expected, &modified_cache);