Ejemplo n.º 1
0
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,
    )
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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,
    )
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
0
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)