tests for invalid signatures
This commit is contained in:
parent
b919d08ab2
commit
a4363ba096
|
@ -8,7 +8,7 @@ from eth2spec.phase0.spec import (
|
|||
from eth2spec.phase0.state_transition import (
|
||||
state_transition_to,
|
||||
)
|
||||
from eth2spec.test.context import spec_state_test, expect_assertion_error
|
||||
from eth2spec.test.context import spec_state_test, expect_assertion_error, always_bls
|
||||
from eth2spec.test.helpers.attestations import (
|
||||
get_valid_attestation,
|
||||
sign_attestation,
|
||||
|
@ -72,6 +72,15 @@ def test_success_previous_epoch(state):
|
|||
yield from run_attestation_processing(state, attestation)
|
||||
|
||||
|
||||
@always_bls
|
||||
@spec_state_test
|
||||
def test_invalid_attestation_signature(state):
|
||||
attestation = get_valid_attestation(state, signed=False)
|
||||
state.slot += spec.MIN_ATTESTATION_INCLUSION_DELAY
|
||||
|
||||
yield from run_attestation_processing(state, attestation, False)
|
||||
|
||||
|
||||
@spec_state_test
|
||||
def test_before_inclusion_delay(state):
|
||||
attestation = get_valid_attestation(state, signed=True)
|
||||
|
|
|
@ -3,7 +3,7 @@ from eth2spec.phase0.spec import (
|
|||
get_beacon_proposer_index,
|
||||
process_attester_slashing,
|
||||
)
|
||||
from eth2spec.test.context import spec_state_test, expect_assertion_error
|
||||
from eth2spec.test.context import spec_state_test, expect_assertion_error, always_bls
|
||||
from eth2spec.test.helpers.attestations import sign_indexed_attestation
|
||||
from eth2spec.test.helpers.attester_slashings import get_valid_attester_slashing
|
||||
from eth2spec.test.helpers.block import apply_empty_block
|
||||
|
@ -90,6 +90,27 @@ def test_success_surround(state):
|
|||
yield from run_attester_slashing_processing(state, attester_slashing)
|
||||
|
||||
|
||||
@always_bls
|
||||
@spec_state_test
|
||||
def test_invalid_sig_1(state):
|
||||
attester_slashing = get_valid_attester_slashing(state, signed_1=False, signed_2=True)
|
||||
yield from run_attester_slashing_processing(state, attester_slashing, False)
|
||||
|
||||
|
||||
@always_bls
|
||||
@spec_state_test
|
||||
def test_invalid_sig_2(state):
|
||||
attester_slashing = get_valid_attester_slashing(state, signed_1=True, signed_2=False)
|
||||
yield from run_attester_slashing_processing(state, attester_slashing, False)
|
||||
|
||||
|
||||
@always_bls
|
||||
@spec_state_test
|
||||
def test_invalid_sig_1_and_2(state):
|
||||
attester_slashing = get_valid_attester_slashing(state, signed_1=False, signed_2=False)
|
||||
yield from run_attester_slashing_processing(state, attester_slashing, False)
|
||||
|
||||
|
||||
@spec_state_test
|
||||
def test_same_data(state):
|
||||
attester_slashing = get_valid_attester_slashing(state, signed_1=False, signed_2=True)
|
||||
|
|
|
@ -6,7 +6,7 @@ from eth2spec.phase0.spec import (
|
|||
advance_slot,
|
||||
process_block_header,
|
||||
)
|
||||
from eth2spec.test.context import spec_state_test, expect_assertion_error
|
||||
from eth2spec.test.context import spec_state_test, expect_assertion_error, always_bls
|
||||
from eth2spec.test.helpers.block import (
|
||||
build_empty_block_for_next_slot,
|
||||
sign_block
|
||||
|
@ -47,6 +47,13 @@ def test_success_block_header(state):
|
|||
yield from run_block_header_processing(state, block)
|
||||
|
||||
|
||||
@always_bls
|
||||
@spec_state_test
|
||||
def test_invalid_sig_block_header(state):
|
||||
block = build_empty_block_for_next_slot(state, signed=False)
|
||||
yield from run_block_header_processing(state, block, valid=False)
|
||||
|
||||
|
||||
@spec_state_test
|
||||
def test_invalid_slot_block_header(state):
|
||||
block = build_empty_block_for_next_slot(state, signed=False)
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
import eth2spec.phase0.spec as spec
|
||||
from eth2spec.phase0.spec import process_deposit
|
||||
from eth2spec.test.context import spec_state_test, expect_assertion_error
|
||||
from eth2spec.test.context import spec_state_test, expect_assertion_error, always_bls
|
||||
from eth2spec.test.helpers.deposits import prepare_state_and_deposit, sign_deposit_data
|
||||
from eth2spec.test.helpers.state import get_balance
|
||||
from eth2spec.test.helpers.keys import privkeys
|
||||
|
||||
|
||||
def run_deposit_processing(state, deposit, validator_index, valid=True):
|
||||
def run_deposit_processing(state, deposit, validator_index, valid=True, non_effective=False):
|
||||
"""
|
||||
Run ``process_deposit``, yielding:
|
||||
- pre-state ('pre')
|
||||
|
@ -34,21 +34,27 @@ def run_deposit_processing(state, deposit, validator_index, valid=True):
|
|||
|
||||
yield 'post', state
|
||||
|
||||
if validator_index < pre_validator_count:
|
||||
# top-up
|
||||
if non_effective:
|
||||
assert len(state.validator_registry) == pre_validator_count
|
||||
assert len(state.balances) == pre_validator_count
|
||||
if validator_index < pre_validator_count:
|
||||
assert get_balance(state, validator_index) == pre_balance
|
||||
else:
|
||||
# new validator
|
||||
assert len(state.validator_registry) == pre_validator_count + 1
|
||||
assert len(state.balances) == pre_validator_count + 1
|
||||
if validator_index < pre_validator_count:
|
||||
# top-up
|
||||
assert len(state.validator_registry) == pre_validator_count
|
||||
assert len(state.balances) == pre_validator_count
|
||||
else:
|
||||
# new validator
|
||||
assert len(state.validator_registry) == pre_validator_count + 1
|
||||
assert len(state.balances) == pre_validator_count + 1
|
||||
assert get_balance(state, validator_index) == pre_balance + deposit.data.amount
|
||||
|
||||
assert state.deposit_index == state.latest_eth1_data.deposit_count
|
||||
assert get_balance(state, validator_index) == pre_balance + deposit.data.amount
|
||||
|
||||
|
||||
@spec_state_test
|
||||
def test_success(state):
|
||||
def test_new_deposit(state):
|
||||
# fresh deposit = next validator index = validator appended to registry
|
||||
validator_index = len(state.validator_registry)
|
||||
amount = spec.MAX_EFFECTIVE_BALANCE
|
||||
|
@ -57,6 +63,16 @@ def test_success(state):
|
|||
yield from run_deposit_processing(state, deposit, validator_index)
|
||||
|
||||
|
||||
@always_bls
|
||||
@spec_state_test
|
||||
def test_invalid_sig_new_deposit(state):
|
||||
# fresh deposit = next validator index = validator appended to registry
|
||||
validator_index = len(state.validator_registry)
|
||||
amount = spec.MAX_EFFECTIVE_BALANCE
|
||||
deposit = prepare_state_and_deposit(state, validator_index, amount, signed=False)
|
||||
yield from run_deposit_processing(state, deposit, validator_index, valid=True, non_effective=True)
|
||||
|
||||
|
||||
@spec_state_test
|
||||
def test_success_top_up(state):
|
||||
validator_index = 0
|
||||
|
@ -66,6 +82,17 @@ def test_success_top_up(state):
|
|||
yield from run_deposit_processing(state, deposit, validator_index)
|
||||
|
||||
|
||||
@always_bls
|
||||
@spec_state_test
|
||||
def test_invalid_sig_top_up(state):
|
||||
validator_index = 0
|
||||
amount = spec.MAX_EFFECTIVE_BALANCE // 4
|
||||
deposit = prepare_state_and_deposit(state, validator_index, amount, signed=False)
|
||||
|
||||
# invalid signatures, in top-ups, are allowed!
|
||||
yield from run_deposit_processing(state, deposit, validator_index, valid=True, non_effective=False)
|
||||
|
||||
|
||||
@spec_state_test
|
||||
def test_wrong_index(state):
|
||||
validator_index = len(state.validator_registry)
|
||||
|
|
|
@ -3,7 +3,7 @@ from eth2spec.phase0.spec import (
|
|||
get_current_epoch,
|
||||
process_proposer_slashing,
|
||||
)
|
||||
from eth2spec.test.context import spec_state_test, expect_assertion_error
|
||||
from eth2spec.test.context import spec_state_test, expect_assertion_error, always_bls
|
||||
from eth2spec.test.helpers.block_header import sign_block_header
|
||||
from eth2spec.test.helpers.keys import privkeys
|
||||
from eth2spec.test.helpers.proposer_slashings import get_valid_proposer_slashing
|
||||
|
@ -52,6 +52,27 @@ def test_success(state):
|
|||
yield from run_proposer_slashing_processing(state, proposer_slashing)
|
||||
|
||||
|
||||
@always_bls
|
||||
@spec_state_test
|
||||
def test_invalid_sig_1(state):
|
||||
proposer_slashing = get_valid_proposer_slashing(state, signed_1=False, signed_2=True)
|
||||
yield from run_proposer_slashing_processing(state, proposer_slashing, False)
|
||||
|
||||
|
||||
@always_bls
|
||||
@spec_state_test
|
||||
def test_invalid_sig_2(state):
|
||||
proposer_slashing = get_valid_proposer_slashing(state, signed_1=True, signed_2=False)
|
||||
yield from run_proposer_slashing_processing(state, proposer_slashing, False)
|
||||
|
||||
|
||||
@always_bls
|
||||
@spec_state_test
|
||||
def test_invalid_sig_1_and_2(state):
|
||||
proposer_slashing = get_valid_proposer_slashing(state, signed_1=False, signed_2=False)
|
||||
yield from run_proposer_slashing_processing(state, proposer_slashing, False)
|
||||
|
||||
|
||||
@spec_state_test
|
||||
def test_invalid_proposer_index(state):
|
||||
proposer_slashing = get_valid_proposer_slashing(state, signed_1=True, signed_2=True)
|
||||
|
|
|
@ -5,7 +5,7 @@ from eth2spec.phase0.spec import (
|
|||
get_current_epoch,
|
||||
process_transfer,
|
||||
)
|
||||
from eth2spec.test.context import spec_state_test, expect_assertion_error
|
||||
from eth2spec.test.context import spec_state_test, expect_assertion_error, always_bls
|
||||
from eth2spec.test.helpers.state import next_epoch
|
||||
from eth2spec.test.helpers.block import apply_empty_block
|
||||
from eth2spec.test.helpers.transfers import get_valid_transfer
|
||||
|
@ -83,6 +83,16 @@ def test_success_active_above_max_effective_fee(state):
|
|||
yield from run_transfer_processing(state, transfer)
|
||||
|
||||
|
||||
@always_bls
|
||||
@spec_state_test
|
||||
def test_invalid_signature(state):
|
||||
transfer = get_valid_transfer(state, signed=False)
|
||||
# un-activate so validator can transfer
|
||||
state.validator_registry[transfer.sender].activation_eligibility_epoch = spec.FAR_FUTURE_EPOCH
|
||||
|
||||
yield from run_transfer_processing(state, transfer, False)
|
||||
|
||||
|
||||
@spec_state_test
|
||||
def test_active_but_transfer_past_effective_balance(state):
|
||||
sender_index = get_active_validator_indices(state, get_current_epoch(state))[-1]
|
||||
|
|
|
@ -5,7 +5,7 @@ from eth2spec.phase0.spec import (
|
|||
get_current_epoch,
|
||||
process_voluntary_exit,
|
||||
)
|
||||
from eth2spec.test.context import spec_state_test, expect_assertion_error
|
||||
from eth2spec.test.context import spec_state_test, expect_assertion_error, always_bls
|
||||
from eth2spec.test.helpers.keys import pubkey_to_privkey
|
||||
from eth2spec.test.helpers.voluntary_exits import build_voluntary_exit, sign_voluntary_exit
|
||||
|
||||
|
@ -47,17 +47,26 @@ def test_success(state):
|
|||
validator_index = get_active_validator_indices(state, current_epoch)[0]
|
||||
privkey = pubkey_to_privkey[state.validator_registry[validator_index].pubkey]
|
||||
|
||||
voluntary_exit = build_voluntary_exit(
|
||||
state,
|
||||
current_epoch,
|
||||
validator_index,
|
||||
privkey,
|
||||
signed=True,
|
||||
)
|
||||
voluntary_exit = build_voluntary_exit(state, current_epoch, validator_index, privkey, signed=True)
|
||||
|
||||
yield from run_voluntary_exit_processing(state, voluntary_exit)
|
||||
|
||||
|
||||
@always_bls
|
||||
@spec_state_test
|
||||
def test_invalid_signature(state):
|
||||
# move state forward PERSISTENT_COMMITTEE_PERIOD epochs to allow for exit
|
||||
state.slot += spec.PERSISTENT_COMMITTEE_PERIOD * spec.SLOTS_PER_EPOCH
|
||||
|
||||
current_epoch = get_current_epoch(state)
|
||||
validator_index = get_active_validator_indices(state, current_epoch)[0]
|
||||
privkey = pubkey_to_privkey[state.validator_registry[validator_index].pubkey]
|
||||
|
||||
voluntary_exit = build_voluntary_exit(state, current_epoch, validator_index, privkey, signed=False)
|
||||
|
||||
yield from run_voluntary_exit_processing(state, voluntary_exit, False)
|
||||
|
||||
|
||||
@spec_state_test
|
||||
def test_success_exit_queue(state):
|
||||
# move state forward PERSISTENT_COMMITTEE_PERIOD epochs to allow for exit
|
||||
|
|
Loading…
Reference in New Issue