mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 19:09:54 +00:00
fix: fork id decoding from enr response (#3220)
This commit is contained in:
@ -305,7 +305,7 @@ impl EnrResponse {
|
|||||||
///
|
///
|
||||||
/// See also <https://github.com/ethereum/go-ethereum/blob/9244d5cd61f3ea5a7645fdf2a1a96d53421e412f/eth/protocols/eth/discovery.go#L36>
|
/// See also <https://github.com/ethereum/go-ethereum/blob/9244d5cd61f3ea5a7645fdf2a1a96d53421e412f/eth/protocols/eth/discovery.go#L36>
|
||||||
pub fn eth_fork_id(&self) -> Option<ForkId> {
|
pub fn eth_fork_id(&self) -> Option<ForkId> {
|
||||||
let mut maybe_fork_id = self.enr.0.get(b"eth")?;
|
let mut maybe_fork_id = self.enr.0.get_raw_rlp(b"eth")?;
|
||||||
EnrForkIdEntry::decode(&mut maybe_fork_id).ok().map(|entry| entry.fork_id)
|
EnrForkIdEntry::decode(&mut maybe_fork_id).ok().map(|entry| entry.fork_id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -500,7 +500,7 @@ mod tests {
|
|||||||
};
|
};
|
||||||
use enr::{EnrBuilder, EnrPublicKey};
|
use enr::{EnrBuilder, EnrPublicKey};
|
||||||
use rand::{thread_rng, Rng, RngCore};
|
use rand::{thread_rng, Rng, RngCore};
|
||||||
use reth_primitives::hex_literal::hex;
|
use reth_primitives::{hex_literal::hex, ForkHash};
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_endpoint_ipv_v4() {
|
fn test_endpoint_ipv_v4() {
|
||||||
@ -714,6 +714,41 @@ mod tests {
|
|||||||
Message::decode(&data).unwrap();
|
Message::decode(&data).unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn encode_decode_enr_msg() {
|
||||||
|
use self::EnrWrapper;
|
||||||
|
use enr::secp256k1::SecretKey;
|
||||||
|
use reth_rlp::Decodable;
|
||||||
|
use std::net::Ipv4Addr;
|
||||||
|
|
||||||
|
let key = SecretKey::new(&mut rand::rngs::OsRng);
|
||||||
|
let ip = Ipv4Addr::new(127, 0, 0, 1);
|
||||||
|
let tcp = 3000;
|
||||||
|
|
||||||
|
let fork_id: ForkId = ForkId { hash: ForkHash([220, 233, 108, 45]), next: 0u64 };
|
||||||
|
|
||||||
|
let enr = {
|
||||||
|
let mut builder = EnrBuilder::new("v4");
|
||||||
|
builder.ip(ip.into());
|
||||||
|
builder.tcp4(tcp);
|
||||||
|
let mut buf = Vec::new();
|
||||||
|
let forkentry = EnrForkIdEntry { fork_id };
|
||||||
|
forkentry.encode(&mut buf);
|
||||||
|
builder.add_value_rlp("eth", buf.into());
|
||||||
|
EnrWrapper::new(builder.build(&key).unwrap())
|
||||||
|
};
|
||||||
|
|
||||||
|
let enr_respone = EnrResponse { request_hash: H256::random(), enr };
|
||||||
|
|
||||||
|
let mut buf = Vec::new();
|
||||||
|
enr_respone.encode(&mut buf);
|
||||||
|
|
||||||
|
let decoded = EnrResponse::decode(&mut &buf[..]).unwrap();
|
||||||
|
|
||||||
|
let fork_id_decoded = decoded.eth_fork_id().unwrap();
|
||||||
|
assert_eq!(fork_id, fork_id_decoded);
|
||||||
|
}
|
||||||
|
|
||||||
// test vector from the enr library rlp encoding tests
|
// test vector from the enr library rlp encoding tests
|
||||||
// <https://github.com/sigp/enr/blob/e59dcb45ea07e423a7091d2a6ede4ad6d8ef2840/src/lib.rs#L1019>
|
// <https://github.com/sigp/enr/blob/e59dcb45ea07e423a7091d2a6ede4ad6d8ef2840/src/lib.rs#L1019>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user