diff --git a/Cargo.lock b/Cargo.lock index 797971c74..508e88799 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -766,12 +766,6 @@ dependencies = [ "pkg-config", ] -[[package]] -name = "c_linked_list" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4964518bd3b4a8190e832886cdc0da9794f12e8e6c1613a9e90ff331c4c8724b" - [[package]] name = "cached_tree_hash" version = "0.1.0" @@ -2070,7 +2064,7 @@ dependencies = [ "futures-sink", "futures-task", "memchr", - "pin-project", + "pin-project 0.4.26", "pin-utils", "proc-macro-hack", "proc-macro-nested", @@ -2086,15 +2080,9 @@ dependencies = [ "bytes 0.5.6", "futures 0.3.6", "memchr", - "pin-project", + "pin-project 0.4.26", ] -[[package]] -name = "gcc" -version = "0.3.55" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2" - [[package]] name = "generic-array" version = "0.12.3" @@ -2138,28 +2126,6 @@ dependencies = [ "types", ] -[[package]] -name = "get_if_addrs" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abddb55a898d32925f3148bd281174a68eeb68bbfd9a5938a57b18f506ee4ef7" -dependencies = [ - "c_linked_list", - "get_if_addrs-sys", - "libc", - "winapi 0.2.8", -] - -[[package]] -name = "get_if_addrs-sys" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d04f9fb746cf36b191c00f3ede8bde9c8e64f9f4b05ae2694a9ccf5e3f5ab48" -dependencies = [ - "gcc", - "libc", -] - [[package]] name = "getrandom" version = "0.1.15" @@ -2589,7 +2555,7 @@ dependencies = [ "httparse", "httpdate", "itoa", - "pin-project", + "pin-project 0.4.26", "socket2", "tokio 0.2.22", "tower-service", @@ -2645,6 +2611,27 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "if-addrs" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f12906406f12abf5569643c46b29aec78313dc1537b17dd5c5250169790c4db9" +dependencies = [ + "if-addrs-sys", + "libc", + "winapi 0.3.9", +] + +[[package]] +name = "if-addrs-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e2556f16544202bcfe0aa5d20a01a6b815f736b136b3ad76dc547ee6b5bb1df" +dependencies = [ + "cc", + "libc", +] + [[package]] name = "igd" version = "0.11.1" @@ -2916,14 +2903,14 @@ checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" [[package]] name = "libp2p" -version = "0.29.0" -source = "git+https://github.com/sigp/rust-libp2p?rev=a731aa803d986977c25a77ed2b002d9578f7377c#a731aa803d986977c25a77ed2b002d9578f7377c" +version = "0.29.1" +source = "git+https://github.com/sigp/rust-libp2p?rev=e42d105cd776b50fc8ef5d726a9e2c799196bd80#e42d105cd776b50fc8ef5d726a9e2c799196bd80" dependencies = [ "atomic", "bytes 0.5.6", "futures 0.3.6", "lazy_static", - "libp2p-core 0.22.2", + "libp2p-core 0.23.1", "libp2p-core-derive", "libp2p-dns", "libp2p-gossipsub", @@ -2936,7 +2923,7 @@ dependencies = [ "multihash", "parity-multiaddr 0.9.3", "parking_lot 0.11.0", - "pin-project", + "pin-project 1.0.1", "smallvec 1.4.2", "wasm-timer", ] @@ -2961,7 +2948,7 @@ dependencies = [ "multistream-select 0.8.2", "parity-multiaddr 0.9.2", "parking_lot 0.10.2", - "pin-project", + "pin-project 0.4.26", "prost", "prost-build", "rand 0.7.3", @@ -2977,8 +2964,8 @@ dependencies = [ [[package]] name = "libp2p-core" -version = "0.22.2" -source = "git+https://github.com/sigp/rust-libp2p?rev=a731aa803d986977c25a77ed2b002d9578f7377c#a731aa803d986977c25a77ed2b002d9578f7377c" +version = "0.23.1" +source = "git+https://github.com/sigp/rust-libp2p?rev=e42d105cd776b50fc8ef5d726a9e2c799196bd80#e42d105cd776b50fc8ef5d726a9e2c799196bd80" dependencies = [ "asn1_der", "bs58", @@ -2991,10 +2978,10 @@ dependencies = [ "libsecp256k1", "log 0.4.11", "multihash", - "multistream-select 0.8.3", + "multistream-select 0.8.4", "parity-multiaddr 0.9.3", "parking_lot 0.11.0", - "pin-project", + "pin-project 1.0.1", "prost", "prost-build", "rand 0.7.3", @@ -3011,7 +2998,7 @@ dependencies = [ [[package]] name = "libp2p-core-derive" version = "0.20.2" -source = "git+https://github.com/sigp/rust-libp2p?rev=a731aa803d986977c25a77ed2b002d9578f7377c#a731aa803d986977c25a77ed2b002d9578f7377c" +source = "git+https://github.com/sigp/rust-libp2p?rev=e42d105cd776b50fc8ef5d726a9e2c799196bd80#e42d105cd776b50fc8ef5d726a9e2c799196bd80" dependencies = [ "quote", "syn", @@ -3019,27 +3006,27 @@ dependencies = [ [[package]] name = "libp2p-dns" -version = "0.22.0" -source = "git+https://github.com/sigp/rust-libp2p?rev=a731aa803d986977c25a77ed2b002d9578f7377c#a731aa803d986977c25a77ed2b002d9578f7377c" +version = "0.23.0" +source = "git+https://github.com/sigp/rust-libp2p?rev=e42d105cd776b50fc8ef5d726a9e2c799196bd80#e42d105cd776b50fc8ef5d726a9e2c799196bd80" dependencies = [ "futures 0.3.6", - "libp2p-core 0.22.2", + "libp2p-core 0.23.1", "log 0.4.11", ] [[package]] name = "libp2p-gossipsub" -version = "0.22.1" -source = "git+https://github.com/sigp/rust-libp2p?rev=a731aa803d986977c25a77ed2b002d9578f7377c#a731aa803d986977c25a77ed2b002d9578f7377c" +version = "0.23.0" +source = "git+https://github.com/sigp/rust-libp2p?rev=e42d105cd776b50fc8ef5d726a9e2c799196bd80#e42d105cd776b50fc8ef5d726a9e2c799196bd80" dependencies = [ - "base64 0.12.3", + "base64 0.13.0", "byteorder", "bytes 0.5.6", "fnv", "futures 0.3.6", "futures_codec", "hex_fmt", - "libp2p-core 0.22.2", + "libp2p-core 0.23.1", "libp2p-swarm", "log 0.4.11", "prost", @@ -3053,11 +3040,11 @@ dependencies = [ [[package]] name = "libp2p-identify" -version = "0.22.0" -source = "git+https://github.com/sigp/rust-libp2p?rev=a731aa803d986977c25a77ed2b002d9578f7377c#a731aa803d986977c25a77ed2b002d9578f7377c" +version = "0.23.0" +source = "git+https://github.com/sigp/rust-libp2p?rev=e42d105cd776b50fc8ef5d726a9e2c799196bd80#e42d105cd776b50fc8ef5d726a9e2c799196bd80" dependencies = [ "futures 0.3.6", - "libp2p-core 0.22.2", + "libp2p-core 0.23.1", "libp2p-swarm", "log 0.4.11", "prost", @@ -3069,28 +3056,30 @@ dependencies = [ [[package]] name = "libp2p-mplex" version = "0.23.0" -source = "git+https://github.com/sigp/rust-libp2p?rev=a731aa803d986977c25a77ed2b002d9578f7377c#a731aa803d986977c25a77ed2b002d9578f7377c" +source = "git+https://github.com/sigp/rust-libp2p?rev=e42d105cd776b50fc8ef5d726a9e2c799196bd80#e42d105cd776b50fc8ef5d726a9e2c799196bd80" dependencies = [ "bytes 0.5.6", - "fnv", "futures 0.3.6", "futures_codec", - "libp2p-core 0.22.2", + "libp2p-core 0.23.1", "log 0.4.11", + "nohash-hasher", "parking_lot 0.11.0", + "rand 0.7.3", + "smallvec 1.4.2", "unsigned-varint 0.5.1", ] [[package]] name = "libp2p-noise" -version = "0.24.1" -source = "git+https://github.com/sigp/rust-libp2p?rev=a731aa803d986977c25a77ed2b002d9578f7377c#a731aa803d986977c25a77ed2b002d9578f7377c" +version = "0.25.0" +source = "git+https://github.com/sigp/rust-libp2p?rev=e42d105cd776b50fc8ef5d726a9e2c799196bd80#e42d105cd776b50fc8ef5d726a9e2c799196bd80" dependencies = [ "bytes 0.5.6", "curve25519-dalek", "futures 0.3.6", "lazy_static", - "libp2p-core 0.22.2", + "libp2p-core 0.23.1", "log 0.4.11", "prost", "prost-build", @@ -3104,12 +3093,12 @@ dependencies = [ [[package]] name = "libp2p-swarm" -version = "0.22.0" -source = "git+https://github.com/sigp/rust-libp2p?rev=a731aa803d986977c25a77ed2b002d9578f7377c#a731aa803d986977c25a77ed2b002d9578f7377c" +version = "0.23.0" +source = "git+https://github.com/sigp/rust-libp2p?rev=e42d105cd776b50fc8ef5d726a9e2c799196bd80#e42d105cd776b50fc8ef5d726a9e2c799196bd80" dependencies = [ "either", "futures 0.3.6", - "libp2p-core 0.22.2", + "libp2p-core 0.23.1", "log 0.4.11", "rand 0.7.3", "smallvec 1.4.2", @@ -3119,14 +3108,14 @@ dependencies = [ [[package]] name = "libp2p-tcp" -version = "0.22.0" -source = "git+https://github.com/sigp/rust-libp2p?rev=a731aa803d986977c25a77ed2b002d9578f7377c#a731aa803d986977c25a77ed2b002d9578f7377c" +version = "0.23.0" +source = "git+https://github.com/sigp/rust-libp2p?rev=e42d105cd776b50fc8ef5d726a9e2c799196bd80#e42d105cd776b50fc8ef5d726a9e2c799196bd80" dependencies = [ "futures 0.3.6", "futures-timer", - "get_if_addrs", + "if-addrs", "ipnet", - "libp2p-core 0.22.2", + "libp2p-core 0.23.1", "log 0.4.11", "socket2", "tokio 0.2.22", @@ -3134,13 +3123,13 @@ dependencies = [ [[package]] name = "libp2p-websocket" -version = "0.23.1" -source = "git+https://github.com/sigp/rust-libp2p?rev=a731aa803d986977c25a77ed2b002d9578f7377c#a731aa803d986977c25a77ed2b002d9578f7377c" +version = "0.24.0" +source = "git+https://github.com/sigp/rust-libp2p?rev=e42d105cd776b50fc8ef5d726a9e2c799196bd80#e42d105cd776b50fc8ef5d726a9e2c799196bd80" dependencies = [ "async-tls", "either", "futures 0.3.6", - "libp2p-core 0.22.2", + "libp2p-core 0.23.1", "log 0.4.11", "quicksink", "rustls", @@ -3544,20 +3533,20 @@ dependencies = [ "bytes 0.5.6", "futures 0.3.6", "log 0.4.11", - "pin-project", + "pin-project 0.4.26", "smallvec 1.4.2", "unsigned-varint 0.4.0", ] [[package]] name = "multistream-select" -version = "0.8.3" -source = "git+https://github.com/sigp/rust-libp2p?rev=a731aa803d986977c25a77ed2b002d9578f7377c#a731aa803d986977c25a77ed2b002d9578f7377c" +version = "0.8.4" +source = "git+https://github.com/sigp/rust-libp2p?rev=e42d105cd776b50fc8ef5d726a9e2c799196bd80#e42d105cd776b50fc8ef5d726a9e2c799196bd80" dependencies = [ "bytes 0.5.6", "futures 0.3.6", "log 0.4.11", - "pin-project", + "pin-project 1.0.1", "smallvec 1.4.2", "unsigned-varint 0.5.1", ] @@ -3604,9 +3593,9 @@ dependencies = [ "fnv", "futures 0.3.6", "genesis", - "get_if_addrs", "hashset_delay", "hex 0.4.2", + "if-addrs", "igd", "itertools 0.9.0", "lazy_static", @@ -3662,6 +3651,12 @@ dependencies = [ "validator_dir", ] +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + [[package]] name = "nom" version = "2.2.1" @@ -3851,7 +3846,7 @@ dependencies = [ [[package]] name = "parity-multiaddr" version = "0.9.3" -source = "git+https://github.com/sigp/rust-libp2p?rev=a731aa803d986977c25a77ed2b002d9578f7377c#a731aa803d986977c25a77ed2b002d9578f7377c" +source = "git+https://github.com/sigp/rust-libp2p?rev=e42d105cd776b50fc8ef5d726a9e2c799196bd80#e42d105cd776b50fc8ef5d726a9e2c799196bd80" dependencies = [ "arrayref", "bs58", @@ -4009,7 +4004,16 @@ version = "0.4.26" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "13fbdfd6bdee3dc9be46452f86af4a4072975899cf8592466668620bebfbcc17" dependencies = [ - "pin-project-internal", + "pin-project-internal 0.4.26", +] + +[[package]] +name = "pin-project" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee41d838744f60d959d7074e3afb6b35c7456d0f61cad38a24e35e6553f73841" +dependencies = [ + "pin-project-internal 1.0.1", ] [[package]] @@ -4023,6 +4027,17 @@ dependencies = [ "syn", ] +[[package]] +name = "pin-project-internal" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81a4ffa594b66bff340084d4081df649a7dc049ac8d7fc458d8e628bfbbb2f86" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "pin-project-lite" version = "0.1.10" @@ -4734,7 +4749,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4da5fcb054c46f5a5dff833b129285a93d3f0179531735e6c866e8cc307d2020" dependencies = [ "futures 0.3.6", - "pin-project", + "pin-project 0.4.26", "static_assertions", ] @@ -5469,9 +5484,9 @@ dependencies = [ [[package]] name = "syn" -version = "1.0.42" +version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c51d92969d209b54a98397e1b91c8ae82d8c87a7bb87df0b29aa2ad81454228" +checksum = "5ad5de3220ea04da322618ded2c42233d02baca219d6f160a3e9c87cda16c942" dependencies = [ "proc-macro2", "quote", @@ -5994,7 +6009,7 @@ checksum = "6d9e878ad426ca286e4dcae09cbd4e1973a7f8987d97570e2469703dd7f5720c" dependencies = [ "futures-util", "log 0.4.11", - "pin-project", + "pin-project 0.4.26", "tokio 0.2.22", "tungstenite", ] @@ -6106,7 +6121,7 @@ version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab7bb6f14721aa00656086e9335d363c5c8747bae02ebe32ea2c7dece5689b4c" dependencies = [ - "pin-project", + "pin-project 0.4.26", "tracing", ] @@ -6545,7 +6560,7 @@ dependencies = [ "mime 0.3.16", "mime_guess", "multipart", - "pin-project", + "pin-project 0.4.26", "scoped-tls 1.0.0", "serde", "serde_json", diff --git a/beacon_node/eth2_libp2p/Cargo.toml b/beacon_node/eth2_libp2p/Cargo.toml index ece6efa58..7d7121b57 100644 --- a/beacon_node/eth2_libp2p/Cargo.toml +++ b/beacon_node/eth2_libp2p/Cargo.toml @@ -42,7 +42,7 @@ regex = "1.3.9" [dependencies.libp2p] #version = "0.23.0" git = "https://github.com/sigp/rust-libp2p" -rev = "a731aa803d986977c25a77ed2b002d9578f7377c" +rev = "e42d105cd776b50fc8ef5d726a9e2c799196bd80" default-features = false features = ["websocket", "identify", "mplex", "noise", "gossipsub", "dns", "tcp-tokio"] diff --git a/beacon_node/eth2_libp2p/src/behaviour/mod.rs b/beacon_node/eth2_libp2p/src/behaviour/mod.rs index 593b7279b..4a984d9c0 100644 --- a/beacon_node/eth2_libp2p/src/behaviour/mod.rs +++ b/beacon_node/eth2_libp2p/src/behaviour/mod.rs @@ -90,8 +90,6 @@ pub enum BehaviourEvent { id: MessageId, /// The peer from which we received this message, not the peer that published it. source: PeerId, - /// The topics that this message was sent on. - topics: Vec, /// The message itself. message: PubsubMessage, }, @@ -304,35 +302,34 @@ impl Behaviour { /// Publishes a list of messages on the pubsub (gossipsub) behaviour, choosing the encoding. pub fn publish(&mut self, messages: Vec>) { for message in messages { - for topic in message.topics(GossipEncoding::default(), self.enr_fork_id.fork_digest) { - match message.encode(GossipEncoding::default()) { - Ok(message_data) => { - if let Err(e) = self.gossipsub.publish(topic.clone().into(), message_data) { - slog::warn!(self.log, "Could not publish message"; "error" => format!("{:?}", e)); + let topic = message.topic(GossipEncoding::default(), self.enr_fork_id.fork_digest); + match message.encode(GossipEncoding::default()) { + Ok(message_data) => { + if let Err(e) = self.gossipsub.publish(topic.clone().into(), message_data) { + slog::warn!(self.log, "Could not publish message"; "error" => format!("{:?}", e)); - // add to metrics - match topic.kind() { - GossipKind::Attestation(subnet_id) => { - if let Some(v) = metrics::get_int_gauge( - &metrics::FAILED_ATTESTATION_PUBLISHES_PER_SUBNET, - &[&subnet_id.to_string()], - ) { - v.inc() - }; - } - kind => { - if let Some(v) = metrics::get_int_gauge( - &metrics::FAILED_PUBLISHES_PER_MAIN_TOPIC, - &[&format!("{:?}", kind)], - ) { - v.inc() - }; - } + // add to metrics + match topic.kind() { + GossipKind::Attestation(subnet_id) => { + if let Some(v) = metrics::get_int_gauge( + &metrics::FAILED_ATTESTATION_PUBLISHES_PER_SUBNET, + &[&subnet_id.to_string()], + ) { + v.inc() + }; + } + kind => { + if let Some(v) = metrics::get_int_gauge( + &metrics::FAILED_PUBLISHES_PER_MAIN_TOPIC, + &[&format!("{:?}", kind)], + ) { + v.inc() + }; } } } - Err(e) => crit!(self.log, "Could not publish message"; "error" => e), } + Err(e) => crit!(self.log, "Could not publish message"; "error" => e), } } } @@ -537,7 +534,7 @@ impl Behaviour { } => { // Note: We are keeping track here of the peer that sent us the message, not the // peer that originally published the message. - match PubsubMessage::decode(&gs_msg.topics, gs_msg.data()) { + match PubsubMessage::decode(&gs_msg.topic, gs_msg.data()) { Err(e) => { debug!(self.log, "Could not decode gossipsub message"; "error" => e); //reject the message @@ -554,7 +551,6 @@ impl Behaviour { self.add_event(BehaviourEvent::PubsubMessage { id, source: propagation_source, - topics: gs_msg.topics, message: msg, }); } diff --git a/beacon_node/eth2_libp2p/src/service.rs b/beacon_node/eth2_libp2p/src/service.rs index ece4cd1d5..634671a60 100644 --- a/beacon_node/eth2_libp2p/src/service.rs +++ b/beacon_node/eth2_libp2p/src/service.rs @@ -9,7 +9,7 @@ use crate::EnrExt; use crate::{NetworkConfig, NetworkGlobals, PeerAction}; use futures::prelude::*; use libp2p::core::{ - identity::Keypair, multiaddr::Multiaddr, muxing::StreamMuxerBox, transport::boxed::Boxed, + identity::Keypair, multiaddr::Multiaddr, muxing::StreamMuxerBox, transport::Boxed, }; use libp2p::{ core, noise, @@ -20,7 +20,6 @@ use slog::{crit, debug, info, o, trace, warn}; use ssz::Decode; use std::fs::File; use std::io::prelude::*; -use std::io::{Error, ErrorKind}; use std::pin::Pin; use std::sync::Arc; use std::time::Duration; @@ -323,9 +322,7 @@ impl Service { /// The implementation supports TCP/IP, WebSockets over TCP/IP, noise as the encryption layer, and /// mplex as the multiplexing layer. -fn build_transport( - local_private_key: Keypair, -) -> Result, Error> { +fn build_transport(local_private_key: Keypair) -> std::io::Result> { let transport = libp2p::tcp::TokioTcpConfig::new().nodelay(true); let transport = libp2p::dns::DnsConfig::new(transport)?; #[cfg(feature = "libp2p-websocket")] @@ -338,10 +335,7 @@ fn build_transport( .upgrade(core::upgrade::Version::V1) .authenticate(generate_noise_config(&local_private_key)) .multiplex(libp2p::mplex::MplexConfig::new()) - .map(|(peer, muxer), _| (peer, core::muxing::StreamMuxerBox::new(muxer))) .timeout(Duration::from_secs(10)) - .timeout(Duration::from_secs(10)) - .map_err(|err| Error::new(ErrorKind::Other, err)) .boxed()) } diff --git a/beacon_node/eth2_libp2p/src/types/pubsub.rs b/beacon_node/eth2_libp2p/src/types/pubsub.rs index c27d3df4f..90e5781ae 100644 --- a/beacon_node/eth2_libp2p/src/types/pubsub.rs +++ b/beacon_node/eth2_libp2p/src/types/pubsub.rs @@ -74,10 +74,10 @@ fn decompress_snappy(data: &[u8]) -> Result, String> { } impl PubsubMessage { - /// Returns the topics that each pubsub message will be sent across, given a supported + /// Returns the topic that each pubsub message will be sent across, given a supported /// gossipsub encoding and fork version. - pub fn topics(&self, encoding: GossipEncoding, fork_version: [u8; 4]) -> Vec { - vec![GossipTopic::new(self.kind(), encoding, fork_version)] + pub fn topic(&self, encoding: GossipEncoding, fork_version: [u8; 4]) -> GossipTopic { + GossipTopic::new(self.kind(), encoding, fork_version) } /// Returns the kind of gossipsub topic associated with the message. @@ -104,68 +104,54 @@ impl PubsubMessage { * Also note that a message can be associated with many topics. As soon as one of the topics is * known we match. If none of the topics are known we return an unknown state. */ - pub fn decode(topics: &[TopicHash], data: &MessageData) -> Result { - let mut unknown_topics = Vec::new(); - for topic in topics { - match GossipTopic::decode(topic.as_str()) { - Err(_) => { - unknown_topics.push(topic); - continue; - } - Ok(gossip_topic) => { - let decompressed_data = match gossip_topic.encoding() { - GossipEncoding::SSZSnappy => data.decompressed.as_ref()?.as_slice(), - }; - // the ssz decoders - match gossip_topic.kind() { - GossipKind::BeaconAggregateAndProof => { - let agg_and_proof = - SignedAggregateAndProof::from_ssz_bytes(decompressed_data) - .map_err(|e| format!("{:?}", e))?; - return Ok(PubsubMessage::AggregateAndProofAttestation(Box::new( - agg_and_proof, - ))); - } - GossipKind::Attestation(subnet_id) => { - let attestation = Attestation::from_ssz_bytes(decompressed_data) + pub fn decode(topic: &TopicHash, data: &MessageData) -> Result { + match GossipTopic::decode(topic.as_str()) { + Err(_) => Err(format!("Unknown topic: {}", topic)), + Ok(gossip_topic) => { + let decompressed_data = match gossip_topic.encoding() { + GossipEncoding::SSZSnappy => data.decompressed.as_ref()?.as_slice(), + }; + // the ssz decoders + match gossip_topic.kind() { + GossipKind::BeaconAggregateAndProof => { + let agg_and_proof = + SignedAggregateAndProof::from_ssz_bytes(decompressed_data) .map_err(|e| format!("{:?}", e))?; - return Ok(PubsubMessage::Attestation(Box::new(( - *subnet_id, - attestation, - )))); - } - GossipKind::BeaconBlock => { - let beacon_block = SignedBeaconBlock::from_ssz_bytes(decompressed_data) - .map_err(|e| format!("{:?}", e))?; - return Ok(PubsubMessage::BeaconBlock(Box::new(beacon_block))); - } - GossipKind::VoluntaryExit => { - let voluntary_exit = - SignedVoluntaryExit::from_ssz_bytes(decompressed_data) - .map_err(|e| format!("{:?}", e))?; - return Ok(PubsubMessage::VoluntaryExit(Box::new(voluntary_exit))); - } - GossipKind::ProposerSlashing => { - let proposer_slashing = - ProposerSlashing::from_ssz_bytes(decompressed_data) - .map_err(|e| format!("{:?}", e))?; - return Ok(PubsubMessage::ProposerSlashing(Box::new( - proposer_slashing, - ))); - } - GossipKind::AttesterSlashing => { - let attester_slashing = - AttesterSlashing::from_ssz_bytes(decompressed_data) - .map_err(|e| format!("{:?}", e))?; - return Ok(PubsubMessage::AttesterSlashing(Box::new( - attester_slashing, - ))); - } + Ok(PubsubMessage::AggregateAndProofAttestation(Box::new( + agg_and_proof, + ))) + } + GossipKind::Attestation(subnet_id) => { + let attestation = Attestation::from_ssz_bytes(decompressed_data) + .map_err(|e| format!("{:?}", e))?; + Ok(PubsubMessage::Attestation(Box::new(( + *subnet_id, + attestation, + )))) + } + GossipKind::BeaconBlock => { + let beacon_block = SignedBeaconBlock::from_ssz_bytes(decompressed_data) + .map_err(|e| format!("{:?}", e))?; + Ok(PubsubMessage::BeaconBlock(Box::new(beacon_block))) + } + GossipKind::VoluntaryExit => { + let voluntary_exit = SignedVoluntaryExit::from_ssz_bytes(decompressed_data) + .map_err(|e| format!("{:?}", e))?; + Ok(PubsubMessage::VoluntaryExit(Box::new(voluntary_exit))) + } + GossipKind::ProposerSlashing => { + let proposer_slashing = ProposerSlashing::from_ssz_bytes(decompressed_data) + .map_err(|e| format!("{:?}", e))?; + Ok(PubsubMessage::ProposerSlashing(Box::new(proposer_slashing))) + } + GossipKind::AttesterSlashing => { + let attester_slashing = AttesterSlashing::from_ssz_bytes(decompressed_data) + .map_err(|e| format!("{:?}", e))?; + Ok(PubsubMessage::AttesterSlashing(Box::new(attester_slashing))) } } } } - Err(format!("Unknown gossipsub topics: {:?}", unknown_topics)) } /// Encodes a `PubsubMessage` based on the topic encodings. The first known encoding is used. If diff --git a/beacon_node/network/Cargo.toml b/beacon_node/network/Cargo.toml index c2d81bf9d..3a55853a5 100644 --- a/beacon_node/network/Cargo.toml +++ b/beacon_node/network/Cargo.toml @@ -40,4 +40,4 @@ igd = "0.11.1" itertools = "0.9.0" num_cpus = "1.13.0" lru_cache = { path = "../../common/lru_cache" } -get_if_addrs = "0.5.3" +if-addrs = "0.6.4" diff --git a/beacon_node/network/src/nat.rs b/beacon_node/network/src/nat.rs index 5a1edd682..af19e2aa1 100644 --- a/beacon_node/network/src/nat.rs +++ b/beacon_node/network/src/nat.rs @@ -4,7 +4,7 @@ //! - UPnP use crate::{NetworkConfig, NetworkMessage}; -use get_if_addrs::get_if_addrs; +use if_addrs::get_if_addrs; use slog::{debug, info, warn}; use std::net::{IpAddr, SocketAddr, SocketAddrV4}; use tokio::sync::mpsc; diff --git a/beacon_node/network/src/service.rs b/beacon_node/network/src/service.rs index 2ce6c086d..27c13fa31 100644 --- a/beacon_node/network/src/service.rs +++ b/beacon_node/network/src/service.rs @@ -428,7 +428,6 @@ fn spawn_service( id, source, message, - .. } => { // Update prometheus metrics. expose_receive_metrics(&message);