Isolate withdrawals-processing Feature (#3854)

This commit is contained in:
ethDreamer 2023-01-08 18:05:28 -06:00 committed by GitHub
parent 6b72f45cad
commit cb94f639b0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 74 additions and 167 deletions

View File

@ -89,12 +89,12 @@ build-release-tarballs:
# Runs the full workspace tests in **release**, without downloading any additional # Runs the full workspace tests in **release**, without downloading any additional
# test vectors. # test vectors.
test-release: test-release:
cargo test --workspace --release --exclude ef_tests --exclude beacon_chain --exclude slasher cargo test --workspace --features withdrawals-processing --release --exclude ef_tests --exclude beacon_chain --exclude slasher
# Runs the full workspace tests in **debug**, without downloading any additional test # Runs the full workspace tests in **debug**, without downloading any additional test
# vectors. # vectors.
test-debug: test-debug:
cargo test --workspace --exclude ef_tests --exclude beacon_chain cargo test --workspace --features withdrawals-processing --exclude ef_tests --exclude beacon_chain
# Runs cargo-fmt (linter). # Runs cargo-fmt (linter).
cargo-fmt: cargo-fmt:

View File

@ -17,7 +17,6 @@ withdrawals-processing = [
"beacon_chain/withdrawals-processing", "beacon_chain/withdrawals-processing",
"store/withdrawals-processing", "store/withdrawals-processing",
"execution_layer/withdrawals-processing", "execution_layer/withdrawals-processing",
"http_api/withdrawals-processing",
] ]
[dependencies] [dependencies]

View File

@ -12,9 +12,7 @@ participation_metrics = [] # Exposes validator participation metrics to Prometh
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-processing = [ withdrawals-processing = [
"state_processing/withdrawals-processing", "state_processing/withdrawals-processing",
"store/withdrawals-processing",
"execution_layer/withdrawals-processing", "execution_layer/withdrawals-processing",
"operation_pool/withdrawals-processing"
] ]
[dev-dependencies] [dev-dependencies]

View File

@ -362,7 +362,6 @@ pub struct BeaconChain<T: BeaconChainTypes> {
pub(crate) observed_attester_slashings: pub(crate) observed_attester_slashings:
Mutex<ObservedOperations<AttesterSlashing<T::EthSpec>, T::EthSpec>>, Mutex<ObservedOperations<AttesterSlashing<T::EthSpec>, T::EthSpec>>,
/// Maintains a record of which validators we've seen BLS to execution changes for. /// Maintains a record of which validators we've seen BLS to execution changes for.
#[cfg(feature = "withdrawals-processing")]
pub(crate) observed_bls_to_execution_changes: pub(crate) observed_bls_to_execution_changes:
Mutex<ObservedOperations<SignedBlsToExecutionChange, T::EthSpec>>, Mutex<ObservedOperations<SignedBlsToExecutionChange, T::EthSpec>>,
/// The most recently validated light client finality update received on gossip. /// The most recently validated light client finality update received on gossip.
@ -2232,29 +2231,18 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
&self, &self,
bls_to_execution_change: SignedBlsToExecutionChange, bls_to_execution_change: SignedBlsToExecutionChange,
) -> Result<ObservationOutcome<SignedBlsToExecutionChange, T::EthSpec>, Error> { ) -> Result<ObservationOutcome<SignedBlsToExecutionChange, T::EthSpec>, Error> {
#[cfg(feature = "withdrawals-processing")] let current_fork = self.spec.fork_name_at_slot::<T::EthSpec>(self.slot()?);
{ if let ForkName::Base | ForkName::Altair | ForkName::Merge = current_fork {
let current_fork = self.spec.fork_name_at_slot::<T::EthSpec>(self.slot()?); // Disallow BLS to execution changes prior to the Capella fork.
if let ForkName::Base | ForkName::Altair | ForkName::Merge = current_fork { return Err(Error::BlsToExecutionChangeBadFork(current_fork));
// Disallow BLS to execution changes prior to the Capella fork.
return Err(Error::BlsToExecutionChangeBadFork(current_fork));
}
let wall_clock_state = self.wall_clock_state()?;
Ok(self
.observed_bls_to_execution_changes
.lock()
.verify_and_observe(bls_to_execution_change, &wall_clock_state, &self.spec)?)
} }
// TODO: remove this whole block once withdrawals-processing is removed let wall_clock_state = self.wall_clock_state()?;
#[cfg(not(feature = "withdrawals-processing"))]
{ Ok(self
#[allow(clippy::drop_non_drop)] .observed_bls_to_execution_changes
drop(bls_to_execution_change); .lock()
Ok(ObservationOutcome::AlreadyKnown) .verify_and_observe(bls_to_execution_change, &wall_clock_state, &self.spec)?)
}
} }
/// Import a BLS to execution change to the op pool. /// Import a BLS to execution change to the op pool.
@ -2263,12 +2251,8 @@ impl<T: BeaconChainTypes> BeaconChain<T> {
bls_to_execution_change: SigVerifiedOp<SignedBlsToExecutionChange, T::EthSpec>, bls_to_execution_change: SigVerifiedOp<SignedBlsToExecutionChange, T::EthSpec>,
) { ) {
if self.eth1_chain.is_some() { if self.eth1_chain.is_some() {
#[cfg(feature = "withdrawals-processing")]
self.op_pool self.op_pool
.insert_bls_to_execution_change(bls_to_execution_change); .insert_bls_to_execution_change(bls_to_execution_change);
#[cfg(not(feature = "withdrawals-processing"))]
drop(bls_to_execution_change);
} }
} }

