def test_total_deposits(num_active_validators, beacon_config,
                        empty_crystallized_state):
    start_dynasty = 10
    active_validators = [
        mock_validator_record(pubkey,
                              beacon_config,
                              start_dynasty=start_dynasty)
        for pubkey in range(num_active_validators)
    ]
    non_active_validators = [
        mock_validator_record(pubkey,
                              beacon_config,
                              start_dynasty=start_dynasty + 1)
        for pubkey in range(4)
    ]

    crystallized_state = empty_crystallized_state.copy(
        validators=active_validators + non_active_validators,
        current_dynasty=start_dynasty,
    )

    assert len(
        crystallized_state.active_validator_indices) == len(active_validators)

    expected_total_deposits = beacon_config.deposit_size * num_active_validators
    assert crystallized_state.total_deposits == expected_total_deposits
Exemple #2
0
def test_total_balance(num_active_validators, deposit_size,
                       default_end_dynasty, empty_crystallized_state):
    start_dynasty = 10
    active_validators = [
        mock_validator_record(
            pubkey,
            deposit_size,
            default_end_dynasty,
            start_dynasty=start_dynasty,
        ) for pubkey in range(num_active_validators)
    ]
    non_active_validators = [
        mock_validator_record(pubkey, deposit_size, default_end_dynasty,
                              start_dynasty + 1) for pubkey in range(4)
    ]

    crystallized_state = empty_crystallized_state.copy(
        validators=active_validators + non_active_validators,
        current_dynasty=start_dynasty,
    )

    assert len(
        crystallized_state.active_validator_indices) == len(active_validators)

    expected_total_balance = deposit_size * num_active_validators
    assert crystallized_state.total_balance == expected_total_balance
Exemple #3
0
def test_update_validator(sample_beacon_state_params, sample_validator_record_params, max_deposit):
    state = BeaconState(**sample_beacon_state_params).copy(
        validator_registry=[
            mock_validator_record(
                pubkey,
            )
            for pubkey in range(10)
        ],
        validator_balances=(
            max_deposit
            for _ in range(10)
        )
    )

    new_pubkey = 100
    validator_index = 5
    balance = 5566
    validator = state.validator_registry[validator_index].copy(
        pubkey=new_pubkey,
    )
    result_state = state.update_validator(
        validator_index=validator_index,
        validator=validator,
        balance=balance,
    )
    assert result_state.validator_balances[validator_index] == balance
    assert result_state.validator_registry[validator_index].pubkey == new_pubkey
    assert state.validator_registry[validator_index].pubkey != new_pubkey
Exemple #4
0
def test_num_validators(expected, max_deposit, empty_beacon_state):
    state = empty_beacon_state.copy(
        validator_registry=tuple(
            mock_validator_record(pubkey, ) for pubkey in range(expected)),
        validator_balances=(max_deposit * GWEI_PER_ETH, ) * expected,
    )

    assert state.num_validators == expected
def test_num_validators(expected, beacon_config, empty_crystallized_state):
    validators = [
        mock_validator_record(pubkey, beacon_config)
        for pubkey in range(expected)
    ]
    crystallized_state = empty_crystallized_state.copy(validators=validators, )

    assert crystallized_state.num_validators == expected
Exemple #6
0
def test_num_validators(expected, max_deposit, empty_beacon_state):
    validator_registry = [
        mock_validator_record(
            pubkey,
            max_deposit,
        ) for pubkey in range(expected)
    ]
    state = empty_beacon_state.copy(validator_registry=validator_registry, )

    assert state.num_validators == expected
Exemple #7
0
def ten_validators_state(empty_beacon_state, max_deposit):
    validator_count = 10
    return empty_beacon_state.copy(
        validator_registry=tuple(
            mock_validator_record(
                pubkey=pubkey,
                is_active=True,
            ) for pubkey in range(validator_count)),
        validator_balances=(max_deposit * GWEI_PER_ETH, ) * validator_count,
    )
