diff --git a/beacon_chain/genesis/src/beacon_state.rs b/beacon_chain/genesis/src/beacon_state.rs index b6a42db5b5..9724800f8b 100644 --- a/beacon_chain/genesis/src/beacon_state.rs +++ b/beacon_chain/genesis/src/beacon_state.rs @@ -103,21 +103,4 @@ mod tests { spec.initial_validators.len() ); } - - /* - #[test] - fn test_genesis_bad_validator() { - let mut spec = ChainSpec::foundation(); - - let random_kp = Keypair::random(); - spec.initial_validators[4].proof_of_possession = create_proof_of_possession(&random_kp); - - let state = genesis_beacon_state(&spec).unwrap(); - - assert_eq!( - state.validator_registry.len(), - spec.initial_validators.len() - 1 - ); - } - */ } diff --git a/beacon_chain/spec/src/foundation.rs b/beacon_chain/spec/src/foundation.rs index ba437cef33..930e414e86 100644 --- a/beacon_chain/spec/src/foundation.rs +++ b/beacon_chain/spec/src/foundation.rs @@ -1,8 +1,11 @@ use super::ChainSpec; -use bls::{create_proof_of_possession, Keypair, PublicKey, SecretKey}; +use bls::{Keypair, PublicKey, SecretKey}; use types::{Address, Hash256, ValidatorRecord}; +/// The size of a validators deposit in GWei. +pub const DEPOSIT_GWEI: u64 = 32_000_000_000; + impl ChainSpec { /// Returns a `ChainSpec` compatible with the specification from Ethereum Foundation. /// @@ -64,7 +67,7 @@ impl ChainSpec { * Intialization parameters */ initial_validators: initial_validators_for_testing(), - initial_balances: vec![0,0,0,0], + initial_balances: initial_balances_for_testing(), genesis_time: 1544672897, processed_pow_receipt_root: Hash256::from("pow_root".as_bytes()), } @@ -113,6 +116,10 @@ fn initial_validators_for_testing() -> Vec { initial_validators } +fn initial_balances_for_testing() -> Vec { + vec![DEPOSIT_GWEI; 4] +} + #[cfg(test)] mod tests { use super::*; diff --git a/beacon_chain/types/src/chain_config.rs b/beacon_chain/types/src/chain_config.rs index 51becf5190..e48aabe1ef 100644 --- a/beacon_chain/types/src/chain_config.rs +++ b/beacon_chain/types/src/chain_config.rs @@ -10,7 +10,6 @@ pub struct ChainConfig { pub max_validator_churn_quotient: u64, pub genesis_time: u64, pub slot_duration_millis: u64, - // TODO: Come back to this pub initial_validators: Vec, // New constants diff --git a/beacon_chain/validator_induction/src/inductor.rs b/beacon_chain/validator_induction/src/inductor.rs index 84d7928d01..000cb228b4 100644 --- a/beacon_chain/validator_induction/src/inductor.rs +++ b/beacon_chain/validator_induction/src/inductor.rs @@ -2,9 +2,6 @@ use bls::{verify_proof_of_possession}; use types::{BeaconState, Deposit, ValidatorRecord, ValidatorStatus}; use spec::ChainSpec; -/// The size of a validators deposit in GWei. -pub const DEPOSIT_GWEI: u64 = 32_000_000_000; - #[derive(Debug, PartialEq, Clone)] pub enum ValidatorInductionError { InvalidShard, @@ -83,8 +80,11 @@ fn min_empty_validator_index( #[cfg(test)] mod tests { use super::*; - - use types::{Hash256, DepositData, DepositInput}; + + use bls::{create_proof_of_possession, Keypair}; + + /// The size of a validators deposit in GWei. + pub const DEPOSIT_GWEI: u64 = 32_000_000_000; fn deposit_equals_record(dep: &Deposit, val: &ValidatorRecord) -> bool { (dep.deposit_data.deposit_input.pubkey == val.pubkey) @@ -169,4 +169,19 @@ mod tests { assert_eq!(state.validator_registry.len(), 1); assert_eq!(state.validator_balances.len(), 1); } + + #[test] + fn test_process_deposit_invalid_proof_of_possession() { + let mut state = BeaconState::default(); + let mut deposit = Deposit::zero_with_rand_keypair(); + let spec = ChainSpec::foundation(); + deposit.deposit_data.value = DEPOSIT_GWEI; + deposit.deposit_data.deposit_input.proof_of_possession = create_proof_of_possession(&Keypair::random()); + + let result = process_deposit(&mut state, &deposit, &spec); + + assert_eq!(result, Err(ValidatorInductionError::InvaidProofOfPossession)); + assert_eq!(state.validator_registry.len(), 0); + assert_eq!(state.validator_balances.len(), 0); + } } diff --git a/beacon_chain/validator_induction/src/lib.rs b/beacon_chain/validator_induction/src/lib.rs index c9f4dc67fd..f6dec3cfae 100644 --- a/beacon_chain/validator_induction/src/lib.rs +++ b/beacon_chain/validator_induction/src/lib.rs @@ -5,4 +5,4 @@ extern crate spec; mod inductor; -pub use crate::inductor::{ValidatorInductionError}; +pub use crate::inductor::{ValidatorInductionError, process_deposit};