diff --git a/common/eth2_config/src/lib.rs b/common/eth2_config/src/lib.rs index 5a9799492..a62518908 100644 --- a/common/eth2_config/src/lib.rs +++ b/common/eth2_config/src/lib.rs @@ -123,3 +123,5 @@ define_net!(pyrmont, include_pyrmont_file, "pyrmont", true); define_net!(mainnet, include_mainnet_file, "mainnet", true); define_net!(toledo, include_toledo_file, "toledo", true); + +define_net!(prater, include_prater_file, "prater", true); diff --git a/common/eth2_network_config/build.rs b/common/eth2_network_config/build.rs index 2879925dd..effcb4fa0 100644 --- a/common/eth2_network_config/build.rs +++ b/common/eth2_network_config/build.rs @@ -1,6 +1,6 @@ //! Extracts zipped genesis states on first run. use eth2_config::{ - altona, mainnet, medalla, pyrmont, spadina, toledo, Eth2NetArchiveAndDirectory, + altona, mainnet, medalla, prater, pyrmont, spadina, toledo, Eth2NetArchiveAndDirectory, GENESIS_FILE_NAME, }; use std::fs::File; @@ -14,6 +14,7 @@ const ETH2_NET_DIRS: &[Eth2NetArchiveAndDirectory<'static>] = &[ mainnet::ETH2_NET_DIR, pyrmont::ETH2_NET_DIR, toledo::ETH2_NET_DIR, + prater::ETH2_NET_DIR, ]; fn main() { diff --git a/common/eth2_network_config/built_in_network_configs/prater/boot_enr.yaml b/common/eth2_network_config/built_in_network_configs/prater/boot_enr.yaml new file mode 100644 index 000000000..fe51488c7 --- /dev/null +++ b/common/eth2_network_config/built_in_network_configs/prater/boot_enr.yaml @@ -0,0 +1 @@ +[] diff --git a/common/eth2_network_config/built_in_network_configs/prater/config.yaml b/common/eth2_network_config/built_in_network_configs/prater/config.yaml new file mode 100644 index 000000000..6328a92dd --- /dev/null +++ b/common/eth2_network_config/built_in_network_configs/prater/config.yaml @@ -0,0 +1,155 @@ +# Prater preset + +CONFIG_NAME: "prater" + +# Misc +# --------------------------------------------------------------- +# 2**6 (= 64) +MAX_COMMITTEES_PER_SLOT: 64 +# 2**7 (= 128) +TARGET_COMMITTEE_SIZE: 128 +# 2**11 (= 2,048) +MAX_VALIDATORS_PER_COMMITTEE: 2048 +# 2**2 (= 4) +MIN_PER_EPOCH_CHURN_LIMIT: 4 +# 2**16 (= 65,536) +CHURN_LIMIT_QUOTIENT: 65536 +# See issue 563 +SHUFFLE_ROUND_COUNT: 90 +# `2**14` (= 16,384) +MIN_GENESIS_ACTIVE_VALIDATOR_COUNT: 16384 +# Mar-01-2021 08:53:32 AM +UTC +MIN_GENESIS_TIME: 1614588812 +# 4 +HYSTERESIS_QUOTIENT: 4 +# 1 (minus 0.25) +HYSTERESIS_DOWNWARD_MULTIPLIER: 1 +# 5 (plus 1.25) +HYSTERESIS_UPWARD_MULTIPLIER: 5 + + +# Fork Choice +# --------------------------------------------------------------- +# 2**3 (= 8) +SAFE_SLOTS_TO_UPDATE_JUSTIFIED: 8 + + +# Validator +# --------------------------------------------------------------- +# 2**11 (= 2,048) +ETH1_FOLLOW_DISTANCE: 2048 +# 2**4 (= 16) +TARGET_AGGREGATORS_PER_COMMITTEE: 16 +# 2**0 (= 1) +RANDOM_SUBNETS_PER_VALIDATOR: 1 +# 2**8 (= 256) +EPOCHS_PER_RANDOM_SUBNET_SUBSCRIPTION: 256 +# 14 (estimate from Eth1 mainnet) +SECONDS_PER_ETH1_BLOCK: 14 + + +# Deposit contract +# --------------------------------------------------------------- +# Ethereum Goerli testnet +DEPOSIT_CHAIN_ID: 5 +DEPOSIT_NETWORK_ID: 5 +# Prater test deposit contract on Goerli Testnet +DEPOSIT_CONTRACT_ADDRESS: 0xff50ed3d0ec03aC01D4C79aAd74928BFF48a7b2b + + +# Gwei values +# --------------------------------------------------------------- +# 2**0 * 10**9 (= 1,000,000,000) Gwei +MIN_DEPOSIT_AMOUNT: 1000000000 +# 2**5 * 10**9 (= 32,000,000,000) Gwei +MAX_EFFECTIVE_BALANCE: 32000000000 +# 2**4 * 10**9 (= 16,000,000,000) Gwei +EJECTION_BALANCE: 16000000000 +# 2**0 * 10**9 (= 1,000,000,000) Gwei +EFFECTIVE_BALANCE_INCREMENT: 1000000000 + + +# Initial values +# --------------------------------------------------------------- +# Prater area code (Vienna) +GENESIS_FORK_VERSION: 0x00001020 +BLS_WITHDRAWAL_PREFIX: 0x00 + + +# Time parameters +# --------------------------------------------------------------- +# Customized for Prater: 1919188 seconds (Mar-23-2021 02:00:00 PM +UTC) +GENESIS_DELAY: 1919188 +# 12 seconds +SECONDS_PER_SLOT: 12 +# 2**0 (= 1) slots 12 seconds +MIN_ATTESTATION_INCLUSION_DELAY: 1 +# 2**5 (= 32) slots 6.4 minutes +SLOTS_PER_EPOCH: 32 +# 2**0 (= 1) epochs 6.4 minutes +MIN_SEED_LOOKAHEAD: 1 +# 2**2 (= 4) epochs 25.6 minutes +MAX_SEED_LOOKAHEAD: 4 +# 2**6 (= 64) epochs ~6.8 hours +EPOCHS_PER_ETH1_VOTING_PERIOD: 64 +# 2**13 (= 8,192) slots ~13 hours +SLOTS_PER_HISTORICAL_ROOT: 8192 +# 2**8 (= 256) epochs ~27 hours +MIN_VALIDATOR_WITHDRAWABILITY_DELAY: 256 +# 2**8 (= 256) epochs ~27 hours +SHARD_COMMITTEE_PERIOD: 256 +# 2**2 (= 4) epochs 25.6 minutes +MIN_EPOCHS_TO_INACTIVITY_PENALTY: 4 + + +# State vector lengths +# --------------------------------------------------------------- +# 2**16 (= 65,536) epochs ~0.8 years +EPOCHS_PER_HISTORICAL_VECTOR: 65536 +# 2**13 (= 8,192) epochs ~36 days +EPOCHS_PER_SLASHINGS_VECTOR: 8192 +# 2**24 (= 16,777,216) historical roots, ~26,131 years +HISTORICAL_ROOTS_LIMIT: 16777216 +# 2**40 (= 1,099,511,627,776) validator spots +VALIDATOR_REGISTRY_LIMIT: 1099511627776 + + +# Reward and penalty quotients +# --------------------------------------------------------------- +# 2**6 (= 64) +BASE_REWARD_FACTOR: 64 +# 2**9 (= 512) +WHISTLEBLOWER_REWARD_QUOTIENT: 512 +# 2**3 (= 8) +PROPOSER_REWARD_QUOTIENT: 8 +# 2**26 (= 67,108,864) +INACTIVITY_PENALTY_QUOTIENT: 67108864 +# 2**7 (= 128) (lower safety margin at Phase 0 genesis) +MIN_SLASHING_PENALTY_QUOTIENT: 128 +# 1 (lower safety margin at Phase 0 genesis) +PROPORTIONAL_SLASHING_MULTIPLIER: 1 + + +# Max operations per block +# --------------------------------------------------------------- +# 2**4 (= 16) +MAX_PROPOSER_SLASHINGS: 16 +# 2**1 (= 2) +MAX_ATTESTER_SLASHINGS: 2 +# 2**7 (= 128) +MAX_ATTESTATIONS: 128 +# 2**4 (= 16) +MAX_DEPOSITS: 16 +# 2**4 (= 16) +MAX_VOLUNTARY_EXITS: 16 + + +# Signature domains +# --------------------------------------------------------------- +DOMAIN_BEACON_PROPOSER: 0x00000000 +DOMAIN_BEACON_ATTESTER: 0x01000000 +DOMAIN_RANDAO: 0x02000000 +DOMAIN_DEPOSIT: 0x03000000 +DOMAIN_VOLUNTARY_EXIT: 0x04000000 +DOMAIN_SELECTION_PROOF: 0x05000000 +DOMAIN_AGGREGATE_AND_PROOF: 0x06000000 diff --git a/common/eth2_network_config/built_in_network_configs/prater/deploy_block.txt b/common/eth2_network_config/built_in_network_configs/prater/deploy_block.txt new file mode 100644 index 000000000..e8c50058b --- /dev/null +++ b/common/eth2_network_config/built_in_network_configs/prater/deploy_block.txt @@ -0,0 +1 @@ +4367322 \ No newline at end of file diff --git a/common/eth2_network_config/built_in_network_configs/prater/genesis.ssz.zip b/common/eth2_network_config/built_in_network_configs/prater/genesis.ssz.zip new file mode 100644 index 000000000..36bad7fae Binary files /dev/null and b/common/eth2_network_config/built_in_network_configs/prater/genesis.ssz.zip differ diff --git a/common/eth2_network_config/src/lib.rs b/common/eth2_network_config/src/lib.rs index 07bf9a8f4..18fd7ef96 100644 --- a/common/eth2_network_config/src/lib.rs +++ b/common/eth2_network_config/src/lib.rs @@ -44,8 +44,10 @@ const SPADINA: HardcodedNet = define_net!(spadina, include_spadina_file); const PYRMONT: HardcodedNet = define_net!(pyrmont, include_pyrmont_file); const MAINNET: HardcodedNet = define_net!(mainnet, include_mainnet_file); const TOLEDO: HardcodedNet = define_net!(toledo, include_toledo_file); +const PRATER: HardcodedNet = define_net!(prater, include_prater_file); -const HARDCODED_NETS: &[HardcodedNet] = &[ALTONA, MEDALLA, SPADINA, PYRMONT, MAINNET, TOLEDO]; +const HARDCODED_NETS: &[HardcodedNet] = + &[ALTONA, MEDALLA, SPADINA, PYRMONT, MAINNET, TOLEDO, PRATER]; pub const DEFAULT_HARDCODED_NETWORK: &str = "mainnet"; /// Specifies an Eth2 network. @@ -250,7 +252,11 @@ mod tests { let config = Eth2NetworkConfig::from_hardcoded_net(net) .unwrap_or_else(|_| panic!("{:?}", net.name)); - if net.name == "mainnet" || net.name == "toledo" || net.name == "pyrmont" { + if net.name == "mainnet" + || net.name == "toledo" + || net.name == "pyrmont" + || net.name == "prater" + { // Ensure we can parse the YAML config to a chain spec. config .yaml_config diff --git a/consensus/types/src/chain_spec.rs b/consensus/types/src/chain_spec.rs index 9f7dd43f0..1778d50fb 100644 --- a/consensus/types/src/chain_spec.rs +++ b/consensus/types/src/chain_spec.rs @@ -595,6 +595,7 @@ impl YamlConfig { "mainnet" => EthSpecId::Mainnet, "minimal" => EthSpecId::Minimal, "toledo" => EthSpecId::Mainnet, + "prater" => EthSpecId::Mainnet, "pyrmont" => EthSpecId::Mainnet, "spadina" => EthSpecId::V012Legacy, "medalla" => EthSpecId::V012Legacy, diff --git a/lighthouse/src/main.rs b/lighthouse/src/main.rs index c282c687d..acbc80a84 100644 --- a/lighthouse/src/main.rs +++ b/lighthouse/src/main.rs @@ -119,7 +119,7 @@ fn main() { .long("network") .value_name("network") .help("Name of the Eth2 chain Lighthouse will sync and follow.") - .possible_values(&["medalla", "altona", "spadina", "pyrmont", "mainnet", "toledo"]) + .possible_values(&["medalla", "altona", "spadina", "pyrmont", "mainnet", "toledo", "prater"]) .conflicts_with("testnet-dir") .takes_value(true) .global(true)