move block contents to api crate, rename blob sidecars list
This commit is contained in:
parent
5887c8fe92
commit
3d99e1f14d
@ -1,12 +1,12 @@
|
|||||||
use lru::LruCache;
|
use lru::LruCache;
|
||||||
use parking_lot::Mutex;
|
use parking_lot::Mutex;
|
||||||
use types::{BlobSidecars, EthSpec, Hash256};
|
use types::{BlobSidecarList, EthSpec, Hash256};
|
||||||
|
|
||||||
pub const DEFAULT_BLOB_CACHE_SIZE: usize = 10;
|
pub const DEFAULT_BLOB_CACHE_SIZE: usize = 10;
|
||||||
|
|
||||||
/// A cache blobs by beacon block root.
|
/// A cache blobs by beacon block root.
|
||||||
pub struct BlobCache<T: EthSpec> {
|
pub struct BlobCache<T: EthSpec> {
|
||||||
blobs: Mutex<LruCache<BlobCacheId, BlobSidecars<T>>>,
|
blobs: Mutex<LruCache<BlobCacheId, BlobSidecarList<T>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Hash, PartialEq, Eq)]
|
#[derive(Hash, PartialEq, Eq)]
|
||||||
@ -21,11 +21,15 @@ impl<T: EthSpec> Default for BlobCache<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<T: EthSpec> BlobCache<T> {
|
impl<T: EthSpec> BlobCache<T> {
|
||||||
pub fn put(&self, beacon_block: Hash256, blobs: BlobSidecars<T>) -> Option<BlobSidecars<T>> {
|
pub fn put(
|
||||||
|
&self,
|
||||||
|
beacon_block: Hash256,
|
||||||
|
blobs: BlobSidecarList<T>,
|
||||||
|
) -> Option<BlobSidecarList<T>> {
|
||||||
self.blobs.lock().put(BlobCacheId(beacon_block), blobs)
|
self.blobs.lock().put(BlobCacheId(beacon_block), blobs)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn pop(&self, root: &Hash256) -> Option<BlobSidecars<T>> {
|
pub fn pop(&self, root: &Hash256) -> Option<BlobSidecarList<T>> {
|
||||||
self.blobs.lock().pop(&BlobCacheId(*root))
|
self.blobs.lock().pop(&BlobCacheId(*root))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
use beacon_chain::{BeaconChain, BeaconChainTypes, BlockProductionError};
|
use beacon_chain::{BeaconChain, BeaconChainTypes, BlockProductionError};
|
||||||
|
use eth2::types::BlockContents;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use types::{
|
use types::{AbstractExecPayload, BeaconBlock, BeaconBlockAndBlobSidecars, ForkName};
|
||||||
AbstractExecPayload, BeaconBlock, BeaconBlockAndBlobSidecars, BlockContents, ForkName,
|
|
||||||
};
|
|
||||||
|
|
||||||
type Error = warp::reject::Rejection;
|
type Error = warp::reject::Rejection;
|
||||||
|
|
||||||
|
@ -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<T: EthSpec, Payload: AbstractExecPayload<T>> {
|
||||||
|
BlockAndBlobSidecars(BeaconBlockAndBlobSidecars<T, Payload>),
|
||||||
|
Block(BeaconBlock<T, Payload>),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: EthSpec, Payload: AbstractExecPayload<T>> BlockContents<T, Payload> {
|
||||||
|
pub fn block(&self) -> &BeaconBlock<T, Payload> {
|
||||||
|
match self {
|
||||||
|
BlockContents::BlockAndBlobSidecars(block_and_sidecars) => &block_and_sidecars.block,
|
||||||
|
BlockContents::Block(block) => block,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn deconstruct(self) -> (BeaconBlock<T, Payload>, Option<BlobSidecarList<T>>) {
|
||||||
|
match self {
|
||||||
|
BlockContents::BlockAndBlobSidecars(block_and_sidecars) => (
|
||||||
|
block_and_sidecars.block,
|
||||||
|
Some(block_and_sidecars.blob_sidecars),
|
||||||
|
),
|
||||||
|
BlockContents::Block(block) => (block, None),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: EthSpec, Payload: AbstractExecPayload<T>> ForkVersionDeserialize
|
||||||
|
for BlockContents<T, Payload>
|
||||||
|
{
|
||||||
|
fn deserialize_by_fork<'de, D: serde::Deserializer<'de>>(
|
||||||
|
value: serde_json::value::Value,
|
||||||
|
fork_name: ForkName,
|
||||||
|
) -> Result<Self, D::Error> {
|
||||||
|
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<T: EthSpec, Payload: AbstractExecPayload<T>> Into<BeaconBlock<T, Payload>>
|
||||||
|
for BlockContents<T, Payload>
|
||||||
|
{
|
||||||
|
fn into(self) -> BeaconBlock<T, Payload> {
|
||||||
|
match self {
|
||||||
|
Self::BlockAndBlobSidecars(block_and_sidecars) => block_and_sidecars.block,
|
||||||
|
Self::Block(block) => block,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -731,17 +731,6 @@ impl<E: EthSpec> From<BeaconBlock<E, FullPayload<E>>>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: EthSpec, Payload: AbstractExecPayload<T>> From<BlockContents<T, Payload>>
|
|
||||||
for BeaconBlock<T, Payload>
|
|
||||||
{
|
|
||||||
fn from(block_contents: BlockContents<T, Payload>) -> Self {
|
|
||||||
match block_contents {
|
|
||||||
BlockContents::BlockAndBlobSidecars(block_and_sidecars) => block_and_sidecars.block,
|
|
||||||
BlockContents::Block(block) => block,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: EthSpec, Payload: AbstractExecPayload<T>> ForkVersionDeserialize
|
impl<T: EthSpec, Payload: AbstractExecPayload<T>> ForkVersionDeserialize
|
||||||
for BeaconBlock<T, Payload>
|
for BeaconBlock<T, Payload>
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
use crate::{
|
use crate::{
|
||||||
AbstractExecPayload, BeaconBlock, BlobSidecars, EthSpec, ForkName, ForkVersionDeserialize,
|
AbstractExecPayload, BeaconBlock, BlobSidecarList, EthSpec, ForkName, ForkVersionDeserialize,
|
||||||
};
|
};
|
||||||
use derivative::Derivative;
|
use derivative::Derivative;
|
||||||
use serde_derive::{Deserialize, Serialize};
|
use serde_derive::{Deserialize, Serialize};
|
||||||
@ -11,7 +11,7 @@ use tree_hash_derive::TreeHash;
|
|||||||
#[serde(bound = "T: EthSpec, Payload: AbstractExecPayload<T>")]
|
#[serde(bound = "T: EthSpec, Payload: AbstractExecPayload<T>")]
|
||||||
pub struct BeaconBlockAndBlobSidecars<T: EthSpec, Payload: AbstractExecPayload<T>> {
|
pub struct BeaconBlockAndBlobSidecars<T: EthSpec, Payload: AbstractExecPayload<T>> {
|
||||||
pub block: BeaconBlock<T, Payload>,
|
pub block: BeaconBlock<T, Payload>,
|
||||||
pub blob_sidecars: BlobSidecars<T>,
|
pub blob_sidecars: BlobSidecarList<T>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: EthSpec, Payload: AbstractExecPayload<T>> ForkVersionDeserialize
|
impl<T: EthSpec, Payload: AbstractExecPayload<T>> ForkVersionDeserialize
|
||||||
@ -25,7 +25,7 @@ impl<T: EthSpec, Payload: AbstractExecPayload<T>> ForkVersionDeserialize
|
|||||||
#[serde(bound = "T: EthSpec")]
|
#[serde(bound = "T: EthSpec")]
|
||||||
struct Helper<T: EthSpec> {
|
struct Helper<T: EthSpec> {
|
||||||
block: serde_json::Value,
|
block: serde_json::Value,
|
||||||
blob_sidecars: BlobSidecars<T>,
|
blob_sidecars: BlobSidecarList<T>,
|
||||||
}
|
}
|
||||||
let helper: Helper<T> = serde_json::from_value(value).map_err(serde::de::Error::custom)?;
|
let helper: Helper<T> = serde_json::from_value(value).map_err(serde::de::Error::custom)?;
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ pub struct BlobSidecar<T: EthSpec> {
|
|||||||
pub kzg_proof: KzgProof,
|
pub kzg_proof: KzgProof,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub type BlobSidecars<T> = VariableList<BlobSidecar<T>, <T as EthSpec>::MaxBlobsPerBlock>;
|
pub type BlobSidecarList<T> = VariableList<BlobSidecar<T>, <T as EthSpec>::MaxBlobsPerBlock>;
|
||||||
|
|
||||||
impl<T: EthSpec> SignedRoot for BlobSidecar<T> {}
|
impl<T: EthSpec> SignedRoot for BlobSidecar<T> {}
|
||||||
|
|
||||||
|
@ -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<T: EthSpec, Payload: AbstractExecPayload<T>> {
|
|
||||||
BlockAndBlobSidecars(BeaconBlockAndBlobSidecars<T, Payload>),
|
|
||||||
Block(BeaconBlock<T, Payload>),
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: EthSpec, Payload: AbstractExecPayload<T>> BlockContents<T, Payload> {
|
|
||||||
pub fn block(&self) -> &BeaconBlock<T, Payload> {
|
|
||||||
match self {
|
|
||||||
BlockContents::BlockAndBlobSidecars(block_and_sidecars) => &block_and_sidecars.block,
|
|
||||||
BlockContents::Block(block) => block,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn deconstruct(self) -> (BeaconBlock<T, Payload>, Option<BlobSidecars<T>>) {
|
|
||||||
match self {
|
|
||||||
BlockContents::BlockAndBlobSidecars(block_and_sidecars) => (
|
|
||||||
block_and_sidecars.block,
|
|
||||||
Some(block_and_sidecars.blob_sidecars),
|
|
||||||
),
|
|
||||||
BlockContents::Block(block) => (block, None),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<T: EthSpec, Payload: AbstractExecPayload<T>> ForkVersionDeserialize
|
|
||||||
for BlockContents<T, Payload>
|
|
||||||
{
|
|
||||||
fn deserialize_by_fork<'de, D: serde::Deserializer<'de>>(
|
|
||||||
value: serde_json::value::Value,
|
|
||||||
fork_name: ForkName,
|
|
||||||
) -> Result<Self, D::Error> {
|
|
||||||
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)?,
|
|
||||||
)),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -102,7 +102,6 @@ pub mod sqlite;
|
|||||||
pub mod beacon_block_and_blob_sidecars;
|
pub mod beacon_block_and_blob_sidecars;
|
||||||
pub mod blob_sidecar;
|
pub mod blob_sidecar;
|
||||||
pub mod blobs_sidecar;
|
pub mod blobs_sidecar;
|
||||||
pub mod block_contents;
|
|
||||||
pub mod signed_blob;
|
pub mod signed_blob;
|
||||||
pub mod signed_block_and_blobs;
|
pub mod signed_block_and_blobs;
|
||||||
pub mod transaction;
|
pub mod transaction;
|
||||||
@ -126,9 +125,8 @@ pub use crate::beacon_block_body::{
|
|||||||
pub use crate::beacon_block_header::BeaconBlockHeader;
|
pub use crate::beacon_block_header::BeaconBlockHeader;
|
||||||
pub use crate::beacon_committee::{BeaconCommittee, OwnedBeaconCommittee};
|
pub use crate::beacon_committee::{BeaconCommittee, OwnedBeaconCommittee};
|
||||||
pub use crate::beacon_state::{BeaconTreeHashCache, Error as BeaconStateError, *};
|
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::blobs_sidecar::{Blobs, BlobsSidecar};
|
||||||
pub use crate::block_contents::BlockContents;
|
|
||||||
pub use crate::bls_to_execution_change::BlsToExecutionChange;
|
pub use crate::bls_to_execution_change::BlsToExecutionChange;
|
||||||
pub use crate::chain_spec::{ChainSpec, Config, Domain};
|
pub use crate::chain_spec::{ChainSpec, Config, Domain};
|
||||||
pub use crate::checkpoint::Checkpoint;
|
pub use crate::checkpoint::Checkpoint;
|
||||||
|
Loading…
Reference in New Issue
Block a user