From 5f9e93d3386367b348d1c94d7d95e2dd7d7406c0 Mon Sep 17 00:00:00 2001 From: Johns Beharry Date: Sun, 24 Feb 2019 04:57:12 -0400 Subject: [PATCH] chore(merkle_root): split function to it's own file Signed-off-by: Johns Beharry --- eth2/utils/hashing/src/lib.rs | 35 ----------------------- eth2/utils/hashing/src/merkle_root.rs | 41 +++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 35 deletions(-) create mode 100644 eth2/utils/hashing/src/merkle_root.rs diff --git a/eth2/utils/hashing/src/lib.rs b/eth2/utils/hashing/src/lib.rs index a342a2c33..b2bd5a279 100644 --- a/eth2/utils/hashing/src/lib.rs +++ b/eth2/utils/hashing/src/lib.rs @@ -8,22 +8,6 @@ pub fn hash(input: &[u8]) -> Vec { result } -pub fn merkle_root(values: &[Vec]) -> Vec { - let values_len = values.len(); - let mut o: Vec> = vec![vec![0]; values_len]; - - o.append(&mut values.to_vec()); - - for i in (0..values_len).rev() { - let mut current_value: Vec = o[i * 2].clone(); - current_value.append(&mut o[i * 2 + 1].clone()); - - o[i] = hash(¤t_value[..]); - } - - o[1].clone() -} - #[cfg(test)] mod tests { use super::*; @@ -41,23 +25,4 @@ mod tests { ]; assert_eq!(expected, output.as_slice()); } - - #[test] - fn test_merkle_root() { - let input = vec![ - "a".as_bytes().to_vec(), - "b".as_bytes().to_vec(), - "c".as_bytes().to_vec(), - "d".as_bytes().to_vec() - ]; - - let output = merkle_root(&input[..]); - - // merkle root of [[a],[b],[c],[d]] - let expected = &[ - 183, 91, 96, 122, 144, 174, 84, 92, 97, 156, 140, 192, 66, 221, 55, 229, - 234, 48, 118, 7, 61, 207, 39, 125, 150, 32, 94, 90, 19, 88, 122, 163, - ]; - assert_eq!(expected, output.as_slice()); - } } diff --git a/eth2/utils/hashing/src/merkle_root.rs b/eth2/utils/hashing/src/merkle_root.rs new file mode 100644 index 000000000..6c11d9d80 --- /dev/null +++ b/eth2/utils/hashing/src/merkle_root.rs @@ -0,0 +1,41 @@ +use crate::hash; + +pub fn merkle_root(values: &[Vec]) -> Vec { + let values_len = values.len(); + let mut o: Vec> = vec![vec![0]; values_len]; + + o.append(&mut values.to_vec()); + + for i in (0..values_len).rev() { + let mut current_value: Vec = o[i * 2].clone(); + current_value.append(&mut o[i * 2 + 1].clone()); + + o[i] = hash(¤t_value[..]); + } + + o[1].clone() +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_merkle_root() { + let input = vec![ + "a".as_bytes().to_vec(), + "b".as_bytes().to_vec(), + "c".as_bytes().to_vec(), + "d".as_bytes().to_vec() + ]; + + let output = merkle_root(&input[..]); + + // merkle root of [[a],[b],[c],[d]] + let expected = &[ + 183, 91, 96, 122, 144, 174, 84, 92, 97, 156, 140, 192, 66, 221, 55, 229, + 234, 48, 118, 7, 61, 207, 39, 125, 150, 32, 94, 90, 19, 88, 122, 163, + ]; + assert_eq!(expected, output.as_slice()); + } +}