211d3961a0
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.
62 lines
2.0 KiB
Rust
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,
|
|
}
|
|
}
|
|
}
|