mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-21 13:54:44 +00:00
Gloas containers additions (#8227)
* gloas envelope helpers * rename execution_bid to execution_payload_bid * builder_payment_threshold_numerator and builder_payment_threshold_denominator are not configurable but are constants * update payload attestation message signature to be unaggregated type * updates per pr review
This commit is contained in:
@@ -116,8 +116,11 @@ where
|
||||
)]
|
||||
pub latest_execution_payload_header: ExecutionPayloadHeaderFulu<E>,
|
||||
|
||||
#[superstruct(only(Gloas), partial_getter(rename = "latest_execution_bid_gloas"))]
|
||||
pub latest_execution_bid: ExecutionBid,
|
||||
#[superstruct(
|
||||
only(Gloas),
|
||||
partial_getter(rename = "latest_execution_payload_bid_gloas")
|
||||
)]
|
||||
pub latest_execution_payload_bid: ExecutionPayloadBid,
|
||||
|
||||
// Capella
|
||||
#[superstruct(only(Capella, Deneb, Electra, Fulu, Gloas))]
|
||||
@@ -480,7 +483,7 @@ impl<E: EthSpec> TryInto<BeaconState<E>> for PartialBeaconState<E> {
|
||||
current_sync_committee,
|
||||
next_sync_committee,
|
||||
inactivity_scores,
|
||||
latest_execution_bid,
|
||||
latest_execution_payload_bid,
|
||||
next_withdrawal_index,
|
||||
next_withdrawal_validator_index,
|
||||
deposit_requests_start_index,
|
||||
|
||||
@@ -2,7 +2,7 @@ use bls::Hash256;
|
||||
use std::mem;
|
||||
use types::{
|
||||
BeaconState, BeaconStateError as Error, BeaconStateGloas, BitVector, BuilderPendingPayment,
|
||||
ChainSpec, EthSpec, ExecutionBid, Fork, List, Vector,
|
||||
ChainSpec, EthSpec, ExecutionPayloadBid, Fork, List, Vector,
|
||||
};
|
||||
|
||||
/// Transform a `Fulu` state into a `Gloas` state.
|
||||
@@ -68,7 +68,7 @@ pub fn upgrade_state_to_gloas<E: EthSpec>(
|
||||
current_sync_committee: pre.current_sync_committee.clone(),
|
||||
next_sync_committee: pre.next_sync_committee.clone(),
|
||||
// Execution Bid
|
||||
latest_execution_bid: ExecutionBid::default(),
|
||||
latest_execution_payload_bid: ExecutionPayloadBid::default(),
|
||||
// Capella
|
||||
next_withdrawal_index: pre.next_withdrawal_index,
|
||||
next_withdrawal_validator_index: pre.next_withdrawal_validator_index,
|
||||
|
||||
@@ -673,7 +673,7 @@ impl<E: EthSpec, Payload: AbstractExecPayload<E>> EmptyBlock for BeaconBlockGloa
|
||||
voluntary_exits: VariableList::empty(),
|
||||
sync_aggregate: SyncAggregate::empty(),
|
||||
bls_to_execution_changes: VariableList::empty(),
|
||||
signed_execution_bid: SignedExecutionBid::empty(),
|
||||
signed_execution_payload_bid: SignedExecutionPayloadBid::empty(),
|
||||
payload_attestations: VariableList::empty(),
|
||||
_phantom: PhantomData,
|
||||
},
|
||||
|
||||
@@ -135,7 +135,7 @@ pub struct BeaconBlockBody<E: EthSpec, Payload: AbstractExecPayload<E> = FullPay
|
||||
#[superstruct(only(Electra, Fulu))]
|
||||
pub execution_requests: ExecutionRequests<E>,
|
||||
#[superstruct(only(Gloas))]
|
||||
pub signed_execution_bid: SignedExecutionBid,
|
||||
pub signed_execution_payload_bid: SignedExecutionPayloadBid,
|
||||
#[superstruct(only(Gloas))]
|
||||
pub payload_attestations: VariableList<PayloadAttestation<E>, E::MaxPayloadAttestations>,
|
||||
#[superstruct(only(Base, Altair, Gloas))]
|
||||
@@ -521,7 +521,7 @@ impl<E: EthSpec> From<BeaconBlockBodyGloas<E, BlindedPayload<E>>>
|
||||
voluntary_exits,
|
||||
sync_aggregate,
|
||||
bls_to_execution_changes,
|
||||
signed_execution_bid,
|
||||
signed_execution_payload_bid,
|
||||
payload_attestations,
|
||||
_phantom,
|
||||
} = body;
|
||||
@@ -537,7 +537,7 @@ impl<E: EthSpec> From<BeaconBlockBodyGloas<E, BlindedPayload<E>>>
|
||||
voluntary_exits,
|
||||
sync_aggregate,
|
||||
bls_to_execution_changes,
|
||||
signed_execution_bid,
|
||||
signed_execution_payload_bid,
|
||||
payload_attestations,
|
||||
_phantom: PhantomData,
|
||||
}
|
||||
@@ -855,7 +855,7 @@ impl<E: EthSpec> From<BeaconBlockBodyGloas<E, FullPayload<E>>>
|
||||
voluntary_exits,
|
||||
sync_aggregate,
|
||||
bls_to_execution_changes,
|
||||
signed_execution_bid,
|
||||
signed_execution_payload_bid,
|
||||
payload_attestations,
|
||||
_phantom,
|
||||
} = body;
|
||||
@@ -872,7 +872,7 @@ impl<E: EthSpec> From<BeaconBlockBodyGloas<E, FullPayload<E>>>
|
||||
voluntary_exits,
|
||||
sync_aggregate,
|
||||
bls_to_execution_changes,
|
||||
signed_execution_bid,
|
||||
signed_execution_payload_bid,
|
||||
payload_attestations,
|
||||
_phantom: PhantomData,
|
||||
},
|
||||
|
||||
@@ -532,7 +532,7 @@ where
|
||||
pub latest_execution_payload_header: ExecutionPayloadHeaderFulu<E>,
|
||||
#[superstruct(only(Gloas))]
|
||||
#[metastruct(exclude_from(tree_lists))]
|
||||
pub latest_execution_bid: ExecutionBid,
|
||||
pub latest_execution_payload_bid: ExecutionPayloadBid,
|
||||
#[superstruct(only(Capella, Deneb, Electra, Fulu, Gloas), partial_getter(copy))]
|
||||
#[serde(with = "serde_utils::quoted_u64")]
|
||||
#[metastruct(exclude_from(tree_lists))]
|
||||
@@ -2214,7 +2214,7 @@ impl<E: EthSpec> BeaconState<E> {
|
||||
| BeaconState::Electra(_)
|
||||
| BeaconState::Fulu(_) => true,
|
||||
BeaconState::Gloas(state) => {
|
||||
state.latest_execution_bid.block_hash == state.latest_block_hash
|
||||
state.latest_execution_payload_bid.block_hash == state.latest_block_hash
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1737,12 +1737,6 @@ pub struct Config {
|
||||
#[serde(serialize_with = "serialize_fork_epoch")]
|
||||
#[serde(deserialize_with = "deserialize_fork_epoch")]
|
||||
pub gloas_fork_epoch: Option<MaybeQuoted<Epoch>>,
|
||||
#[serde(default = "default_builder_payment_threshold_numerator")]
|
||||
#[serde(with = "serde_utils::quoted_u64")]
|
||||
pub builder_payment_threshold_numerator: u64,
|
||||
#[serde(default = "default_builder_payment_threshold_denominator")]
|
||||
#[serde(with = "serde_utils::quoted_u64")]
|
||||
pub builder_payment_threshold_denominator: u64,
|
||||
|
||||
#[serde(with = "serde_utils::quoted_u64")]
|
||||
seconds_per_slot: u64,
|
||||
@@ -1906,14 +1900,6 @@ fn default_gloas_fork_version() -> [u8; 4] {
|
||||
[0xff, 0xff, 0xff, 0xff]
|
||||
}
|
||||
|
||||
fn default_builder_payment_threshold_numerator() -> u64 {
|
||||
6
|
||||
}
|
||||
|
||||
fn default_builder_payment_threshold_denominator() -> u64 {
|
||||
10
|
||||
}
|
||||
|
||||
/// Placeholder value: 2^256-2^10 (115792089237316195423570985008687907853269984665640564039457584007913129638912).
|
||||
///
|
||||
/// Taken from https://github.com/ethereum/consensus-specs/blob/d5e4828aecafaf1c57ef67a5f23c4ae7b08c5137/configs/mainnet.yaml#L15-L16
|
||||
@@ -2218,9 +2204,6 @@ impl Config {
|
||||
.gloas_fork_epoch
|
||||
.map(|epoch| MaybeQuoted { value: epoch }),
|
||||
|
||||
builder_payment_threshold_numerator: spec.builder_payment_threshold_numerator,
|
||||
builder_payment_threshold_denominator: spec.builder_payment_threshold_denominator,
|
||||
|
||||
seconds_per_slot: spec.seconds_per_slot,
|
||||
seconds_per_eth1_block: spec.seconds_per_eth1_block,
|
||||
min_validator_withdrawability_delay: spec.min_validator_withdrawability_delay,
|
||||
@@ -2312,8 +2295,6 @@ impl Config {
|
||||
fulu_fork_version,
|
||||
gloas_fork_version,
|
||||
gloas_fork_epoch,
|
||||
builder_payment_threshold_numerator,
|
||||
builder_payment_threshold_denominator,
|
||||
seconds_per_slot,
|
||||
seconds_per_eth1_block,
|
||||
min_validator_withdrawability_delay,
|
||||
@@ -2387,8 +2368,6 @@ impl Config {
|
||||
fulu_fork_version,
|
||||
gloas_fork_version,
|
||||
gloas_fork_epoch: gloas_fork_epoch.map(|q| q.value),
|
||||
builder_payment_threshold_numerator,
|
||||
builder_payment_threshold_denominator,
|
||||
seconds_per_slot,
|
||||
seconds_per_eth1_block,
|
||||
min_validator_withdrawability_delay,
|
||||
|
||||
@@ -11,9 +11,8 @@ use tree_hash_derive::TreeHash;
|
||||
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
|
||||
#[derivative(PartialEq, Hash)]
|
||||
#[context_deserialize(ForkName)]
|
||||
// This is what Potuz' spec calls an `ExecutionPayloadHeader` even though it's clearly a bid.
|
||||
// https://github.com/ethereum/consensus-specs/blob/bba2c7be148d6d921d2ca5e1cc528f5daaf456d9/specs/gloas/beacon-chain.md#executionpayloadheader
|
||||
pub struct ExecutionBid {
|
||||
// https://github.com/ethereum/consensus-specs/blob/master/specs/gloas/beacon-chain.md#executionpayloadbid
|
||||
pub struct ExecutionPayloadBid {
|
||||
pub parent_block_hash: ExecutionBlockHash,
|
||||
pub parent_block_root: Hash256,
|
||||
pub block_hash: ExecutionBlockHash,
|
||||
@@ -29,11 +28,11 @@ pub struct ExecutionBid {
|
||||
pub blob_kzg_commitments_root: Hash256,
|
||||
}
|
||||
|
||||
impl SignedRoot for ExecutionBid {}
|
||||
impl SignedRoot for ExecutionPayloadBid {}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
ssz_and_tree_hash_tests!(ExecutionBid);
|
||||
ssz_and_tree_hash_tests!(ExecutionPayloadBid);
|
||||
}
|
||||
@@ -59,6 +59,7 @@ pub struct ExecutionPayloadEnvelope<E: EthSpec> {
|
||||
pub state_root: Hash256,
|
||||
}
|
||||
|
||||
impl<E: EthSpec> SignedRoot for ExecutionPayloadEnvelope<E> {}
|
||||
impl<'a, E: EthSpec> SignedRoot for ExecutionPayloadEnvelopeRef<'a, E> {}
|
||||
|
||||
impl<'a, E: EthSpec> ExecutionPayloadEnvelopeRef<'a, E> {
|
||||
|
||||
@@ -42,9 +42,9 @@ pub mod dumb_macros;
|
||||
pub mod enr_fork_id;
|
||||
pub mod eth1_data;
|
||||
pub mod eth_spec;
|
||||
pub mod execution_bid;
|
||||
pub mod execution_block_hash;
|
||||
pub mod execution_payload;
|
||||
pub mod execution_payload_bid;
|
||||
pub mod execution_payload_envelope;
|
||||
pub mod execution_payload_header;
|
||||
pub mod fork;
|
||||
@@ -77,7 +77,7 @@ pub mod signed_beacon_block;
|
||||
pub mod signed_beacon_block_header;
|
||||
pub mod signed_bls_to_execution_change;
|
||||
pub mod signed_contribution_and_proof;
|
||||
pub mod signed_execution_bid;
|
||||
pub mod signed_execution_payload_bid;
|
||||
pub mod signed_execution_payload_envelope;
|
||||
pub mod signed_voluntary_exit;
|
||||
pub mod signing_data;
|
||||
@@ -178,7 +178,6 @@ pub use crate::enr_fork_id::EnrForkId;
|
||||
pub use crate::epoch_cache::{EpochCache, EpochCacheError, EpochCacheKey};
|
||||
pub use crate::eth_spec::EthSpecId;
|
||||
pub use crate::eth1_data::Eth1Data;
|
||||
pub use crate::execution_bid::ExecutionBid;
|
||||
pub use crate::execution_block_hash::ExecutionBlockHash;
|
||||
pub use crate::execution_block_header::{EncodableExecutionBlockHeader, ExecutionBlockHeader};
|
||||
pub use crate::execution_payload::{
|
||||
@@ -186,6 +185,7 @@ pub use crate::execution_payload::{
|
||||
ExecutionPayloadElectra, ExecutionPayloadFulu, ExecutionPayloadGloas, ExecutionPayloadRef,
|
||||
Transaction, Transactions, Withdrawals,
|
||||
};
|
||||
pub use crate::execution_payload_bid::ExecutionPayloadBid;
|
||||
pub use crate::execution_payload_envelope::{
|
||||
ExecutionPayloadEnvelope, ExecutionPayloadEnvelopeGloas, ExecutionPayloadEnvelopeNextFork,
|
||||
ExecutionPayloadEnvelopeRef,
|
||||
@@ -266,7 +266,7 @@ pub use crate::signed_beacon_block::{
|
||||
pub use crate::signed_beacon_block_header::SignedBeaconBlockHeader;
|
||||
pub use crate::signed_bls_to_execution_change::SignedBlsToExecutionChange;
|
||||
pub use crate::signed_contribution_and_proof::SignedContributionAndProof;
|
||||
pub use crate::signed_execution_bid::SignedExecutionBid;
|
||||
pub use crate::signed_execution_payload_bid::SignedExecutionPayloadBid;
|
||||
pub use crate::signed_execution_payload_envelope::SignedExecutionPayloadEnvelope;
|
||||
pub use crate::signed_voluntary_exit::SignedVoluntaryExit;
|
||||
pub use crate::signing_data::{SignedRoot, SigningData};
|
||||
|
||||
@@ -12,7 +12,7 @@ pub struct PayloadAttestationMessage {
|
||||
#[serde(with = "serde_utils::quoted_u64")]
|
||||
pub validator_index: u64,
|
||||
pub data: PayloadAttestationData,
|
||||
pub signature: AggregateSignature,
|
||||
pub signature: Signature,
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
||||
@@ -12,16 +12,16 @@ use tree_hash_derive::TreeHash;
|
||||
#[cfg_attr(feature = "arbitrary", derive(arbitrary::Arbitrary))]
|
||||
#[derivative(PartialEq, Hash)]
|
||||
#[context_deserialize(ForkName)]
|
||||
// https://github.com/ethereum/consensus-specs/blob/bba2c7be148d6d921d2ca5e1cc528f5daaf456d9/specs/gloas/beacon-chain.md#signedexecutionpayloadheader
|
||||
pub struct SignedExecutionBid {
|
||||
pub message: ExecutionBid,
|
||||
// https://github.com/ethereum/consensus-specs/blob/master/specs/gloas/beacon-chain.md#signedexecutionpayloadbid
|
||||
pub struct SignedExecutionPayloadBid {
|
||||
pub message: ExecutionPayloadBid,
|
||||
pub signature: Signature,
|
||||
}
|
||||
|
||||
impl SignedExecutionBid {
|
||||
impl SignedExecutionPayloadBid {
|
||||
pub fn empty() -> Self {
|
||||
Self {
|
||||
message: ExecutionBid::default(),
|
||||
message: ExecutionPayloadBid::default(),
|
||||
signature: Signature::empty(),
|
||||
}
|
||||
}
|
||||
@@ -31,5 +31,5 @@ impl SignedExecutionBid {
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
ssz_and_tree_hash_tests!(SignedExecutionBid);
|
||||
ssz_and_tree_hash_tests!(SignedExecutionPayloadBid);
|
||||
}
|
||||
@@ -48,6 +48,26 @@ pub struct SignedExecutionPayloadEnvelope<E: EthSpec> {
|
||||
}
|
||||
|
||||
impl<E: EthSpec> SignedExecutionPayloadEnvelope<E> {
|
||||
/// Create a new `SignedExecutionPayloadEnvelope` from an `ExecutionPayloadEnvelope` and `Signature`.
|
||||
pub fn from_envelope(envelope: ExecutionPayloadEnvelope<E>, signature: Signature) -> Self {
|
||||
match envelope {
|
||||
ExecutionPayloadEnvelope::Gloas(message) => SignedExecutionPayloadEnvelope::Gloas(
|
||||
signed_execution_payload_envelope::SignedExecutionPayloadEnvelopeGloas {
|
||||
message,
|
||||
signature,
|
||||
},
|
||||
),
|
||||
ExecutionPayloadEnvelope::NextFork(message) => {
|
||||
SignedExecutionPayloadEnvelope::NextFork(
|
||||
signed_execution_payload_envelope::SignedExecutionPayloadEnvelopeNextFork {
|
||||
message,
|
||||
signature,
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pub fn message(&self) -> ExecutionPayloadEnvelopeRef<'_, E> {
|
||||
match self {
|
||||
Self::Gloas(signed) => ExecutionPayloadEnvelopeRef::Gloas(&signed.message),
|
||||
|
||||
Reference in New Issue
Block a user