mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-10 04:01:51 +00:00
BeaconBlockBody updates per eip-7732
This commit is contained in:
@@ -177,7 +177,7 @@ impl<'a, E: EthSpec> TryFrom<BeaconBlockRef<'a, E>> for NewPayloadRequest<'a, E>
|
||||
|
||||
fn try_from(block: BeaconBlockRef<'a, E>) -> Result<Self, Self::Error> {
|
||||
match block {
|
||||
BeaconBlockRef::Base(_) | BeaconBlockRef::Altair(_) => {
|
||||
BeaconBlockRef::Base(_) | BeaconBlockRef::Altair(_) | BeaconBlockRef::Gloas(_) => {
|
||||
Err(Self::Error::IncorrectStateVariant)
|
||||
}
|
||||
BeaconBlockRef::Bellatrix(block_ref) => {
|
||||
@@ -220,17 +220,6 @@ impl<'a, E: EthSpec> TryFrom<BeaconBlockRef<'a, E>> for NewPayloadRequest<'a, E>
|
||||
parent_beacon_block_root: block_ref.parent_root,
|
||||
execution_requests: &block_ref.body.execution_requests,
|
||||
})),
|
||||
BeaconBlockRef::Gloas(block_ref) => Ok(Self::Gloas(NewPayloadRequestGloas {
|
||||
execution_payload: &block_ref.body.execution_payload.execution_payload,
|
||||
versioned_hashes: block_ref
|
||||
.body
|
||||
.blob_kzg_commitments
|
||||
.iter()
|
||||
.map(kzg_commitment_to_versioned_hash)
|
||||
.collect(),
|
||||
parent_beacon_block_root: block_ref.parent_root,
|
||||
execution_requests: &block_ref.body.execution_requests,
|
||||
})),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,7 +51,7 @@ use types::non_zero_usize::new_non_zero_usize;
|
||||
use types::payload::BlockProductionVersion;
|
||||
use types::{
|
||||
AbstractExecPayload, BlobsList, ExecutionPayloadDeneb, ExecutionRequests, KzgProofs,
|
||||
SignedBlindedBeaconBlock,
|
||||
PayloadAttestation, SignedBlindedBeaconBlock, SignedExecutionBid,
|
||||
};
|
||||
use types::{
|
||||
BeaconStateError, BlindedPayload, ChainSpec, Epoch, ExecPayload, ExecutionPayloadBellatrix,
|
||||
@@ -219,6 +219,11 @@ pub enum BlockProposalContents<E: EthSpec, Payload: AbstractExecPayload<E>> {
|
||||
// See: https://github.com/sigp/lighthouse/issues/6981
|
||||
requests: Option<ExecutionRequests<E>>,
|
||||
},
|
||||
/// EIP-7732: Execution bid and payload attestations for Gloas fork
|
||||
BidAndPayloadAttestations {
|
||||
signed_execution_bid: SignedExecutionBid,
|
||||
payload_attestations: VariableList<PayloadAttestation<E>, E::MaxPayloadAttestations>,
|
||||
},
|
||||
}
|
||||
|
||||
impl<E: EthSpec> From<BlockProposalContents<E, FullPayload<E>>>
|
||||
@@ -246,6 +251,13 @@ impl<E: EthSpec> From<BlockProposalContents<E, FullPayload<E>>>
|
||||
blobs_and_proofs: None,
|
||||
requests,
|
||||
},
|
||||
BlockProposalContents::BidAndPayloadAttestations {
|
||||
signed_execution_bid,
|
||||
payload_attestations,
|
||||
} => BlockProposalContents::BidAndPayloadAttestations {
|
||||
signed_execution_bid,
|
||||
payload_attestations,
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -313,6 +325,28 @@ impl<E: EthSpec, Payload: AbstractExecPayload<E>> BlockProposalContents<E, Paylo
|
||||
requests,
|
||||
block_value,
|
||||
),
|
||||
Self::BidAndPayloadAttestations { .. } => {
|
||||
panic!("Cannot deconstruct BidAndPayloadAttestations variant into execution payload components")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Extract execution bid data for EIP-7732 Gloas blocks
|
||||
pub fn into_execution_bid(
|
||||
self,
|
||||
) -> Result<
|
||||
(
|
||||
SignedExecutionBid,
|
||||
VariableList<PayloadAttestation<E>, E::MaxPayloadAttestations>,
|
||||
),
|
||||
&'static str,
|
||||
> {
|
||||
match self {
|
||||
Self::BidAndPayloadAttestations {
|
||||
signed_execution_bid,
|
||||
payload_attestations,
|
||||
} => Ok((signed_execution_bid, payload_attestations)),
|
||||
_ => Err("Cannot extract execution bid from non-BidAndPayloadAttestations variant"),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -320,18 +354,27 @@ impl<E: EthSpec, Payload: AbstractExecPayload<E>> BlockProposalContents<E, Paylo
|
||||
match self {
|
||||
Self::Payload { payload, .. } => payload,
|
||||
Self::PayloadAndBlobs { payload, .. } => payload,
|
||||
Self::BidAndPayloadAttestations { .. } => {
|
||||
panic!("BidAndPayloadAttestations variant does not contain execution payload")
|
||||
}
|
||||
}
|
||||
}
|
||||
pub fn to_payload(self) -> Payload {
|
||||
match self {
|
||||
Self::Payload { payload, .. } => payload,
|
||||
Self::PayloadAndBlobs { payload, .. } => payload,
|
||||
Self::BidAndPayloadAttestations { .. } => {
|
||||
panic!("BidAndPayloadAttestations variant does not contain execution payload")
|
||||
}
|
||||
}
|
||||
}
|
||||
pub fn block_value(&self) -> &Uint256 {
|
||||
match self {
|
||||
Self::Payload { block_value, .. } => block_value,
|
||||
Self::PayloadAndBlobs { block_value, .. } => block_value,
|
||||
Self::BidAndPayloadAttestations { .. } => {
|
||||
panic!("BidAndPayloadAttestations variant does not have block_value")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -464,7 +464,9 @@ impl<E: EthSpec> MockBuilder<E> {
|
||||
block: SignedBlindedBeaconBlock<E>,
|
||||
) -> Result<FullPayloadContents<E>, String> {
|
||||
let root = match &block {
|
||||
SignedBlindedBeaconBlock::Base(_) | types::SignedBeaconBlock::Altair(_) => {
|
||||
SignedBlindedBeaconBlock::Base(_)
|
||||
| SignedBlindedBeaconBlock::Altair(_)
|
||||
| SignedBlindedBeaconBlock::Gloas(_) => {
|
||||
return Err("invalid fork".to_string());
|
||||
}
|
||||
SignedBlindedBeaconBlock::Bellatrix(block) => {
|
||||
@@ -482,9 +484,6 @@ impl<E: EthSpec> MockBuilder<E> {
|
||||
SignedBlindedBeaconBlock::Fulu(block) => {
|
||||
block.message.body.execution_payload.tree_hash_root()
|
||||
}
|
||||
SignedBlindedBeaconBlock::Gloas(block) => {
|
||||
block.message.body.execution_payload.tree_hash_root()
|
||||
}
|
||||
};
|
||||
info!(
|
||||
block_hash = %root,
|
||||
|
||||
Reference in New Issue
Block a user