Merge pull request #757 from ethereum/JustinDrake-patch-8

Check proposer is not slashed
This commit is contained in:
Danny Ryan 2019-03-19 15:04:27 -06:00 committed by GitHub
commit 8098af44a0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 1 deletions

View File

@ -2242,8 +2242,10 @@ def process_block_header(state: BeaconState, block: BeaconBlock) -> None:
assert block.previous_block_root == hash_tree_root(state.latest_block_header) assert block.previous_block_root == hash_tree_root(state.latest_block_header)
# Save current block as the new latest block # Save current block as the new latest block
state.latest_block_header = get_temporary_block_header(block) state.latest_block_header = get_temporary_block_header(block)
# Verify proposer signature # Verify proposer is not slashed
proposer = state.validator_registry[get_beacon_proposer_index(state, state.slot)] proposer = state.validator_registry[get_beacon_proposer_index(state, state.slot)]
assert not proposer.slashed
# Verify proposer signature
assert bls_verify( assert bls_verify(
pubkey=proposer.pubkey, pubkey=proposer.pubkey,
message_hash=signed_root(block), message_hash=signed_root(block),

View File

@ -0,0 +1,26 @@
from copy import deepcopy
import pytest
from build.phase0.spec import (
get_beacon_proposer_index,
process_block_header,
)
from tests.phase0.helpers import (
build_empty_block_for_next_slot,
)
# mark entire file as 'sanity' and 'header'
pytestmark = [pytest.mark.sanity, pytest.mark.header]
def test_proposer_slashed(state):
pre_state = deepcopy(state)
block = build_empty_block_for_next_slot(pre_state)
proposer_index = get_beacon_proposer_index(pre_state, block.slot)
pre_state.validator_registry[proposer_index].slashed = True
with pytest.raises(AssertionError):
process_block_header(pre_state, block)
return state, [block], None