- fix pre-merge block production (#3746)

- return `None` on pre-4844 blob requests
This commit is contained in:
realbigsean 2022-11-22 18:10:40 -05:00 committed by GitHub
parent 24e5252a55
commit 0228b2b42d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 22 deletions

View File

@ -3384,13 +3384,15 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
// //
// Wait for the execution layer to return an execution payload (if one is required). // Wait for the execution layer to return an execution payload (if one is required).
let prepare_payload_handle = partial_beacon_block.prepare_payload_handle.take(); let prepare_payload_handle = partial_beacon_block.prepare_payload_handle.take();
let execution_payload = if let Some(prepare_payload_handle) = prepare_payload_handle { let block_contents = if let Some(prepare_payload_handle) = prepare_payload_handle {
Some(
prepare_payload_handle prepare_payload_handle
.await .await
.map_err(BlockProductionError::TokioJoin)? .map_err(BlockProductionError::TokioJoin)?
.ok_or(BlockProductionError::ShuttingDown)?? .ok_or(BlockProductionError::ShuttingDown)??,
)
} else { } else {
return Err(BlockProductionError::MissingExecutionPayload); None
}; };
//FIXME(sean) waiting for the BN<>EE api for this to stabilize //FIXME(sean) waiting for the BN<>EE api for this to stabilize
@ -3405,7 +3407,7 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
move || { move || {
chain.complete_partial_beacon_block( chain.complete_partial_beacon_block(
partial_beacon_block, partial_beacon_block,
execution_payload, block_contents,
kzg_commitments, kzg_commitments,
verification, verification,
) )
@ -3657,7 +3659,7 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
fn complete_partial_beacon_block<Payload: AbstractExecPayload<T::EthSpec>>( fn complete_partial_beacon_block<Payload: AbstractExecPayload<T::EthSpec>>(
&self, &self,
partial_beacon_block: PartialBeaconBlock<T::EthSpec, Payload>, partial_beacon_block: PartialBeaconBlock<T::EthSpec, Payload>,
block_contents: BlockProposalContents<T::EthSpec, Payload>, block_contents: Option<BlockProposalContents<T::EthSpec, Payload>>,
kzg_commitments: Vec<KzgCommitment>, kzg_commitments: Vec<KzgCommitment>,
verification: ProduceBlockVerification, verification: ProduceBlockVerification,
) -> Result<BeaconBlockAndState<T::EthSpec, Payload>, BlockProductionError> { ) -> Result<BeaconBlockAndState<T::EthSpec, Payload>, BlockProductionError> {
@ -3737,6 +3739,7 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
sync_aggregate: sync_aggregate sync_aggregate: sync_aggregate
.ok_or(BlockProductionError::MissingSyncAggregate)?, .ok_or(BlockProductionError::MissingSyncAggregate)?,
execution_payload: block_contents execution_payload: block_contents
.ok_or(BlockProductionError::MissingExecutionPayload)?
.to_payload() .to_payload()
.try_into() .try_into()
.map_err(|_| BlockProductionError::InvalidPayloadFork)?, .map_err(|_| BlockProductionError::InvalidPayloadFork)?,
@ -3759,6 +3762,7 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
sync_aggregate: sync_aggregate sync_aggregate: sync_aggregate
.ok_or(BlockProductionError::MissingSyncAggregate)?, .ok_or(BlockProductionError::MissingSyncAggregate)?,
execution_payload: block_contents execution_payload: block_contents
.ok_or(BlockProductionError::MissingExecutionPayload)?
.to_payload() .to_payload()
.try_into() .try_into()
.map_err(|_| BlockProductionError::InvalidPayloadFork)?, .map_err(|_| BlockProductionError::InvalidPayloadFork)?,
@ -3783,6 +3787,7 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
sync_aggregate: sync_aggregate sync_aggregate: sync_aggregate
.ok_or(BlockProductionError::MissingSyncAggregate)?, .ok_or(BlockProductionError::MissingSyncAggregate)?,
execution_payload: block_contents execution_payload: block_contents
.ok_or(BlockProductionError::MissingExecutionPayload)?
.to_payload() .to_payload()
.try_into() .try_into()
.map_err(|_| BlockProductionError::InvalidPayloadFork)?, .map_err(|_| BlockProductionError::InvalidPayloadFork)?,

View File

@ -959,11 +959,11 @@ impl<T: EthSpec> ExecutionLayer<T> {
}; };
let blob_fut = async { let blob_fut = async {
//FIXME(sean) do a fork check here and return None otherwise match current_fork {
// ^ ForkName::Base | ForkName::Altair | ForkName::Merge | ForkName::Capella => {
// well now we have the fork in this function so None
// it should be easier to do that now }
// - Mark ForkName::Eip4844 => {
debug!( debug!(
self.log(), self.log(),
"Issuing engine_getBlobsBundle"; "Issuing engine_getBlobsBundle";
@ -973,6 +973,8 @@ impl<T: EthSpec> ExecutionLayer<T> {
"parent_hash" => ?parent_hash, "parent_hash" => ?parent_hash,
); );
Some(engine.api.get_blobs_bundle_v1::<T>(payload_id).await) Some(engine.api.get_blobs_bundle_v1::<T>(payload_id).await)
}
}
}; };
let payload_fut = async { let payload_fut = async {
debug!( debug!(