mirror of
https://github.com/sigp/lighthouse.git
synced 2026-05-07 00:42:42 +00:00
Fix execution layer redundancy (#5588)
* remove execution layer url redundancy * fix typo * fix tests * fix formatting
This commit is contained in:
@@ -419,21 +419,17 @@ where
|
||||
self
|
||||
}
|
||||
|
||||
pub fn execution_layer_from_urls(mut self, urls: &[&str]) -> Self {
|
||||
pub fn execution_layer_from_url(mut self, url: &str) -> Self {
|
||||
assert!(
|
||||
self.execution_layer.is_none(),
|
||||
"execution layer already defined"
|
||||
);
|
||||
|
||||
let urls: Vec<SensitiveUrl> = urls
|
||||
.iter()
|
||||
.map(|s| SensitiveUrl::parse(s))
|
||||
.collect::<Result<_, _>>()
|
||||
.unwrap();
|
||||
let url = SensitiveUrl::parse(url).ok();
|
||||
|
||||
let config = execution_layer::Config {
|
||||
execution_endpoints: urls,
|
||||
secret_files: vec![],
|
||||
execution_endpoint: url,
|
||||
secret_file: None,
|
||||
suggested_fee_recipient: Some(Address::repeat_byte(42)),
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
@@ -355,14 +355,14 @@ struct Inner<E: EthSpec> {
|
||||
|
||||
#[derive(Debug, Default, Clone, Serialize, Deserialize)]
|
||||
pub struct Config {
|
||||
/// Endpoint urls for EL nodes that are running the engine api.
|
||||
pub execution_endpoints: Vec<SensitiveUrl>,
|
||||
/// Endpoint url for EL nodes that are running the engine api.
|
||||
pub execution_endpoint: Option<SensitiveUrl>,
|
||||
/// Endpoint urls for services providing the builder api.
|
||||
pub builder_url: Option<SensitiveUrl>,
|
||||
/// User agent to send with requests to the builder API.
|
||||
pub builder_user_agent: Option<String>,
|
||||
/// JWT secrets for the above endpoints running the engine api.
|
||||
pub secret_files: Vec<PathBuf>,
|
||||
/// JWT secret for the above endpoint running the engine api.
|
||||
pub secret_file: Option<PathBuf>,
|
||||
/// The default fee recipient to use on the beacon node if none if provided from
|
||||
/// the validator client during block preparation.
|
||||
pub suggested_fee_recipient: Option<Address>,
|
||||
@@ -386,10 +386,10 @@ impl<E: EthSpec> ExecutionLayer<E> {
|
||||
/// Instantiate `Self` with an Execution engine specified in `Config`, using JSON-RPC via HTTP.
|
||||
pub fn from_config(config: Config, executor: TaskExecutor, log: Logger) -> Result<Self, Error> {
|
||||
let Config {
|
||||
execution_endpoints: urls,
|
||||
execution_endpoint: url,
|
||||
builder_url,
|
||||
builder_user_agent,
|
||||
secret_files,
|
||||
secret_file,
|
||||
suggested_fee_recipient,
|
||||
jwt_id,
|
||||
jwt_version,
|
||||
@@ -397,16 +397,10 @@ impl<E: EthSpec> ExecutionLayer<E> {
|
||||
execution_timeout_multiplier,
|
||||
} = config;
|
||||
|
||||
if urls.len() > 1 {
|
||||
warn!(log, "Only the first execution engine url will be used");
|
||||
}
|
||||
let execution_url = urls.into_iter().next().ok_or(Error::NoEngine)?;
|
||||
let execution_url = url.ok_or(Error::NoEngine)?;
|
||||
|
||||
// Use the default jwt secret path if not provided via cli.
|
||||
let secret_file = secret_files
|
||||
.into_iter()
|
||||
.next()
|
||||
.unwrap_or_else(|| default_datadir.join(DEFAULT_JWT_FILE));
|
||||
let secret_file = secret_file.unwrap_or_else(|| default_datadir.join(DEFAULT_JWT_FILE));
|
||||
|
||||
let jwt_key = if secret_file.exists() {
|
||||
// Read secret from file if it already exists
|
||||
|
||||
@@ -229,8 +229,8 @@ impl<E: EthSpec> MockBuilder<E> {
|
||||
|
||||
// This EL should not talk to a builder
|
||||
let config = Config {
|
||||
execution_endpoints: vec![mock_el_url],
|
||||
secret_files: vec![path],
|
||||
execution_endpoint: Some(mock_el_url),
|
||||
secret_file: Some(path),
|
||||
suggested_fee_recipient: None,
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
@@ -67,8 +67,8 @@ impl<E: EthSpec> MockExecutionLayer<E> {
|
||||
std::fs::write(&path, hex::encode(DEFAULT_JWT_SECRET)).unwrap();
|
||||
|
||||
let config = Config {
|
||||
execution_endpoints: vec![url],
|
||||
secret_files: vec![path],
|
||||
execution_endpoint: Some(url),
|
||||
secret_file: Some(path),
|
||||
suggested_fee_recipient: Some(Address::repeat_byte(42)),
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
@@ -348,8 +348,8 @@ pub fn get_config<E: EthSpec>(
|
||||
}
|
||||
|
||||
// Set config values from parse values.
|
||||
el_config.secret_files = vec![secret_file.clone()];
|
||||
el_config.execution_endpoints = vec![execution_endpoint.clone()];
|
||||
el_config.secret_file = Some(secret_file.clone());
|
||||
el_config.execution_endpoint = Some(execution_endpoint.clone());
|
||||
el_config.suggested_fee_recipient =
|
||||
clap_utils::parse_optional(cli_args, "suggested-fee-recipient")?;
|
||||
el_config.jwt_id = clap_utils::parse_optional(cli_args, "execution-jwt-id")?;
|
||||
|
||||
@@ -445,13 +445,16 @@ fn run_merge_execution_endpoints_flag_test(flag: &str) {
|
||||
.run_with_zero_port()
|
||||
.with_config(|config| {
|
||||
let config = config.execution_layer.as_ref().unwrap();
|
||||
assert_eq!(config.execution_endpoints.len(), 1);
|
||||
assert_eq!(config.execution_endpoint.is_some(), true);
|
||||
assert_eq!(
|
||||
config.execution_endpoints[0],
|
||||
config.execution_endpoint.as_ref().unwrap().clone(),
|
||||
SensitiveUrl::parse(&urls[0]).unwrap()
|
||||
);
|
||||
// Only the first secret file should be used.
|
||||
assert_eq!(config.secret_files, vec![jwts[0].clone()]);
|
||||
assert_eq!(
|
||||
config.secret_file.as_ref().unwrap().clone(),
|
||||
jwts[0].clone()
|
||||
);
|
||||
});
|
||||
}
|
||||
#[test]
|
||||
@@ -464,11 +467,11 @@ fn run_execution_jwt_secret_key_is_persisted() {
|
||||
.with_config(|config| {
|
||||
let config = config.execution_layer.as_ref().unwrap();
|
||||
assert_eq!(
|
||||
config.execution_endpoints[0].full.to_string(),
|
||||
config.execution_endpoint.as_ref().unwrap().full.to_string(),
|
||||
"http://localhost:8551/"
|
||||
);
|
||||
let mut file_jwt_secret_key = String::new();
|
||||
File::open(config.secret_files[0].clone())
|
||||
File::open(config.secret_file.as_ref().unwrap())
|
||||
.expect("could not open jwt_secret_key file")
|
||||
.read_to_string(&mut file_jwt_secret_key)
|
||||
.expect("could not read from file");
|
||||
@@ -515,10 +518,13 @@ fn merge_jwt_secrets_flag() {
|
||||
.with_config(|config| {
|
||||
let config = config.execution_layer.as_ref().unwrap();
|
||||
assert_eq!(
|
||||
config.execution_endpoints[0].full.to_string(),
|
||||
config.execution_endpoint.as_ref().unwrap().full.to_string(),
|
||||
"http://localhost:8551/"
|
||||
);
|
||||
assert_eq!(config.secret_files[0], dir.path().join("jwt-file"));
|
||||
assert_eq!(
|
||||
config.secret_file.as_ref().unwrap().clone(),
|
||||
dir.path().join("jwt-file")
|
||||
);
|
||||
});
|
||||
}
|
||||
#[test]
|
||||
|
||||
@@ -121,11 +121,11 @@ impl<Engine: GenericExecutionEngine> TestRig<Engine> {
|
||||
|
||||
let ee_a = {
|
||||
let execution_engine = ExecutionEngine::new(generic_engine.clone());
|
||||
let urls = vec![execution_engine.http_auth_url()];
|
||||
let url = Some(execution_engine.http_auth_url());
|
||||
|
||||
let config = execution_layer::Config {
|
||||
execution_endpoints: urls,
|
||||
secret_files: vec![],
|
||||
execution_endpoint: url,
|
||||
secret_file: None,
|
||||
suggested_fee_recipient: Some(Address::repeat_byte(42)),
|
||||
default_datadir: execution_engine.datadir(),
|
||||
..Default::default()
|
||||
@@ -140,11 +140,11 @@ impl<Engine: GenericExecutionEngine> TestRig<Engine> {
|
||||
|
||||
let ee_b = {
|
||||
let execution_engine = ExecutionEngine::new(generic_engine);
|
||||
let urls = vec![execution_engine.http_auth_url()];
|
||||
let url = Some(execution_engine.http_auth_url());
|
||||
|
||||
let config = execution_layer::Config {
|
||||
execution_endpoints: urls,
|
||||
secret_files: vec![],
|
||||
execution_endpoint: url,
|
||||
secret_file: None,
|
||||
suggested_fee_recipient: fee_recipient,
|
||||
default_datadir: execution_engine.datadir(),
|
||||
..Default::default()
|
||||
|
||||
@@ -395,11 +395,9 @@ async fn create_local_network<E: EthSpec>(
|
||||
|
||||
if post_merge_sim {
|
||||
let el_config = execution_layer::Config {
|
||||
execution_endpoints: vec![SensitiveUrl::parse(&format!(
|
||||
"http://localhost:{}",
|
||||
EXECUTION_PORT
|
||||
))
|
||||
.unwrap()],
|
||||
execution_endpoint: Some(
|
||||
SensitiveUrl::parse(&format!("http://localhost:{}", EXECUTION_PORT)).unwrap(),
|
||||
),
|
||||
..Default::default()
|
||||
};
|
||||
|
||||
|
||||
@@ -85,9 +85,9 @@ impl<E: EthSpec> LocalNetwork<E> {
|
||||
mock_execution_config,
|
||||
);
|
||||
el_config.default_datadir = execution_node.datadir.path().to_path_buf();
|
||||
el_config.secret_files = vec![execution_node.datadir.path().join("jwt.hex")];
|
||||
el_config.execution_endpoints =
|
||||
vec![SensitiveUrl::parse(&execution_node.server.url()).unwrap()];
|
||||
el_config.secret_file = Some(execution_node.datadir.path().join("jwt.hex"));
|
||||
el_config.execution_endpoint =
|
||||
Some(SensitiveUrl::parse(&execution_node.server.url()).unwrap());
|
||||
vec![execution_node]
|
||||
} else {
|
||||
vec![]
|
||||
@@ -180,9 +180,9 @@ impl<E: EthSpec> LocalNetwork<E> {
|
||||
config,
|
||||
);
|
||||
el_config.default_datadir = execution_node.datadir.path().to_path_buf();
|
||||
el_config.secret_files = vec![execution_node.datadir.path().join("jwt.hex")];
|
||||
el_config.execution_endpoints =
|
||||
vec![SensitiveUrl::parse(&execution_node.server.url()).unwrap()];
|
||||
el_config.secret_file = Some(execution_node.datadir.path().join("jwt.hex"));
|
||||
el_config.execution_endpoint =
|
||||
Some(SensitiveUrl::parse(&execution_node.server.url()).unwrap());
|
||||
self.execution_nodes.write().push(execution_node);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user