Пример #1
0
def empty_beacon_state():
    return BeaconState(
        validator_registry=(),
        validator_registry_latest_change_slot=10,
        validator_registry_exit_count=10,
        validator_registry_delta_chain_tip=b'\x55' * 32,
        randao_mix=b'\x55' * 32,
        next_seed=b'\x55' * 32,
        shard_committees_at_slots=(),
        persistent_committees=(),
        persistent_committee_reassignments=(),
        previous_justified_slot=0,
        justified_slot=0,
        justification_bitfield=0,
        finalized_slot=0,
        latest_crosslinks=(),
        latest_state_recalculation_slot=0,
        latest_block_hashes=(),
        latest_penalized_exit_balances=(),
        latest_attestations=(),
        processed_pow_receipt_root=b'\x55' * 32,
        candidate_pow_receipt_roots=(),
        genesis_time=0,
        fork_data=ForkData(
            pre_fork_version=0,
            post_fork_version=0,
            fork_slot=0,
        ),
    )
Пример #2
0
def sample_beacon_state_params(sample_fork_data_params):
    return {
        'slot': 0,
        'genesis_time': 0,
        'fork_data': ForkData(**sample_fork_data_params),
        'validator_registry': (),
        'validator_balances': (),
        'validator_registry_latest_change_slot': 10,
        'validator_registry_exit_count': 10,
        'validator_registry_delta_chain_tip': b'\x55' * 32,
        'latest_randao_mixes': (),
        'latest_vdf_outputs': (),
        'shard_committees_at_slots': (),
        'persistent_committees': (),
        'persistent_committee_reassignments': (),
        'previous_justified_slot': 0,
        'justified_slot': 0,
        'justification_bitfield': b'\x00',
        'finalized_slot': 0,
        'latest_crosslinks': (),
        'latest_block_roots': (),
        'latest_penalized_exit_balances': (),
        'latest_attestations': (),
        'batched_block_roots': (),
        'processed_pow_receipt_root': b'\x55' * 32,
        'candidate_pow_receipt_roots': (),
    }
Пример #3
0
def empty_beacon_state(latest_block_roots_length,
                       latest_penalized_exit_length):
    return BeaconState(
        slot=0,
        genesis_time=0,
        fork_data=ForkData(
            pre_fork_version=0,
            post_fork_version=0,
            fork_slot=0,
        ),
        validator_registry=(),
        validator_balances=(),
        validator_registry_latest_change_slot=10,
        validator_registry_exit_count=10,
        validator_registry_delta_chain_tip=b'\x55' * 32,
        latest_randao_mixes=(),
        latest_vdf_outputs=(),
        shard_committees_at_slots=(),
        persistent_committees=(),
        persistent_committee_reassignments=(),
        previous_justified_slot=0,
        justified_slot=0,
        justification_bitfield=0,
        finalized_slot=0,
        latest_crosslinks=(),
        latest_block_roots=(ZERO_HASH32, ) * latest_block_roots_length,
        latest_penalized_exit_balances=(0, ) * latest_penalized_exit_length,
        latest_attestations=(),
        batched_block_roots=(),
        processed_pow_receipt_root=b'\x55' * 32,
        candidate_pow_receipt_roots=(),
    )
Пример #4
0
def test_verify_slashable_vote_data(
        num_validators, param_mapper, should_succeed, needs_fork_data,
        privkeys, sample_beacon_state_params, activated_genesis_validators,
        genesis_balances, sample_slashable_vote_data_params,
        sample_fork_data_params, max_casper_votes):
    state = BeaconState(**sample_beacon_state_params).copy(
        validator_registry=activated_genesis_validators,
        validator_balances=genesis_balances,
        fork_data=ForkData(**sample_fork_data_params),
    )

    # NOTE: we can do this before "correcting" the params as they
    # touch disjoint subsets of the provided params
    messages = _create_slashable_vote_data_messages(
        sample_slashable_vote_data_params)

    params = _correct_slashable_vote_data_params(
        num_validators,
        sample_slashable_vote_data_params,
        messages,
        privkeys,
        state.fork_data,
    )
    if needs_fork_data:
        params = param_mapper(params, state.fork_data)
    else:
        params = param_mapper(params)
    _run_verify_slashable_vote(params, state, max_casper_votes, should_succeed)
Пример #5
0
def test_verify_slashable_vote_data_signature(
        num_validators, privkeys, sample_beacon_state_params,
        activated_genesis_validators, genesis_balances,
        sample_slashable_vote_data_params, sample_fork_data_params):
    state = BeaconState(**sample_beacon_state_params).copy(
        validator_registry=activated_genesis_validators,
        validator_balances=genesis_balances,
        fork_data=ForkData(**sample_fork_data_params),
    )

    # NOTE: we can do this before "correcting" the params as they
    # touch disjoint subsets of the provided params
    messages = _create_slashable_vote_data_messages(
        sample_slashable_vote_data_params)

    valid_params = _correct_slashable_vote_data_params(
        num_validators,
        sample_slashable_vote_data_params,
        messages,
        privkeys,
        state.fork_data,
    )
    valid_votes = SlashableVoteData(**valid_params)
    assert verify_slashable_vote_data_signature(state, valid_votes)

    invalid_params = _corrupt_signature(valid_params, state.fork_data)
    invalid_votes = SlashableVoteData(**invalid_params)
    assert not verify_slashable_vote_data_signature(state, invalid_votes)
Пример #6
0
def test_get_fork_version(pre_fork_version, post_fork_version, fork_slot,
                          current_slot, expected):
    fork_data = ForkData(
        pre_fork_version=pre_fork_version,
        post_fork_version=post_fork_version,
        fork_slot=fork_slot,
    )
    assert expected == get_fork_version(
        fork_data,
        current_slot,
    )
Пример #7
0
def test_get_domain(pre_fork_version, post_fork_version, fork_slot,
                    current_slot, domain_type, expected):
    fork_data = ForkData(
        pre_fork_version=pre_fork_version,
        post_fork_version=post_fork_version,
        fork_slot=fork_slot,
    )
    assert expected == get_domain(
        fork_data=fork_data,
        slot=current_slot,
        domain_type=domain_type,
    )
Пример #8
0
def test_defaults(sample_fork_data_params):
    fork_data = ForkData(**sample_fork_data_params)
    assert fork_data.pre_fork_version == sample_fork_data_params['pre_fork_version']
    assert fork_data.post_fork_version == sample_fork_data_params['post_fork_version']
    assert fork_data.fork_slot == sample_fork_data_params['fork_slot']