mirror of
https://github.com/status-im/eth2.0-specs.git
synced 2025-03-01 18:50:35 +00:00
Add test_process_deposit::test_key_validate_invalid
This commit is contained in:
parent
d8e74090cf
commit
e4407c64e3
@ -137,13 +137,20 @@ def prepare_random_genesis_deposits(spec,
|
|||||||
return deposits, root, deposit_data_list
|
return deposits, root, deposit_data_list
|
||||||
|
|
||||||
|
|
||||||
def prepare_state_and_deposit(spec, state, validator_index, amount, withdrawal_credentials=None, signed=False):
|
def prepare_state_and_deposit(spec, state, validator_index, amount,
|
||||||
|
pubkey=None,
|
||||||
|
privkey=None,
|
||||||
|
withdrawal_credentials=None,
|
||||||
|
signed=False):
|
||||||
"""
|
"""
|
||||||
Prepare the state for the deposit, and create a deposit for the given validator, depositing the given amount.
|
Prepare the state for the deposit, and create a deposit for the given validator, depositing the given amount.
|
||||||
"""
|
"""
|
||||||
deposit_data_list = []
|
deposit_data_list = []
|
||||||
|
|
||||||
|
if pubkey is None:
|
||||||
pubkey = pubkeys[validator_index]
|
pubkey = pubkeys[validator_index]
|
||||||
|
|
||||||
|
if privkey is None:
|
||||||
privkey = privkeys[validator_index]
|
privkey = privkeys[validator_index]
|
||||||
|
|
||||||
# insecurely use pubkey as withdrawal key if no credentials provided
|
# insecurely use pubkey as withdrawal key if no credentials provided
|
||||||
@ -196,7 +203,7 @@ def run_deposit_processing(spec, state, deposit, validator_index, valid=True, ef
|
|||||||
|
|
||||||
yield 'post', state
|
yield 'post', state
|
||||||
|
|
||||||
if not effective:
|
if not effective or not bls.KeyValidate(deposit.data.pubkey):
|
||||||
assert len(state.validators) == pre_validator_count
|
assert len(state.validators) == pre_validator_count
|
||||||
assert len(state.balances) == pre_validator_count
|
assert len(state.balances) == pre_validator_count
|
||||||
if validator_index < pre_validator_count:
|
if validator_index < pre_validator_count:
|
||||||
|
@ -233,3 +233,17 @@ def test_bad_merkle_proof(spec, state):
|
|||||||
sign_deposit_data(spec, deposit.data, privkeys[validator_index])
|
sign_deposit_data(spec, deposit.data, privkeys[validator_index])
|
||||||
|
|
||||||
yield from run_deposit_processing(spec, state, deposit, validator_index, valid=False)
|
yield from run_deposit_processing(spec, state, deposit, validator_index, valid=False)
|
||||||
|
|
||||||
|
|
||||||
|
@with_all_phases
|
||||||
|
@spec_state_test
|
||||||
|
def test_key_validate_invalid(spec, state):
|
||||||
|
validator_index = len(state.validators)
|
||||||
|
amount = spec.MAX_EFFECTIVE_BALANCE
|
||||||
|
|
||||||
|
# All-zero pubkey would not pass `bls.KeyValidate`, but `process_deposit` would not throw exception.
|
||||||
|
pubkey = b'\x00' * 48
|
||||||
|
|
||||||
|
deposit = prepare_state_and_deposit(spec, state, validator_index, amount, pubkey=pubkey, signed=True)
|
||||||
|
|
||||||
|
yield from run_deposit_processing(spec, state, deposit, validator_index)
|
||||||
|
@ -138,3 +138,8 @@ def pairing_check(values):
|
|||||||
* pairing(p_q_2[1], p_q_2[0], final_exponentiate=False)
|
* pairing(p_q_2[1], p_q_2[0], final_exponentiate=False)
|
||||||
)
|
)
|
||||||
return final_exponentiation == FQ12.one()
|
return final_exponentiation == FQ12.one()
|
||||||
|
|
||||||
|
|
||||||
|
@only_with_bls(alt_return=True)
|
||||||
|
def KeyValidate(pubkey):
|
||||||
|
return py_ecc_bls.KeyValidate(pubkey)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user