8728c40102
## Issue Addressed N/A ## Proposed Changes With https://github.com/sigp/lighthouse/pull/3214 we made it such that you can either have 1 auth endpoint or multiple non auth endpoints. Now that we are post merge on all networks (testnets and mainnet), we cannot progress a chain without a dedicated auth execution layer connection so there is no point in having a non-auth eth1-endpoint for syncing deposit cache. This code removes all fallback related code in the eth1 service. We still keep the single non-auth endpoint since it's useful for testing. ## Additional Info This removes all eth1 fallback related metrics that were relevant for the monitoring service, so we might need to change the api upstream.
63 lines
2.4 KiB
Rust
63 lines
2.4 KiB
Rust
use clap::ArgMatches;
|
|
use environment::Environment;
|
|
use eth2_network_config::Eth2NetworkConfig;
|
|
use genesis::{Eth1Config, Eth1Endpoint, Eth1GenesisService};
|
|
use sensitive_url::SensitiveUrl;
|
|
use ssz::Encode;
|
|
use std::cmp::max;
|
|
use std::path::PathBuf;
|
|
use std::time::Duration;
|
|
use types::EthSpec;
|
|
|
|
/// Interval between polling the eth1 node for genesis information.
|
|
pub const ETH1_GENESIS_UPDATE_INTERVAL: Duration = Duration::from_millis(7_000);
|
|
|
|
pub fn run<T: EthSpec>(
|
|
mut env: Environment<T>,
|
|
testnet_dir: PathBuf,
|
|
matches: &ArgMatches<'_>,
|
|
) -> Result<(), String> {
|
|
let endpoints = matches
|
|
.value_of("eth1-endpoint")
|
|
.map(|e| {
|
|
warn!("The --eth1-endpoint flag is deprecated. Please use --eth1-endpoints instead");
|
|
String::from(e)
|
|
})
|
|
.or_else(|| matches.value_of("eth1-endpoints").map(String::from));
|
|
|
|
let mut eth2_network_config = Eth2NetworkConfig::load(testnet_dir.clone())?;
|
|
|
|
let spec = eth2_network_config.chain_spec::<T>()?;
|
|
|
|
let mut config = Eth1Config::default();
|
|
if let Some(v) = endpoints.clone() {
|
|
let endpoint = SensitiveUrl::parse(&v)
|
|
.map_err(|e| format!("Unable to parse eth1 endpoint URL: {:?}", e))?;
|
|
config.endpoint = Eth1Endpoint::NoAuth(endpoint);
|
|
}
|
|
config.deposit_contract_address = format!("{:?}", spec.deposit_contract_address);
|
|
config.deposit_contract_deploy_block = eth2_network_config.deposit_contract_deploy_block;
|
|
config.lowest_cached_block_number = eth2_network_config.deposit_contract_deploy_block;
|
|
config.follow_distance = spec.eth1_follow_distance / 2;
|
|
config.node_far_behind_seconds = max(5, config.follow_distance) * spec.seconds_per_eth1_block;
|
|
|
|
let genesis_service =
|
|
Eth1GenesisService::new(config, env.core_context().log().clone(), spec.clone())?;
|
|
|
|
env.runtime().block_on(async {
|
|
let _ = genesis_service
|
|
.wait_for_genesis_state::<T>(ETH1_GENESIS_UPDATE_INTERVAL, spec)
|
|
.await
|
|
.map(move |genesis_state| {
|
|
eth2_network_config.genesis_state_bytes = Some(genesis_state.as_ssz_bytes());
|
|
eth2_network_config.force_write_to_file(testnet_dir)
|
|
})
|
|
.map_err(|e| format!("Failed to find genesis: {}", e))?;
|
|
|
|
info!("Starting service to produce genesis BeaconState from eth1");
|
|
info!("Connecting to eth1 http endpoints: {:?}", endpoints);
|
|
|
|
Ok(())
|
|
})
|
|
}
|