Exemple #8
0
def test_validate_proposer_signature(
        proposer_privkey,
        proposer_pubkey,
        is_valid_signature,
        sample_beacon_block_params,
        sample_beacon_state_params,
        sample_shard_committee_params,
        beacon_chain_shard_number,
        epoch_length):

    state = BeaconState(**sample_beacon_state_params).copy(
        validator_registry=[
            mock_validator_record(proposer_pubkey)
            for _ in range(10)
        ],
        shard_committees_at_slots=get_sample_shard_committees_at_slots(
            num_slot=128,
            num_shard_committee_per_slot=10,
            sample_shard_committee_params=sample_shard_committee_params,
        ),
    )

    default_block = BaseBeaconBlock(**sample_beacon_block_params)
    empty_signature_block_root = default_block.block_without_signature_root

    proposal_root = ProposalSignedData(
        state.slot,
        beacon_chain_shard_number,
        empty_signature_block_root,
    ).root

    proposed_block = BaseBeaconBlock(**sample_beacon_block_params).copy(
        signature=bls.sign(
            message=proposal_root,
            privkey=proposer_privkey,
            domain=SignatureDomain.DOMAIN_PROPOSAL,
        ),
    )

    if is_valid_signature:
        validate_proposer_signature(
            state,
            proposed_block,
            beacon_chain_shard_number,
            epoch_length,
        )
    else:
        with pytest.raises(ValidationError):
            validate_proposer_signature(
                state,
                proposed_block,
                beacon_chain_shard_number,
                epoch_length,
            )
Exemple #9
0
def initial_validators(init_validator_pubkeys, init_randao, max_deposit):
    """
    Inactive
    """
    return tuple(
        mock_validator_record(
            pubkey=pubkey,
            withdrawal_credentials=ZERO_HASH32,
            randao_commitment=init_randao,
            status_flags=0,
            is_active=False,
        ) for pubkey in init_validator_pubkeys)
Exemple #10
0
def test_num_validators(expected, deposit_size, default_end_dynasty,
                        empty_crystallized_state):
    validators = [
        mock_validator_record(
            pubkey,
            deposit_size,
            default_end_dynasty,
            start_dynasty=0,
        ) for pubkey in range(expected)
    ]
    crystallized_state = empty_crystallized_state.copy(validators=validators, )

    assert crystallized_state.num_validators == expected
Exemple #11
0
def test_num_validators(expected,
                        max_deposit,
                        empty_beacon_state):
    state = empty_beacon_state.copy(
        validator_registry=[
            mock_validator_record(
                pubkey,
            )
            for pubkey in range(expected)
        ],
        validator_balances=(
            max_deposit
            for _ in range(expected)
        )
    )

    assert state.num_validators == expected
Exemple #12
0
def test_update_validator(sample_beacon_state_params,
                          sample_validator_record_params, max_deposit):
    state = BeaconState(**sample_beacon_state_params).copy(validator_registry=[
        mock_validator_record(
            pubkey,
            max_deposit,
        ) for pubkey in range(10)
    ])

    new_pubkey = 100
    validator_index = 5
    validator = state.validator_registry[validator_index].copy(
        pubkey=new_pubkey, )
    result_state = state.update_validator(validator_index=validator_index,
                                          validator=validator)
    assert result_state.validator_registry[
        validator_index].pubkey == new_pubkey
    assert state.validator_registry[validator_index].pubkey != new_pubkey
Exemple #13
0
def test_update_validator(ten_validators_state, validator_index, new_pubkey,
                          new_balance):
    state = ten_validators_state
    validator = mock_validator_record(new_pubkey)

    if validator_index < state.num_validators:
        result_state = state.update_validator(
            validator_index=validator_index,
            validator=validator,
            balance=new_balance,
        )
        assert result_state.validator_balances[validator_index] == new_balance
        assert result_state.validator_registry[
            validator_index].pubkey == new_pubkey
        assert state.validator_registry[validator_index].pubkey != new_pubkey
    else:
        with pytest.raises(IndexError):
            state.update_validator(
                validator_index=validator_index,
                validator=validator,
                balance=new_balance,
            )
Exemple #14
0
def test_validator_registry_and_balances_length(sample_beacon_state_params):
    # When len(BeaconState.validator_registry) != len(BeaconState.validtor_balances)
    with pytest.raises(ValueError):
        BeaconState(**sample_beacon_state_params).copy(
            validator_registry=tuple(
                mock_validator_record(pubkey) for pubkey in range(10)), )