From 82eef493f317b7a9b27e6092aa79372e3c07306b Mon Sep 17 00:00:00 2001 From: realbigsean Date: Fri, 28 Oct 2022 10:18:04 -0400 Subject: [PATCH] clean up types --- consensus/tree_hash/src/impls.rs | 21 ++++++- consensus/types/src/blob.rs | 79 ------------------------ consensus/types/src/bls_field_element.rs | 58 ----------------- consensus/types/src/kzg_commitment.rs | 10 ++- consensus/types/src/kzg_proof.rs | 2 +- consensus/types/src/lib.rs | 3 - 6 files changed, 30 insertions(+), 143 deletions(-) delete mode 100644 consensus/types/src/blob.rs delete mode 100644 consensus/types/src/bls_field_element.rs diff --git a/consensus/tree_hash/src/impls.rs b/consensus/tree_hash/src/impls.rs index f27c529186..899356f833 100644 --- a/consensus/tree_hash/src/impls.rs +++ b/consensus/tree_hash/src/impls.rs @@ -81,7 +81,26 @@ macro_rules! impl_for_lt_32byte_u8_array { impl_for_lt_32byte_u8_array!(4); impl_for_lt_32byte_u8_array!(32); -impl_for_lt_32byte_u8_array!(48); + +impl TreeHash for [u8; 48] { + fn tree_hash_type() -> TreeHashType { + TreeHashType::Vector + } + + fn tree_hash_packed_encoding(&self) -> PackedEncoding { + unreachable!("Vector should never be packed.") + } + + fn tree_hash_packing_factor() -> usize { + unreachable!("Vector should never be packed.") + } + + fn tree_hash_root(&self) -> Hash256 { + let values_per_chunk = BYTES_PER_CHUNK; + let minimum_chunk_count = (48 + values_per_chunk - 1) / values_per_chunk; + merkle_root(self, minimum_chunk_count) + } +} impl TreeHash for U128 { fn tree_hash_type() -> TreeHashType { diff --git a/consensus/types/src/blob.rs b/consensus/types/src/blob.rs deleted file mode 100644 index 89e5e8bbe7..0000000000 --- a/consensus/types/src/blob.rs +++ /dev/null @@ -1,79 +0,0 @@ -use crate::bls_field_element::BlsFieldElement; -use crate::test_utils::RngCore; -use crate::test_utils::TestRandom; -use crate::EthSpec; -use serde::{Deserialize, Serialize}; -use ssz::{Decode, DecodeError, Encode}; -use ssz_types::VariableList; -use tree_hash::{PackedEncoding, TreeHash}; - -#[derive(Default, Debug, PartialEq, Hash, Clone, Serialize, Deserialize)] -#[serde(transparent)] -pub struct Blob(pub VariableList); - -impl TestRandom for Blob { - fn random_for_test(rng: &mut impl RngCore) -> Self { - let mut res = Blob(VariableList::empty()); - for _i in 0..4096 { - let slice = ethereum_types::U256([ - rng.next_u64(), - rng.next_u64(), - rng.next_u64(), - rng.next_u64(), - ]); - let elem = BlsFieldElement(slice); - res.0.push(elem); - } - res - } -} - -impl Encode for Blob { - fn is_ssz_fixed_len() -> bool { - as Encode>::is_ssz_fixed_len() - } - - fn ssz_fixed_len() -> usize { - as Encode>::ssz_fixed_len() - } - - fn ssz_bytes_len(&self) -> usize { - self.0.ssz_bytes_len() - } - - fn ssz_append(&self, buf: &mut Vec) { - self.0.ssz_append(buf) - } -} - -impl Decode for Blob { - fn is_ssz_fixed_len() -> bool { - as Decode>::is_ssz_fixed_len() - } - - fn ssz_fixed_len() -> usize { - as Decode>::ssz_fixed_len() - } - - fn from_ssz_bytes(bytes: &[u8]) -> Result { - >::from_ssz_bytes(bytes).map(Self) - } -} - -impl TreeHash for Blob { - fn tree_hash_type() -> tree_hash::TreeHashType { - >::tree_hash_type() - } - - fn tree_hash_packed_encoding(&self) -> PackedEncoding { - self.0.tree_hash_packed_encoding() - } - - fn tree_hash_packing_factor() -> usize { - >::tree_hash_packing_factor() - } - - fn tree_hash_root(&self) -> tree_hash::Hash256 { - self.0.tree_hash_root() - } -} diff --git a/consensus/types/src/bls_field_element.rs b/consensus/types/src/bls_field_element.rs deleted file mode 100644 index 7654f65b36..0000000000 --- a/consensus/types/src/bls_field_element.rs +++ /dev/null @@ -1,58 +0,0 @@ -use crate::Uint256; -use serde::{Deserialize, Serialize}; -use ssz::{Decode, DecodeError, Encode}; -use tree_hash::{PackedEncoding, TreeHash}; - -#[derive(Default, Debug, PartialEq, Hash, Clone, Copy, Serialize, Deserialize)] -#[serde(transparent)] -pub struct BlsFieldElement(pub Uint256); - -impl Encode for BlsFieldElement { - fn is_ssz_fixed_len() -> bool { - ::is_ssz_fixed_len() - } - - fn ssz_fixed_len() -> usize { - ::ssz_fixed_len() - } - - fn ssz_bytes_len(&self) -> usize { - self.0.ssz_bytes_len() - } - - fn ssz_append(&self, buf: &mut Vec) { - self.0.ssz_append(buf) - } -} - -impl Decode for BlsFieldElement { - fn is_ssz_fixed_len() -> bool { - ::is_ssz_fixed_len() - } - - fn ssz_fixed_len() -> usize { - ::ssz_fixed_len() - } - - fn from_ssz_bytes(bytes: &[u8]) -> Result { - ::from_ssz_bytes(bytes).map(Self) - } -} - -impl TreeHash for BlsFieldElement { - fn tree_hash_type() -> tree_hash::TreeHashType { - ::tree_hash_type() - } - - fn tree_hash_packed_encoding(&self) -> PackedEncoding { - self.0.tree_hash_packed_encoding() - } - - fn tree_hash_packing_factor() -> usize { - ::tree_hash_packing_factor() - } - - fn tree_hash_root(&self) -> tree_hash::Hash256 { - self.0.tree_hash_root() - } -} diff --git a/consensus/types/src/kzg_commitment.rs b/consensus/types/src/kzg_commitment.rs index 1fbdb6ca2c..3b9570cd26 100644 --- a/consensus/types/src/kzg_commitment.rs +++ b/consensus/types/src/kzg_commitment.rs @@ -3,12 +3,20 @@ use crate::*; use derivative::Derivative; use serde_derive::{Deserialize, Serialize}; use ssz::{Decode, DecodeError, Encode}; +use std::fmt; +use std::fmt::{Display, Formatter}; use tree_hash::{PackedEncoding, TreeHash}; -//TODO: is there a way around this newtype #[derive(Derivative, Debug, Clone, Serialize, Deserialize)] #[derivative(PartialEq, Eq, Hash)] pub struct KzgCommitment(#[serde(with = "BigArray")] [u8; 48]); + +impl Display for KzgCommitment { + fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result { + write!(f, "{}", eth2_serde_utils::hex::encode(&self.0)) + } +} + impl TreeHash for KzgCommitment { fn tree_hash_type() -> tree_hash::TreeHashType { <[u8; 48] as TreeHash>::tree_hash_type() diff --git a/consensus/types/src/kzg_proof.rs b/consensus/types/src/kzg_proof.rs index cff619ec88..9b917f8e12 100644 --- a/consensus/types/src/kzg_proof.rs +++ b/consensus/types/src/kzg_proof.rs @@ -8,7 +8,7 @@ const KZG_PROOF_BYTES_LEN: usize = 48; #[derive(Debug, PartialEq, Hash, Clone, Copy, Serialize, Deserialize)] #[serde(transparent)] -pub struct KzgProof(#[serde(with = "serde_kzg_proof")] pub [u8; KZG_PROOF_BYTES_LEN]); +pub struct KzgProof(#[serde(with = "BigArray")] pub [u8; KZG_PROOF_BYTES_LEN]); impl fmt::Display for KzgProof { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { diff --git a/consensus/types/src/lib.rs b/consensus/types/src/lib.rs index 66db207730..39ddbf6dee 100644 --- a/consensus/types/src/lib.rs +++ b/consensus/types/src/lib.rs @@ -90,9 +90,7 @@ pub mod slot_data; #[cfg(feature = "sqlite")] pub mod sqlite; -pub mod blob; pub mod blobs_sidecar; -pub mod bls_field_element; pub mod kzg_commitment; pub mod kzg_proof; pub mod signed_blobs_sidecar; @@ -197,7 +195,6 @@ pub type Address = H160; pub type ForkVersion = [u8; 4]; pub type BLSFieldElement = Uint256; pub type Blob = FixedVector::FieldElementsPerBlob>; -pub type Polynomial = VariableList::FieldElementsPerBlob>; pub use bls::{ AggregatePublicKey, AggregateSignature, Keypair, PublicKey, PublicKeyBytes, SecretKey,