mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-16 03:12:41 +00:00
* Add Deneb builder flow types with generics * Update validator client `get_blinded_blocks` call to support Deneb * `produceBlindedBlock` endpoint updates: - Handle new Deneb BuilderBid response from builder endpoint (new BlindedBlobsBundle type) - Build BlockContents response (containing kzg_commitments, proof and blinded_blob_sidecars) * Appease Clippy lint * Partial implementation of submit blinded block & blobs. Refactor existing `BlobSidecar` related types to support blinded blobs. * Add associated types for BlockProposal * Rename `AbstractSidecar` to `Sidecar` * Remove blob cache as it's no longer necessary * Remove unnecessary enum variant * Clean up * Hanlde unblinded blobs and publish full block contents * Fix tests * Add local EL blobs caching in blinded flow * Remove BlockProposal and move associated Sidecar trait to AbstractExecPayload to simplify changes * add blob roots associated type * move raw blobs associated type to sidecar trait * Fix todos and improve error handling * Consolidate BlobsBundle from `execution_layer` into `consensus/types` * Rename RawBlobs, Blobs, and BlobRoots * Use `BlobRoots` type alias * Update error message. Co-authored-by: realbigsean <seananderson33@GMAIL.com> * update builder bid type # Conflicts: # consensus/types/src/builder_bid.rs * Fix lint * remove generic from builder bid --------- Co-authored-by: realbigsean <seananderson33@gmail.com>
63 lines
2.2 KiB
Rust
63 lines
2.2 KiB
Rust
use beacon_chain::BlockProductionError;
|
|
use eth2::types::{BeaconBlockAndBlobSidecars, BlindedBeaconBlockAndBlobSidecars, BlockContents};
|
|
use types::{
|
|
BeaconBlock, BlindedBlobSidecarList, BlindedPayload, BlobSidecarList, EthSpec, ForkName,
|
|
FullPayload,
|
|
};
|
|
|
|
type Error = warp::reject::Rejection;
|
|
type FullBlockContents<E> = BlockContents<E, FullPayload<E>>;
|
|
type BlindedBlockContents<E> = BlockContents<E, BlindedPayload<E>>;
|
|
|
|
pub fn build_block_contents<E: EthSpec>(
|
|
fork_name: ForkName,
|
|
block: BeaconBlock<E, FullPayload<E>>,
|
|
maybe_blobs: Option<BlobSidecarList<E>>,
|
|
) -> Result<FullBlockContents<E>, Error> {
|
|
match fork_name {
|
|
ForkName::Base | ForkName::Altair | ForkName::Merge | ForkName::Capella => {
|
|
Ok(BlockContents::Block(block))
|
|
}
|
|
ForkName::Deneb => {
|
|
if let Some(blob_sidecars) = maybe_blobs {
|
|
let block_and_blobs = BeaconBlockAndBlobSidecars {
|
|
block,
|
|
blob_sidecars,
|
|
};
|
|
|
|
Ok(BlockContents::BlockAndBlobSidecars(block_and_blobs))
|
|
} else {
|
|
Err(warp_utils::reject::block_production_error(
|
|
BlockProductionError::MissingBlobs,
|
|
))
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
pub fn build_blinded_block_contents<E: EthSpec>(
|
|
fork_name: ForkName,
|
|
block: BeaconBlock<E, BlindedPayload<E>>,
|
|
maybe_blobs: Option<BlindedBlobSidecarList<E>>,
|
|
) -> Result<BlindedBlockContents<E>, Error> {
|
|
match fork_name {
|
|
ForkName::Base | ForkName::Altair | ForkName::Merge | ForkName::Capella => {
|
|
Ok(BlockContents::Block(block))
|
|
}
|
|
ForkName::Deneb => {
|
|
if let Some(blinded_blob_sidecars) = maybe_blobs {
|
|
let block_and_blobs = BlindedBeaconBlockAndBlobSidecars {
|
|
blinded_block: block,
|
|
blinded_blob_sidecars,
|
|
};
|
|
|
|
Ok(BlockContents::BlindedBlockAndBlobSidecars(block_and_blobs))
|
|
} else {
|
|
Err(warp_utils::reject::block_production_error(
|
|
BlockProductionError::MissingBlobs,
|
|
))
|
|
}
|
|
}
|
|
}
|
|
}
|