def create_mock_proposer_slashing_at_block( state: BeaconState, config: Eth2Config, keymap: Dict[BLSPubkey, int], block_root_1: Hash32, block_root_2: Hash32, proposer_index: ValidatorIndex, ) -> ProposerSlashing: """ Return a `ProposerSlashing` derived from the given block roots. If the header roots do not match, the `ProposerSlashing` is valid. If the header roots do match, the `ProposerSlashing` is not valid. """ slots_per_epoch = config.SLOTS_PER_EPOCH block_header_1 = create_block_header_with_signature( state, block_root_1, keymap[state.validators[proposer_index].pubkey], slots_per_epoch, ) block_header_2 = create_block_header_with_signature( state, block_root_2, keymap[state.validators[proposer_index].pubkey], slots_per_epoch, ) return ProposerSlashing.create( proposer_index=proposer_index, signed_header_1=block_header_1, signed_header_2=block_header_2, )
def test_defaults(sample_proposer_slashing_params): slashing = ProposerSlashing(**sample_proposer_slashing_params) assert slashing.proposer_index == sample_proposer_slashing_params[ "proposer_index"] assert slashing.header_1 == sample_proposer_slashing_params["header_1"] assert slashing.header_2 == sample_proposer_slashing_params["header_2"] assert ssz.encode(slashing)
def create_mock_proposer_slashing_at_block( state: BeaconState, config: BeaconConfig, keymap: Dict[BLSPubkey, int], block_root_1: Hash32, block_root_2: Hash32, proposer_index: ValidatorIndex) -> ProposerSlashing: slots_per_epoch = config.SLOTS_PER_EPOCH beacon_chain_shard_number = config.BEACON_CHAIN_SHARD_NUMBER proposal_1 = create_proposal_data_and_signature( state, block_root_1, keymap[state.validator_registry[proposer_index].pubkey], slots_per_epoch, beacon_chain_shard_number, ) proposal_2 = create_proposal_data_and_signature( state, block_root_2, keymap[state.validator_registry[proposer_index].pubkey], slots_per_epoch, beacon_chain_shard_number, ) return ProposerSlashing( proposer_index=proposer_index, proposal_1=proposal_1, proposal_2=proposal_2, )
def test_defaults(sample_proposer_slashing_params): slashing = ProposerSlashing(**sample_proposer_slashing_params) assert slashing.proposer_index == sample_proposer_slashing_params[ 'proposer_index'] assert slashing.proposal_1 == sample_proposer_slashing_params['proposal_1'] assert slashing.proposal_2 == sample_proposer_slashing_params['proposal_2'] assert ssz.encode(slashing)
def test_defaults(sample_proposer_slashing_params): slashing = ProposerSlashing(**sample_proposer_slashing_params) assert slashing.proposer_index == sample_proposer_slashing_params['proposer_index'] assert slashing.proposal_data_1 == sample_proposer_slashing_params['proposal_data_1'] assert slashing.proposal_signature_1 == sample_proposer_slashing_params['proposal_signature_1'] assert slashing.proposal_data_2 == sample_proposer_slashing_params['proposal_data_2'] assert slashing.proposal_signature_2 == sample_proposer_slashing_params['proposal_signature_2'] assert rlp.encode(slashing)
def test_defaults(sample_proposer_slashing_params): slashing = ProposerSlashing.create(**sample_proposer_slashing_params) assert ( slashing.signed_header_1 == sample_proposer_slashing_params["signed_header_1"] ) assert ( slashing.signed_header_2 == sample_proposer_slashing_params["signed_header_2"] ) assert ssz.encode(slashing)