Skip to content

Commit 9ede9db

Browse files
Add consolidation request test with 0x00 source credentials (#4162)
1 parent 492572d commit 9ede9db

File tree

1 file changed

+38
-2
lines changed

1 file changed

+38
-2
lines changed

tests/core/pyspec/eth2spec/test/electra/block_processing/test_process_consolidation_request.py

+38-2
Original file line numberDiff line numberDiff line change
@@ -887,6 +887,42 @@ def test_incorrect_target_with_bls_credential(spec, state):
887887
)
888888

889889

890+
@with_electra_and_later
891+
@with_presets([MINIMAL], "need sufficient consolidation churn limit")
892+
@with_custom_state(
893+
balances_fn=scaled_churn_balances_exceed_activation_exit_churn_limit,
894+
threshold_fn=default_activation_threshold,
895+
)
896+
@spec_test
897+
@single_phase
898+
def test_incorrect_source_with_bls_credential(spec, state):
899+
# Move state forward SHARD_COMMITTEE_PERIOD epochs to allow for consolidation
900+
state.slot += spec.config.SHARD_COMMITTEE_PERIOD * spec.SLOTS_PER_EPOCH
901+
902+
current_epoch = spec.get_current_epoch(state)
903+
source_index = spec.get_active_validator_indices(state, current_epoch)[0]
904+
target_index = spec.get_active_validator_indices(state, current_epoch)[1]
905+
set_compounding_withdrawal_credential_with_balance(spec, state, target_index)
906+
907+
# Ensure that the source validator has BLS-type withdrawal credentials
908+
assert state.validators[source_index].withdrawal_credentials[:1] == spec.BLS_WITHDRAWAL_PREFIX
909+
910+
# An attacker could create a new validator with BLS withdrawal credentials where the last twenty
911+
# bytes of the BLS pubkey are hardcoded to an address that they control. To be clear, the source
912+
# address field in consolidation requests cannot be set to an arbitrary value.
913+
source_address = state.validators[source_index].withdrawal_credentials[-20:]
914+
915+
consolidation = spec.ConsolidationRequest(
916+
source_address=source_address,
917+
source_pubkey=state.validators[source_index].pubkey,
918+
target_pubkey=state.validators[target_index].pubkey,
919+
)
920+
921+
yield from run_consolidation_processing(
922+
spec, state, consolidation, success=False
923+
)
924+
925+
890926
@with_electra_and_later
891927
@with_presets([MINIMAL], "need sufficient consolidation churn limit")
892928
@with_custom_state(
@@ -928,7 +964,7 @@ def test_incorrect_target_with_eth1_credential(spec, state):
928964
)
929965
@spec_test
930966
@single_phase
931-
def test_incorrect_incorrect_source_address(spec, state):
967+
def test_incorrect_source_address(spec, state):
932968
# move state forward SHARD_COMMITTEE_PERIOD epochs to allow for consolidation
933969
state.slot += spec.config.SHARD_COMMITTEE_PERIOD * spec.SLOTS_PER_EPOCH
934970
# Set up an otherwise correct consolidation
@@ -1017,7 +1053,7 @@ def test_incorrect_unknown_target_pubkey(spec, state):
10171053
)
10181054
set_compounding_withdrawal_credential_with_balance(spec, state, target_index)
10191055

1020-
# Check the the return condition
1056+
# Check the return condition
10211057
assert not state.validators[target_index].pubkey == consolidation.target_pubkey
10221058

10231059
yield from run_consolidation_processing(

0 commit comments

Comments
 (0)