Removed withdrawals
feature flag
This commit is contained in:
parent
ab11f8c71f
commit
b75ca74222
2
.github/workflows/docker.yml
vendored
2
.github/workflows/docker.yml
vendored
@ -66,7 +66,7 @@ jobs:
|
|||||||
DOCKER_CLI_EXPERIMENTAL: enabled
|
DOCKER_CLI_EXPERIMENTAL: enabled
|
||||||
VERSION: ${{ needs.extract-version.outputs.VERSION }}
|
VERSION: ${{ needs.extract-version.outputs.VERSION }}
|
||||||
VERSION_SUFFIX: ${{ needs.extract-version.outputs.VERSION_SUFFIX }}
|
VERSION_SUFFIX: ${{ needs.extract-version.outputs.VERSION_SUFFIX }}
|
||||||
CROSS_FEATURES: withdrawals,withdrawals-processing
|
CROSS_FEATURES: withdrawals-processing
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- name: Update Rust
|
- name: Update Rust
|
||||||
|
2
Makefile
2
Makefile
@ -21,7 +21,7 @@ CROSS_FEATURES ?= gnosis,slasher-lmdb,slasher-mdbx
|
|||||||
CROSS_PROFILE ?= release
|
CROSS_PROFILE ?= release
|
||||||
|
|
||||||
# List of features to use when running EF tests.
|
# List of features to use when running EF tests.
|
||||||
EF_TEST_FEATURES ?= beacon_chain/withdrawals,beacon_chain/withdrawals-processing
|
EF_TEST_FEATURES ?= beacon_chain/withdrawals-processing
|
||||||
|
|
||||||
# Cargo profile for regular builds.
|
# Cargo profile for regular builds.
|
||||||
PROFILE ?= release
|
PROFILE ?= release
|
||||||
|
@ -13,7 +13,6 @@ node_test_rig = { path = "../testing/node_test_rig" }
|
|||||||
|
|
||||||
[features]
|
[features]
|
||||||
write_ssz_files = ["beacon_chain/write_ssz_files"] # Writes debugging .ssz files to /tmp during block processing.
|
write_ssz_files = ["beacon_chain/write_ssz_files"] # Writes debugging .ssz files to /tmp during block processing.
|
||||||
withdrawals = ["beacon_chain/withdrawals", "types/withdrawals", "store/withdrawals", "execution_layer/withdrawals"]
|
|
||||||
withdrawals-processing = [
|
withdrawals-processing = [
|
||||||
"beacon_chain/withdrawals-processing",
|
"beacon_chain/withdrawals-processing",
|
||||||
"store/withdrawals-processing",
|
"store/withdrawals-processing",
|
||||||
|
@ -10,7 +10,6 @@ default = ["participation_metrics"]
|
|||||||
write_ssz_files = [] # Writes debugging .ssz files to /tmp during block processing.
|
write_ssz_files = [] # Writes debugging .ssz files to /tmp during block processing.
|
||||||
participation_metrics = [] # Exposes validator participation metrics to Prometheus.
|
participation_metrics = [] # Exposes validator participation metrics to Prometheus.
|
||||||
fork_from_env = [] # Initialise the harness chain spec from the FORK_NAME env variable
|
fork_from_env = [] # Initialise the harness chain spec from the FORK_NAME env variable
|
||||||
withdrawals = ["state_processing/withdrawals", "types/withdrawals", "store/withdrawals", "execution_layer/withdrawals"]
|
|
||||||
withdrawals-processing = [
|
withdrawals-processing = [
|
||||||
"state_processing/withdrawals-processing",
|
"state_processing/withdrawals-processing",
|
||||||
"store/withdrawals-processing",
|
"store/withdrawals-processing",
|
||||||
|
@ -79,14 +79,12 @@ use slasher::Slasher;
|
|||||||
use slog::{crit, debug, error, info, trace, warn, Logger};
|
use slog::{crit, debug, error, info, trace, warn, Logger};
|
||||||
use slot_clock::SlotClock;
|
use slot_clock::SlotClock;
|
||||||
use ssz::Encode;
|
use ssz::Encode;
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
use state_processing::per_block_processing::get_expected_withdrawals;
|
|
||||||
use state_processing::{
|
use state_processing::{
|
||||||
common::get_attesting_indices_from_state,
|
common::get_attesting_indices_from_state,
|
||||||
per_block_processing,
|
per_block_processing,
|
||||||
per_block_processing::{
|
per_block_processing::{
|
||||||
errors::AttestationValidationError, verify_attestation_for_block_inclusion,
|
errors::AttestationValidationError, get_expected_withdrawals,
|
||||||
VerifySignatures,
|
verify_attestation_for_block_inclusion, VerifySignatures,
|
||||||
},
|
},
|
||||||
per_slot_processing,
|
per_slot_processing,
|
||||||
state_advance::{complete_state_advance, partial_state_advance},
|
state_advance::{complete_state_advance, partial_state_advance},
|
||||||
@ -287,7 +285,6 @@ struct PartialBeaconBlock<E: EthSpec, Payload: AbstractExecPayload<E>> {
|
|||||||
voluntary_exits: Vec<SignedVoluntaryExit>,
|
voluntary_exits: Vec<SignedVoluntaryExit>,
|
||||||
sync_aggregate: Option<SyncAggregate<E>>,
|
sync_aggregate: Option<SyncAggregate<E>>,
|
||||||
prepare_payload_handle: Option<PreparePayloadHandle<E, Payload>>,
|
prepare_payload_handle: Option<PreparePayloadHandle<E, Payload>>,
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
bls_to_execution_changes: Vec<SignedBlsToExecutionChange>,
|
bls_to_execution_changes: Vec<SignedBlsToExecutionChange>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4182,7 +4179,6 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
|||||||
let eth1_data = eth1_chain.eth1_data_for_block_production(&state, &self.spec)?;
|
let eth1_data = eth1_chain.eth1_data_for_block_production(&state, &self.spec)?;
|
||||||
let deposits = eth1_chain.deposits_for_block_inclusion(&state, ð1_data, &self.spec)?;
|
let deposits = eth1_chain.deposits_for_block_inclusion(&state, ð1_data, &self.spec)?;
|
||||||
|
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
let bls_to_execution_changes = self
|
let bls_to_execution_changes = self
|
||||||
.op_pool
|
.op_pool
|
||||||
.get_bls_to_execution_changes(&state, &self.spec);
|
.get_bls_to_execution_changes(&state, &self.spec);
|
||||||
@ -4345,7 +4341,6 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
|||||||
voluntary_exits,
|
voluntary_exits,
|
||||||
sync_aggregate,
|
sync_aggregate,
|
||||||
prepare_payload_handle,
|
prepare_payload_handle,
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
bls_to_execution_changes,
|
bls_to_execution_changes,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -4375,7 +4370,6 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
|||||||
// this function. We can assume that the handle has already been consumed in order to
|
// this function. We can assume that the handle has already been consumed in order to
|
||||||
// produce said `execution_payload`.
|
// produce said `execution_payload`.
|
||||||
prepare_payload_handle: _,
|
prepare_payload_handle: _,
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
bls_to_execution_changes,
|
bls_to_execution_changes,
|
||||||
} = partial_beacon_block;
|
} = partial_beacon_block;
|
||||||
|
|
||||||
@ -4460,7 +4454,6 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
|||||||
.to_payload()
|
.to_payload()
|
||||||
.try_into()
|
.try_into()
|
||||||
.map_err(|_| BlockProductionError::InvalidPayloadFork)?,
|
.map_err(|_| BlockProductionError::InvalidPayloadFork)?,
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
bls_to_execution_changes: bls_to_execution_changes.into(),
|
bls_to_execution_changes: bls_to_execution_changes.into(),
|
||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
@ -4485,7 +4478,6 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
|||||||
.to_payload()
|
.to_payload()
|
||||||
.try_into()
|
.try_into()
|
||||||
.map_err(|_| BlockProductionError::InvalidPayloadFork)?,
|
.map_err(|_| BlockProductionError::InvalidPayloadFork)?,
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
bls_to_execution_changes: bls_to_execution_changes.into(),
|
bls_to_execution_changes: bls_to_execution_changes.into(),
|
||||||
//FIXME(sean) get blobs
|
//FIXME(sean) get blobs
|
||||||
blob_kzg_commitments: VariableList::from(kzg_commitments),
|
blob_kzg_commitments: VariableList::from(kzg_commitments),
|
||||||
@ -4743,7 +4735,6 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
|||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
let withdrawals = match self.spec.fork_name_at_slot::<T::EthSpec>(prepare_slot) {
|
let withdrawals = match self.spec.fork_name_at_slot::<T::EthSpec>(prepare_slot) {
|
||||||
ForkName::Base | ForkName::Altair | ForkName::Merge => None,
|
ForkName::Base | ForkName::Altair | ForkName::Merge => None,
|
||||||
ForkName::Capella | ForkName::Eip4844 => {
|
ForkName::Capella | ForkName::Eip4844 => {
|
||||||
@ -4778,10 +4769,7 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
|
|||||||
execution_layer
|
execution_layer
|
||||||
.get_suggested_fee_recipient(proposer as u64)
|
.get_suggested_fee_recipient(proposer as u64)
|
||||||
.await,
|
.await,
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
withdrawals,
|
withdrawals,
|
||||||
#[cfg(not(feature = "withdrawals"))]
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
debug!(
|
debug!(
|
||||||
|
@ -17,11 +17,9 @@ use fork_choice::{InvalidationOperation, PayloadVerificationStatus};
|
|||||||
use proto_array::{Block as ProtoBlock, ExecutionStatus};
|
use proto_array::{Block as ProtoBlock, ExecutionStatus};
|
||||||
use slog::debug;
|
use slog::debug;
|
||||||
use slot_clock::SlotClock;
|
use slot_clock::SlotClock;
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
use state_processing::per_block_processing::get_expected_withdrawals;
|
|
||||||
use state_processing::per_block_processing::{
|
use state_processing::per_block_processing::{
|
||||||
compute_timestamp_at_slot, is_execution_enabled, is_merge_transition_complete,
|
compute_timestamp_at_slot, get_expected_withdrawals, is_execution_enabled,
|
||||||
partially_verify_execution_payload,
|
is_merge_transition_complete, partially_verify_execution_payload,
|
||||||
};
|
};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use tokio::task::JoinHandle;
|
use tokio::task::JoinHandle;
|
||||||
@ -382,7 +380,6 @@ pub fn get_execution_payload<
|
|||||||
let random = *state.get_randao_mix(current_epoch)?;
|
let random = *state.get_randao_mix(current_epoch)?;
|
||||||
let latest_execution_payload_header_block_hash =
|
let latest_execution_payload_header_block_hash =
|
||||||
state.latest_execution_payload_header()?.block_hash();
|
state.latest_execution_payload_header()?.block_hash();
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
let withdrawals = match state {
|
let withdrawals = match state {
|
||||||
&BeaconState::Capella(_) | &BeaconState::Eip4844(_) => {
|
&BeaconState::Capella(_) | &BeaconState::Eip4844(_) => {
|
||||||
Some(get_expected_withdrawals(state, spec)?.into())
|
Some(get_expected_withdrawals(state, spec)?.into())
|
||||||
@ -407,7 +404,6 @@ pub fn get_execution_payload<
|
|||||||
proposer_index,
|
proposer_index,
|
||||||
latest_execution_payload_header_block_hash,
|
latest_execution_payload_header_block_hash,
|
||||||
builder_params,
|
builder_params,
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
withdrawals,
|
withdrawals,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
@ -442,7 +438,7 @@ pub async fn prepare_execution_payload<T, Payload>(
|
|||||||
proposer_index: u64,
|
proposer_index: u64,
|
||||||
latest_execution_payload_header_block_hash: ExecutionBlockHash,
|
latest_execution_payload_header_block_hash: ExecutionBlockHash,
|
||||||
builder_params: BuilderParams,
|
builder_params: BuilderParams,
|
||||||
#[cfg(feature = "withdrawals")] withdrawals: Option<Vec<Withdrawal>>,
|
withdrawals: Option<Vec<Withdrawal>>,
|
||||||
) -> Result<BlockProposalContents<T::EthSpec, Payload>, BlockProductionError>
|
) -> Result<BlockProposalContents<T::EthSpec, Payload>, BlockProductionError>
|
||||||
where
|
where
|
||||||
T: BeaconChainTypes,
|
T: BeaconChainTypes,
|
||||||
@ -504,15 +500,8 @@ where
|
|||||||
let suggested_fee_recipient = execution_layer
|
let suggested_fee_recipient = execution_layer
|
||||||
.get_suggested_fee_recipient(proposer_index)
|
.get_suggested_fee_recipient(proposer_index)
|
||||||
.await;
|
.await;
|
||||||
let payload_attributes = PayloadAttributes::new(
|
let payload_attributes =
|
||||||
timestamp,
|
PayloadAttributes::new(timestamp, random, suggested_fee_recipient, withdrawals);
|
||||||
random,
|
|
||||||
suggested_fee_recipient,
|
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
withdrawals,
|
|
||||||
#[cfg(not(feature = "withdrawals"))]
|
|
||||||
None,
|
|
||||||
);
|
|
||||||
|
|
||||||
// Note: the suggested_fee_recipient is stored in the `execution_layer`, it will add this parameter.
|
// Note: the suggested_fee_recipient is stored in the `execution_layer`, it will add this parameter.
|
||||||
//
|
//
|
||||||
|
@ -5,7 +5,6 @@ edition = "2021"
|
|||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
[features]
|
[features]
|
||||||
withdrawals = ["state_processing/withdrawals", "types/withdrawals", "eth2/withdrawals"]
|
|
||||||
withdrawals-processing = ["state_processing/withdrawals-processing", "eth2/withdrawals-processing"]
|
withdrawals-processing = ["state_processing/withdrawals-processing", "eth2/withdrawals-processing"]
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
|
@ -165,7 +165,6 @@ pub struct ExecutionBlockWithTransactions<T: EthSpec> {
|
|||||||
#[serde(rename = "hash")]
|
#[serde(rename = "hash")]
|
||||||
pub block_hash: ExecutionBlockHash,
|
pub block_hash: ExecutionBlockHash,
|
||||||
pub transactions: Vec<Transaction>,
|
pub transactions: Vec<Transaction>,
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
#[superstruct(only(Capella, Eip4844))]
|
#[superstruct(only(Capella, Eip4844))]
|
||||||
pub withdrawals: Vec<JsonWithdrawal>,
|
pub withdrawals: Vec<JsonWithdrawal>,
|
||||||
}
|
}
|
||||||
@ -215,7 +214,6 @@ impl<T: EthSpec> TryFrom<ExecutionPayload<T>> for ExecutionBlockWithTransactions
|
|||||||
.iter()
|
.iter()
|
||||||
.map(|tx| Transaction::decode(&Rlp::new(tx)))
|
.map(|tx| Transaction::decode(&Rlp::new(tx)))
|
||||||
.collect::<Result<Vec<_>, _>>()?,
|
.collect::<Result<Vec<_>, _>>()?,
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
withdrawals: Vec::from(block.withdrawals)
|
withdrawals: Vec::from(block.withdrawals)
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|withdrawal| withdrawal.into())
|
.map(|withdrawal| withdrawal.into())
|
||||||
@ -243,7 +241,6 @@ impl<T: EthSpec> TryFrom<ExecutionPayload<T>> for ExecutionBlockWithTransactions
|
|||||||
.iter()
|
.iter()
|
||||||
.map(|tx| Transaction::decode(&Rlp::new(tx)))
|
.map(|tx| Transaction::decode(&Rlp::new(tx)))
|
||||||
.collect::<Result<Vec<_>, _>>()?,
|
.collect::<Result<Vec<_>, _>>()?,
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
withdrawals: Vec::from(block.withdrawals)
|
withdrawals: Vec::from(block.withdrawals)
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|withdrawal| withdrawal.into())
|
.map(|withdrawal| withdrawal.into())
|
||||||
|
@ -852,11 +852,11 @@ impl HttpJsonRpc {
|
|||||||
pub async fn supported_apis_v1(&self) -> Result<SupportedApis, Error> {
|
pub async fn supported_apis_v1(&self) -> Result<SupportedApis, Error> {
|
||||||
Ok(SupportedApis {
|
Ok(SupportedApis {
|
||||||
new_payload_v1: true,
|
new_payload_v1: true,
|
||||||
new_payload_v2: cfg!(all(feature = "withdrawals", not(test))),
|
new_payload_v2: cfg!(not(test)),
|
||||||
forkchoice_updated_v1: true,
|
forkchoice_updated_v1: true,
|
||||||
forkchoice_updated_v2: cfg!(all(feature = "withdrawals", not(test))),
|
forkchoice_updated_v2: cfg!(not(test)),
|
||||||
get_payload_v1: true,
|
get_payload_v1: true,
|
||||||
get_payload_v2: cfg!(all(feature = "withdrawals", not(test))),
|
get_payload_v2: cfg!(not(test)),
|
||||||
exchange_transition_configuration_v1: true,
|
exchange_transition_configuration_v1: true,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -166,7 +166,6 @@ impl<T: EthSpec> JsonExecutionPayload<T> {
|
|||||||
base_fee_per_gas: v2.base_fee_per_gas,
|
base_fee_per_gas: v2.base_fee_per_gas,
|
||||||
block_hash: v2.block_hash,
|
block_hash: v2.block_hash,
|
||||||
transactions: v2.transactions,
|
transactions: v2.transactions,
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
withdrawals: v2
|
withdrawals: v2
|
||||||
.withdrawals
|
.withdrawals
|
||||||
.map(|v| {
|
.map(|v| {
|
||||||
@ -194,7 +193,6 @@ impl<T: EthSpec> JsonExecutionPayload<T> {
|
|||||||
excess_data_gas: v2.excess_data_gas.ok_or_else(|| Error::BadConversion("Null `excess_data_gas` field converting JsonExecutionPayloadV2 -> ExecutionPayloadEip4844".to_string()))?,
|
excess_data_gas: v2.excess_data_gas.ok_or_else(|| Error::BadConversion("Null `excess_data_gas` field converting JsonExecutionPayloadV2 -> ExecutionPayloadEip4844".to_string()))?,
|
||||||
block_hash: v2.block_hash,
|
block_hash: v2.block_hash,
|
||||||
transactions: v2.transactions,
|
transactions: v2.transactions,
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
withdrawals: v2
|
withdrawals: v2
|
||||||
.withdrawals
|
.withdrawals
|
||||||
.map(|v| {
|
.map(|v| {
|
||||||
@ -282,7 +280,6 @@ impl<T: EthSpec> TryFrom<ExecutionPayload<T>> for JsonExecutionPayloadV2<T> {
|
|||||||
excess_data_gas: None,
|
excess_data_gas: None,
|
||||||
block_hash: capella.block_hash,
|
block_hash: capella.block_hash,
|
||||||
transactions: capella.transactions,
|
transactions: capella.transactions,
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
withdrawals: Some(
|
withdrawals: Some(
|
||||||
Vec::from(capella.withdrawals)
|
Vec::from(capella.withdrawals)
|
||||||
.into_iter()
|
.into_iter()
|
||||||
@ -290,8 +287,6 @@ impl<T: EthSpec> TryFrom<ExecutionPayload<T>> for JsonExecutionPayloadV2<T> {
|
|||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
.into(),
|
.into(),
|
||||||
),
|
),
|
||||||
#[cfg(not(feature = "withdrawals"))]
|
|
||||||
withdrawals: None,
|
|
||||||
}),
|
}),
|
||||||
ExecutionPayload::Eip4844(eip4844) => Ok(JsonExecutionPayloadV2 {
|
ExecutionPayload::Eip4844(eip4844) => Ok(JsonExecutionPayloadV2 {
|
||||||
parent_hash: eip4844.parent_hash,
|
parent_hash: eip4844.parent_hash,
|
||||||
@ -309,7 +304,6 @@ impl<T: EthSpec> TryFrom<ExecutionPayload<T>> for JsonExecutionPayloadV2<T> {
|
|||||||
excess_data_gas: Some(eip4844.excess_data_gas),
|
excess_data_gas: Some(eip4844.excess_data_gas),
|
||||||
block_hash: eip4844.block_hash,
|
block_hash: eip4844.block_hash,
|
||||||
transactions: eip4844.transactions,
|
transactions: eip4844.transactions,
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
withdrawals: Some(
|
withdrawals: Some(
|
||||||
Vec::from(eip4844.withdrawals)
|
Vec::from(eip4844.withdrawals)
|
||||||
.into_iter()
|
.into_iter()
|
||||||
@ -317,8 +311,6 @@ impl<T: EthSpec> TryFrom<ExecutionPayload<T>> for JsonExecutionPayloadV2<T> {
|
|||||||
.collect::<Vec<_>>()
|
.collect::<Vec<_>>()
|
||||||
.into(),
|
.into(),
|
||||||
),
|
),
|
||||||
#[cfg(not(feature = "withdrawals"))]
|
|
||||||
withdrawals: None,
|
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1633,7 +1633,6 @@ impl<T: EthSpec> ExecutionLayer<T> {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
ExecutionBlockWithTransactions::Capella(capella_block) => {
|
ExecutionBlockWithTransactions::Capella(capella_block) => {
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
let withdrawals = VariableList::new(
|
let withdrawals = VariableList::new(
|
||||||
capella_block
|
capella_block
|
||||||
.withdrawals
|
.withdrawals
|
||||||
@ -1642,7 +1641,6 @@ impl<T: EthSpec> ExecutionLayer<T> {
|
|||||||
.collect(),
|
.collect(),
|
||||||
)
|
)
|
||||||
.map_err(ApiError::DeserializeWithdrawals)?;
|
.map_err(ApiError::DeserializeWithdrawals)?;
|
||||||
|
|
||||||
ExecutionPayload::Capella(ExecutionPayloadCapella {
|
ExecutionPayload::Capella(ExecutionPayloadCapella {
|
||||||
parent_hash: capella_block.parent_hash,
|
parent_hash: capella_block.parent_hash,
|
||||||
fee_recipient: capella_block.fee_recipient,
|
fee_recipient: capella_block.fee_recipient,
|
||||||
@ -1658,12 +1656,10 @@ impl<T: EthSpec> ExecutionLayer<T> {
|
|||||||
base_fee_per_gas: capella_block.base_fee_per_gas,
|
base_fee_per_gas: capella_block.base_fee_per_gas,
|
||||||
block_hash: capella_block.block_hash,
|
block_hash: capella_block.block_hash,
|
||||||
transactions,
|
transactions,
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
withdrawals,
|
withdrawals,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
ExecutionBlockWithTransactions::Eip4844(eip4844_block) => {
|
ExecutionBlockWithTransactions::Eip4844(eip4844_block) => {
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
let withdrawals = VariableList::new(
|
let withdrawals = VariableList::new(
|
||||||
eip4844_block
|
eip4844_block
|
||||||
.withdrawals
|
.withdrawals
|
||||||
@ -1672,7 +1668,6 @@ impl<T: EthSpec> ExecutionLayer<T> {
|
|||||||
.collect(),
|
.collect(),
|
||||||
)
|
)
|
||||||
.map_err(ApiError::DeserializeWithdrawals)?;
|
.map_err(ApiError::DeserializeWithdrawals)?;
|
||||||
|
|
||||||
ExecutionPayload::Eip4844(ExecutionPayloadEip4844 {
|
ExecutionPayload::Eip4844(ExecutionPayloadEip4844 {
|
||||||
parent_hash: eip4844_block.parent_hash,
|
parent_hash: eip4844_block.parent_hash,
|
||||||
fee_recipient: eip4844_block.fee_recipient,
|
fee_recipient: eip4844_block.fee_recipient,
|
||||||
@ -1689,7 +1684,6 @@ impl<T: EthSpec> ExecutionLayer<T> {
|
|||||||
excess_data_gas: eip4844_block.excess_data_gas,
|
excess_data_gas: eip4844_block.excess_data_gas,
|
||||||
block_hash: eip4844_block.block_hash,
|
block_hash: eip4844_block.block_hash,
|
||||||
transactions,
|
transactions,
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
withdrawals,
|
withdrawals,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -103,10 +103,7 @@ impl<T: EthSpec> MockExecutionLayer<T> {
|
|||||||
prev_randao,
|
prev_randao,
|
||||||
Address::repeat_byte(42),
|
Address::repeat_byte(42),
|
||||||
// FIXME: think about how to handle different forks / withdrawals here..
|
// FIXME: think about how to handle different forks / withdrawals here..
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
Some(vec![]),
|
Some(vec![]),
|
||||||
#[cfg(not(feature = "withdrawals"))]
|
|
||||||
None,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// Insert a proposer to ensure the fork choice updated command works.
|
// Insert a proposer to ensure the fork choice updated command works.
|
||||||
|
@ -28,5 +28,4 @@ directory = { path = "../../common/directory" }
|
|||||||
strum = { version = "0.24.0", features = ["derive"] }
|
strum = { version = "0.24.0", features = ["derive"] }
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
withdrawals = ["state_processing/withdrawals", "types/withdrawals"]
|
|
||||||
withdrawals-processing = ["state_processing/withdrawals-processing"]
|
withdrawals-processing = ["state_processing/withdrawals-processing"]
|
@ -105,10 +105,8 @@ where
|
|||||||
pub latest_execution_payload_header: ExecutionPayloadHeaderEip4844<T>,
|
pub latest_execution_payload_header: ExecutionPayloadHeaderEip4844<T>,
|
||||||
|
|
||||||
// Withdrawals
|
// Withdrawals
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
#[superstruct(only(Capella, Eip4844))]
|
#[superstruct(only(Capella, Eip4844))]
|
||||||
pub next_withdrawal_index: u64,
|
pub next_withdrawal_index: u64,
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
#[superstruct(only(Capella, Eip4844))]
|
#[superstruct(only(Capella, Eip4844))]
|
||||||
pub next_withdrawal_validator_index: u64,
|
pub next_withdrawal_validator_index: u64,
|
||||||
}
|
}
|
||||||
@ -199,7 +197,6 @@ impl<T: EthSpec> PartialBeaconState<T> {
|
|||||||
latest_execution_payload_header
|
latest_execution_payload_header
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
BeaconState::Capella(s) => impl_from_state_forgetful!(
|
BeaconState::Capella(s) => impl_from_state_forgetful!(
|
||||||
s,
|
s,
|
||||||
outer,
|
outer,
|
||||||
@ -216,22 +213,6 @@ impl<T: EthSpec> PartialBeaconState<T> {
|
|||||||
next_withdrawal_validator_index
|
next_withdrawal_validator_index
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
#[cfg(not(feature = "withdrawals"))]
|
|
||||||
BeaconState::Capella(s) => impl_from_state_forgetful!(
|
|
||||||
s,
|
|
||||||
outer,
|
|
||||||
Capella,
|
|
||||||
PartialBeaconStateCapella,
|
|
||||||
[
|
|
||||||
previous_epoch_participation,
|
|
||||||
current_epoch_participation,
|
|
||||||
current_sync_committee,
|
|
||||||
next_sync_committee,
|
|
||||||
inactivity_scores,
|
|
||||||
latest_execution_payload_header
|
|
||||||
]
|
|
||||||
),
|
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
BeaconState::Eip4844(s) => impl_from_state_forgetful!(
|
BeaconState::Eip4844(s) => impl_from_state_forgetful!(
|
||||||
s,
|
s,
|
||||||
outer,
|
outer,
|
||||||
@ -248,21 +229,6 @@ impl<T: EthSpec> PartialBeaconState<T> {
|
|||||||
next_withdrawal_validator_index
|
next_withdrawal_validator_index
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
#[cfg(not(feature = "withdrawals"))]
|
|
||||||
BeaconState::Eip4844(s) => impl_from_state_forgetful!(
|
|
||||||
s,
|
|
||||||
outer,
|
|
||||||
Eip4844,
|
|
||||||
PartialBeaconStateEip4844,
|
|
||||||
[
|
|
||||||
previous_epoch_participation,
|
|
||||||
current_epoch_participation,
|
|
||||||
current_sync_committee,
|
|
||||||
next_sync_committee,
|
|
||||||
inactivity_scores,
|
|
||||||
latest_execution_payload_header
|
|
||||||
]
|
|
||||||
),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -450,7 +416,6 @@ impl<E: EthSpec> TryInto<BeaconState<E>> for PartialBeaconState<E> {
|
|||||||
latest_execution_payload_header
|
latest_execution_payload_header
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
PartialBeaconState::Capella(inner) => impl_try_into_beacon_state!(
|
PartialBeaconState::Capella(inner) => impl_try_into_beacon_state!(
|
||||||
inner,
|
inner,
|
||||||
Capella,
|
Capella,
|
||||||
@ -466,21 +431,6 @@ impl<E: EthSpec> TryInto<BeaconState<E>> for PartialBeaconState<E> {
|
|||||||
next_withdrawal_validator_index
|
next_withdrawal_validator_index
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
#[cfg(not(feature = "withdrawals"))]
|
|
||||||
PartialBeaconState::Capella(inner) => impl_try_into_beacon_state!(
|
|
||||||
inner,
|
|
||||||
Capella,
|
|
||||||
BeaconStateCapella,
|
|
||||||
[
|
|
||||||
previous_epoch_participation,
|
|
||||||
current_epoch_participation,
|
|
||||||
current_sync_committee,
|
|
||||||
next_sync_committee,
|
|
||||||
inactivity_scores,
|
|
||||||
latest_execution_payload_header
|
|
||||||
]
|
|
||||||
),
|
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
PartialBeaconState::Eip4844(inner) => impl_try_into_beacon_state!(
|
PartialBeaconState::Eip4844(inner) => impl_try_into_beacon_state!(
|
||||||
inner,
|
inner,
|
||||||
Eip4844,
|
Eip4844,
|
||||||
@ -496,20 +446,6 @@ impl<E: EthSpec> TryInto<BeaconState<E>> for PartialBeaconState<E> {
|
|||||||
next_withdrawal_validator_index
|
next_withdrawal_validator_index
|
||||||
]
|
]
|
||||||
),
|
),
|
||||||
#[cfg(not(feature = "withdrawals"))]
|
|
||||||
PartialBeaconState::Eip4844(inner) => impl_try_into_beacon_state!(
|
|
||||||
inner,
|
|
||||||
Eip4844,
|
|
||||||
BeaconStateEip4844,
|
|
||||||
[
|
|
||||||
previous_epoch_participation,
|
|
||||||
current_epoch_participation,
|
|
||||||
current_sync_committee,
|
|
||||||
next_sync_committee,
|
|
||||||
inactivity_scores,
|
|
||||||
latest_execution_payload_header
|
|
||||||
]
|
|
||||||
),
|
|
||||||
};
|
};
|
||||||
Ok(state)
|
Ok(state)
|
||||||
}
|
}
|
||||||
|
@ -35,5 +35,4 @@ procinfo = { version = "0.4.2", optional = true }
|
|||||||
[features]
|
[features]
|
||||||
default = ["lighthouse"]
|
default = ["lighthouse"]
|
||||||
lighthouse = ["proto_array", "psutil", "procinfo", "store", "slashing_protection"]
|
lighthouse = ["proto_array", "psutil", "procinfo", "store", "slashing_protection"]
|
||||||
withdrawals = ["store/withdrawals"]
|
|
||||||
withdrawals-processing = ["store/withdrawals-processing"]
|
withdrawals-processing = ["store/withdrawals-processing"]
|
@ -43,5 +43,4 @@ arbitrary-fuzz = [
|
|||||||
"eth2_ssz_types/arbitrary",
|
"eth2_ssz_types/arbitrary",
|
||||||
"tree_hash/arbitrary",
|
"tree_hash/arbitrary",
|
||||||
]
|
]
|
||||||
withdrawals = ["types/withdrawals"]
|
|
||||||
withdrawals-processing = []
|
withdrawals-processing = []
|
||||||
|
@ -19,7 +19,7 @@ pub use process_operations::process_operations;
|
|||||||
pub use verify_attestation::{
|
pub use verify_attestation::{
|
||||||
verify_attestation_for_block_inclusion, verify_attestation_for_state,
|
verify_attestation_for_block_inclusion, verify_attestation_for_state,
|
||||||
};
|
};
|
||||||
#[cfg(all(feature = "withdrawals", feature = "withdrawals-processing"))]
|
#[cfg(feature = "withdrawals-processing")]
|
||||||
pub use verify_bls_to_execution_change::verify_bls_to_execution_change;
|
pub use verify_bls_to_execution_change::verify_bls_to_execution_change;
|
||||||
pub use verify_deposit::{
|
pub use verify_deposit::{
|
||||||
get_existing_validator_index, verify_deposit_merkle_proof, verify_deposit_signature,
|
get_existing_validator_index, verify_deposit_merkle_proof, verify_deposit_signature,
|
||||||
@ -36,7 +36,7 @@ pub mod signature_sets;
|
|||||||
pub mod tests;
|
pub mod tests;
|
||||||
mod verify_attestation;
|
mod verify_attestation;
|
||||||
mod verify_attester_slashing;
|
mod verify_attester_slashing;
|
||||||
#[cfg(all(feature = "withdrawals", feature = "withdrawals-processing"))]
|
#[cfg(feature = "withdrawals-processing")]
|
||||||
mod verify_bls_to_execution_change;
|
mod verify_bls_to_execution_change;
|
||||||
mod verify_deposit;
|
mod verify_deposit;
|
||||||
mod verify_exit;
|
mod verify_exit;
|
||||||
@ -165,7 +165,7 @@ pub fn per_block_processing<T: EthSpec, Payload: AbstractExecPayload<T>>(
|
|||||||
// previous block.
|
// previous block.
|
||||||
if is_execution_enabled(state, block.body()) {
|
if is_execution_enabled(state, block.body()) {
|
||||||
let payload = block.body().execution_payload()?;
|
let payload = block.body().execution_payload()?;
|
||||||
#[cfg(all(feature = "withdrawals", feature = "withdrawals-processing"))]
|
#[cfg(feature = "withdrawals-processing")]
|
||||||
process_withdrawals::<T, Payload>(state, payload, spec)?;
|
process_withdrawals::<T, Payload>(state, payload, spec)?;
|
||||||
process_execution_payload::<T, Payload>(state, payload, spec)?;
|
process_execution_payload::<T, Payload>(state, payload, spec)?;
|
||||||
}
|
}
|
||||||
@ -469,7 +469,6 @@ pub fn compute_timestamp_at_slot<T: EthSpec>(
|
|||||||
/// Compute the next batch of withdrawals which should be included in a block.
|
/// Compute the next batch of withdrawals which should be included in a block.
|
||||||
///
|
///
|
||||||
/// https://github.com/ethereum/consensus-specs/blob/dev/specs/capella/beacon-chain.md#new-get_expected_withdrawals
|
/// https://github.com/ethereum/consensus-specs/blob/dev/specs/capella/beacon-chain.md#new-get_expected_withdrawals
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
pub fn get_expected_withdrawals<T: EthSpec>(
|
pub fn get_expected_withdrawals<T: EthSpec>(
|
||||||
state: &BeaconState<T>,
|
state: &BeaconState<T>,
|
||||||
spec: &ChainSpec,
|
spec: &ChainSpec,
|
||||||
@ -525,7 +524,7 @@ pub fn get_expected_withdrawals<T: EthSpec>(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Apply withdrawals to the state.
|
/// Apply withdrawals to the state.
|
||||||
#[cfg(all(feature = "withdrawals", feature = "withdrawals-processing"))]
|
#[cfg(feature = "withdrawals-processing")]
|
||||||
pub fn process_withdrawals<'payload, T: EthSpec, Payload: AbstractExecPayload<T>>(
|
pub fn process_withdrawals<'payload, T: EthSpec, Payload: AbstractExecPayload<T>>(
|
||||||
state: &mut BeaconState<T>,
|
state: &mut BeaconState<T>,
|
||||||
payload: Payload::Ref<'payload>,
|
payload: Payload::Ref<'payload>,
|
||||||
|
@ -170,7 +170,6 @@ where
|
|||||||
// Deposits are not included because they can legally have invalid signatures.
|
// Deposits are not included because they can legally have invalid signatures.
|
||||||
self.include_exits(block)?;
|
self.include_exits(block)?;
|
||||||
self.include_sync_aggregate(block)?;
|
self.include_sync_aggregate(block)?;
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
self.include_bls_to_execution_changes(block)?;
|
self.include_bls_to_execution_changes(block)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
@ -345,7 +344,6 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Include the signature of the block's BLS to execution changes for verification.
|
/// Include the signature of the block's BLS to execution changes for verification.
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
pub fn include_bls_to_execution_changes<Payload: AbstractExecPayload<T>>(
|
pub fn include_bls_to_execution_changes<Payload: AbstractExecPayload<T>>(
|
||||||
&mut self,
|
&mut self,
|
||||||
block: &'a SignedBeaconBlock<T, Payload>,
|
block: &'a SignedBeaconBlock<T, Payload>,
|
||||||
|
@ -34,7 +34,7 @@ pub fn process_operations<'a, T: EthSpec, Payload: AbstractExecPayload<T>>(
|
|||||||
process_deposits(state, block_body.deposits(), spec)?;
|
process_deposits(state, block_body.deposits(), spec)?;
|
||||||
process_exits(state, block_body.voluntary_exits(), verify_signatures, spec)?;
|
process_exits(state, block_body.voluntary_exits(), verify_signatures, spec)?;
|
||||||
|
|
||||||
#[cfg(all(feature = "withdrawals", feature = "withdrawals-processing"))]
|
#[cfg(feature = "withdrawals-processing")]
|
||||||
if let Ok(bls_to_execution_changes) = block_body.bls_to_execution_changes() {
|
if let Ok(bls_to_execution_changes) = block_body.bls_to_execution_changes() {
|
||||||
process_bls_to_execution_changes(state, bls_to_execution_changes, verify_signatures, spec)?;
|
process_bls_to_execution_changes(state, bls_to_execution_changes, verify_signatures, spec)?;
|
||||||
}
|
}
|
||||||
@ -295,7 +295,7 @@ pub fn process_exits<T: EthSpec>(
|
|||||||
///
|
///
|
||||||
/// Returns `Ok(())` if the validation and state updates completed successfully. Otherwise returns
|
/// Returns `Ok(())` if the validation and state updates completed successfully. Otherwise returns
|
||||||
/// an `Err` describing the invalid object or cause of failure.
|
/// an `Err` describing the invalid object or cause of failure.
|
||||||
#[cfg(all(feature = "withdrawals", feature = "withdrawals-processing"))]
|
#[cfg(feature = "withdrawals-processing")]
|
||||||
pub fn process_bls_to_execution_changes<T: EthSpec>(
|
pub fn process_bls_to_execution_changes<T: EthSpec>(
|
||||||
state: &mut BeaconState<T>,
|
state: &mut BeaconState<T>,
|
||||||
bls_to_execution_changes: &[SignedBlsToExecutionChange],
|
bls_to_execution_changes: &[SignedBlsToExecutionChange],
|
||||||
|
@ -56,9 +56,7 @@ pub fn upgrade_to_capella<E: EthSpec>(
|
|||||||
// Execution
|
// Execution
|
||||||
latest_execution_payload_header: pre.latest_execution_payload_header.upgrade_to_capella(),
|
latest_execution_payload_header: pre.latest_execution_payload_header.upgrade_to_capella(),
|
||||||
// Withdrawals
|
// Withdrawals
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
next_withdrawal_index: 0,
|
next_withdrawal_index: 0,
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
next_withdrawal_validator_index: 0,
|
next_withdrawal_validator_index: 0,
|
||||||
// Caches
|
// Caches
|
||||||
total_active_balance: pre.total_active_balance,
|
total_active_balance: pre.total_active_balance,
|
||||||
|
@ -10,12 +10,8 @@ pub fn upgrade_to_eip4844<E: EthSpec>(
|
|||||||
let pre = pre_state.as_capella_mut()?;
|
let pre = pre_state.as_capella_mut()?;
|
||||||
|
|
||||||
// FIXME(sean) This is a hack to let us participate in testnets where capella doesn't exist.
|
// FIXME(sean) This is a hack to let us participate in testnets where capella doesn't exist.
|
||||||
// if we are disabling withdrawals, assume we should fork off of bellatrix.
|
// let previous_fork_version = spec.bellatrix_fork_version;
|
||||||
let previous_fork_version = if cfg!(feature = "withdrawals") {
|
let previous_fork_version = pre.fork.current_version;
|
||||||
pre.fork.current_version
|
|
||||||
} else {
|
|
||||||
spec.bellatrix_fork_version
|
|
||||||
};
|
|
||||||
|
|
||||||
// Where possible, use something like `mem::take` to move fields from behind the &mut
|
// Where possible, use something like `mem::take` to move fields from behind the &mut
|
||||||
// reference. For other fields that don't have a good default value, use `clone`.
|
// reference. For other fields that don't have a good default value, use `clone`.
|
||||||
@ -64,9 +60,7 @@ pub fn upgrade_to_eip4844<E: EthSpec>(
|
|||||||
// Execution
|
// Execution
|
||||||
latest_execution_payload_header: pre.latest_execution_payload_header.upgrade_to_eip4844(),
|
latest_execution_payload_header: pre.latest_execution_payload_header.upgrade_to_eip4844(),
|
||||||
// Withdrawals
|
// Withdrawals
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
next_withdrawal_index: pre.next_withdrawal_index,
|
next_withdrawal_index: pre.next_withdrawal_index,
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
next_withdrawal_validator_index: pre.next_withdrawal_validator_index,
|
next_withdrawal_validator_index: pre.next_withdrawal_validator_index,
|
||||||
// Caches
|
// Caches
|
||||||
total_active_balance: pre.total_active_balance,
|
total_active_balance: pre.total_active_balance,
|
||||||
|
@ -72,4 +72,3 @@ arbitrary-fuzz = [
|
|||||||
"swap_or_not_shuffle/arbitrary",
|
"swap_or_not_shuffle/arbitrary",
|
||||||
"tree_hash/arbitrary",
|
"tree_hash/arbitrary",
|
||||||
]
|
]
|
||||||
withdrawals = []
|
|
||||||
|
@ -502,7 +502,6 @@ impl<T: EthSpec, Payload: AbstractExecPayload<T>> EmptyBlock for BeaconBlockCape
|
|||||||
voluntary_exits: VariableList::empty(),
|
voluntary_exits: VariableList::empty(),
|
||||||
sync_aggregate: SyncAggregate::empty(),
|
sync_aggregate: SyncAggregate::empty(),
|
||||||
execution_payload: Payload::Capella::default(),
|
execution_payload: Payload::Capella::default(),
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
bls_to_execution_changes: VariableList::empty(),
|
bls_to_execution_changes: VariableList::empty(),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@ -532,7 +531,6 @@ impl<T: EthSpec, Payload: AbstractExecPayload<T>> EmptyBlock for BeaconBlockEip4
|
|||||||
voluntary_exits: VariableList::empty(),
|
voluntary_exits: VariableList::empty(),
|
||||||
sync_aggregate: SyncAggregate::empty(),
|
sync_aggregate: SyncAggregate::empty(),
|
||||||
execution_payload: Payload::Eip4844::default(),
|
execution_payload: Payload::Eip4844::default(),
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
bls_to_execution_changes: VariableList::empty(),
|
bls_to_execution_changes: VariableList::empty(),
|
||||||
blob_kzg_commitments: VariableList::empty(),
|
blob_kzg_commitments: VariableList::empty(),
|
||||||
},
|
},
|
||||||
|
@ -62,7 +62,6 @@ pub struct BeaconBlockBody<T: EthSpec, Payload: AbstractExecPayload<T> = FullPay
|
|||||||
#[superstruct(only(Eip4844), partial_getter(rename = "execution_payload_eip4844"))]
|
#[superstruct(only(Eip4844), partial_getter(rename = "execution_payload_eip4844"))]
|
||||||
#[serde(flatten)]
|
#[serde(flatten)]
|
||||||
pub execution_payload: Payload::Eip4844,
|
pub execution_payload: Payload::Eip4844,
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
#[superstruct(only(Capella, Eip4844))]
|
#[superstruct(only(Capella, Eip4844))]
|
||||||
pub bls_to_execution_changes:
|
pub bls_to_execution_changes:
|
||||||
VariableList<SignedBlsToExecutionChange, T::MaxBlsToExecutionChanges>,
|
VariableList<SignedBlsToExecutionChange, T::MaxBlsToExecutionChanges>,
|
||||||
@ -301,7 +300,6 @@ impl<E: EthSpec> From<BeaconBlockBodyCapella<E, FullPayload<E>>>
|
|||||||
voluntary_exits,
|
voluntary_exits,
|
||||||
sync_aggregate,
|
sync_aggregate,
|
||||||
execution_payload: FullPayloadCapella { execution_payload },
|
execution_payload: FullPayloadCapella { execution_payload },
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
bls_to_execution_changes,
|
bls_to_execution_changes,
|
||||||
} = body;
|
} = body;
|
||||||
|
|
||||||
@ -319,7 +317,6 @@ impl<E: EthSpec> From<BeaconBlockBodyCapella<E, FullPayload<E>>>
|
|||||||
execution_payload: BlindedPayloadCapella {
|
execution_payload: BlindedPayloadCapella {
|
||||||
execution_payload_header: From::from(execution_payload.clone()),
|
execution_payload_header: From::from(execution_payload.clone()),
|
||||||
},
|
},
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
bls_to_execution_changes,
|
bls_to_execution_changes,
|
||||||
},
|
},
|
||||||
Some(execution_payload),
|
Some(execution_payload),
|
||||||
@ -345,7 +342,6 @@ impl<E: EthSpec> From<BeaconBlockBodyEip4844<E, FullPayload<E>>>
|
|||||||
voluntary_exits,
|
voluntary_exits,
|
||||||
sync_aggregate,
|
sync_aggregate,
|
||||||
execution_payload: FullPayloadEip4844 { execution_payload },
|
execution_payload: FullPayloadEip4844 { execution_payload },
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
bls_to_execution_changes,
|
bls_to_execution_changes,
|
||||||
blob_kzg_commitments,
|
blob_kzg_commitments,
|
||||||
} = body;
|
} = body;
|
||||||
@ -364,7 +360,6 @@ impl<E: EthSpec> From<BeaconBlockBodyEip4844<E, FullPayload<E>>>
|
|||||||
execution_payload: BlindedPayloadEip4844 {
|
execution_payload: BlindedPayloadEip4844 {
|
||||||
execution_payload_header: From::from(execution_payload.clone()),
|
execution_payload_header: From::from(execution_payload.clone()),
|
||||||
},
|
},
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
bls_to_execution_changes,
|
bls_to_execution_changes,
|
||||||
blob_kzg_commitments,
|
blob_kzg_commitments,
|
||||||
},
|
},
|
||||||
@ -433,7 +428,6 @@ impl<E: EthSpec> BeaconBlockBodyCapella<E, FullPayload<E>> {
|
|||||||
voluntary_exits,
|
voluntary_exits,
|
||||||
sync_aggregate,
|
sync_aggregate,
|
||||||
execution_payload: FullPayloadCapella { execution_payload },
|
execution_payload: FullPayloadCapella { execution_payload },
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
bls_to_execution_changes,
|
bls_to_execution_changes,
|
||||||
} = self;
|
} = self;
|
||||||
|
|
||||||
@ -450,7 +444,6 @@ impl<E: EthSpec> BeaconBlockBodyCapella<E, FullPayload<E>> {
|
|||||||
execution_payload: BlindedPayloadCapella {
|
execution_payload: BlindedPayloadCapella {
|
||||||
execution_payload_header: From::from(execution_payload.clone()),
|
execution_payload_header: From::from(execution_payload.clone()),
|
||||||
},
|
},
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
bls_to_execution_changes: bls_to_execution_changes.clone(),
|
bls_to_execution_changes: bls_to_execution_changes.clone(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -469,7 +462,6 @@ impl<E: EthSpec> BeaconBlockBodyEip4844<E, FullPayload<E>> {
|
|||||||
voluntary_exits,
|
voluntary_exits,
|
||||||
sync_aggregate,
|
sync_aggregate,
|
||||||
execution_payload: FullPayloadEip4844 { execution_payload },
|
execution_payload: FullPayloadEip4844 { execution_payload },
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
bls_to_execution_changes,
|
bls_to_execution_changes,
|
||||||
blob_kzg_commitments,
|
blob_kzg_commitments,
|
||||||
} = self;
|
} = self;
|
||||||
@ -487,7 +479,6 @@ impl<E: EthSpec> BeaconBlockBodyEip4844<E, FullPayload<E>> {
|
|||||||
execution_payload: BlindedPayloadEip4844 {
|
execution_payload: BlindedPayloadEip4844 {
|
||||||
execution_payload_header: From::from(execution_payload.clone()),
|
execution_payload_header: From::from(execution_payload.clone()),
|
||||||
},
|
},
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
bls_to_execution_changes: bls_to_execution_changes.clone(),
|
bls_to_execution_changes: bls_to_execution_changes.clone(),
|
||||||
blob_kzg_commitments: blob_kzg_commitments.clone(),
|
blob_kzg_commitments: blob_kzg_commitments.clone(),
|
||||||
}
|
}
|
||||||
|
@ -297,10 +297,8 @@ where
|
|||||||
pub latest_execution_payload_header: ExecutionPayloadHeaderEip4844<T>,
|
pub latest_execution_payload_header: ExecutionPayloadHeaderEip4844<T>,
|
||||||
|
|
||||||
// Withdrawals
|
// Withdrawals
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
#[superstruct(only(Capella, Eip4844), partial_getter(copy))]
|
#[superstruct(only(Capella, Eip4844), partial_getter(copy))]
|
||||||
pub next_withdrawal_index: u64,
|
pub next_withdrawal_index: u64,
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
#[superstruct(only(Capella, Eip4844), partial_getter(copy))]
|
#[superstruct(only(Capella, Eip4844), partial_getter(copy))]
|
||||||
pub next_withdrawal_validator_index: u64,
|
pub next_withdrawal_validator_index: u64,
|
||||||
|
|
||||||
|
@ -336,11 +336,9 @@ impl<T: EthSpec> BeaconTreeHashCacheInner<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Withdrawal indices (Capella and later).
|
// Withdrawal indices (Capella and later).
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
if let Ok(next_withdrawal_index) = state.next_withdrawal_index() {
|
if let Ok(next_withdrawal_index) = state.next_withdrawal_index() {
|
||||||
hasher.write(next_withdrawal_index.tree_hash_root().as_bytes())?;
|
hasher.write(next_withdrawal_index.tree_hash_root().as_bytes())?;
|
||||||
}
|
}
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
if let Ok(next_withdrawal_validator_index) = state.next_withdrawal_validator_index() {
|
if let Ok(next_withdrawal_validator_index) = state.next_withdrawal_validator_index() {
|
||||||
hasher.write(next_withdrawal_validator_index.tree_hash_root().as_bytes())?;
|
hasher.write(next_withdrawal_validator_index.tree_hash_root().as_bytes())?;
|
||||||
}
|
}
|
||||||
|
@ -80,7 +80,6 @@ pub struct ExecutionPayload<T: EthSpec> {
|
|||||||
pub block_hash: ExecutionBlockHash,
|
pub block_hash: ExecutionBlockHash,
|
||||||
#[serde(with = "ssz_types::serde_utils::list_of_hex_var_list")]
|
#[serde(with = "ssz_types::serde_utils::list_of_hex_var_list")]
|
||||||
pub transactions: Transactions<T>,
|
pub transactions: Transactions<T>,
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
#[superstruct(only(Capella, Eip4844))]
|
#[superstruct(only(Capella, Eip4844))]
|
||||||
pub withdrawals: Withdrawals<T>,
|
pub withdrawals: Withdrawals<T>,
|
||||||
}
|
}
|
||||||
|
@ -75,7 +75,6 @@ pub struct ExecutionPayloadHeader<T: EthSpec> {
|
|||||||
pub block_hash: ExecutionBlockHash,
|
pub block_hash: ExecutionBlockHash,
|
||||||
#[superstruct(getter(copy))]
|
#[superstruct(getter(copy))]
|
||||||
pub transactions_root: Hash256,
|
pub transactions_root: Hash256,
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
#[superstruct(only(Capella, Eip4844))]
|
#[superstruct(only(Capella, Eip4844))]
|
||||||
#[superstruct(getter(copy))]
|
#[superstruct(getter(copy))]
|
||||||
pub withdrawals_root: Hash256,
|
pub withdrawals_root: Hash256,
|
||||||
@ -128,7 +127,6 @@ impl<T: EthSpec> ExecutionPayloadHeaderMerge<T> {
|
|||||||
base_fee_per_gas: self.base_fee_per_gas,
|
base_fee_per_gas: self.base_fee_per_gas,
|
||||||
block_hash: self.block_hash,
|
block_hash: self.block_hash,
|
||||||
transactions_root: self.transactions_root,
|
transactions_root: self.transactions_root,
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
withdrawals_root: Hash256::zero(),
|
withdrawals_root: Hash256::zero(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -153,7 +151,6 @@ impl<T: EthSpec> ExecutionPayloadHeaderCapella<T> {
|
|||||||
excess_data_gas: Uint256::zero(),
|
excess_data_gas: Uint256::zero(),
|
||||||
block_hash: self.block_hash,
|
block_hash: self.block_hash,
|
||||||
transactions_root: self.transactions_root,
|
transactions_root: self.transactions_root,
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
withdrawals_root: self.withdrawals_root,
|
withdrawals_root: self.withdrawals_root,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -196,7 +193,6 @@ impl<T: EthSpec> From<ExecutionPayloadCapella<T>> for ExecutionPayloadHeaderCape
|
|||||||
base_fee_per_gas: payload.base_fee_per_gas,
|
base_fee_per_gas: payload.base_fee_per_gas,
|
||||||
block_hash: payload.block_hash,
|
block_hash: payload.block_hash,
|
||||||
transactions_root: payload.transactions.tree_hash_root(),
|
transactions_root: payload.transactions.tree_hash_root(),
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
withdrawals_root: payload.withdrawals.tree_hash_root(),
|
withdrawals_root: payload.withdrawals.tree_hash_root(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -219,7 +215,6 @@ impl<T: EthSpec> From<ExecutionPayloadEip4844<T>> for ExecutionPayloadHeaderEip4
|
|||||||
excess_data_gas: payload.excess_data_gas,
|
excess_data_gas: payload.excess_data_gas,
|
||||||
block_hash: payload.block_hash,
|
block_hash: payload.block_hash,
|
||||||
transactions_root: payload.transactions.tree_hash_root(),
|
transactions_root: payload.transactions.tree_hash_root(),
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
withdrawals_root: payload.withdrawals.tree_hash_root(),
|
withdrawals_root: payload.withdrawals.tree_hash_root(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,6 @@ pub trait ExecPayload<T: EthSpec>: Debug + Clone + PartialEq + Hash + TreeHash +
|
|||||||
fn gas_limit(&self) -> u64;
|
fn gas_limit(&self) -> u64;
|
||||||
fn transactions(&self) -> Option<&Transactions<T>>;
|
fn transactions(&self) -> Option<&Transactions<T>>;
|
||||||
/// fork-specific fields
|
/// fork-specific fields
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
fn withdrawals_root(&self) -> Result<Hash256, Error>;
|
fn withdrawals_root(&self) -> Result<Hash256, Error>;
|
||||||
|
|
||||||
/// Is this a default payload with 0x0 roots for transactions and withdrawals?
|
/// Is this a default payload with 0x0 roots for transactions and withdrawals?
|
||||||
@ -241,7 +240,6 @@ impl<T: EthSpec> ExecPayload<T> for FullPayload<T> {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
fn withdrawals_root(&self) -> Result<Hash256, Error> {
|
fn withdrawals_root(&self) -> Result<Hash256, Error> {
|
||||||
match self {
|
match self {
|
||||||
FullPayload::Merge(_) => Err(Error::IncorrectStateVariant),
|
FullPayload::Merge(_) => Err(Error::IncorrectStateVariant),
|
||||||
@ -343,7 +341,6 @@ impl<'b, T: EthSpec> ExecPayload<T> for FullPayloadRef<'b, T> {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
fn withdrawals_root(&self) -> Result<Hash256, Error> {
|
fn withdrawals_root(&self) -> Result<Hash256, Error> {
|
||||||
match self {
|
match self {
|
||||||
FullPayloadRef::Merge(_) => Err(Error::IncorrectStateVariant),
|
FullPayloadRef::Merge(_) => Err(Error::IncorrectStateVariant),
|
||||||
@ -523,7 +520,6 @@ impl<T: EthSpec> ExecPayload<T> for BlindedPayload<T> {
|
|||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
fn withdrawals_root(&self) -> Result<Hash256, Error> {
|
fn withdrawals_root(&self) -> Result<Hash256, Error> {
|
||||||
match self {
|
match self {
|
||||||
BlindedPayload::Merge(_) => Err(Error::IncorrectStateVariant),
|
BlindedPayload::Merge(_) => Err(Error::IncorrectStateVariant),
|
||||||
@ -614,7 +610,6 @@ impl<'b, T: EthSpec> ExecPayload<T> for BlindedPayloadRef<'b, T> {
|
|||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
fn withdrawals_root(&self) -> Result<Hash256, Error> {
|
fn withdrawals_root(&self) -> Result<Hash256, Error> {
|
||||||
match self {
|
match self {
|
||||||
BlindedPayloadRef::Merge(_) => Err(Error::IncorrectStateVariant),
|
BlindedPayloadRef::Merge(_) => Err(Error::IncorrectStateVariant),
|
||||||
@ -712,7 +707,6 @@ macro_rules! impl_exec_payload_common {
|
|||||||
f(self)
|
f(self)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
fn withdrawals_root(&self) -> Result<Hash256, Error> {
|
fn withdrawals_root(&self) -> Result<Hash256, Error> {
|
||||||
let g = $g;
|
let g = $g;
|
||||||
g(self)
|
g(self)
|
||||||
|
@ -341,7 +341,6 @@ impl<E: EthSpec> SignedBeaconBlockCapella<E, BlindedPayload<E>> {
|
|||||||
voluntary_exits,
|
voluntary_exits,
|
||||||
sync_aggregate,
|
sync_aggregate,
|
||||||
execution_payload: BlindedPayloadCapella { .. },
|
execution_payload: BlindedPayloadCapella { .. },
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
bls_to_execution_changes,
|
bls_to_execution_changes,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -364,7 +363,6 @@ impl<E: EthSpec> SignedBeaconBlockCapella<E, BlindedPayload<E>> {
|
|||||||
voluntary_exits,
|
voluntary_exits,
|
||||||
sync_aggregate,
|
sync_aggregate,
|
||||||
execution_payload: FullPayloadCapella { execution_payload },
|
execution_payload: FullPayloadCapella { execution_payload },
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
bls_to_execution_changes,
|
bls_to_execution_changes,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
@ -397,7 +395,6 @@ impl<E: EthSpec> SignedBeaconBlockEip4844<E, BlindedPayload<E>> {
|
|||||||
voluntary_exits,
|
voluntary_exits,
|
||||||
sync_aggregate,
|
sync_aggregate,
|
||||||
execution_payload: BlindedPayloadEip4844 { .. },
|
execution_payload: BlindedPayloadEip4844 { .. },
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
bls_to_execution_changes,
|
bls_to_execution_changes,
|
||||||
blob_kzg_commitments,
|
blob_kzg_commitments,
|
||||||
},
|
},
|
||||||
@ -421,7 +418,6 @@ impl<E: EthSpec> SignedBeaconBlockEip4844<E, BlindedPayload<E>> {
|
|||||||
voluntary_exits,
|
voluntary_exits,
|
||||||
sync_aggregate,
|
sync_aggregate,
|
||||||
execution_payload: FullPayloadEip4844 { execution_payload },
|
execution_payload: FullPayloadEip4844 { execution_payload },
|
||||||
#[cfg(feature = "withdrawals")]
|
|
||||||
bls_to_execution_changes,
|
bls_to_execution_changes,
|
||||||
blob_kzg_commitments,
|
blob_kzg_commitments,
|
||||||
},
|
},
|
||||||
|
@ -24,8 +24,6 @@ gnosis = []
|
|||||||
slasher-mdbx = ["slasher/mdbx"]
|
slasher-mdbx = ["slasher/mdbx"]
|
||||||
# Support slasher LMDB backend.
|
# Support slasher LMDB backend.
|
||||||
slasher-lmdb = ["slasher/lmdb"]
|
slasher-lmdb = ["slasher/lmdb"]
|
||||||
# Support for inclusion of withdrawals fields in all capella consensus types in all APIs.
|
|
||||||
withdrawals = ["types/withdrawals", "beacon_node/withdrawals"]
|
|
||||||
# Support for withdrawals consensus processing logic.
|
# Support for withdrawals consensus processing logic.
|
||||||
withdrawals-processing = ["beacon_node/withdrawals-processing"]
|
withdrawals-processing = ["beacon_node/withdrawals-processing"]
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ use crate::case_result::compare_beacon_state_results_without_caches;
|
|||||||
use crate::decode::{ssz_decode_file, ssz_decode_file_with, ssz_decode_state, yaml_decode_file};
|
use crate::decode::{ssz_decode_file, ssz_decode_file_with, ssz_decode_state, yaml_decode_file};
|
||||||
use crate::testing_spec;
|
use crate::testing_spec;
|
||||||
use serde_derive::Deserialize;
|
use serde_derive::Deserialize;
|
||||||
#[cfg(all(feature = "withdrawals", feature = "withdrawals-processing"))]
|
#[cfg(feature = "withdrawals-processing")]
|
||||||
use state_processing::per_block_processing::process_operations::{
|
use state_processing::per_block_processing::process_operations::{
|
||||||
process_bls_to_execution_changes, process_bls_to_execution_changes,
|
process_bls_to_execution_changes, process_bls_to_execution_changes,
|
||||||
};
|
};
|
||||||
@ -22,7 +22,7 @@ use state_processing::{
|
|||||||
};
|
};
|
||||||
use std::fmt::Debug;
|
use std::fmt::Debug;
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
#[cfg(all(feature = "withdrawals", feature = "withdrawals-processing"))]
|
#[cfg(feature = "withdrawals-processing")]
|
||||||
use types::SignedBlsToExecutionChange;
|
use types::SignedBlsToExecutionChange;
|
||||||
use types::{
|
use types::{
|
||||||
Attestation, AttesterSlashing, BeaconBlock, BeaconState, BlindedPayload, ChainSpec, Deposit,
|
Attestation, AttesterSlashing, BeaconBlock, BeaconState, BlindedPayload, ChainSpec, Deposit,
|
||||||
@ -42,7 +42,7 @@ struct ExecutionMetadata {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Newtype for testing withdrawals.
|
/// Newtype for testing withdrawals.
|
||||||
#[cfg(all(feature = "withdrawals", feature = "withdrawals-processing"))]
|
#[cfg(feature = "withdrawals-processing")]
|
||||||
#[derive(Debug, Clone, Deserialize)]
|
#[derive(Debug, Clone, Deserialize)]
|
||||||
pub struct WithdrawalsPayload<T: EthSpec> {
|
pub struct WithdrawalsPayload<T: EthSpec> {
|
||||||
payload: FullPayload<T>,
|
payload: FullPayload<T>,
|
||||||
@ -341,7 +341,7 @@ impl<E: EthSpec> Operation<E> for BlindedPayload<E> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(all(feature = "withdrawals", feature = "withdrawals-processing"))]
|
#[cfg(feature = "withdrawals-processing")]
|
||||||
impl<E: EthSpec> Operation<E> for WithdrawalsPayload<E> {
|
impl<E: EthSpec> Operation<E> for WithdrawalsPayload<E> {
|
||||||
fn handler_name() -> String {
|
fn handler_name() -> String {
|
||||||
"withdrawals".into()
|
"withdrawals".into()
|
||||||
@ -374,7 +374,7 @@ impl<E: EthSpec> Operation<E> for WithdrawalsPayload<E> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(all(feature = "withdrawals", feature = "withdrawals-processing"))]
|
#[cfg(feature = "withdrawals-processing")]
|
||||||
impl<E: EthSpec> Operation<E> for SignedBlsToExecutionChange {
|
impl<E: EthSpec> Operation<E> for SignedBlsToExecutionChange {
|
||||||
fn handler_name() -> String {
|
fn handler_name() -> String {
|
||||||
"bls_to_execution_change".into()
|
"bls_to_execution_change".into()
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
pub use case_result::CaseResult;
|
pub use case_result::CaseResult;
|
||||||
#[cfg(all(feature = "withdrawals", feature = "withdrawals-processing"))]
|
#[cfg(feature = "withdrawals-processing")]
|
||||||
pub use cases::WithdrawalsPayload;
|
pub use cases::WithdrawalsPayload;
|
||||||
pub use cases::{
|
pub use cases::{
|
||||||
Case, EffectiveBalanceUpdates, Eth1DataReset, HistoricalRootsUpdate, InactivityUpdates,
|
Case, EffectiveBalanceUpdates, Eth1DataReset, HistoricalRootsUpdate, InactivityUpdates,
|
||||||
|
@ -82,14 +82,14 @@ fn operations_execution_payload_blinded() {
|
|||||||
OperationsHandler::<MainnetEthSpec, BlindedPayload<_>>::default().run();
|
OperationsHandler::<MainnetEthSpec, BlindedPayload<_>>::default().run();
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(all(feature = "withdrawals", feature = "withdrawals-processing"))]
|
#[cfg(feature = "withdrawals-processing")]
|
||||||
#[test]
|
#[test]
|
||||||
fn operations_withdrawals() {
|
fn operations_withdrawals() {
|
||||||
OperationsHandler::<MinimalEthSpec, WithdrawalsPayload<_>>::default().run();
|
OperationsHandler::<MinimalEthSpec, WithdrawalsPayload<_>>::default().run();
|
||||||
OperationsHandler::<MainnetEthSpec, WithdrawalsPayload<_>>::default().run();
|
OperationsHandler::<MainnetEthSpec, WithdrawalsPayload<_>>::default().run();
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(all(feature = "withdrawals", feature = "withdrawals-processing"))]
|
#[cfg(feature = "withdrawals-processing")]
|
||||||
#[test]
|
#[test]
|
||||||
fn operations_bls_to_execution_change() {
|
fn operations_bls_to_execution_change() {
|
||||||
OperationsHandler::<MinimalEthSpec, SignedBlsToExecutionChange>::default().run();
|
OperationsHandler::<MinimalEthSpec, SignedBlsToExecutionChange>::default().run();
|
||||||
|
@ -24,4 +24,3 @@ fork_choice = { path = "../../consensus/fork_choice" }
|
|||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = []
|
default = []
|
||||||
withdrawals = []
|
|
Loading…
Reference in New Issue
Block a user