diff --git a/Cargo.lock b/Cargo.lock index 2fbd271879..d915a2e561 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1212,6 +1212,7 @@ version = "0.1.0" dependencies = [ "eth2-libp2p 0.1.0", "eth2_ssz 0.1.2", + "reqwest 0.9.24 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", "serde_yaml 0.8.11 (registry+https://github.com/rust-lang/crates.io-index)", "tempdir 0.3.7 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/beacon_node/src/config.rs b/beacon_node/src/config.rs index c9979bc3d8..fe458b9836 100644 --- a/beacon_node/src/config.rs +++ b/beacon_node/src/config.rs @@ -376,9 +376,6 @@ fn init_new_client( let spec = &mut eth2_config.spec; - // For now, assume that all networks will use the lighthouse genesis fork. - spec.genesis_fork_version = [1, 3, 3, 7]; - client_config.eth1.deposit_contract_address = format!("{:?}", eth2_testnet_config.deposit_contract_address()?); client_config.eth1.deposit_contract_deploy_block = diff --git a/eth2/utils/eth2_testnet_config/.gitignore b/eth2/utils/eth2_testnet_config/.gitignore new file mode 100644 index 0000000000..b407ad27e5 --- /dev/null +++ b/eth2/utils/eth2_testnet_config/.gitignore @@ -0,0 +1 @@ +testnet* diff --git a/eth2/utils/eth2_testnet_config/Cargo.toml b/eth2/utils/eth2_testnet_config/Cargo.toml index 399219207b..13c4d387f7 100644 --- a/eth2/utils/eth2_testnet_config/Cargo.toml +++ b/eth2/utils/eth2_testnet_config/Cargo.toml @@ -4,10 +4,14 @@ version = "0.1.0" authors = ["Paul Hauner "] edition = "2018" -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +build = "build.rs" + +[build-dependencies] +reqwest = "0.9.20" [dev-dependencies] tempdir = "0.3" +reqwest = "0.9.20" [dependencies] serde = "1.0" diff --git a/eth2/utils/eth2_testnet_config/build.rs b/eth2/utils/eth2_testnet_config/build.rs new file mode 100644 index 0000000000..8f2817d86a --- /dev/null +++ b/eth2/utils/eth2_testnet_config/build.rs @@ -0,0 +1,61 @@ +/// Pulls down the latest Lighthouse testnet from https://github.com/eth2-clients/eth2-testnets +use reqwest; +use std::env; +use std::fs::File; +use std::io::Write; +use std::path::PathBuf; + +const TESTNET_ID: &str = "testnet5"; + +fn main() { + match get_all_files() { + Ok(()) => (), + Err(e) => panic!(e), + } +} + +pub fn get_all_files() -> Result<(), String> { + if !base_dir().exists() { + std::fs::create_dir_all(base_dir()) + .map_err(|e| format!("Unable to create {:?}: {}", base_dir(), e))?; + + get_file("boot_enr.yaml")?; + get_file("config.yaml")?; + get_file("deploy_block.txt")?; + get_file("deposit_contract.txt")?; + get_file("genesis.ssz")?; + } + + Ok(()) +} + +pub fn get_file(filename: &str) -> Result<(), String> { + let url = format!( + "https://raw.githubusercontent.com/eth2-clients/eth2-testnets/master/lighthouse/{}/{}", + TESTNET_ID, filename + ); + + let path = base_dir().join(filename); + let mut file = + File::create(path).map_err(|e| format!("Failed to create {}: {:?}", filename, e))?; + + let mut response = + reqwest::get(&url).map_err(|e| format!("Failed to download {}: {}", filename, e))?; + let mut contents: Vec = vec![]; + response + .copy_to(&mut contents) + .map_err(|e| format!("Failed to read {} response bytes: {}", filename, e))?; + + file.write(&contents) + .map_err(|e| format!("Failed to write to {}: {:?}", filename, e))?; + + Ok(()) +} + +fn base_dir() -> PathBuf { + env::var("CARGO_MANIFEST_DIR") + .expect("should know manifest dir") + .parse::() + .expect("should parse manifest dir as path") + .join(TESTNET_ID) +} diff --git a/eth2/utils/eth2_testnet_config/src/lib.rs b/eth2/utils/eth2_testnet_config/src/lib.rs index 5d20f51cc0..b81152eaec 100644 --- a/eth2/utils/eth2_testnet_config/src/lib.rs +++ b/eth2/utils/eth2_testnet_config/src/lib.rs @@ -20,11 +20,11 @@ pub const BOOT_ENR_FILE: &str = "boot_enr.yaml"; pub const GENESIS_STATE_FILE: &str = "genesis.ssz"; pub const YAML_CONFIG_FILE: &str = "config.yaml"; -pub const HARDCODED_YAML_CONFIG: &[u8] = include_bytes!("../testnet/config.yaml"); -pub const HARDCODED_DEPLOY_BLOCK: &[u8] = include_bytes!("../testnet/deploy_block.txt"); -pub const HARDCODED_DEPOSIT_CONTRACT: &[u8] = include_bytes!("../testnet/deposit_contract.txt"); -pub const HARDCODED_GENESIS_STATE: &[u8] = include_bytes!("../testnet/genesis.ssz"); -pub const HARDCODED_BOOT_ENR: &[u8] = include_bytes!("../testnet/boot_enr.yaml"); +pub const HARDCODED_YAML_CONFIG: &[u8] = include_bytes!("../testnet5/config.yaml"); +pub const HARDCODED_DEPLOY_BLOCK: &[u8] = include_bytes!("../testnet5/deploy_block.txt"); +pub const HARDCODED_DEPOSIT_CONTRACT: &[u8] = include_bytes!("../testnet5/deposit_contract.txt"); +pub const HARDCODED_GENESIS_STATE: &[u8] = include_bytes!("../testnet5/genesis.ssz"); +pub const HARDCODED_BOOT_ENR: &[u8] = include_bytes!("../testnet5/boot_enr.yaml"); /// Specifies an Eth2 testnet. /// @@ -202,7 +202,6 @@ mod tests { type E = MainnetEthSpec; - /* FIXME: add new testnet config and re-enable this test #[test] fn hard_coded_works() { let dir: Eth2TestnetConfig = @@ -212,7 +211,6 @@ mod tests { assert!(dir.genesis_state.is_some()); assert!(dir.yaml_config.is_some()); } - */ #[test] fn round_trip() { diff --git a/eth2/utils/eth2_testnet_config/testnet/boot_enr.yaml b/eth2/utils/eth2_testnet_config/testnet/boot_enr.yaml deleted file mode 100644 index f708364f38..0000000000 --- a/eth2/utils/eth2_testnet_config/testnet/boot_enr.yaml +++ /dev/null @@ -1,4 +0,0 @@ -- -Iu4QMK9kcJ246666k9FlE_8IXy8NGP_zO-M8hN4di66eZNjBhoipKSoZaJnHZERnb-0aZ4U4UMPT-We7yx1sfMdbeEDgmlkgnY0gmlwhDbOLfeJc2VjcDI1NmsxoQLVqNEoCVTC74VmUx25USyFe7lL0TgpXHaCX9CDy9H6boN0Y3CCIyiDdWRwgiMo -- -Iu4QB2V3Y21rbjnId2ZqpssdcQlKB49prr-ggq2smRJLg0xc5_7ar6GfuQkbnlj1LBHKY3l__Lkk8aIM29VgpLCDBgBgmlkgnY0gmlwhCOhiGqJc2VjcDI1NmsxoQMrmBYg_yR_ZKZKoLiChvlpNqdwXwodXmgw_TRow7RVwYN0Y3CCIyiDdWRwgiMo -- -Iu4QCCuoEoHoOyYO728lOOiMqVZsNs_jd-uhj6_kiuBUySwYtHQLVkycNu8o-4oCzr-ql1u_n8g6tCw3ZXAEf0U008BgmlkgnY0gmlwhA01ZgSJc2VjcDI1NmsxoQPk2OMW7stSjbdcMgrKEdFOLsRkIuxgBFryA3tIJM0YxYN0Y3CCIyiDdWRwgiMo -- -Iu4QF5vgIx1BDlqFKAiAeejWPphhc_OeHDzM5feKhibcyWHLlDlov8E8L7MDJ8dQvCyaCynJGf0eWUfo5pzLhM_e8QBgmlkgnY0gmlwhDRCMUyJc2VjcDI1NmsxoQJZ8jY1HYauxirnJkVI32FoN7_7KrE05asCkZb7nj_b-YN0Y3CCIyiDdWRwgiMo diff --git a/eth2/utils/eth2_testnet_config/testnet/config.yaml b/eth2/utils/eth2_testnet_config/testnet/config.yaml deleted file mode 100644 index 6c8813d6fc..0000000000 --- a/eth2/utils/eth2_testnet_config/testnet/config.yaml +++ /dev/null @@ -1,51 +0,0 @@ -FAR_FUTURE_EPOCH: 18446744073709551615 -BASE_REWARDS_PER_EPOCH: 4 -DEPOSIT_CONTRACT_TREE_DEPTH: 32 -SECONDS_PER_DAY: 2400 -MAX_COMMITTEES_PER_SLOT: 64 -TARGET_COMMITTEE_SIZE: 128 -MIN_PER_EPOCH_CHURN_LIMIT: 4 -CHURN_LIMIT_QUOTIENT: 65536 -SHUFFLE_ROUND_COUNT: 90 -MIN_GENESIS_ACTIVE_VALIDATOR_COUNT: 16384 -MIN_GENESIS_TIME: 0 -MIN_DEPOSIT_AMOUNT: 100 -MAX_EFFECTIVE_BALANCE: 3200000000 -EJECTION_BALANCE: 1600000000 -EFFECTIVE_BALANCE_INCREMENT: 100000000 -GENESIS_SLOT: 0 -BLS_WITHDRAWAL_PREFIX: 0x00 -SECONDS_PER_SLOT: 12 -MIN_ATTESTATION_INCLUSION_DELAY: 1 -MIN_SEED_LOOKAHEAD: 1 -MAX_SEED_LOOKAHEAD: 4 -MIN_VALIDATOR_WITHDRAWABILITY_DELAY: 256 -PERSISTENT_COMMITTEE_PERIOD: 2048 -MIN_EPOCHS_TO_INACTIVITY_PENALTY: 4 -BASE_REWARD_FACTOR: 64 -WHISTLEBLOWER_REWARD_QUOTIENT: 512 -PROPOSER_REWARD_QUOTIENT: 8 -INACTIVITY_PENALTY_QUOTIENT: 33554432 -MIN_SLASHING_PENALTY_QUOTIENT: 32 -SAFE_SLOTS_TO_UPDATE_JUSTIFIED: 8 -DOMAIN_BEACON_PROPOSER: 0x00000000 -DOMAIN_BEACON_ATTESTER: 0x01000000 -DOMAIN_RANDAO: 0x02000000 -DOMAIN_DEPOSIT: 0x03000000 -DOMAIN_VOLUNTARY_EXIT: 0x04000000 -JUSTIFICATION_BITS_LENGTH: 0x04000000 -MAX_VALIDATORS_PER_COMMITTEE: 2048 -GENESIS_EPOCH: 0 -SLOTS_PER_EPOCH: 32 -SLOTS_PER_ETH1_VOTING_PERIOD: 1024 -SLOTS_PER_HISTORICAL_ROOT: 8192 -EPOCHS_PER_HISTORICAL_VECTOR: 65536 -EPOCHS_PER_SLASHINGS_VECTOR: 8192 -HISTORICAL_ROOTS_LIMIT: 16777216 -VALIDATOR_REGISTRY_LIMIT: 1099511627776 -MAX_PROPOSER_SLASHINGS: 16 -MAX_ATTESTER_SLASHINGS: 1 -MAX_ATTESTATIONS: 128 -MAX_DEPOSITS: 16 -MAX_VOLUNTARY_EXITS: 16 -ETH1_FOLLOW_DISTANCE: 16 \ No newline at end of file diff --git a/eth2/utils/eth2_testnet_config/testnet/deploy_block.txt b/eth2/utils/eth2_testnet_config/testnet/deploy_block.txt deleted file mode 100644 index 22ebbfcf1c..0000000000 --- a/eth2/utils/eth2_testnet_config/testnet/deploy_block.txt +++ /dev/null @@ -1 +0,0 @@ -1857277 \ No newline at end of file diff --git a/eth2/utils/eth2_testnet_config/testnet/deposit_contract.txt b/eth2/utils/eth2_testnet_config/testnet/deposit_contract.txt deleted file mode 100644 index b0b8e55f66..0000000000 --- a/eth2/utils/eth2_testnet_config/testnet/deposit_contract.txt +++ /dev/null @@ -1 +0,0 @@ -0x74a03685a1cbc279efe4ea88b5a86d6cb0c6cedb \ No newline at end of file diff --git a/eth2/utils/eth2_testnet_config/testnet/genesis.ssz b/eth2/utils/eth2_testnet_config/testnet/genesis.ssz deleted file mode 100644 index 9349a80a02..0000000000 Binary files a/eth2/utils/eth2_testnet_config/testnet/genesis.ssz and /dev/null differ