mirror of
https://github.com/status-im/eth2.0-specs.git
synced 2025-02-20 22:38:11 +00:00
proposer slashing signing
This commit is contained in:
parent
242bb8c912
commit
32efe49b33
@ -4,6 +4,8 @@ from eth2spec.phase0.spec import (
|
||||
process_proposer_slashing,
|
||||
)
|
||||
from eth2spec.test.context import spec_state_test, expect_assertion_error
|
||||
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
|
||||
from eth2spec.test.helpers.state import get_balance
|
||||
|
||||
@ -45,14 +47,14 @@ def run_proposer_slashing_processing(state, proposer_slashing, valid=True):
|
||||
|
||||
@spec_state_test
|
||||
def test_success(state):
|
||||
proposer_slashing = get_valid_proposer_slashing(state)
|
||||
proposer_slashing = get_valid_proposer_slashing(state, signed_1=True, signed_2=True)
|
||||
|
||||
yield from run_proposer_slashing_processing(state, proposer_slashing)
|
||||
|
||||
|
||||
@spec_state_test
|
||||
def test_invalid_proposer_index(state):
|
||||
proposer_slashing = get_valid_proposer_slashing(state)
|
||||
proposer_slashing = get_valid_proposer_slashing(state, signed_1=True, signed_2=True)
|
||||
# Index just too high (by 1)
|
||||
proposer_slashing.proposer_index = len(state.validator_registry)
|
||||
|
||||
@ -61,17 +63,18 @@ def test_invalid_proposer_index(state):
|
||||
|
||||
@spec_state_test
|
||||
def test_epochs_are_different(state):
|
||||
proposer_slashing = get_valid_proposer_slashing(state)
|
||||
proposer_slashing = get_valid_proposer_slashing(state, signed_1=True, signed_2=False)
|
||||
|
||||
# set slots to be in different epochs
|
||||
proposer_slashing.header_2.slot += spec.SLOTS_PER_EPOCH
|
||||
sign_block_header(state, proposer_slashing.header_2, privkeys[proposer_slashing.validator_index])
|
||||
|
||||
yield from run_proposer_slashing_processing(state, proposer_slashing, False)
|
||||
|
||||
|
||||
@spec_state_test
|
||||
def test_headers_are_same(state):
|
||||
proposer_slashing = get_valid_proposer_slashing(state)
|
||||
proposer_slashing = get_valid_proposer_slashing(state, signed_1=True, signed_2=False)
|
||||
|
||||
# set headers to be the same
|
||||
proposer_slashing.header_2 = proposer_slashing.header_1
|
||||
@ -81,7 +84,7 @@ def test_headers_are_same(state):
|
||||
|
||||
@spec_state_test
|
||||
def test_proposer_is_not_activated(state):
|
||||
proposer_slashing = get_valid_proposer_slashing(state)
|
||||
proposer_slashing = get_valid_proposer_slashing(state, signed_1=True, signed_2=True)
|
||||
|
||||
# set proposer to be not active yet
|
||||
state.validator_registry[proposer_slashing.proposer_index].activation_epoch = get_current_epoch(state) + 1
|
||||
@ -91,7 +94,7 @@ def test_proposer_is_not_activated(state):
|
||||
|
||||
@spec_state_test
|
||||
def test_proposer_is_slashed(state):
|
||||
proposer_slashing = get_valid_proposer_slashing(state)
|
||||
proposer_slashing = get_valid_proposer_slashing(state, signed_1=True, signed_2=True)
|
||||
|
||||
# set proposer to slashed
|
||||
state.validator_registry[proposer_slashing.proposer_index].slashed = True
|
||||
@ -101,7 +104,7 @@ def test_proposer_is_slashed(state):
|
||||
|
||||
@spec_state_test
|
||||
def test_proposer_is_withdrawn(state):
|
||||
proposer_slashing = get_valid_proposer_slashing(state)
|
||||
proposer_slashing = get_valid_proposer_slashing(state, signed_1=True, signed_2=True)
|
||||
|
||||
# set proposer withdrawable_epoch in past
|
||||
current_epoch = get_current_epoch(state)
|
||||
|
@ -1,11 +1,13 @@
|
||||
from copy import deepcopy
|
||||
|
||||
from eth2spec.phase0.spec import get_current_epoch, get_active_validator_indices, BeaconBlockHeader, ZERO_HASH, ProposerSlashing
|
||||
from eth2spec.phase0.spec import (
|
||||
get_current_epoch, get_active_validator_indices, BeaconBlockHeader, ProposerSlashing
|
||||
)
|
||||
from eth2spec.test.helpers.block_header import sign_block_header
|
||||
from eth2spec.test.helpers.keys import pubkey_to_privkey
|
||||
|
||||
|
||||
def get_valid_proposer_slashing(state):
|
||||
def get_valid_proposer_slashing(state, signed_1=False, signed_2=False):
|
||||
current_epoch = get_current_epoch(state)
|
||||
validator_index = get_active_validator_indices(state, current_epoch)[-1]
|
||||
privkey = pubkey_to_privkey[state.validator_registry[validator_index].pubkey]
|
||||
@ -13,16 +15,18 @@ def get_valid_proposer_slashing(state):
|
||||
|
||||
header_1 = BeaconBlockHeader(
|
||||
slot=slot,
|
||||
previous_block_root=ZERO_HASH,
|
||||
state_root=ZERO_HASH,
|
||||
block_body_root=ZERO_HASH,
|
||||
previous_block_root=b'\x33' * 32,
|
||||
state_root=b'\x44' * 32,
|
||||
block_body_root=b'\x55' * 32,
|
||||
)
|
||||
header_2 = deepcopy(header_1)
|
||||
header_2.previous_block_root = b'\x02' * 32
|
||||
header_2.previous_block_root = b'\x99' * 32
|
||||
header_2.slot = slot + 1
|
||||
|
||||
sign_block_header(state, header_1, privkey)
|
||||
sign_block_header(state, header_2, privkey)
|
||||
if signed_1:
|
||||
sign_block_header(state, header_1, privkey)
|
||||
if signed_2:
|
||||
sign_block_header(state, header_2, privkey)
|
||||
|
||||
return ProposerSlashing(
|
||||
proposer_index=validator_index,
|
||||
|
Loading…
x
Reference in New Issue
Block a user