From 6bb2ddc41fa2e771409b0595164ac79b30ff5868 Mon Sep 17 00:00:00 2001 From: Age Manning Date: Fri, 31 May 2024 11:53:35 +1000 Subject: [PATCH 1/4] Update to the latest enr version --- Cargo.toml | 7 ++++--- src/build.rs | 2 +- src/enr_ext.rs | 2 ++ src/eth2_ext.rs | 12 +++++++++--- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 426c4f9..62c5ade 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,11 +19,12 @@ name = "enr-cli" path = "src/main.rs" [dependencies] -enr = { version = "0.8.1", features = ["ed25519"] } +enr = { version = "0.12.0", features = ["ed25519"] } clap = "4.0.18" -libp2p-core = "0.40.1" +libp2p-core = "0.41" hex = "0.4.3" eth2_ssz = "0.4.0" eth2_ssz_derive = "0.3.0" tiny-keccak = "2.0.2" -libp2p-identity = { version = "0.2.3", features = ['ecdsa', 'ed25519', 'peerid', 'secp256k1'] } +bytes = "1" +libp2p-identity = { version = "0.2", features = ['ecdsa', 'ed25519', 'peerid', 'secp256k1', 'rand'] } diff --git a/src/build.rs b/src/build.rs index 7cae1eb..36be029 100644 --- a/src/build.rs +++ b/src/build.rs @@ -36,7 +36,7 @@ pub fn build(matches: &clap::ArgMatches) -> Result<(), &'static str> { // Build the ENR: - let mut enr_builder = enr::EnrBuilder::new("v4"); + let mut enr_builder = enr::Builder::default(); if let Some(seq) = matches.get_one::("seq") { enr_builder.seq(seq.parse::().map_err(|_| "Invalid sequence number")?); diff --git a/src/enr_ext.rs b/src/enr_ext.rs index f978815..fb52b09 100644 --- a/src/enr_ext.rs +++ b/src/enr_ext.rs @@ -12,6 +12,7 @@ pub const QUIC_ENR_KEY: &str = "quic"; pub const QUIC6_ENR_KEY: &str = "quic6"; /// Extend ENR for libp2p types. +#[allow(dead_code)] pub trait EnrExt { /// The libp2p `PeerId` for the record. fn peer_id(&self) -> PeerId; @@ -52,6 +53,7 @@ pub trait CombinedKeyPublicExt { } /// Extend ENR CombinedKey for conversion to libp2p keys. +#[allow(dead_code)] pub trait CombinedKeyExt { /// Converts a libp2p key into an ENR combined key. fn from_libp2p(key: Keypair) -> Result; diff --git a/src/eth2_ext.rs b/src/eth2_ext.rs index d06d6cf..86fee56 100644 --- a/src/eth2_ext.rs +++ b/src/eth2_ext.rs @@ -1,4 +1,5 @@ use crate::Enr; +use bytes::Bytes; use ssz::Decode; use ssz_derive::{Decode, Encode}; @@ -23,12 +24,17 @@ pub trait Eth2Enr { impl Eth2Enr for Enr { fn bitfield(&self) -> Option> { - self.get(BITFIELD_ENR_KEY).map(|v| v.to_vec()) + self.get_decodable(BITFIELD_ENR_KEY)? + .ok() + .map(|v: Bytes| v.to_vec()) } fn eth2(&self) -> Result { - let eth2_bytes = self.get(ETH2_ENR_KEY).ok_or("ENR has no eth2 field")?; + let eth2_bytes = self + .get_decodable::(ETH2_ENR_KEY) + .ok_or("ENR has no eth2 field")? + .map_err(|_| "Could not decode fork id")?; - EnrForkId::from_ssz_bytes(eth2_bytes).map_err(|_| "Could not decode EnrForkId") + EnrForkId::from_ssz_bytes(ð2_bytes).map_err(|_| "Could not decode EnrForkId") } } From 952282b245ef95305a385e07d2724a1cf28e72e6 Mon Sep 17 00:00:00 2001 From: Age Manning Date: Fri, 31 May 2024 11:55:02 +1000 Subject: [PATCH 2/4] Bump version --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 62c5ade..f508258 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Age Manning "] edition = "2018" name = "enr-cli" -version = "0.5.1" +version = "0.6.0" description = "Simple utility to read Ethereum Node Records (ENR)" readme = "./README.md" keywords = ["ethereum", "enr", "record", "EIP778", "node"] From 173fa204b1b8e366e7d9002a6d2844f22aed682a Mon Sep 17 00:00:00 2001 From: Age Manning Date: Sun, 2 Jun 2024 14:26:58 +1000 Subject: [PATCH 3/4] Only specify the ENR minor version --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index f508258..4e43851 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,7 +19,7 @@ name = "enr-cli" path = "src/main.rs" [dependencies] -enr = { version = "0.12.0", features = ["ed25519"] } +enr = { version = "0.12", features = ["ed25519"] } clap = "4.0.18" libp2p-core = "0.41" hex = "0.4.3" From f5269ed078cf4ff7fda531f4af77ac00db1c6392 Mon Sep 17 00:00:00 2001 From: Age Manning Date: Tue, 18 Jun 2024 16:21:10 +1000 Subject: [PATCH 4/4] Correct tests --- Cargo.toml | 4 +++- src/enr_ext.rs | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 475ba5f..3a33157 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -25,7 +25,9 @@ libp2p-core = "0.41" hex = "0.4.3" eth2_ssz = "0.4.0" eth2_ssz_derive = "0.3.0" -tiny-keccak = "2.0.2" bytes = "1" # TODO: remove 'rand' feature when is merged libp2p-identity = { version = "0.2.8", features = ['ecdsa', 'ed25519', 'peerid', 'secp256k1', 'rand'] } + +[dev-dependencies] +tiny-keccak = { version = "2.0.2", features = ["keccak"] } diff --git a/src/enr_ext.rs b/src/enr_ext.rs index fb52b09..0f8c6bb 100644 --- a/src/enr_ext.rs +++ b/src/enr_ext.rs @@ -352,6 +352,7 @@ impl CombinedKeyExt for CombinedKey { // peer_ids #[cfg(test)] pub fn peer_id_to_node_id(peer_id: &PeerId) -> Result { + use tiny_keccak::{Hasher, Keccak}; // A libp2p peer id byte representation should be 2 length bytes + 4 protobuf bytes + compressed pk bytes // if generated from a PublicKey with Identity multihash. let pk_bytes = &peer_id.to_bytes()[2..]; @@ -409,7 +410,7 @@ mod tests { let libp2p_kp: Keypair = secp256k1_kp.into(); let peer_id = libp2p_kp.public().to_peer_id(); - let enr = enr::EnrBuilder::new("v4").build(&secret_key).unwrap(); + let enr = enr::Builder::default().build(&secret_key).unwrap(); let node_id = peer_id_to_node_id(&peer_id).unwrap(); assert_eq!(enr.node_id(), node_id); @@ -427,7 +428,7 @@ mod tests { let libp2p_kp: Keypair = secp256k1_kp.into(); let peer_id = libp2p_kp.public().to_peer_id(); - let enr = enr::EnrBuilder::new("v4").build(&secret_key).unwrap(); + let enr = enr::Builder::default().build(&secret_key).unwrap(); let node_id = peer_id_to_node_id(&peer_id).unwrap(); assert_eq!(enr.node_id(), node_id);