View File

@ -798,7 +798,6 @@ where
observed_voluntary_exits: <_>::default(), observed_voluntary_exits: <_>::default(),
observed_proposer_slashings: <_>::default(), observed_proposer_slashings: <_>::default(),
observed_attester_slashings: <_>::default(), observed_attester_slashings: <_>::default(),
#[cfg(feature = "withdrawals-processing")]
observed_bls_to_execution_changes: <_>::default(), observed_bls_to_execution_changes: <_>::default(),
latest_seen_finality_update: <_>::default(), latest_seen_finality_update: <_>::default(),
latest_seen_optimistic_update: <_>::default(), latest_seen_optimistic_update: <_>::default(),

View File

@ -6,12 +6,9 @@ use std::collections::HashSet;
use std::marker::PhantomData; use std::marker::PhantomData;
use types::{ use types::{
AttesterSlashing, BeaconState, ChainSpec, EthSpec, ForkName, ProposerSlashing, AttesterSlashing, BeaconState, ChainSpec, EthSpec, ForkName, ProposerSlashing,
SignedVoluntaryExit, Slot, SignedBlsToExecutionChange, SignedVoluntaryExit, Slot,
}; };
#[cfg(feature = "withdrawals-processing")]
use types::SignedBlsToExecutionChange;
/// Number of validator indices to store on the stack in `observed_validators`. /// Number of validator indices to store on the stack in `observed_validators`.
pub const SMALL_VEC_SIZE: usize = 8; pub const SMALL_VEC_SIZE: usize = 8;
@ -83,7 +80,6 @@ impl<E: EthSpec> ObservableOperation<E> for AttesterSlashing<E> {
} }
} }
#[cfg(feature = "withdrawals-processing")]
impl<E: EthSpec> ObservableOperation<E> for SignedBlsToExecutionChange { impl<E: EthSpec> ObservableOperation<E> for SignedBlsToExecutionChange {
fn observed_validators(&self) -> SmallVec<[u64; SMALL_VEC_SIZE]> { fn observed_validators(&self) -> SmallVec<[u64; SMALL_VEC_SIZE]> {
smallvec![self.message.validator_index] smallvec![self.message.validator_index]

View File

@ -5,7 +5,7 @@ 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-processing = ["state_processing/withdrawals-processing", "eth2/withdrawals-processing"] withdrawals-processing = ["state_processing/withdrawals-processing"]
[dependencies] [dependencies]
types = { path = "../../consensus/types"} types = { path = "../../consensus/types"}

View File

@ -5,9 +5,6 @@ authors = ["Paul Hauner <paul@paulhauner.com>"]
edition = "2021" edition = "2021"
autotests = false # using a single test binary compiles faster autotests = false # using a single test binary compiles faster
[features]
withdrawals-processing = []
[dependencies] [dependencies]
warp = { version = "0.3.2", features = ["tls"] } warp = { version = "0.3.2", features = ["tls"] }
serde = { version = "1.0.116", features = ["derive"] } serde = { version = "1.0.116", features = ["derive"] }

View File

@ -1687,16 +1687,12 @@ pub fn serve<T: BeaconChainTypes>(
match chain.verify_bls_to_execution_change_for_gossip(address_change) { match chain.verify_bls_to_execution_change_for_gossip(address_change) {
Ok(ObservationOutcome::New(verified_address_change)) => { Ok(ObservationOutcome::New(verified_address_change)) => {
#[cfg(feature = "withdrawals-processing")] publish_pubsub_message(
{ &network_tx,
publish_pubsub_message( PubsubMessage::BlsToExecutionChange(Box::new(
&network_tx, verified_address_change.as_inner().clone(),
PubsubMessage::BlsToExecutionChange(Box::new( )),
verified_address_change.as_inner().clone(), )?;
)),
)?;
}
chain.import_bls_to_execution_change(verified_address_change); chain.import_bls_to_execution_change(verified_address_change);
} }
Ok(ObservationOutcome::AlreadyKnown) => { Ok(ObservationOutcome::AlreadyKnown) => {

View File

@ -4,9 +4,6 @@ version = "0.2.0"
authors = ["Michael Sproul <michael@sigmaprime.io>"] authors = ["Michael Sproul <michael@sigmaprime.io>"]
edition = "2021" edition = "2021"
[features]
withdrawals-processing = []
[dependencies] [dependencies]
derivative = "2.1.1" derivative = "2.1.1"
itertools = "0.10.0" itertools = "0.10.0"

View File

@ -51,7 +51,6 @@ pub struct OperationPool<T: EthSpec + Default> {
/// Map from exiting validator to their exit data. /// Map from exiting validator to their exit data.
voluntary_exits: RwLock<HashMap<u64, SigVerifiedOp<SignedVoluntaryExit, T>>>, voluntary_exits: RwLock<HashMap<u64, SigVerifiedOp<SignedVoluntaryExit, T>>>,
/// Map from credential changing validator to their execution change data. /// Map from credential changing validator to their execution change data.
#[cfg(feature = "withdrawals-processing")]
bls_to_execution_changes: RwLock<HashMap<u64, SigVerifiedOp<SignedBlsToExecutionChange, T>>>, bls_to_execution_changes: RwLock<HashMap<u64, SigVerifiedOp<SignedBlsToExecutionChange, T>>>,
/// Reward cache for accelerating attestation packing. /// Reward cache for accelerating attestation packing.
reward_cache: RwLock<RewardCache>, reward_cache: RwLock<RewardCache>,
@ -518,17 +517,10 @@ impl<T: EthSpec> OperationPool<T> {
&self, &self,
verified_change: SigVerifiedOp<SignedBlsToExecutionChange, T>, verified_change: SigVerifiedOp<SignedBlsToExecutionChange, T>,
) { ) {
#[cfg(feature = "withdrawals-processing")] self.bls_to_execution_changes.write().insert(
{ verified_change.as_inner().message.validator_index,
self.bls_to_execution_changes.write().insert( verified_change,
verified_change.as_inner().message.validator_index, );
verified_change,
);
}
#[cfg(not(feature = "withdrawals-processing"))]
{
drop(verified_change);
}
} }
/// Get a list of execution changes for inclusion in a block. /// Get a list of execution changes for inclusion in a block.
@ -539,32 +531,19 @@ impl<T: EthSpec> OperationPool<T> {
state: &BeaconState<T>, state: &BeaconState<T>,
spec: &ChainSpec, spec: &ChainSpec,
) -> Vec<SignedBlsToExecutionChange> { ) -> Vec<SignedBlsToExecutionChange> {
#[cfg(feature = "withdrawals-processing")] filter_limit_operations(
{ self.bls_to_execution_changes.read().values(),
filter_limit_operations( |address_change| {
self.bls_to_execution_changes.read().values(), address_change.signature_is_still_valid(&state.fork())
|address_change| { && state
address_change.signature_is_still_valid(&state.fork()) .get_validator(address_change.as_inner().message.validator_index as usize)
&& state .map_or(false, |validator| {
.get_validator( !validator.has_eth1_withdrawal_credential(spec)
address_change.as_inner().message.validator_index as usize, })
) },
.map_or(false, |validator| { |address_change| address_change.as_inner().clone(),
!validator.has_eth1_withdrawal_credential(spec) T::MaxBlsToExecutionChanges::to_usize(),
}) )
},
|address_change| address_change.as_inner().clone(),
T::MaxBlsToExecutionChanges::to_usize(),
)
}
// TODO: remove this whole block once withdrwals-processing is removed
#[cfg(not(feature = "withdrawals-processing"))]
{
#[allow(clippy::drop_copy)]
drop((state, spec));
vec![]
}
} }
/// Prune BLS to execution changes that have been applied to the state more than 1 block ago. /// Prune BLS to execution changes that have been applied to the state more than 1 block ago.
@ -579,32 +558,22 @@ impl<T: EthSpec> OperationPool<T> {
head_state: &BeaconState<T>, head_state: &BeaconState<T>,
spec: &ChainSpec, spec: &ChainSpec,
) { ) {
#[cfg(feature = "withdrawals-processing")] prune_validator_hash_map(
{ &mut self.bls_to_execution_changes.write(),
prune_validator_hash_map( |validator_index, validator| {
&mut self.bls_to_execution_changes.write(), validator.has_eth1_withdrawal_credential(spec)
|validator_index, validator| { && head_block
validator.has_eth1_withdrawal_credential(spec) .message()
&& head_block .body()
.message() .bls_to_execution_changes()
.body() .map_or(true, |recent_changes| {
.bls_to_execution_changes() !recent_changes
.map_or(true, |recent_changes| { .iter()
!recent_changes .any(|c| c.message.validator_index == validator_index)
.iter() })
.any(|c| c.message.validator_index == validator_index) },
}) head_state,
}, );
head_state,
);
}
// TODO: remove this whole block once withdrwals-processing is removed
#[cfg(not(feature = "withdrawals-processing"))]
{
#[allow(clippy::drop_copy)]
drop((head_block, head_state, spec));
}
} }
/// Prune all types of transactions given the latest head state and head fork. /// Prune all types of transactions given the latest head state and head fork.
@ -691,17 +660,11 @@ impl<T: EthSpec> OperationPool<T> {
/// ///
/// This method may return objects that are invalid for block inclusion. /// This method may return objects that are invalid for block inclusion.
pub fn get_all_bls_to_execution_changes(&self) -> Vec<SignedBlsToExecutionChange> { pub fn get_all_bls_to_execution_changes(&self) -> Vec<SignedBlsToExecutionChange> {
#[cfg(feature = "withdrawals-processing")] self.bls_to_execution_changes
{ .read()
self.bls_to_execution_changes .iter()
.read() .map(|(_, address_change)| address_change.as_inner().clone())
.iter() .collect()
.map(|(_, address_change)| address_change.as_inner().clone())
.collect()
}
#[cfg(not(feature = "withdrawals-processing"))]
vec![]
} }
} }

View File

@ -143,7 +143,6 @@ impl<T: EthSpec> PersistedOperationPool<T> {
proposer_slashings, proposer_slashings,
voluntary_exits, voluntary_exits,
// FIXME(capella): implement schema migration for address changes in op pool // FIXME(capella): implement schema migration for address changes in op pool
#[cfg(feature = "withdrawals-processing")]
bls_to_execution_changes: Default::default(), bls_to_execution_changes: Default::default(),
reward_cache: Default::default(), reward_cache: Default::default(),
_phantom: Default::default(), _phantom: Default::default(),

View File

@ -35,4 +35,3 @@ 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-processing = ["store/withdrawals-processing"]

View File

@ -19,7 +19,6 @@ 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(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,13 +35,11 @@ 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(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;
mod verify_proposer_slashing; mod verify_proposer_slashing;
#[cfg(feature = "withdrawals-processing")]
use crate::common::decrease_balance; use crate::common::decrease_balance;
#[cfg(feature = "arbitrary-fuzz")] #[cfg(feature = "arbitrary-fuzz")]
@ -165,7 +162,6 @@ 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(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)?;
} }
@ -524,12 +520,14 @@ pub fn get_expected_withdrawals<T: EthSpec>(
} }
/// Apply withdrawals to the state. /// Apply withdrawals to the state.
#[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>,
spec: &ChainSpec, spec: &ChainSpec,
) -> Result<(), BlockProcessingError> { ) -> Result<(), BlockProcessingError> {
if cfg!(not(feature = "withdrawals-processing")) {
return Ok(());
}
match state { match state {
BeaconState::Merge(_) => Ok(()), BeaconState::Merge(_) => Ok(()),
BeaconState::Capella(_) | BeaconState::Eip4844(_) => { BeaconState::Capella(_) | BeaconState::Eip4844(_) => {

View File

@ -34,7 +34,6 @@ 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(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,13 +294,15 @@ 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(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],
verify_signatures: VerifySignatures, verify_signatures: VerifySignatures,
spec: &ChainSpec, spec: &ChainSpec,
) -> Result<(), BlockProcessingError> { ) -> Result<(), BlockProcessingError> {
if cfg!(not(feature = "withdrawals-processing")) {
return Ok(());
}
for (i, signed_address_change) in bls_to_execution_changes.iter().enumerate() { for (i, signed_address_change) in bls_to_execution_changes.iter().enumerate() {
verify_bls_to_execution_change(state, signed_address_change, verify_signatures, spec) verify_bls_to_execution_change(state, signed_address_change, verify_signatures, spec)
.map_err(|e| e.into_with_index(i))?; .map_err(|e| e.into_with_index(i))?;

View File

@ -1,8 +1,10 @@
use crate::per_block_processing::{ use crate::per_block_processing::{
errors::{ errors::{
AttesterSlashingValidationError, ExitValidationError, ProposerSlashingValidationError, AttesterSlashingValidationError, BlsExecutionChangeValidationError, ExitValidationError,
ProposerSlashingValidationError,
}, },
verify_attester_slashing, verify_exit, verify_proposer_slashing, verify_attester_slashing, verify_bls_to_execution_change, verify_exit,
verify_proposer_slashing,
}; };
use crate::VerifySignatures; use crate::VerifySignatures;
use derivative::Derivative; use derivative::Derivative;
@ -12,15 +14,7 @@ use ssz_derive::{Decode, Encode};
use std::marker::PhantomData; use std::marker::PhantomData;
use types::{ use types::{
AttesterSlashing, BeaconState, ChainSpec, Epoch, EthSpec, Fork, ForkVersion, ProposerSlashing, AttesterSlashing, BeaconState, ChainSpec, Epoch, EthSpec, Fork, ForkVersion, ProposerSlashing,
SignedVoluntaryExit, SignedBlsToExecutionChange, SignedVoluntaryExit,
};
#[cfg(feature = "withdrawals-processing")]
use {
crate::per_block_processing::{
errors::BlsExecutionChangeValidationError, verify_bls_to_execution_change,
},
types::SignedBlsToExecutionChange,
}; };
const MAX_FORKS_VERIFIED_AGAINST: usize = 2; const MAX_FORKS_VERIFIED_AGAINST: usize = 2;
@ -202,7 +196,6 @@ impl<E: EthSpec> VerifyOperation<E> for ProposerSlashing {
} }
} }
#[cfg(feature = "withdrawals-processing")]
impl<E: EthSpec> VerifyOperation<E> for SignedBlsToExecutionChange { impl<E: EthSpec> VerifyOperation<E> for SignedBlsToExecutionChange {
type Error = BlsExecutionChangeValidationError; type Error = BlsExecutionChangeValidationError;

View File

@ -4,30 +4,24 @@ 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(feature = "withdrawals-processing")]
use state_processing::per_block_processing::process_operations::{
process_bls_to_execution_changes, process_bls_to_execution_changes,
};
use state_processing::{ use state_processing::{
per_block_processing::{ per_block_processing::{
errors::BlockProcessingError, errors::BlockProcessingError,
process_block_header, process_execution_payload, process_block_header, process_execution_payload,
process_operations::{ process_operations::{
altair, base, process_attester_slashings, process_deposits, process_exits, altair, base, process_attester_slashings, process_bls_to_execution_changes,
process_proposer_slashings, process_deposits, process_exits, process_proposer_slashings,
}, },
process_sync_aggregate, VerifyBlockRoot, VerifySignatures, process_sync_aggregate, process_withdrawals, VerifyBlockRoot, VerifySignatures,
}, },
ConsensusContext, ConsensusContext,
}; };
use std::fmt::Debug; use std::fmt::Debug;
use std::path::Path; use std::path::Path;
#[cfg(feature = "withdrawals-processing")]
use types::SignedBlsToExecutionChange;
use types::{ use types::{
Attestation, AttesterSlashing, BeaconBlock, BeaconState, BlindedPayload, ChainSpec, Deposit, Attestation, AttesterSlashing, BeaconBlock, BeaconState, BlindedPayload, ChainSpec, Deposit,
EthSpec, ExecutionPayload, ForkName, FullPayload, ProposerSlashing, SignedVoluntaryExit, EthSpec, ExecutionPayload, ForkName, FullPayload, ProposerSlashing, SignedBlsToExecutionChange,
SyncAggregate, SignedVoluntaryExit, SyncAggregate,
}; };
#[derive(Debug, Clone, Default, Deserialize)] #[derive(Debug, Clone, Default, Deserialize)]
@ -42,7 +36,6 @@ struct ExecutionMetadata {
} }
/// Newtype for testing withdrawals. /// Newtype for testing withdrawals.
#[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 +334,6 @@ impl<E: EthSpec> Operation<E> for BlindedPayload<E> {
} }
} }
#[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 +366,6 @@ impl<E: EthSpec> Operation<E> for WithdrawalsPayload<E> {
} }
} }
#[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()

View File

@ -1,5 +1,4 @@
pub use case_result::CaseResult; pub use case_result::CaseResult;
#[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,

View File

@ -82,14 +82,12 @@ fn operations_execution_payload_blinded() {
OperationsHandler::<MainnetEthSpec, BlindedPayload<_>>::default().run(); OperationsHandler::<MainnetEthSpec, BlindedPayload<_>>::default().run();
} }
#[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(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();