Add `test_invalid_two_bls_changes_of_different_addresses_same_validator_same_block`

This commit is contained in:
Hsiao-Wei Wang 2022-11-18 23:23:21 +08:00
parent b78bd1fae0
commit 9f4adfde9d
No known key found for this signature in database
GPG Key ID: AE3D6B174F971DE4
2 changed files with 30 additions and 3 deletions

View File

@ -79,7 +79,7 @@ def test_success_exit_and_bls_change(spec, state):
@with_phases([CAPELLA]) @with_phases([CAPELLA])
@spec_state_test @spec_state_test
def test_fail_double_bls_changes_same_block(spec, state): def test_invalid_double_bls_changes_same_block(spec, state):
index = 0 index = 0
signed_address_change = get_signed_address_change(spec, state, validator_index=index) signed_address_change = get_signed_address_change(spec, state, validator_index=index)
yield 'pre', state yield 'pre', state
@ -96,6 +96,30 @@ def test_fail_double_bls_changes_same_block(spec, state):
yield 'post', None yield 'post', None
@with_phases([CAPELLA])
@spec_state_test
def test_invalid_two_bls_changes_of_different_addresses_same_validator_same_block(spec, state):
index = 0
signed_address_change_1 = get_signed_address_change(spec, state, validator_index=index,
to_execution_address=b'\x12' * 20)
signed_address_change_2 = get_signed_address_change(spec, state, validator_index=index,
to_execution_address=b'\x34' * 20)
assert signed_address_change_1 != signed_address_change_2
yield 'pre', state
block = build_empty_block_for_next_slot(spec, state)
block.body.bls_to_execution_changes.append(signed_address_change_1)
block.body.bls_to_execution_changes.append(signed_address_change_2)
signed_block = state_transition_and_sign_block(spec, state, block, expect_fail=True)
yield 'blocks', [signed_block]
yield 'post', None
# #
# Withdrawals # Withdrawals
# #

View File

@ -2,7 +2,7 @@ from eth2spec.utils import bls
from eth2spec.test.helpers.keys import pubkeys, privkeys, pubkey_to_privkey from eth2spec.test.helpers.keys import pubkeys, privkeys, pubkey_to_privkey
def get_signed_address_change(spec, state, validator_index=None, withdrawal_pubkey=None): def get_signed_address_change(spec, state, validator_index=None, withdrawal_pubkey=None, to_execution_address=None):
if validator_index is None: if validator_index is None:
validator_index = 0 validator_index = 0
@ -13,11 +13,14 @@ def get_signed_address_change(spec, state, validator_index=None, withdrawal_pubk
else: else:
withdrawal_privkey = pubkey_to_privkey[withdrawal_pubkey] withdrawal_privkey = pubkey_to_privkey[withdrawal_pubkey]
if to_execution_address is None:
to_execution_address = b'\x42' * 20
domain = spec.get_domain(state, spec.DOMAIN_BLS_TO_EXECUTION_CHANGE) domain = spec.get_domain(state, spec.DOMAIN_BLS_TO_EXECUTION_CHANGE)
address_change = spec.BLSToExecutionChange( address_change = spec.BLSToExecutionChange(
validator_index=validator_index, validator_index=validator_index,
from_bls_pubkey=withdrawal_pubkey, from_bls_pubkey=withdrawal_pubkey,
to_execution_address=b'\x42' * 20, to_execution_address=to_execution_address,
) )
signing_root = spec.compute_signing_root(address_change, domain) signing_root = spec.compute_signing_root(address_change, domain)