From 3d99e1f14dc1b9050d619bbcae154d96fb184f5f Mon Sep 17 00:00:00 2001 From: realbigsean Date: Wed, 15 Mar 2023 12:15:08 -0400 Subject: [PATCH] move block contents to api crate, rename blob sidecars list --- beacon_node/beacon_chain/src/blob_cache.rs | 12 ++-- .../http_api/src/build_block_contents.rs | 5 +- common/eth2/src/types.rs | 60 +++++++++++++++++++ consensus/types/src/beacon_block.rs | 11 ---- .../src/beacon_block_and_blob_sidecars.rs | 6 +- consensus/types/src/blob_sidecar.rs | 2 +- consensus/types/src/block_contents.rs | 56 ----------------- consensus/types/src/lib.rs | 4 +- 8 files changed, 75 insertions(+), 81 deletions(-) delete mode 100644 consensus/types/src/block_contents.rs diff --git a/beacon_node/beacon_chain/src/blob_cache.rs b/beacon_node/beacon_chain/src/blob_cache.rs index e3b0a06b64..64f113c285 100644 --- a/beacon_node/beacon_chain/src/blob_cache.rs +++ b/beacon_node/beacon_chain/src/blob_cache.rs @@ -1,12 +1,12 @@ use lru::LruCache; use parking_lot::Mutex; -use types::{BlobSidecars, EthSpec, Hash256}; +use types::{BlobSidecarList, EthSpec, Hash256}; pub const DEFAULT_BLOB_CACHE_SIZE: usize = 10; /// A cache blobs by beacon block root. pub struct BlobCache { - blobs: Mutex>>, + blobs: Mutex>>, } #[derive(Hash, PartialEq, Eq)] @@ -21,11 +21,15 @@ impl Default for BlobCache { } impl BlobCache { - pub fn put(&self, beacon_block: Hash256, blobs: BlobSidecars) -> Option> { + pub fn put( + &self, + beacon_block: Hash256, + blobs: BlobSidecarList, + ) -> Option> { self.blobs.lock().put(BlobCacheId(beacon_block), blobs) } - pub fn pop(&self, root: &Hash256) -> Option> { + pub fn pop(&self, root: &Hash256) -> Option> { self.blobs.lock().pop(&BlobCacheId(*root)) } } diff --git a/beacon_node/http_api/src/build_block_contents.rs b/beacon_node/http_api/src/build_block_contents.rs index d456c320a6..1908c03ea1 100644 --- a/beacon_node/http_api/src/build_block_contents.rs +++ b/beacon_node/http_api/src/build_block_contents.rs @@ -1,8 +1,7 @@ use beacon_chain::{BeaconChain, BeaconChainTypes, BlockProductionError}; +use eth2::types::BlockContents; use std::sync::Arc; -use types::{ - AbstractExecPayload, BeaconBlock, BeaconBlockAndBlobSidecars, BlockContents, ForkName, -}; +use types::{AbstractExecPayload, BeaconBlock, BeaconBlockAndBlobSidecars, ForkName}; type Error = warp::reject::Rejection; diff --git a/common/eth2/src/types.rs b/common/eth2/src/types.rs index d6db3e15ff..10c5b86f6f 100644 --- a/common/eth2/src/types.rs +++ b/common/eth2/src/types.rs @@ -1259,3 +1259,63 @@ mod tests { ) } } + +/// A wrapper over a [`BeaconBlock`] or a [`BeaconBlockAndBlobSidecars`]. +#[derive(Clone, Debug, Serialize, Deserialize)] +#[serde(untagged)] +#[serde(bound = "T: EthSpec")] +pub enum BlockContents> { + BlockAndBlobSidecars(BeaconBlockAndBlobSidecars), + Block(BeaconBlock), +} + +impl> BlockContents { + pub fn block(&self) -> &BeaconBlock { + match self { + BlockContents::BlockAndBlobSidecars(block_and_sidecars) => &block_and_sidecars.block, + BlockContents::Block(block) => block, + } + } + + pub fn deconstruct(self) -> (BeaconBlock, Option>) { + match self { + BlockContents::BlockAndBlobSidecars(block_and_sidecars) => ( + block_and_sidecars.block, + Some(block_and_sidecars.blob_sidecars), + ), + BlockContents::Block(block) => (block, None), + } + } +} + +impl> ForkVersionDeserialize + for BlockContents +{ + fn deserialize_by_fork<'de, D: serde::Deserializer<'de>>( + value: serde_json::value::Value, + fork_name: ForkName, + ) -> Result { + match fork_name { + ForkName::Base | ForkName::Altair | ForkName::Merge | ForkName::Capella => { + Ok(BlockContents::Block(BeaconBlock::deserialize_by_fork::< + 'de, + D, + >(value, fork_name)?)) + } + ForkName::Eip4844 => Ok(BlockContents::BlockAndBlobSidecars( + BeaconBlockAndBlobSidecars::deserialize_by_fork::<'de, D>(value, fork_name)?, + )), + } + } +} + +impl> Into> + for BlockContents +{ + fn into(self) -> BeaconBlock { + match self { + Self::BlockAndBlobSidecars(block_and_sidecars) => block_and_sidecars.block, + Self::Block(block) => block, + } + } +} diff --git a/consensus/types/src/beacon_block.rs b/consensus/types/src/beacon_block.rs index a929265824..0f26cd0e5e 100644 --- a/consensus/types/src/beacon_block.rs +++ b/consensus/types/src/beacon_block.rs @@ -731,17 +731,6 @@ impl From>> } } -impl> From> - for BeaconBlock -{ - fn from(block_contents: BlockContents) -> Self { - match block_contents { - BlockContents::BlockAndBlobSidecars(block_and_sidecars) => block_and_sidecars.block, - BlockContents::Block(block) => block, - } - } -} - impl> ForkVersionDeserialize for BeaconBlock { diff --git a/consensus/types/src/beacon_block_and_blob_sidecars.rs b/consensus/types/src/beacon_block_and_blob_sidecars.rs index c518f765b1..78e7041961 100644 --- a/consensus/types/src/beacon_block_and_blob_sidecars.rs +++ b/consensus/types/src/beacon_block_and_blob_sidecars.rs @@ -1,5 +1,5 @@ use crate::{ - AbstractExecPayload, BeaconBlock, BlobSidecars, EthSpec, ForkName, ForkVersionDeserialize, + AbstractExecPayload, BeaconBlock, BlobSidecarList, EthSpec, ForkName, ForkVersionDeserialize, }; use derivative::Derivative; use serde_derive::{Deserialize, Serialize}; @@ -11,7 +11,7 @@ use tree_hash_derive::TreeHash; #[serde(bound = "T: EthSpec, Payload: AbstractExecPayload")] pub struct BeaconBlockAndBlobSidecars> { pub block: BeaconBlock, - pub blob_sidecars: BlobSidecars, + pub blob_sidecars: BlobSidecarList, } impl> ForkVersionDeserialize @@ -25,7 +25,7 @@ impl> ForkVersionDeserialize #[serde(bound = "T: EthSpec")] struct Helper { block: serde_json::Value, - blob_sidecars: BlobSidecars, + blob_sidecars: BlobSidecarList, } let helper: Helper = serde_json::from_value(value).map_err(serde::de::Error::custom)?; diff --git a/consensus/types/src/blob_sidecar.rs b/consensus/types/src/blob_sidecar.rs index 251bef0343..169c570d29 100644 --- a/consensus/types/src/blob_sidecar.rs +++ b/consensus/types/src/blob_sidecar.rs @@ -47,7 +47,7 @@ pub struct BlobSidecar { pub kzg_proof: KzgProof, } -pub type BlobSidecars = VariableList, ::MaxBlobsPerBlock>; +pub type BlobSidecarList = VariableList, ::MaxBlobsPerBlock>; impl SignedRoot for BlobSidecar {} diff --git a/consensus/types/src/block_contents.rs b/consensus/types/src/block_contents.rs deleted file mode 100644 index d5a500280c..0000000000 --- a/consensus/types/src/block_contents.rs +++ /dev/null @@ -1,56 +0,0 @@ -use crate::{ - AbstractExecPayload, BeaconBlock, BeaconBlockAndBlobSidecars, BlobSidecars, EthSpec, ForkName, - ForkVersionDeserialize, -}; -use derivative::Derivative; -use serde_derive::{Deserialize, Serialize}; - -/// A wrapper over a [`BeaconBlock`] or a [`BeaconBlockAndBlobSidecars`]. -#[derive(Clone, Debug, Derivative, Serialize, Deserialize)] -#[derivative(PartialEq, Hash(bound = "T: EthSpec"))] -#[serde(untagged)] -#[serde(bound = "T: EthSpec")] -pub enum BlockContents> { - BlockAndBlobSidecars(BeaconBlockAndBlobSidecars), - Block(BeaconBlock), -} - -impl> BlockContents { - pub fn block(&self) -> &BeaconBlock { - match self { - BlockContents::BlockAndBlobSidecars(block_and_sidecars) => &block_and_sidecars.block, - BlockContents::Block(block) => block, - } - } - - pub fn deconstruct(self) -> (BeaconBlock, Option>) { - match self { - BlockContents::BlockAndBlobSidecars(block_and_sidecars) => ( - block_and_sidecars.block, - Some(block_and_sidecars.blob_sidecars), - ), - BlockContents::Block(block) => (block, None), - } - } -} - -impl> ForkVersionDeserialize - for BlockContents -{ - fn deserialize_by_fork<'de, D: serde::Deserializer<'de>>( - value: serde_json::value::Value, - fork_name: ForkName, - ) -> Result { - match fork_name { - ForkName::Base | ForkName::Altair | ForkName::Merge | ForkName::Capella => { - Ok(BlockContents::Block(BeaconBlock::deserialize_by_fork::< - 'de, - D, - >(value, fork_name)?)) - } - ForkName::Eip4844 => Ok(BlockContents::BlockAndBlobSidecars( - BeaconBlockAndBlobSidecars::deserialize_by_fork::<'de, D>(value, fork_name)?, - )), - } - } -} diff --git a/consensus/types/src/lib.rs b/consensus/types/src/lib.rs index 50b9547c9c..fe47454aa2 100644 --- a/consensus/types/src/lib.rs +++ b/consensus/types/src/lib.rs @@ -102,7 +102,6 @@ pub mod sqlite; pub mod beacon_block_and_blob_sidecars; pub mod blob_sidecar; pub mod blobs_sidecar; -pub mod block_contents; pub mod signed_blob; pub mod signed_block_and_blobs; pub mod transaction; @@ -126,9 +125,8 @@ pub use crate::beacon_block_body::{ pub use crate::beacon_block_header::BeaconBlockHeader; pub use crate::beacon_committee::{BeaconCommittee, OwnedBeaconCommittee}; pub use crate::beacon_state::{BeaconTreeHashCache, Error as BeaconStateError, *}; -pub use crate::blob_sidecar::{BlobSidecar, BlobSidecars}; +pub use crate::blob_sidecar::{BlobSidecar, BlobSidecarList}; pub use crate::blobs_sidecar::{Blobs, BlobsSidecar}; -pub use crate::block_contents::BlockContents; pub use crate::bls_to_execution_change::BlsToExecutionChange; pub use crate::chain_spec::{ChainSpec, Config, Domain}; pub use crate::checkpoint::Checkpoint;