diff --git a/eth2/utils/bls/src/aggregate_signature.rs b/eth2/utils/bls/src/aggregate_signature.rs index f26bd2db6..0fbcc3493 100644 --- a/eth2/utils/bls/src/aggregate_signature.rs +++ b/eth2/utils/bls/src/aggregate_signature.rs @@ -6,7 +6,7 @@ use serde::de::{Deserialize, Deserializer}; use serde::ser::{Serialize, Serializer}; use serde_hex::{encode as hex_encode, HexVisitor}; use ssz::{decode, Decodable, DecodeError, Encodable, SszStream}; -use tree_hash::impl_tree_hash_for_ssz_bytes; +use tree_hash::tree_hash_ssz_encoding_as_vector; /// A BLS aggregate signature. /// @@ -166,7 +166,7 @@ impl<'de> Deserialize<'de> for AggregateSignature { } } -impl_tree_hash_for_ssz_bytes!(AggregateSignature); +tree_hash_ssz_encoding_as_vector!(AggregateSignature); #[cfg(test)] mod tests { diff --git a/eth2/utils/bls/src/fake_aggregate_signature.rs b/eth2/utils/bls/src/fake_aggregate_signature.rs index 602639b6b..f201eba3e 100644 --- a/eth2/utils/bls/src/fake_aggregate_signature.rs +++ b/eth2/utils/bls/src/fake_aggregate_signature.rs @@ -3,7 +3,7 @@ use serde::de::{Deserialize, Deserializer}; use serde::ser::{Serialize, Serializer}; use serde_hex::{encode as hex_encode, PrefixedHexVisitor}; use ssz::{ssz_encode, Decodable, DecodeError, Encodable, SszStream}; -use tree_hash::impl_tree_hash_for_ssz_bytes; +use tree_hash::tree_hash_ssz_encoding_as_vector; /// A BLS aggregate signature. /// @@ -99,7 +99,7 @@ impl<'de> Deserialize<'de> for FakeAggregateSignature { } } -impl_tree_hash_for_ssz_bytes!(FakeAggregateSignature); +tree_hash_ssz_encoding_as_vector!(FakeAggregateSignature); #[cfg(test)] mod tests { diff --git a/eth2/utils/bls/src/fake_signature.rs b/eth2/utils/bls/src/fake_signature.rs index b07dd66a5..3208ed992 100644 --- a/eth2/utils/bls/src/fake_signature.rs +++ b/eth2/utils/bls/src/fake_signature.rs @@ -4,7 +4,7 @@ use serde::de::{Deserialize, Deserializer}; use serde::ser::{Serialize, Serializer}; use serde_hex::HexVisitor; use ssz::{ssz_encode, Decodable, DecodeError, Encodable, SszStream}; -use tree_hash::impl_tree_hash_for_ssz_bytes; +use tree_hash::tree_hash_ssz_encoding_as_vector; /// A single BLS signature. /// @@ -74,7 +74,7 @@ impl Decodable for FakeSignature { } } -impl_tree_hash_for_ssz_bytes!(FakeSignature); +tree_hash_ssz_encoding_as_vector!(FakeSignature); impl Serialize for FakeSignature { fn serialize(&self, serializer: S) -> Result diff --git a/eth2/utils/bls/src/public_key.rs b/eth2/utils/bls/src/public_key.rs index a553ee888..dcbbc622a 100644 --- a/eth2/utils/bls/src/public_key.rs +++ b/eth2/utils/bls/src/public_key.rs @@ -7,7 +7,7 @@ use ssz::{decode, ssz_encode, Decodable, DecodeError, Encodable, SszStream}; use std::default; use std::fmt; use std::hash::{Hash, Hasher}; -use tree_hash::impl_tree_hash_for_ssz_bytes; +use tree_hash::tree_hash_ssz_encoding_as_vector; /// A single BLS signature. /// @@ -105,7 +105,7 @@ impl<'de> Deserialize<'de> for PublicKey { } } -impl_tree_hash_for_ssz_bytes!(PublicKey); +tree_hash_ssz_encoding_as_vector!(PublicKey); impl PartialEq for PublicKey { fn eq(&self, other: &PublicKey) -> bool { diff --git a/eth2/utils/bls/src/secret_key.rs b/eth2/utils/bls/src/secret_key.rs index 38fd2d379..d1aaa96da 100644 --- a/eth2/utils/bls/src/secret_key.rs +++ b/eth2/utils/bls/src/secret_key.rs @@ -5,7 +5,7 @@ use serde::de::{Deserialize, Deserializer}; use serde::ser::{Serialize, Serializer}; use serde_hex::HexVisitor; use ssz::{decode, ssz_encode, Decodable, DecodeError, Encodable, SszStream}; -use tree_hash::impl_tree_hash_for_ssz_bytes; +use tree_hash::tree_hash_ssz_encoding_as_vector; /// A single BLS signature. /// @@ -70,7 +70,7 @@ impl<'de> Deserialize<'de> for SecretKey { } } -impl_tree_hash_for_ssz_bytes!(SecretKey); +tree_hash_ssz_encoding_as_vector!(SecretKey); #[cfg(test)] mod tests { diff --git a/eth2/utils/bls/src/signature.rs b/eth2/utils/bls/src/signature.rs index cf6c8fe5a..3fb68dc53 100644 --- a/eth2/utils/bls/src/signature.rs +++ b/eth2/utils/bls/src/signature.rs @@ -5,7 +5,7 @@ use serde::de::{Deserialize, Deserializer}; use serde::ser::{Serialize, Serializer}; use serde_hex::HexVisitor; use ssz::{decode, ssz_encode, Decodable, DecodeError, Encodable, SszStream}; -use tree_hash::impl_tree_hash_for_ssz_bytes; +use tree_hash::tree_hash_ssz_encoding_as_vector; /// A single BLS signature. /// @@ -115,7 +115,7 @@ impl Decodable for Signature { } } -impl_tree_hash_for_ssz_bytes!(Signature); +tree_hash_ssz_encoding_as_vector!(Signature); impl Serialize for Signature { /// Serde serialization is compliant the Ethereum YAML test format. diff --git a/eth2/utils/boolean-bitfield/src/lib.rs b/eth2/utils/boolean-bitfield/src/lib.rs index fbd0e2ecd..d35d87c5c 100644 --- a/eth2/utils/boolean-bitfield/src/lib.rs +++ b/eth2/utils/boolean-bitfield/src/lib.rs @@ -9,7 +9,7 @@ use serde_hex::{encode, PrefixedHexVisitor}; use ssz::{Decodable, Encodable}; use std::cmp; use std::default; -use tree_hash::impl_tree_hash_for_ssz_bytes; +use tree_hash::tree_hash_ssz_encoding_as_list; /// A BooleanBitfield represents a set of booleans compactly stored as a vector of bits. /// The BooleanBitfield is given a fixed size during construction. Reads outside of the current size return an out-of-bounds error. Writes outside of the current size expand the size of the set. @@ -257,7 +257,7 @@ impl<'de> Deserialize<'de> for BooleanBitfield { } } -impl_tree_hash_for_ssz_bytes!(BooleanBitfield); +tree_hash_ssz_encoding_as_list!(BooleanBitfield); #[cfg(test)] mod tests { diff --git a/eth2/utils/tree_hash/src/lib.rs b/eth2/utils/tree_hash/src/lib.rs index fd1708a2d..ed60079c8 100644 --- a/eth2/utils/tree_hash/src/lib.rs +++ b/eth2/utils/tree_hash/src/lib.rs @@ -28,7 +28,7 @@ fn num_nodes(num_leaves: usize) -> usize { } #[macro_export] -macro_rules! impl_tree_hash_for_ssz_bytes { +macro_rules! tree_hash_ssz_encoding_as_vector { ($type: ident) => { impl tree_hash::TreeHash for $type { fn tree_hash_type() -> tree_hash::TreeHashType { @@ -49,3 +49,25 @@ macro_rules! impl_tree_hash_for_ssz_bytes { } }; } +#[macro_export] +macro_rules! tree_hash_ssz_encoding_as_list { + ($type: ident) => { + impl tree_hash::TreeHash for $type { + fn tree_hash_type() -> tree_hash::TreeHashType { + tree_hash::TreeHashType::List + } + + fn tree_hash_packed_encoding(&self) -> Vec { + unreachable!("List should never be packed.") + } + + fn tree_hash_packing_factor() -> usize { + unreachable!("List should never be packed.") + } + + fn tree_hash_root(&self) -> Vec { + ssz::ssz_encode(self).tree_hash_root() + } + } + }; +}