Update to latest libp2p (#1810)

## Description

Updates to the latest libp2p and includes gossipsub updates. 

Of particular note is the limitation of a single topic per gossipsub message.

Co-authored-by: blacktemplar <blacktemplar@a1.net>
This commit is contained in:
Age Manning 2020-10-23 03:01:31 +00:00
parent acd49d988d
commit c49dd94e20
8 changed files with 176 additions and 186 deletions

187
Cargo.lock generated
View File

@ -766,12 +766,6 @@ dependencies = [
"pkg-config", "pkg-config",
] ]
[[package]]
name = "c_linked_list"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4964518bd3b4a8190e832886cdc0da9794f12e8e6c1613a9e90ff331c4c8724b"
[[package]] [[package]]
name = "cached_tree_hash" name = "cached_tree_hash"
version = "0.1.0" version = "0.1.0"
@ -2070,7 +2064,7 @@ dependencies = [
"futures-sink", "futures-sink",
"futures-task", "futures-task",
"memchr", "memchr",
"pin-project", "pin-project 0.4.26",
"pin-utils", "pin-utils",
"proc-macro-hack", "proc-macro-hack",
"proc-macro-nested", "proc-macro-nested",
@ -2086,15 +2080,9 @@ dependencies = [
"bytes 0.5.6", "bytes 0.5.6",
"futures 0.3.6", "futures 0.3.6",
"memchr", "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]] [[package]]
name = "generic-array" name = "generic-array"
version = "0.12.3" version = "0.12.3"
@ -2138,28 +2126,6 @@ dependencies = [
"types", "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]] [[package]]
name = "getrandom" name = "getrandom"
version = "0.1.15" version = "0.1.15"
@ -2589,7 +2555,7 @@ dependencies = [
"httparse", "httparse",
"httpdate", "httpdate",
"itoa", "itoa",
"pin-project", "pin-project 0.4.26",
"socket2", "socket2",
"tokio 0.2.22", "tokio 0.2.22",
"tower-service", "tower-service",
@ -2645,6 +2611,27 @@ dependencies = [
"unicode-normalization", "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]] [[package]]
name = "igd" name = "igd"
version = "0.11.1" version = "0.11.1"
@ -2916,14 +2903,14 @@ checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a"
[[package]] [[package]]
name = "libp2p" name = "libp2p"
version = "0.29.0" version = "0.29.1"
source = "git+https://github.com/sigp/rust-libp2p?rev=a731aa803d986977c25a77ed2b002d9578f7377c#a731aa803d986977c25a77ed2b002d9578f7377c" source = "git+https://github.com/sigp/rust-libp2p?rev=e42d105cd776b50fc8ef5d726a9e2c799196bd80#e42d105cd776b50fc8ef5d726a9e2c799196bd80"
dependencies = [ dependencies = [
"atomic", "atomic",
"bytes 0.5.6", "bytes 0.5.6",
"futures 0.3.6", "futures 0.3.6",
"lazy_static", "lazy_static",
"libp2p-core 0.22.2", "libp2p-core 0.23.1",
"libp2p-core-derive", "libp2p-core-derive",
"libp2p-dns", "libp2p-dns",
"libp2p-gossipsub", "libp2p-gossipsub",
@ -2936,7 +2923,7 @@ dependencies = [
"multihash", "multihash",
"parity-multiaddr 0.9.3", "parity-multiaddr 0.9.3",
"parking_lot 0.11.0", "parking_lot 0.11.0",
"pin-project", "pin-project 1.0.1",
"smallvec 1.4.2", "smallvec 1.4.2",
"wasm-timer", "wasm-timer",
] ]
@ -2961,7 +2948,7 @@ dependencies = [
"multistream-select 0.8.2", "multistream-select 0.8.2",
"parity-multiaddr 0.9.2", "parity-multiaddr 0.9.2",
"parking_lot 0.10.2", "parking_lot 0.10.2",
"pin-project", "pin-project 0.4.26",
"prost", "prost",
"prost-build", "prost-build",
"rand 0.7.3", "rand 0.7.3",
@ -2977,8 +2964,8 @@ dependencies = [
[[package]] [[package]]
name = "libp2p-core" name = "libp2p-core"
version = "0.22.2" version = "0.23.1"
source = "git+https://github.com/sigp/rust-libp2p?rev=a731aa803d986977c25a77ed2b002d9578f7377c#a731aa803d986977c25a77ed2b002d9578f7377c" source = "git+https://github.com/sigp/rust-libp2p?rev=e42d105cd776b50fc8ef5d726a9e2c799196bd80#e42d105cd776b50fc8ef5d726a9e2c799196bd80"
dependencies = [ dependencies = [
"asn1_der", "asn1_der",
"bs58", "bs58",
@ -2991,10 +2978,10 @@ dependencies = [
"libsecp256k1", "libsecp256k1",
"log 0.4.11", "log 0.4.11",
"multihash", "multihash",
"multistream-select 0.8.3", "multistream-select 0.8.4",
"parity-multiaddr 0.9.3", "parity-multiaddr 0.9.3",
"parking_lot 0.11.0", "parking_lot 0.11.0",
"pin-project", "pin-project 1.0.1",
"prost", "prost",
"prost-build", "prost-build",
"rand 0.7.3", "rand 0.7.3",
@ -3011,7 +2998,7 @@ dependencies = [
[[package]] [[package]]
name = "libp2p-core-derive" name = "libp2p-core-derive"
version = "0.20.2" 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 = [ dependencies = [
"quote", "quote",
"syn", "syn",
@ -3019,27 +3006,27 @@ dependencies = [
[[package]] [[package]]
name = "libp2p-dns" name = "libp2p-dns"
version = "0.22.0" 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 = [ dependencies = [
"futures 0.3.6", "futures 0.3.6",
"libp2p-core 0.22.2", "libp2p-core 0.23.1",
"log 0.4.11", "log 0.4.11",
] ]
[[package]] [[package]]
name = "libp2p-gossipsub" name = "libp2p-gossipsub"
version = "0.22.1" 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 = [ dependencies = [
"base64 0.12.3", "base64 0.13.0",
"byteorder", "byteorder",
"bytes 0.5.6", "bytes 0.5.6",
"fnv", "fnv",
"futures 0.3.6", "futures 0.3.6",
"futures_codec", "futures_codec",
"hex_fmt", "hex_fmt",
"libp2p-core 0.22.2", "libp2p-core 0.23.1",
"libp2p-swarm", "libp2p-swarm",
"log 0.4.11", "log 0.4.11",
"prost", "prost",
@ -3053,11 +3040,11 @@ dependencies = [
[[package]] [[package]]
name = "libp2p-identify" name = "libp2p-identify"
version = "0.22.0" 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 = [ dependencies = [
"futures 0.3.6", "futures 0.3.6",
"libp2p-core 0.22.2", "libp2p-core 0.23.1",
"libp2p-swarm", "libp2p-swarm",
"log 0.4.11", "log 0.4.11",
"prost", "prost",
@ -3069,28 +3056,30 @@ dependencies = [
[[package]] [[package]]
name = "libp2p-mplex" name = "libp2p-mplex"
version = "0.23.0" 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 = [ dependencies = [
"bytes 0.5.6", "bytes 0.5.6",
"fnv",
"futures 0.3.6", "futures 0.3.6",
"futures_codec", "futures_codec",
"libp2p-core 0.22.2", "libp2p-core 0.23.1",
"log 0.4.11", "log 0.4.11",
"nohash-hasher",
"parking_lot 0.11.0", "parking_lot 0.11.0",
"rand 0.7.3",
"smallvec 1.4.2",
"unsigned-varint 0.5.1", "unsigned-varint 0.5.1",
] ]
[[package]] [[package]]
name = "libp2p-noise" name = "libp2p-noise"
version = "0.24.1" version = "0.25.0"
source = "git+https://github.com/sigp/rust-libp2p?rev=a731aa803d986977c25a77ed2b002d9578f7377c#a731aa803d986977c25a77ed2b002d9578f7377c" source = "git+https://github.com/sigp/rust-libp2p?rev=e42d105cd776b50fc8ef5d726a9e2c799196bd80#e42d105cd776b50fc8ef5d726a9e2c799196bd80"
dependencies = [ dependencies = [
"bytes 0.5.6", "bytes 0.5.6",
"curve25519-dalek", "curve25519-dalek",
"futures 0.3.6", "futures 0.3.6",
"lazy_static", "lazy_static",
"libp2p-core 0.22.2", "libp2p-core 0.23.1",
"log 0.4.11", "log 0.4.11",
"prost", "prost",
"prost-build", "prost-build",
@ -3104,12 +3093,12 @@ dependencies = [
[[package]] [[package]]
name = "libp2p-swarm" name = "libp2p-swarm"
version = "0.22.0" 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 = [ dependencies = [
"either", "either",
"futures 0.3.6", "futures 0.3.6",
"libp2p-core 0.22.2", "libp2p-core 0.23.1",
"log 0.4.11", "log 0.4.11",
"rand 0.7.3", "rand 0.7.3",
"smallvec 1.4.2", "smallvec 1.4.2",
@ -3119,14 +3108,14 @@ dependencies = [
[[package]] [[package]]
name = "libp2p-tcp" name = "libp2p-tcp"
version = "0.22.0" 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 = [ dependencies = [
"futures 0.3.6", "futures 0.3.6",
"futures-timer", "futures-timer",
"get_if_addrs", "if-addrs",
"ipnet", "ipnet",
"libp2p-core 0.22.2", "libp2p-core 0.23.1",
"log 0.4.11", "log 0.4.11",
"socket2", "socket2",
"tokio 0.2.22", "tokio 0.2.22",
@ -3134,13 +3123,13 @@ dependencies = [
[[package]] [[package]]
name = "libp2p-websocket" name = "libp2p-websocket"
version = "0.23.1" version = "0.24.0"
source = "git+https://github.com/sigp/rust-libp2p?rev=a731aa803d986977c25a77ed2b002d9578f7377c#a731aa803d986977c25a77ed2b002d9578f7377c" source = "git+https://github.com/sigp/rust-libp2p?rev=e42d105cd776b50fc8ef5d726a9e2c799196bd80#e42d105cd776b50fc8ef5d726a9e2c799196bd80"
dependencies = [ dependencies = [
"async-tls", "async-tls",
"either", "either",
"futures 0.3.6", "futures 0.3.6",
"libp2p-core 0.22.2", "libp2p-core 0.23.1",
"log 0.4.11", "log 0.4.11",
"quicksink", "quicksink",
"rustls", "rustls",
@ -3544,20 +3533,20 @@ dependencies = [
"bytes 0.5.6", "bytes 0.5.6",
"futures 0.3.6", "futures 0.3.6",
"log 0.4.11", "log 0.4.11",
"pin-project", "pin-project 0.4.26",
"smallvec 1.4.2", "smallvec 1.4.2",
"unsigned-varint 0.4.0", "unsigned-varint 0.4.0",
] ]
[[package]] [[package]]
name = "multistream-select" name = "multistream-select"
version = "0.8.3" version = "0.8.4"
source = "git+https://github.com/sigp/rust-libp2p?rev=a731aa803d986977c25a77ed2b002d9578f7377c#a731aa803d986977c25a77ed2b002d9578f7377c" source = "git+https://github.com/sigp/rust-libp2p?rev=e42d105cd776b50fc8ef5d726a9e2c799196bd80#e42d105cd776b50fc8ef5d726a9e2c799196bd80"
dependencies = [ dependencies = [
"bytes 0.5.6", "bytes 0.5.6",
"futures 0.3.6", "futures 0.3.6",
"log 0.4.11", "log 0.4.11",
"pin-project", "pin-project 1.0.1",
"smallvec 1.4.2", "smallvec 1.4.2",
"unsigned-varint 0.5.1", "unsigned-varint 0.5.1",
] ]
@ -3604,9 +3593,9 @@ dependencies = [
"fnv", "fnv",
"futures 0.3.6", "futures 0.3.6",
"genesis", "genesis",
"get_if_addrs",
"hashset_delay", "hashset_delay",
"hex 0.4.2", "hex 0.4.2",
"if-addrs",
"igd", "igd",
"itertools 0.9.0", "itertools 0.9.0",
"lazy_static", "lazy_static",
@ -3662,6 +3651,12 @@ dependencies = [
"validator_dir", "validator_dir",
] ]
[[package]]
name = "nohash-hasher"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451"
[[package]] [[package]]
name = "nom" name = "nom"
version = "2.2.1" version = "2.2.1"
@ -3851,7 +3846,7 @@ dependencies = [
[[package]] [[package]]
name = "parity-multiaddr" name = "parity-multiaddr"
version = "0.9.3" 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 = [ dependencies = [
"arrayref", "arrayref",
"bs58", "bs58",
@ -4009,7 +4004,16 @@ version = "0.4.26"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13fbdfd6bdee3dc9be46452f86af4a4072975899cf8592466668620bebfbcc17" checksum = "13fbdfd6bdee3dc9be46452f86af4a4072975899cf8592466668620bebfbcc17"
dependencies = [ 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]] [[package]]
@ -4023,6 +4027,17 @@ dependencies = [
"syn", "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]] [[package]]
name = "pin-project-lite" name = "pin-project-lite"
version = "0.1.10" version = "0.1.10"
@ -4734,7 +4749,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4da5fcb054c46f5a5dff833b129285a93d3f0179531735e6c866e8cc307d2020" checksum = "4da5fcb054c46f5a5dff833b129285a93d3f0179531735e6c866e8cc307d2020"
dependencies = [ dependencies = [
"futures 0.3.6", "futures 0.3.6",
"pin-project", "pin-project 0.4.26",
"static_assertions", "static_assertions",
] ]
@ -5469,9 +5484,9 @@ dependencies = [
[[package]] [[package]]
name = "syn" name = "syn"
version = "1.0.42" version = "1.0.46"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9c51d92969d209b54a98397e1b91c8ae82d8c87a7bb87df0b29aa2ad81454228" checksum = "5ad5de3220ea04da322618ded2c42233d02baca219d6f160a3e9c87cda16c942"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",
@ -5994,7 +6009,7 @@ checksum = "6d9e878ad426ca286e4dcae09cbd4e1973a7f8987d97570e2469703dd7f5720c"
dependencies = [ dependencies = [
"futures-util", "futures-util",
"log 0.4.11", "log 0.4.11",
"pin-project", "pin-project 0.4.26",
"tokio 0.2.22", "tokio 0.2.22",
"tungstenite", "tungstenite",
] ]
@ -6106,7 +6121,7 @@ version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab7bb6f14721aa00656086e9335d363c5c8747bae02ebe32ea2c7dece5689b4c" checksum = "ab7bb6f14721aa00656086e9335d363c5c8747bae02ebe32ea2c7dece5689b4c"
dependencies = [ dependencies = [
"pin-project", "pin-project 0.4.26",
"tracing", "tracing",
] ]
@ -6545,7 +6560,7 @@ dependencies = [
"mime 0.3.16", "mime 0.3.16",
"mime_guess", "mime_guess",
"multipart", "multipart",
"pin-project", "pin-project 0.4.26",
"scoped-tls 1.0.0", "scoped-tls 1.0.0",
"serde", "serde",
"serde_json", "serde_json",

View File

@ -42,7 +42,7 @@ regex = "1.3.9"
[dependencies.libp2p] [dependencies.libp2p]
#version = "0.23.0" #version = "0.23.0"
git = "https://github.com/sigp/rust-libp2p" git = "https://github.com/sigp/rust-libp2p"
rev = "a731aa803d986977c25a77ed2b002d9578f7377c" rev = "e42d105cd776b50fc8ef5d726a9e2c799196bd80"
default-features = false default-features = false
features = ["websocket", "identify", "mplex", "noise", "gossipsub", "dns", "tcp-tokio"] features = ["websocket", "identify", "mplex", "noise", "gossipsub", "dns", "tcp-tokio"]

View File

@ -90,8 +90,6 @@ pub enum BehaviourEvent<TSpec: EthSpec> {
id: MessageId, id: MessageId,
/// The peer from which we received this message, not the peer that published it. /// The peer from which we received this message, not the peer that published it.
source: PeerId, source: PeerId,
/// The topics that this message was sent on.
topics: Vec<TopicHash>,
/// The message itself. /// The message itself.
message: PubsubMessage<TSpec>, message: PubsubMessage<TSpec>,
}, },
@ -304,35 +302,34 @@ impl<TSpec: EthSpec> Behaviour<TSpec> {
/// Publishes a list of messages on the pubsub (gossipsub) behaviour, choosing the encoding. /// Publishes a list of messages on the pubsub (gossipsub) behaviour, choosing the encoding.
pub fn publish(&mut self, messages: Vec<PubsubMessage<TSpec>>) { pub fn publish(&mut self, messages: Vec<PubsubMessage<TSpec>>) {
for message in messages { for message in messages {
for topic in message.topics(GossipEncoding::default(), self.enr_fork_id.fork_digest) { let topic = message.topic(GossipEncoding::default(), self.enr_fork_id.fork_digest);
match message.encode(GossipEncoding::default()) { match message.encode(GossipEncoding::default()) {
Ok(message_data) => { Ok(message_data) => {
if let Err(e) = self.gossipsub.publish(topic.clone().into(), 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)); slog::warn!(self.log, "Could not publish message"; "error" => format!("{:?}", e));
// add to metrics // add to metrics
match topic.kind() { match topic.kind() {
GossipKind::Attestation(subnet_id) => { GossipKind::Attestation(subnet_id) => {
if let Some(v) = metrics::get_int_gauge( if let Some(v) = metrics::get_int_gauge(
&metrics::FAILED_ATTESTATION_PUBLISHES_PER_SUBNET, &metrics::FAILED_ATTESTATION_PUBLISHES_PER_SUBNET,
&[&subnet_id.to_string()], &[&subnet_id.to_string()],
) { ) {
v.inc() v.inc()
}; };
} }
kind => { kind => {
if let Some(v) = metrics::get_int_gauge( if let Some(v) = metrics::get_int_gauge(
&metrics::FAILED_PUBLISHES_PER_MAIN_TOPIC, &metrics::FAILED_PUBLISHES_PER_MAIN_TOPIC,
&[&format!("{:?}", kind)], &[&format!("{:?}", kind)],
) { ) {
v.inc() 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<TSpec: EthSpec> Behaviour<TSpec> {
} => { } => {
// Note: We are keeping track here of the peer that sent us the message, not the // Note: We are keeping track here of the peer that sent us the message, not the
// peer that originally published the message. // 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) => { Err(e) => {
debug!(self.log, "Could not decode gossipsub message"; "error" => e); debug!(self.log, "Could not decode gossipsub message"; "error" => e);
//reject the message //reject the message
@ -554,7 +551,6 @@ impl<TSpec: EthSpec> Behaviour<TSpec> {
self.add_event(BehaviourEvent::PubsubMessage { self.add_event(BehaviourEvent::PubsubMessage {
id, id,
source: propagation_source, source: propagation_source,
topics: gs_msg.topics,
message: msg, message: msg,
}); });
} }

View File

@ -9,7 +9,7 @@ use crate::EnrExt;
use crate::{NetworkConfig, NetworkGlobals, PeerAction}; use crate::{NetworkConfig, NetworkGlobals, PeerAction};
use futures::prelude::*; use futures::prelude::*;
use libp2p::core::{ use libp2p::core::{
identity::Keypair, multiaddr::Multiaddr, muxing::StreamMuxerBox, transport::boxed::Boxed, identity::Keypair, multiaddr::Multiaddr, muxing::StreamMuxerBox, transport::Boxed,
}; };
use libp2p::{ use libp2p::{
core, noise, core, noise,
@ -20,7 +20,6 @@ use slog::{crit, debug, info, o, trace, warn};
use ssz::Decode; use ssz::Decode;
use std::fs::File; use std::fs::File;
use std::io::prelude::*; use std::io::prelude::*;
use std::io::{Error, ErrorKind};
use std::pin::Pin; use std::pin::Pin;
use std::sync::Arc; use std::sync::Arc;
use std::time::Duration; use std::time::Duration;
@ -323,9 +322,7 @@ impl<TSpec: EthSpec> Service<TSpec> {
/// The implementation supports TCP/IP, WebSockets over TCP/IP, noise as the encryption layer, and /// The implementation supports TCP/IP, WebSockets over TCP/IP, noise as the encryption layer, and
/// mplex as the multiplexing layer. /// mplex as the multiplexing layer.
fn build_transport( fn build_transport(local_private_key: Keypair) -> std::io::Result<Boxed<(PeerId, StreamMuxerBox)>> {
local_private_key: Keypair,
) -> Result<Boxed<(PeerId, StreamMuxerBox), Error>, Error> {
let transport = libp2p::tcp::TokioTcpConfig::new().nodelay(true); let transport = libp2p::tcp::TokioTcpConfig::new().nodelay(true);
let transport = libp2p::dns::DnsConfig::new(transport)?; let transport = libp2p::dns::DnsConfig::new(transport)?;
#[cfg(feature = "libp2p-websocket")] #[cfg(feature = "libp2p-websocket")]
@ -338,10 +335,7 @@ fn build_transport(
.upgrade(core::upgrade::Version::V1) .upgrade(core::upgrade::Version::V1)
.authenticate(generate_noise_config(&local_private_key)) .authenticate(generate_noise_config(&local_private_key))
.multiplex(libp2p::mplex::MplexConfig::new()) .multiplex(libp2p::mplex::MplexConfig::new())
.map(|(peer, muxer), _| (peer, core::muxing::StreamMuxerBox::new(muxer)))
.timeout(Duration::from_secs(10)) .timeout(Duration::from_secs(10))
.timeout(Duration::from_secs(10))
.map_err(|err| Error::new(ErrorKind::Other, err))
.boxed()) .boxed())
} }

View File

@ -74,10 +74,10 @@ fn decompress_snappy(data: &[u8]) -> Result<Vec<u8>, String> {
} }
impl<T: EthSpec> PubsubMessage<T> { impl<T: EthSpec> PubsubMessage<T> {
/// 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. /// gossipsub encoding and fork version.
pub fn topics(&self, encoding: GossipEncoding, fork_version: [u8; 4]) -> Vec<GossipTopic> { pub fn topic(&self, encoding: GossipEncoding, fork_version: [u8; 4]) -> GossipTopic {
vec![GossipTopic::new(self.kind(), encoding, fork_version)] GossipTopic::new(self.kind(), encoding, fork_version)
} }
/// Returns the kind of gossipsub topic associated with the message. /// Returns the kind of gossipsub topic associated with the message.
@ -104,68 +104,54 @@ impl<T: EthSpec> PubsubMessage<T> {
* Also note that a message can be associated with many topics. As soon as one of the topics is * 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. * known we match. If none of the topics are known we return an unknown state.
*/ */
pub fn decode(topics: &[TopicHash], data: &MessageData) -> Result<Self, String> { pub fn decode(topic: &TopicHash, data: &MessageData) -> Result<Self, String> {
let mut unknown_topics = Vec::new(); match GossipTopic::decode(topic.as_str()) {
for topic in topics { Err(_) => Err(format!("Unknown topic: {}", topic)),
match GossipTopic::decode(topic.as_str()) { Ok(gossip_topic) => {
Err(_) => { let decompressed_data = match gossip_topic.encoding() {
unknown_topics.push(topic); GossipEncoding::SSZSnappy => data.decompressed.as_ref()?.as_slice(),
continue; };
} // the ssz decoders
Ok(gossip_topic) => { match gossip_topic.kind() {
let decompressed_data = match gossip_topic.encoding() { GossipKind::BeaconAggregateAndProof => {
GossipEncoding::SSZSnappy => data.decompressed.as_ref()?.as_slice(), let agg_and_proof =
}; SignedAggregateAndProof::from_ssz_bytes(decompressed_data)
// 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)
.map_err(|e| format!("{:?}", e))?; .map_err(|e| format!("{:?}", e))?;
return Ok(PubsubMessage::Attestation(Box::new(( Ok(PubsubMessage::AggregateAndProofAttestation(Box::new(
*subnet_id, agg_and_proof,
attestation, )))
)))); }
} GossipKind::Attestation(subnet_id) => {
GossipKind::BeaconBlock => { let attestation = Attestation::from_ssz_bytes(decompressed_data)
let beacon_block = SignedBeaconBlock::from_ssz_bytes(decompressed_data) .map_err(|e| format!("{:?}", e))?;
.map_err(|e| format!("{:?}", e))?; Ok(PubsubMessage::Attestation(Box::new((
return Ok(PubsubMessage::BeaconBlock(Box::new(beacon_block))); *subnet_id,
} attestation,
GossipKind::VoluntaryExit => { ))))
let voluntary_exit = }
SignedVoluntaryExit::from_ssz_bytes(decompressed_data) GossipKind::BeaconBlock => {
.map_err(|e| format!("{:?}", e))?; let beacon_block = SignedBeaconBlock::from_ssz_bytes(decompressed_data)
return Ok(PubsubMessage::VoluntaryExit(Box::new(voluntary_exit))); .map_err(|e| format!("{:?}", e))?;
} Ok(PubsubMessage::BeaconBlock(Box::new(beacon_block)))
GossipKind::ProposerSlashing => { }
let proposer_slashing = GossipKind::VoluntaryExit => {
ProposerSlashing::from_ssz_bytes(decompressed_data) let voluntary_exit = SignedVoluntaryExit::from_ssz_bytes(decompressed_data)
.map_err(|e| format!("{:?}", e))?; .map_err(|e| format!("{:?}", e))?;
return Ok(PubsubMessage::ProposerSlashing(Box::new( Ok(PubsubMessage::VoluntaryExit(Box::new(voluntary_exit)))
proposer_slashing, }
))); GossipKind::ProposerSlashing => {
} let proposer_slashing = ProposerSlashing::from_ssz_bytes(decompressed_data)
GossipKind::AttesterSlashing => { .map_err(|e| format!("{:?}", e))?;
let attester_slashing = Ok(PubsubMessage::ProposerSlashing(Box::new(proposer_slashing)))
AttesterSlashing::from_ssz_bytes(decompressed_data) }
.map_err(|e| format!("{:?}", e))?; GossipKind::AttesterSlashing => {
return Ok(PubsubMessage::AttesterSlashing(Box::new( let attester_slashing = AttesterSlashing::from_ssz_bytes(decompressed_data)
attester_slashing, .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 /// Encodes a `PubsubMessage` based on the topic encodings. The first known encoding is used. If

View File

@ -40,4 +40,4 @@ igd = "0.11.1"
itertools = "0.9.0" itertools = "0.9.0"
num_cpus = "1.13.0" num_cpus = "1.13.0"
lru_cache = { path = "../../common/lru_cache" } lru_cache = { path = "../../common/lru_cache" }
get_if_addrs = "0.5.3" if-addrs = "0.6.4"

View File

@ -4,7 +4,7 @@
//! - UPnP //! - UPnP
use crate::{NetworkConfig, NetworkMessage}; use crate::{NetworkConfig, NetworkMessage};
use get_if_addrs::get_if_addrs; use if_addrs::get_if_addrs;
use slog::{debug, info, warn}; use slog::{debug, info, warn};
use std::net::{IpAddr, SocketAddr, SocketAddrV4}; use std::net::{IpAddr, SocketAddr, SocketAddrV4};
use tokio::sync::mpsc; use tokio::sync::mpsc;

View File

@ -428,7 +428,6 @@ fn spawn_service<T: BeaconChainTypes>(
id, id,
source, source,
message, message,
..
} => { } => {
// Update prometheus metrics. // Update prometheus metrics.
expose_receive_metrics(&message); expose_receive_metrics(&message);