Skip to content

Commit af04659

Browse files
committed
Replace function with static HashMap
- Avoids parsing on each request
1 parent 0ee9636 commit af04659

1 file changed

Lines changed: 16 additions & 14 deletions

File tree

crates/charon/src/eth2wrap/version.rs

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,17 @@ enum BeaconNodeVersionError {
1919
},
2020
}
2121

22-
fn minimum_beacon_node_version(name: &str) -> Option<version::SemVer> {
23-
let name = name.to_lowercase();
24-
match name.as_str() {
25-
"lighthouse" => Some(version::SemVer::parse("v8.0.0-rc.0").unwrap()),
26-
"teku" => Some(version::SemVer::parse("v25.9.3").unwrap()),
27-
"lodestar" => Some(version::SemVer::parse("v1.35.0-rc.1").unwrap()),
28-
"nimbus" => Some(version::SemVer::parse("v25.9.2").unwrap()),
29-
"prysm" => Some(version::SemVer::parse("v6.1.0").unwrap()),
30-
"grandine" => Some(version::SemVer::parse("v2.0.0-rc0").unwrap()),
31-
_ => None,
32-
}
33-
}
22+
static MINIMUM_BEACON_NODE_VERSIONS: LazyLock<std::collections::HashMap<&str, version::SemVer>> =
23+
LazyLock::new(|| {
24+
std::collections::HashMap::from([
25+
("lighthouse", version::SemVer::parse("v8.0.0-rc.0").unwrap()),
26+
("teku", version::SemVer::parse("v25.9.3").unwrap()),
27+
("lodestar", version::SemVer::parse("v1.35.0-rc.1").unwrap()),
28+
("nimbus", version::SemVer::parse("v25.9.2").unwrap()),
29+
("prysm", version::SemVer::parse("v6.1.0").unwrap()),
30+
("grandine", version::SemVer::parse("v2.0.0-rc0").unwrap()),
31+
])
32+
});
3433

3534
static VERSION_EXTRACT_REGEX: LazyLock<regex::Regex> = LazyLock::new(|| {
3635
regex::Regex::new(r"^([^/]+)/v?([0-9]+\.[0-9]+\.[0-9]+)").expect("invalid regex")
@@ -49,7 +48,10 @@ fn check_beacon_node_version_status(bn_version: &str) -> Result<()> {
4948
.map_err(|_| BeaconNodeVersionError::InvalidFormat)?;
5049

5150
let name = &matches[1];
52-
let minimum = minimum_beacon_node_version(name).ok_or(BeaconNodeVersionError::UnknownClient)?;
51+
let minimum = MINIMUM_BEACON_NODE_VERSIONS
52+
.get(&name.to_lowercase().as_str())
53+
.ok_or(BeaconNodeVersionError::UnknownClient)?
54+
.clone();
5355

5456
if client < minimum {
5557
return Err(BeaconNodeVersionError::TooOld { client, minimum });
@@ -146,7 +148,7 @@ mod tests {
146148

147149
for (input, expected) in tc {
148150
let result = super::check_beacon_node_version_status(input);
149-
assert_eq!(result, expected);
151+
assert_eq!(result, expected, "input = {input}");
150152
}
151153
}
152154
}

0 commit comments

Comments
 (0)