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
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
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
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
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
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, )
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, )
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)
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
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
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
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, )
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)), )