diff --git a/finality-client/libs/ssz-rs/ssz-rs-derive/src/lib.rs b/finality-client/libs/ssz-rs/ssz-rs-derive/src/lib.rs index d38e109..8abdeb0 100644 --- a/finality-client/libs/ssz-rs/ssz-rs-derive/src/lib.rs +++ b/finality-client/libs/ssz-rs/ssz-rs-derive/src/lib.rs @@ -180,7 +180,7 @@ fn derive_deserialize_impl(data: &Data) -> TokenStream { Ok(container) } - }; + } } _ => unimplemented!( "this type of struct is currently not supported by this derive macro" @@ -469,12 +469,9 @@ fn derive_treeify_impl(data: &Data) -> TokenStream { quote_spanned! { variant.span() => Self::#variant_name(value) => { let mut tree = value.to_merkle_tree()?; - let selector = #i; let data_root = value.hash_tree_root()?; tree.push(ssz_rs::__internal::mix_in_selector_tree(&data_root, selector)); - - Ok(tree) } } diff --git a/finality-client/libs/ssz-rs/ssz-rs/examples/container_with_some_types.rs b/finality-client/libs/ssz-rs/ssz-rs/examples/container_with_some_types.rs index 1ffd586..6e6f5c7 100644 --- a/finality-client/libs/ssz-rs/ssz-rs/examples/container_with_some_types.rs +++ b/finality-client/libs/ssz-rs/ssz-rs/examples/container_with_some_types.rs @@ -50,7 +50,7 @@ fn main() { Ok(encoding) => encoding, Err(err) => { eprintln!("some error encoding: {err}"); - return; + return } }; @@ -58,7 +58,7 @@ fn main() { Ok(value) => value, Err(err) => { eprintln!("some error decoding: {err}"); - return; + return } }; diff --git a/finality-client/libs/ssz-rs/ssz-rs/src/array.rs b/finality-client/libs/ssz-rs/ssz-rs/src/array.rs index b5c1e94..c61f4b8 100644 --- a/finality-client/libs/ssz-rs/ssz-rs/src/array.rs +++ b/finality-client/libs/ssz-rs/ssz-rs/src/array.rs @@ -35,7 +35,7 @@ macro_rules! define_ssz_for_array_of_size { { fn serialize(&self, buffer: &mut Vec) -> Result { if $n == 0 { - return Err(TypeError::InvalidBound($n).into()); + return Err(TypeError::InvalidBound($n).into()) } serialize_composite(self, buffer) } @@ -47,7 +47,7 @@ macro_rules! define_ssz_for_array_of_size { { fn deserialize(encoding: &[u8]) -> Result { if $n == 0 { - return Err(TypeError::InvalidBound($n).into()); + return Err(TypeError::InvalidBound($n).into()) } if !T::is_variable_size() { @@ -56,13 +56,13 @@ macro_rules! define_ssz_for_array_of_size { return Err(DeserializeError::ExpectedFurtherInput { provided: encoding.len(), expected: expected_length, - }); + }) } if encoding.len() > expected_length { return Err(DeserializeError::AdditionalInput { provided: encoding.len(), expected: expected_length, - }); + }) } } let elements = deserialize_homogeneous_composite(encoding)?; diff --git a/finality-client/libs/ssz-rs/ssz-rs/src/bitlist.rs b/finality-client/libs/ssz-rs/ssz-rs/src/bitlist.rs index fc68653..df35908 100644 --- a/finality-client/libs/ssz-rs/ssz-rs/src/bitlist.rs +++ b/finality-client/libs/ssz-rs/ssz-rs/src/bitlist.rs @@ -98,7 +98,7 @@ impl Bitlist { with_length_bit: bool, ) -> Result { if self.len() > N { - return Err(InstanceError::Bounded { bound: N, provided: self.len() }.into()); + return Err(InstanceError::Bounded { bound: N, provided: self.len() }.into()) } let start_len = buffer.len(); buffer.extend_from_slice(self.as_raw_slice()); @@ -151,14 +151,14 @@ impl Deserialize for Bitlist { fn deserialize(encoding: &[u8]) -> Result { let max_len = byte_length(N); if encoding.is_empty() { - return Err(DeserializeError::ExpectedFurtherInput { provided: 0, expected: max_len }); + return Err(DeserializeError::ExpectedFurtherInput { provided: 0, expected: max_len }) } if encoding.len() > max_len { return Err(DeserializeError::AdditionalInput { provided: encoding.len(), expected: max_len, - }); + }) } let (last_byte, prefix) = encoding.split_last().unwrap(); @@ -167,7 +167,7 @@ impl Deserialize for Bitlist { let high_bit_index = 8 - last.trailing_zeros(); if !last[high_bit_index - 1] { - return Err(DeserializeError::InvalidByte(*last_byte)); + return Err(DeserializeError::InvalidByte(*last_byte)) } for bit in last.iter().take(high_bit_index - 1) { @@ -175,7 +175,7 @@ impl Deserialize for Bitlist { } // TODO: this seems redundant... if result.len() > N { - return Err(InstanceError::Bounded { bound: N, provided: result.len() }.into()); + return Err(InstanceError::Bounded { bound: N, provided: result.len() }.into()) } Ok(Self(result)) } diff --git a/finality-client/libs/ssz-rs/ssz-rs/src/bitvector.rs b/finality-client/libs/ssz-rs/ssz-rs/src/bitvector.rs index b43c9d9..c43be5f 100644 --- a/finality-client/libs/ssz-rs/ssz-rs/src/bitvector.rs +++ b/finality-client/libs/ssz-rs/ssz-rs/src/bitvector.rs @@ -127,7 +127,7 @@ impl Sized for Bitvector { impl Serialize for Bitvector { fn serialize(&self, buffer: &mut Vec) -> Result { if N == 0 { - return Err(TypeError::InvalidBound(N).into()); + return Err(TypeError::InvalidBound(N).into()) } let bytes_to_write = Self::size_hint(); buffer.reserve(bytes_to_write); @@ -141,7 +141,7 @@ impl Serialize for Bitvector { impl Deserialize for Bitvector { fn deserialize(encoding: &[u8]) -> Result { if N == 0 { - return Err(TypeError::InvalidBound(N).into()); + return Err(TypeError::InvalidBound(N).into()) } let expected_length = byte_length(N); @@ -149,13 +149,13 @@ impl Deserialize for Bitvector { return Err(DeserializeError::ExpectedFurtherInput { provided: encoding.len(), expected: expected_length, - }); + }) } if encoding.len() > expected_length { return Err(DeserializeError::AdditionalInput { provided: encoding.len(), expected: expected_length, - }); + }) } let mut result = Self::default(); @@ -167,7 +167,7 @@ impl Deserialize for Bitvector { let last_byte = encoding.last().unwrap(); let remainder_bits = last_byte >> remainder_count; if remainder_bits != 0 { - return Err(DeserializeError::InvalidByte(*last_byte)); + return Err(DeserializeError::InvalidByte(*last_byte)) } } Ok(result) diff --git a/finality-client/libs/ssz-rs/ssz-rs/src/de.rs b/finality-client/libs/ssz-rs/ssz-rs/src/de.rs index c2ec8b5..3763560 100644 --- a/finality-client/libs/ssz-rs/ssz-rs/src/de.rs +++ b/finality-client/libs/ssz-rs/ssz-rs/src/de.rs @@ -59,7 +59,7 @@ where return Err(DeserializeError::AdditionalInput { provided: encoding.len(), expected: encoding.len() - remainder, - }); + }) } let mut elements = vec![]; @@ -77,7 +77,7 @@ where T: SimpleSerialize, { if encoding.is_empty() { - return Ok(vec![]); + return Ok(vec![]) } let data_pointer = u32::deserialize(&encoding[..BYTES_PER_LENGTH_OFFSET])?; @@ -86,7 +86,7 @@ where return Err(DeserializeError::ExpectedFurtherInput { provided: encoding.len(), expected: data_pointer, - }); + }) } let offsets = &mut encoding[..data_pointer] diff --git a/finality-client/libs/ssz-rs/ssz-rs/src/lib.rs b/finality-client/libs/ssz-rs/ssz-rs/src/lib.rs index e0dd590..7b44dad 100644 --- a/finality-client/libs/ssz-rs/ssz-rs/src/lib.rs +++ b/finality-client/libs/ssz-rs/ssz-rs/src/lib.rs @@ -26,7 +26,7 @@ pub use crate::{ de::{Deserialize, DeserializeError}, error::{Error as SimpleSerializeError, InstanceError, TypeError}, list::List, - merkleization::{is_valid_merkle_branch, compute_proof, MerkleizationError, Merkleized, Node}, + merkleization::{compute_proof, is_valid_merkle_branch, MerkleizationError, Merkleized, Node}, ser::{Serialize, SerializeError}, uint::U256, utils::{deserialize, serialize}, diff --git a/finality-client/libs/ssz-rs/ssz-rs/src/list.rs b/finality-client/libs/ssz-rs/ssz-rs/src/list.rs index 73f093e..0428952 100644 --- a/finality-client/libs/ssz-rs/ssz-rs/src/list.rs +++ b/finality-client/libs/ssz-rs/ssz-rs/src/list.rs @@ -188,7 +188,7 @@ where { fn serialize(&self, buffer: &mut Vec) -> Result { if self.len() > N { - return Err(InstanceError::Bounded { bound: N, provided: self.len() }.into()); + return Err(InstanceError::Bounded { bound: N, provided: self.len() }.into()) } serialize_composite(&self.data, buffer) } @@ -201,7 +201,7 @@ where fn deserialize(encoding: &[u8]) -> Result { let result = deserialize_homogeneous_composite(encoding)?; if result.len() > N { - return Err(InstanceError::Bounded { bound: N, provided: result.len() }.into()); + return Err(InstanceError::Bounded { bound: N, provided: result.len() }.into()) } let result = result.try_into().map_err(|(_, err)| match err { Error::Instance(err) => DeserializeError::InvalidInstance(err), diff --git a/finality-client/libs/ssz-rs/ssz-rs/src/merkleization/mod.rs b/finality-client/libs/ssz-rs/ssz-rs/src/merkleization/mod.rs index a0ab47c..adf141b 100644 --- a/finality-client/libs/ssz-rs/ssz-rs/src/merkleization/mod.rs +++ b/finality-client/libs/ssz-rs/ssz-rs/src/merkleization/mod.rs @@ -10,7 +10,7 @@ use sha2::{Digest, Sha256}; pub use cache::Cache as MerkleCache; pub use node::Node; -pub use proofs::{is_valid_merkle_branch, compute_proof}; +pub use proofs::{compute_proof, is_valid_merkle_branch}; pub(crate) const BYTES_PER_CHUNK: usize = 32; @@ -118,7 +118,7 @@ fn merkleize_chunks_with_virtual_padding( if chunk_count == 0 { let depth = height - 1; - return Ok(CONTEXT[depth as usize].try_into().expect("can produce a single root chunk")); + return Ok(CONTEXT[depth as usize].try_into().expect("can produce a single root chunk")) } let mut layer = chunks.to_vec(); @@ -193,7 +193,7 @@ fn treeify_chunks_with_virtual_padding( let mut ret = vec![]; if chunk_count == 0 { - return Ok(ret); + return Ok(ret) } let mut layer = chunks.to_vec(); @@ -281,7 +281,7 @@ pub fn merkleize(chunks: &[u8], limit: Option) -> Result( value == *root } -// only use this method for very small trees. It is extremely inefficient and holds the whole tree in memory (and clones it :()) -pub fn compute_proof(root: &Node, gindex: usize, tree: &[([u8; 32], [u8; 64])]) -> Result, MerkleizationError> { - let tree_map: HashMap<[u8; 32], [u8; 64]> = tree.iter().cloned().collect(); - let root: [u8;32] = root.as_ref().try_into().unwrap(); - let (_, proof): (_, Vec<[u8;32]>) = gindex +// only use this method for very small trees. It is extremely inefficient and holds the whole tree +// in memory (and clones it :()) +pub fn compute_proof( + root: &Node, + gindex: usize, + tree: &[([u8; 32], [u8; 64])], +) -> Result, MerkleizationError> { + let tree_map: HashMap<[u8; 32], [u8; 64]> = tree.iter().cloned().collect(); + let root: [u8; 32] = root.as_ref().try_into().unwrap(); + let (_, proof): (_, Vec<[u8; 32]>) = gindex .view_bits::() .iter() .skip_while(|b| b.as_ref() == &false) // skip the leading zeros .skip(1) // skip the first 1, this just indicates the root .try_fold((root, vec![]), |(hash, mut proof), direction| { let leaves = tree_map.get(hash.as_ref()).ok_or(MerkleizationError::MissingNode)?; - let mut left = [0_u8;32]; - let mut right = [0_u8;32]; + let mut left = [0_u8; 32]; + let mut right = [0_u8; 32]; left.copy_from_slice(&leaves[0..32]); right.copy_from_slice(&leaves[32..64]); match direction.as_ref() { - false => { // left + false => { + // left proof.insert(0, right.try_into().unwrap()); Ok::<_, MerkleizationError>((left, proof)) } - true => { //right + true => { + //right proof.insert(0, left.try_into().unwrap()); Ok((right, proof)) } diff --git a/finality-client/libs/ssz-rs/ssz-rs/src/ser.rs b/finality-client/libs/ssz-rs/ssz-rs/src/ser.rs index 8ee62d9..58f7916 100644 --- a/finality-client/libs/ssz-rs/ssz-rs/src/ser.rs +++ b/finality-client/libs/ssz-rs/ssz-rs/src/ser.rs @@ -58,7 +58,7 @@ pub fn serialize_composite_from_components( ) -> Result { let total_size = fixed_lengths_sum + variable_lengths.iter().sum::(); if total_size as u64 >= MAXIMUM_LENGTH { - return Err(SerializeError::MaximumEncodedLengthExceeded(total_size)); + return Err(SerializeError::MaximumEncodedLengthExceeded(total_size)) } let mut total_bytes_written = 0; diff --git a/finality-client/libs/ssz-rs/ssz-rs/src/uint.rs b/finality-client/libs/ssz-rs/ssz-rs/src/uint.rs index 5ae0c0a..775f2df 100644 --- a/finality-client/libs/ssz-rs/ssz-rs/src/uint.rs +++ b/finality-client/libs/ssz-rs/ssz-rs/src/uint.rs @@ -33,13 +33,13 @@ macro_rules! define_uint { return Err(DeserializeError::ExpectedFurtherInput { provided: encoding.len(), expected: byte_size, - }); + }) } if encoding.len() > byte_size { return Err(DeserializeError::AdditionalInput { provided: encoding.len(), expected: byte_size, - }); + }) } let bytes = encoding[..byte_size].try_into().expect("slice has right length"); @@ -155,13 +155,13 @@ impl Deserialize for U256 { return Err(DeserializeError::ExpectedFurtherInput { provided: encoding.len(), expected: byte_size, - }); + }) } if encoding.len() > byte_size { return Err(DeserializeError::AdditionalInput { provided: encoding.len(), expected: byte_size, - }); + }) } let value = BigUint::from_bytes_le(&encoding[..byte_size]); diff --git a/finality-client/libs/ssz-rs/ssz-rs/src/union.rs b/finality-client/libs/ssz-rs/ssz-rs/src/union.rs index 0a6cb48..9db1b75 100644 --- a/finality-client/libs/ssz-rs/ssz-rs/src/union.rs +++ b/finality-client/libs/ssz-rs/ssz-rs/src/union.rs @@ -44,7 +44,7 @@ where { fn deserialize(encoding: &[u8]) -> Result { if encoding.is_empty() { - return Err(DeserializeError::ExpectedFurtherInput { provided: 0, expected: 1 }); + return Err(DeserializeError::ExpectedFurtherInput { provided: 0, expected: 1 }) } match encoding[0] { diff --git a/finality-client/libs/ssz-rs/ssz-rs/src/vector.rs b/finality-client/libs/ssz-rs/ssz-rs/src/vector.rs index 6112bb9..eea035b 100644 --- a/finality-client/libs/ssz-rs/ssz-rs/src/vector.rs +++ b/finality-client/libs/ssz-rs/ssz-rs/src/vector.rs @@ -89,7 +89,7 @@ impl TryFrom> for Vector { fn try_from(data: Vec) -> Result { if N == 0 { - return Err((data, Error::Type(TypeError::InvalidBound(N)))); + return Err((data, Error::Type(TypeError::InvalidBound(N)))) } if data.len() != N { let len = data.len(); @@ -187,7 +187,7 @@ where { fn serialize(&self, buffer: &mut Vec) -> Result { if N == 0 { - return Err(TypeError::InvalidBound(N).into()); + return Err(TypeError::InvalidBound(N).into()) } serialize_composite(&self.data, buffer) } @@ -199,7 +199,7 @@ where { fn deserialize(encoding: &[u8]) -> Result { if N == 0 { - return Err(TypeError::InvalidBound(N).into()); + return Err(TypeError::InvalidBound(N).into()) } if !T::is_variable_size() { let expected_length = N * T::size_hint(); @@ -207,13 +207,13 @@ where return Err(DeserializeError::ExpectedFurtherInput { provided: encoding.len(), expected: expected_length, - }); + }) } if encoding.len() > expected_length { return Err(DeserializeError::AdditionalInput { provided: encoding.len(), expected: expected_length, - }); + }) } } let inner = deserialize_homogeneous_composite(encoding)?;