diff --git a/common/eth2_config/src/lib.rs b/common/eth2_config/src/lib.rs index 9ea4e05ba..2f4511f2d 100644 --- a/common/eth2_config/src/lib.rs +++ b/common/eth2_config/src/lib.rs @@ -124,6 +124,8 @@ define_net!(zinken, include_zinken_file, "zinken", true); define_net!(mainnet, include_mainnet_file, "mainnet", false); +define_net!(toledo, include_toledo_file, "toledo", true); + #[cfg(test)] mod tests { use super::*; diff --git a/common/eth2_testnet_config/build.rs b/common/eth2_testnet_config/build.rs index 073422ace..67706edd7 100644 --- a/common/eth2_testnet_config/build.rs +++ b/common/eth2_testnet_config/build.rs @@ -1,7 +1,7 @@ //! Downloads a testnet configuration from Github. use eth2_config::{ - altona, medalla, spadina, zinken, Eth2NetArchiveAndDirectory, GENESIS_FILE_NAME, + altona, medalla, spadina, toledo, zinken, Eth2NetArchiveAndDirectory, GENESIS_FILE_NAME, }; use std::fs::File; use std::io; @@ -12,6 +12,7 @@ const ETH2_NET_DIRS: &[Eth2NetArchiveAndDirectory<'static>] = &[ medalla::ETH2_NET_DIR, spadina::ETH2_NET_DIR, zinken::ETH2_NET_DIR, + toledo::ETH2_NET_DIR, ]; fn main() { diff --git a/common/eth2_testnet_config/built_in_testnet_configs/toledo/boot_enr.yaml b/common/eth2_testnet_config/built_in_testnet_configs/toledo/boot_enr.yaml new file mode 100644 index 000000000..9b3f564b8 --- /dev/null +++ b/common/eth2_testnet_config/built_in_testnet_configs/toledo/boot_enr.yaml @@ -0,0 +1,20 @@ +# discv5.1-only bootnode @protolambda +- enr:-Ku4QL5E378NT4-vqP6v1mZ7kHxiTHJvuBvQixQsuTTCffa0PJNWMBlG3Mduvsvd6T2YP1U3l5tBKO5H-9wyX2SCtPkBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpC4EvfsAHAe0P__________gmlkgnY0gmlwhDaetEeJc2VjcDI1NmsxoQKtGC2CAuba7goLLdle899M3esUmoWRvzi7GBVhq6ViCYN1ZHCCIyg + +# lighthouse (Canada) @protolambda +- enr:-LK4QHLujdDjOwm2siyFJ2XGz19_ip-qTtozG3ceZ3_56G-LMWb4um67gTSYRJg0WsSkyvRMBEpz8uuIYl-7HfWvktgBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCXm69nAHAe0P__________gmlkgnY0gmlwhCO3C5OJc2VjcDI1NmsxoQKXw9BLDY6YwmqTtfkzUnlJQb82UrlX4lIAnSSYWHFRlYN0Y3CCIyiDdWRwgiMo + +# lighthouse (Sao Paulo) @protolambda +- enr:-LK4QMxmk7obupScBebKFaasSH3QmYUg-HaEmMAljfmGQCLbKwdOhszzx-VfVPvlH7bZZbOmg3-SNWbJsFfytdjD7a4Bh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCXm69nAHAe0P__________gmlkgnY0gmlwhBLkdWuJc2VjcDI1NmsxoQOwYsJyLOjJcDIqiQSSZtDi_EwwSaUjPBSnLVY_PYu-HoN0Y3CCIyiDdWRwgiMo + +# Teku @protolambda +- enr:-KG4QKqo0mG4C35ntJg8icO54wd973aZ7aBiAnC2t1XkGvgqNDOEHwNe2ykxYVUj9AWjm_lKD7brlhXKCZEskGbie2cDhGV0aDKQl5uvZwBwHtD__________4JpZIJ2NIJpcIQNOThwiXNlY3AyNTZrMaECn1dwC8MRt8rk2VUT8RjzEBaceF09d4CEQI20O_SWYcqDdGNwgiMog3VkcIIjKA + +# Prysm @protolambda +- enr:-LK4QAhU5smiLgU0AgrdFv8eCKmDPCBkXCMCIy8Aktaci5qvCYOsW98xVqJS6OoPWt4Sz_YoTdLQBWxd-RZ756vmGPMBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCXm69nAHAe0P__________gmlkgnY0gmlwhDTTDL2Jc2VjcDI1NmsxoQOmSJ0mKsQjab7Zralm1Hi0AEReZ2SEqYdKoOPmoA98DoN0Y3CCIyiDdWRwgiMo + +# Lighthouse: @sigp +- enr:-LK4QBsu_4I-tmA5WgxkJWRuVUCj2_QE2mmrwX0sFvAc3NR_YPrub4kpvPCb_OjKLwEefxey81SAcvQ7mr2Vvh8xhbgBh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCXm69nAHAe0P__________gmlkgnY0gmlwhA3UHZWJc2VjcDI1NmsxoQL9FPylFeunleHuPXlbB938eIMd3X9y9cJ8ZI8y3Li0u4N0Y3CCIyiDdWRwgiMo + +# Lighthouse: @sigp +- enr:-LK4QEfW9TCASUUy8L5xamlTVs3JbgT8iYOUspJkbh3rj-BuUndLjtonockiN2K_0g-cBQGq-wvsgAiz5Q3-ic-Wz_ABh2F0dG5ldHOIAAAAAAAAAACEZXRoMpCXm69nAHAe0P__________gmlkgnY0gmlwhCLV8-OJc2VjcDI1NmsxoQKYJuiXbqPzkbT0NAKIJneNWiX0136HiYI9qtx5NF1IloN0Y3CCIyiDdWRwgiMo diff --git a/common/eth2_testnet_config/built_in_testnet_configs/toledo/config.yaml b/common/eth2_testnet_config/built_in_testnet_configs/toledo/config.yaml new file mode 100644 index 000000000..99a9012d7 --- /dev/null +++ b/common/eth2_testnet_config/built_in_testnet_configs/toledo/config.yaml @@ -0,0 +1,154 @@ +# Toledo preset, variant of mainnet + +CONFIG_NAME: "toledo" + +# 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 +# Nov 10, 2020, 12pm UTC +MIN_GENESIS_TIME: 1605009600 +# 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 +# Toledo permissioned test deposit contract on Goerli +DEPOSIT_CONTRACT_ADDRESS: 0x47709dC7a8c18688a1f051761fc34ac253970bC0 + + +# 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 +# --------------------------------------------------------------- +GENESIS_FORK_VERSION: 0x00701ED0 +BLS_WITHDRAWAL_PREFIX: 0x00 + + +# Time parameters +# --------------------------------------------------------------- +# 86400 seconds (1 day) +GENESIS_DELAY: 86400 +# 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_testnet_config/built_in_testnet_configs/toledo/deploy_block.txt b/common/eth2_testnet_config/built_in_testnet_configs/toledo/deploy_block.txt new file mode 100644 index 000000000..99798b056 --- /dev/null +++ b/common/eth2_testnet_config/built_in_testnet_configs/toledo/deploy_block.txt @@ -0,0 +1 @@ +3702432 diff --git a/common/eth2_testnet_config/built_in_testnet_configs/toledo/deposit_contract.txt b/common/eth2_testnet_config/built_in_testnet_configs/toledo/deposit_contract.txt new file mode 100644 index 000000000..97ecde480 --- /dev/null +++ b/common/eth2_testnet_config/built_in_testnet_configs/toledo/deposit_contract.txt @@ -0,0 +1 @@ +0x47709dC7a8c18688a1f051761fc34ac253970bC0 diff --git a/common/eth2_testnet_config/built_in_testnet_configs/toledo/genesis.ssz.zip b/common/eth2_testnet_config/built_in_testnet_configs/toledo/genesis.ssz.zip new file mode 100644 index 000000000..842591737 Binary files /dev/null and b/common/eth2_testnet_config/built_in_testnet_configs/toledo/genesis.ssz.zip differ diff --git a/common/eth2_testnet_config/src/lib.rs b/common/eth2_testnet_config/src/lib.rs index 0311dcd43..f644c2601 100644 --- a/common/eth2_testnet_config/src/lib.rs +++ b/common/eth2_testnet_config/src/lib.rs @@ -7,10 +7,7 @@ //! //! https://github.com/sigp/lighthouse/pull/605 //! -use eth2_config::{ - include_altona_file, include_mainnet_file, include_medalla_file, include_spadina_file, - include_zinken_file, testnets_dir, -}; +use eth2_config::{testnets_dir, *}; use enr::{CombinedKey, Enr}; use ssz::Decode; @@ -57,8 +54,9 @@ const MEDALLA: HardcodedNet = define_net!(medalla, include_medalla_file); const SPADINA: HardcodedNet = define_net!(spadina, include_spadina_file); const ZINKEN: HardcodedNet = define_net!(zinken, include_zinken_file); const MAINNET: HardcodedNet = define_net!(mainnet, include_mainnet_file); +const TOLEDO: HardcodedNet = define_net!(toledo, include_toledo_file); -const HARDCODED_NETS: &[HardcodedNet] = &[ALTONA, MEDALLA, SPADINA, ZINKEN, MAINNET]; +const HARDCODED_NETS: &[HardcodedNet] = &[ALTONA, MEDALLA, SPADINA, ZINKEN, MAINNET, TOLEDO]; pub const DEFAULT_HARDCODED_TESTNET: &str = "medalla"; /// Specifies an Eth2 testnet. @@ -283,7 +281,7 @@ mod tests { let config = Eth2TestnetConfig::from_hardcoded_net(net).expect(&format!("{:?}", net.name)); - if net.name == "mainnet" { + if net.name == "mainnet" || net.name == "toledo" { // 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 3744014d5..0898a3820 100644 --- a/consensus/types/src/chain_spec.rs +++ b/consensus/types/src/chain_spec.rs @@ -598,6 +598,7 @@ impl YamlConfig { Some(match self.config_name.as_str() { "mainnet" => EthSpecId::Mainnet, "minimal" => EthSpecId::Minimal, + "toledo" => EthSpecId::Mainnet, "zinken" => EthSpecId::V012Legacy, "spadina" => EthSpecId::V012Legacy, "medalla" => EthSpecId::V012Legacy, diff --git a/lighthouse/src/main.rs b/lighthouse/src/main.rs index 25b249ddd..150aafd49 100644 --- a/lighthouse/src/main.rs +++ b/lighthouse/src/main.rs @@ -115,7 +115,7 @@ fn main() { .long("testnet") .value_name("testnet") .help("Name of network lighthouse will connect to") - .possible_values(&["medalla", "altona", "spadina", "zinken", "mainnet"]) + .possible_values(&["medalla", "altona", "spadina", "zinken", "mainnet", "toledo"]) .conflicts_with("testnet-dir") .takes_value(true) .global(true)