lighthouse/beacon_chain/spec/src/foundation.rs
Paul Hauner 211d3961a0
Add ChainSpec structure.
It includes all constants from the
[Constants](https://github.com/ethereum/eth2.0-specs/blob/master/specs/core/0_beacon-chain.md#attestation)
section in the spec, except for things that are clearly enums.

My reasoning is that these enums are not so much "chain specification"
and this struct should be reserved for items that "configure" the chain.
2018-12-12 16:08:01 +11:00

62 lines
2.0 KiB
Rust

use super::ChainSpec;
use types::{Address, Hash256};
impl ChainSpec {
/// Returns a `ChainSpec` compatible with the specification from Ethereum Foundation.
pub fn foundation() -> Self {
Self {
/*
* Misc
*/
shard_count: 1_024,
target_committee_size: 256,
ejection_balance: 16,
max_balance_churn_quotient: 32,
gwei_per_eth: u64::pow(10, 9),
beacon_chain_shard_number: u64::max_value(),
bls_withdrawal_prefix_byte: 0x00,
max_casper_votes: 1_024,
/*
* Deposit contract
*/
deposit_contract_address: Address::from("TBD".as_bytes()),
deposit_contract_tree_depth: 32,
min_deposit: 1,
max_deposit: 32,
/*
* Initial Values
*/
initial_fork_version: 0,
initial_slot_number: 0,
zero_hash: Hash256::zero(),
/*
* Time parameters
*/
slot_duration: 6,
min_attestation_inclusion_delay: 4,
epoch_length: 64,
min_validator_registry_change_interval: 256,
pow_receipt_root_voting_period: 1_024,
shard_persistent_committee_change_period: u64::pow(2, 17),
collective_penalty_calculation_period: u64::pow(2, 20),
zero_balance_validator_ttl: u64::pow(2, 22),
/*
* Reward and penalty quotients
*/
base_reward_quotient: 2_048,
whistleblower_reward_quotient: 512,
includer_reward_quotient: 8,
inactivity_penalty_quotient: u64::pow(2, 34),
/*
* Max operations per block
*/
max_proposer_slashings: 16,
max_casper_slashings: 15,
max_attestations: 128,
max_deposits: 16,
max_exits: 16,
}
}
}