From aae80c7bee2018a4f7d8b407755574f77b7bfafd Mon Sep 17 00:00:00 2001 From: Grigoriy Simonov Date: Wed, 30 Oct 2024 08:41:30 +0000 Subject: [PATCH] Revert " litep2p: Update network backend to v0.7.0 (#5609)" This reverts commit 12eeb5df4f95c8b5076aad4812b0803ea30d0bfc. --- Cargo.lock | 353 +++++++++++++----- Cargo.toml | 2 +- prdoc/pr_5609.prdoc | 21 -- .../client/network/src/litep2p/discovery.rs | 8 +- substrate/client/network/src/litep2p/mod.rs | 78 ++-- .../client/network/src/litep2p/service.rs | 16 +- .../src/litep2p/shim/request_response/mod.rs | 31 +- .../litep2p/shim/request_response/tests.rs | 7 +- substrate/client/tracing/src/logging/mod.rs | 3 - 9 files changed, 296 insertions(+), 223 deletions(-) delete mode 100644 prdoc/pr_5609.prdoc diff --git a/Cargo.lock b/Cargo.lock index 922312081b96b..10648a252e37f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1395,9 +1395,9 @@ checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" [[package]] name = "async-trait" -version = "0.1.82" +version = "0.1.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27b8a3a6e1a44fa4c8baf1f653e4172e81486d4941f2237e20dc2d0cf4ddff1" +checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" dependencies = [ "proc-macro2 1.0.86", "quote 1.0.37", @@ -1610,7 +1610,7 @@ dependencies = [ "lazy_static", "lazycell", "peeking_take_while", - "prettyplease", + "prettyplease 0.2.12", "proc-macro2 1.0.86", "quote 1.0.37", "regex", @@ -1625,7 +1625,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "aa13fae8b6255872fd86f7faf4b41168661d7d78609f7bfe6771b85c6739a15b" dependencies = [ - "bs58", + "bs58 0.5.1", "hmac 0.12.1", "k256", "rand_core 0.6.4", @@ -2581,6 +2581,12 @@ dependencies = [ "tuplex", ] +[[package]] +name = "bs58" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" + [[package]] name = "bs58" version = "0.5.1" @@ -3888,6 +3894,21 @@ dependencies = [ "wasmtime-types", ] +[[package]] +name = "crc" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2b432c56615136f8dba245fed7ec3d5518c500a31108661067e61e72fe7e6bc" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + [[package]] name = "crc32fast" version = "1.3.2" @@ -5878,7 +5899,7 @@ dependencies = [ "blake2 0.10.6", "file-guard", "fs-err", - "prettyplease", + "prettyplease 0.2.12", "proc-macro2 1.0.86", "quote 1.0.37", "syn 2.0.82", @@ -7239,51 +7260,6 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" -[[package]] -name = "hickory-proto" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07698b8420e2f0d6447a436ba999ec85d8fbf2a398bbd737b82cac4a2e96e512" -dependencies = [ - "async-trait", - "cfg-if", - "data-encoding", - "enum-as-inner 0.6.0", - "futures-channel", - "futures-io", - "futures-util", - "idna 0.4.0", - "ipnet", - "once_cell", - "rand", - "thiserror", - "tinyvec", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "hickory-resolver" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28757f23aa75c98f254cf0405e6d8c25b831b32921b050a66692427679b1f243" -dependencies = [ - "cfg-if", - "futures-util", - "hickory-proto", - "ipconfig", - "lru-cache", - "once_cell", - "parking_lot 0.12.3", - "rand", - "resolv-conf", - "smallvec", - "thiserror", - "tokio", - "tracing", -] - [[package]] name = "hkdf" version = "0.12.4" @@ -8651,9 +8627,9 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.158" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "libflate" @@ -8846,7 +8822,7 @@ version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55cca1eb2bc1fd29f099f3daaab7effd01e1a54b7c577d0ed082521034d912e8" dependencies = [ - "bs58", + "bs58 0.5.1", "ed25519-dalek", "hkdf", "multihash 0.19.1", @@ -9304,22 +9280,21 @@ dependencies = [ [[package]] name = "litep2p" -version = "0.7.0" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4ab2528b02b6dbbc3e6ec4b55ccde885647c622a315b7da45081ed2dfe4b813" +checksum = "0f46c51c205264b834ceed95c8b195026e700494bc3991aaba3b4ea9e20626d9" dependencies = [ "async-trait", - "bs58", + "bs58 0.4.0", "bytes", "cid 0.10.1", "ed25519-dalek", "futures", "futures-timer", "hex-literal", - "hickory-resolver", "indexmap 2.2.3", "libc", - "mockall 0.13.0", + "mockall 0.12.1", "multiaddr 0.17.1", "multihash 0.17.0", "network-interface", @@ -9327,7 +9302,8 @@ dependencies = [ "parking_lot 0.12.3", "pin-project", "prost 0.12.6", - "prost-build", + "prost-build 0.11.9", + "quinn 0.9.4", "rand", "rcgen", "ring 0.16.20", @@ -9339,15 +9315,18 @@ dependencies = [ "snow", "socket2 0.5.7", "static_assertions", + "str0m", "thiserror", "tokio", "tokio-stream", "tokio-tungstenite", "tokio-util", "tracing", + "trust-dns-resolver", "uint", "unsigned-varint 0.8.0", "url", + "webpki", "x25519-dalek", "x509-parser 0.16.0", "yasna", @@ -9791,14 +9770,15 @@ dependencies = [ [[package]] name = "mockall" -version = "0.13.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c28b3fb6d753d28c20e826cd46ee611fda1cf3cde03a443a974043247c065a" +checksum = "43766c2b5203b10de348ffe19f7e54564b64f3d6018ff7648d1e2d6d3a0f0a48" dependencies = [ "cfg-if", "downcast", "fragile", - "mockall_derive 0.13.0", + "lazy_static", + "mockall_derive 0.12.1", "predicates 3.0.3", "predicates-tree", ] @@ -9817,9 +9797,9 @@ dependencies = [ [[package]] name = "mockall_derive" -version = "0.13.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "341014e7f530314e9a1fdbc7400b244efea7122662c96bfa248c31da5bfb2020" +checksum = "af7cbce79ec385a1d4f54baa90a76401eb15d9cab93685f62e7e9f942aa00ae2" dependencies = [ "cfg-if", "proc-macro2 1.0.86", @@ -9902,7 +9882,7 @@ dependencies = [ "blake2b_simd 0.5.11", "blake2s_simd 0.5.11", "digest 0.9.0", - "sha-1", + "sha-1 0.9.8", "sha2 0.9.9", "sha3 0.9.1", "unsigned-varint 0.5.1", @@ -10614,6 +10594,15 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" +[[package]] +name = "openssl-src" +version = "300.2.3+3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cff92b6f71555b61bb9315f7c64da3ca43d87531622120fea0195fc761b4843" +dependencies = [ + "cc", +] + [[package]] name = "openssl-sys" version = "0.9.102" @@ -10622,6 +10611,7 @@ checksum = "c597637d56fbc83893a35eb0dd04b2b8e7a50c91e64e9493e398b5df4fb45fa2" dependencies = [ "cc", "libc", + "openssl-src", "pkg-config", "vcpkg", ] @@ -14696,7 +14686,7 @@ name = "polkadot-node-metrics" version = "7.0.0" dependencies = [ "assert_cmd", - "bs58", + "bs58 0.5.1", "futures", "futures-timer", "http-body-util", @@ -15160,7 +15150,7 @@ dependencies = [ name = "polkadot-runtime-metrics" version = "7.0.0" dependencies = [ - "bs58", + "bs58 0.5.1", "frame-benchmarking", "parity-scale-codec", "polkadot-primitives", @@ -16539,6 +16529,16 @@ dependencies = [ "yansi", ] +[[package]] +name = "prettyplease" +version = "0.1.25" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" +dependencies = [ + "proc-macro2 1.0.86", + "syn 1.0.109", +] + [[package]] name = "prettyplease" version = "0.2.12" @@ -16786,12 +16786,34 @@ dependencies = [ [[package]] name = "prost" -version = "0.13.2" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b2ecbe40f08db5c006b5764a2645f7f3f141ce756412ac9e1dd6087e6d32995" +checksum = "7b0487d90e047de87f984913713b85c601c05609aad5b0df4b4573fbf69aa13f" dependencies = [ "bytes", - "prost-derive 0.13.2", + "prost-derive 0.13.3", +] + +[[package]] +name = "prost-build" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270" +dependencies = [ + "bytes", + "heck 0.4.1", + "itertools 0.10.5", + "lazy_static", + "log", + "multimap", + "petgraph", + "prettyplease 0.1.25", + "prost 0.11.9", + "prost-types 0.11.9", + "regex", + "syn 1.0.109", + "tempfile", + "which", ] [[package]] @@ -16807,9 +16829,9 @@ dependencies = [ "multimap", "once_cell", "petgraph", - "prettyplease", - "prost 0.13.2", - "prost-types", + "prettyplease 0.2.12", + "prost 0.13.3", + "prost-types 0.13.3", "regex", "syn 2.0.82", "tempfile", @@ -16843,12 +16865,12 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.13.2" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acf0c195eebb4af52c752bec4f52f645da98b6e92077a04110c7f349477ae5ac" +checksum = "e9552f850d5f0964a4e4d0bf306459ac29323ddfbae05e35a7c0d35cb0803cc5" dependencies = [ "anyhow", - "itertools 0.12.1", + "itertools 0.10.5", "proc-macro2 1.0.86", "quote 1.0.37", "syn 2.0.82", @@ -16856,11 +16878,20 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.13.2" +version = "0.11.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213622a1460818959ac1181aaeb2dc9c7f63df720db7d788b3e24eacd1983e13" +dependencies = [ + "prost 0.11.9", +] + +[[package]] +name = "prost-types" +version = "0.13.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60caa6738c7369b940c3d49246a8d1749323674c65cb13010134f5c9bad5b519" +checksum = "4759aa0d3a6232fb8dbdb97b61de2c20047c68aca932c7ed76da9d788508d670" dependencies = [ - "prost 0.13.2", + "prost 0.13.3", ] [[package]] @@ -16977,6 +17008,24 @@ dependencies = [ "rand", ] +[[package]] +name = "quinn" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e8b432585672228923edbbf64b8b12c14e1112f62e88737655b4a083dbcd78e" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto 0.9.6", + "quinn-udp 0.3.2", + "rustc-hash 1.1.0", + "rustls 0.20.9", + "thiserror", + "tokio", + "tracing", + "webpki", +] + [[package]] name = "quinn" version = "0.10.2" @@ -17013,6 +17062,24 @@ dependencies = [ "tracing", ] +[[package]] +name = "quinn-proto" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94b0b33c13a79f669c85defaf4c275dc86a0c0372807d0ca3d78e0bb87274863" +dependencies = [ + "bytes", + "rand", + "ring 0.16.20", + "rustc-hash 1.1.0", + "rustls 0.20.9", + "slab", + "thiserror", + "tinyvec", + "tracing", + "webpki", +] + [[package]] name = "quinn-proto" version = "0.10.6" @@ -17047,6 +17114,19 @@ dependencies = [ "tracing", ] +[[package]] +name = "quinn-udp" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "641538578b21f5e5c8ea733b736895576d0fe329bb883b937db6f4d163dbaaf4" +dependencies = [ + "libc", + "quinn-proto 0.9.6", + "socket2 0.4.9", + "tracing", + "windows-sys 0.42.0", +] + [[package]] name = "quinn-udp" version = "0.4.1" @@ -18350,7 +18430,7 @@ dependencies = [ "multihash 0.19.1", "parity-scale-codec", "prost 0.12.6", - "prost-build", + "prost-build 0.13.2", "quickcheck", "rand", "sc-client-api", @@ -19166,7 +19246,7 @@ dependencies = [ "partial_sort", "pin-project", "prost 0.12.6", - "prost-build", + "prost-build 0.13.2", "rand", "sc-block-builder", "sc-client-api", @@ -19211,7 +19291,7 @@ dependencies = [ "futures", "libp2p-identity", "parity-scale-codec", - "prost-build", + "prost-build 0.13.2", "sc-consensus", "sc-network-types", "sp-consensus", @@ -19253,7 +19333,7 @@ dependencies = [ "log", "parity-scale-codec", "prost 0.12.6", - "prost-build", + "prost-build 0.13.2", "sc-client-api", "sc-network", "sc-network-types", @@ -19296,7 +19376,7 @@ dependencies = [ "mockall 0.11.4", "parity-scale-codec", "prost 0.12.6", - "prost-build", + "prost-build 0.13.2", "quickcheck", "sc-block-builder", "sc-client-api", @@ -19375,7 +19455,7 @@ dependencies = [ name = "sc-network-types" version = "0.10.0" dependencies = [ - "bs58", + "bs58 0.5.1", "ed25519-dalek", "libp2p-identity", "litep2p", @@ -20125,6 +20205,21 @@ dependencies = [ "untrusted 0.7.1", ] +[[package]] +name = "sctp-proto" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6220f78bb44c15f326b0596113305f6101097a18755d53727a575c97e09fb24" +dependencies = [ + "bytes", + "crc", + "fxhash", + "log", + "rand", + "slab", + "thiserror", +] + [[package]] name = "sec1" version = "0.7.3" @@ -20340,13 +20435,12 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.132" +version = "1.0.117" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" dependencies = [ "indexmap 2.2.3", "itoa", - "memchr", "ryu", "serde", ] @@ -20433,6 +20527,18 @@ dependencies = [ "opaque-debug 0.3.0", ] +[[package]] +name = "sha-1" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f5058ada175748e33390e40e872bd0fe59a19f265d0158daa551c5a88a76009c" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest 0.10.7", + "sha1-asm", +] + [[package]] name = "sha1" version = "0.10.6" @@ -20444,6 +20550,15 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "sha1-asm" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2ba6947745e7f86be3b8af00b7355857085dbdf8901393c89514510eb61f4e21" +dependencies = [ + "cc", +] + [[package]] name = "sha2" version = "0.9.9" @@ -20549,9 +20664,9 @@ dependencies = [ [[package]] name = "simple-dns" -version = "0.7.1" +version = "0.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c80e565e7dcc4f1ef247e2f395550d4cf7d777746d5988e7e4e3156b71077fc" +checksum = "cae9a3fcdadafb6d97f4c0e007e4247b114ee0f119f650c3cbf3a8b3a1479694" dependencies = [ "bitflags 2.6.0", ] @@ -20685,7 +20800,7 @@ dependencies = [ "base64 0.21.7", "bip39", "blake2-rfc", - "bs58", + "bs58 0.5.1", "chacha20", "crossbeam-queue", "derive_more", @@ -20739,7 +20854,7 @@ dependencies = [ "base64 0.21.7", "bip39", "blake2-rfc", - "bs58", + "bs58 0.5.1", "chacha20", "crossbeam-queue", "derive_more", @@ -21230,7 +21345,7 @@ dependencies = [ "httparse", "log", "rand", - "sha-1", + "sha-1 0.9.8", ] [[package]] @@ -21735,7 +21850,7 @@ dependencies = [ "bitflags 1.3.2", "blake2 0.10.6", "bounded-collections", - "bs58", + "bs58 0.5.1", "criterion", "dyn-clonable", "ed25519-zebra 4.0.3", @@ -21785,7 +21900,7 @@ dependencies = [ "bitflags 1.3.2", "blake2 0.10.6", "bounded-collections", - "bs58", + "bs58 0.5.1", "dyn-clonable", "ed25519-zebra 3.1.0", "futures", @@ -21832,7 +21947,7 @@ dependencies = [ "bitflags 1.3.2", "blake2 0.10.6", "bounded-collections", - "bs58", + "bs58 0.5.1", "dyn-clonable", "ed25519-zebra 3.1.0", "futures", @@ -21879,7 +21994,7 @@ dependencies = [ "bitflags 1.3.2", "blake2 0.10.6", "bounded-collections", - "bs58", + "bs58 0.5.1", "dyn-clonable", "ed25519-zebra 4.0.3", "futures", @@ -23504,6 +23619,26 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "str0m" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6706347e49b13373f7ddfafad47df7583ed52083d6fc8a594eb2c80497ef959d" +dependencies = [ + "combine", + "crc", + "fastrand 2.1.0", + "hmac 0.12.1", + "once_cell", + "openssl", + "openssl-sys", + "sctp-proto", + "serde", + "sha-1 0.10.1", + "thiserror", + "tracing", +] + [[package]] name = "string-interner" version = "0.17.0" @@ -26483,6 +26618,17 @@ dependencies = [ "westend-emulated-chain", ] +[[package]] +name = "which" +version = "4.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2441c784c52b289a054b7201fc93253e288f094e2f4be9058343127c4226a269" +dependencies = [ + "either", + "libc", + "once_cell", +] + [[package]] name = "wide" version = "0.7.11" @@ -26577,6 +26723,21 @@ dependencies = [ "windows-targets 0.52.0", ] +[[package]] +name = "windows-sys" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm 0.42.2", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", + "windows_x86_64_gnullvm 0.42.2", + "windows_x86_64_msvc 0.42.2", +] + [[package]] name = "windows-sys" version = "0.45.0" diff --git a/Cargo.toml b/Cargo.toml index 5266002b2f411..025eda0d7b267 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -838,7 +838,7 @@ linked-hash-map = { version = "0.5.4" } linked_hash_set = { version = "0.1.4" } linregress = { version = "0.5.1" } lite-json = { version = "0.2.0", default-features = false } -litep2p = { version = "0.7.0", features = ["websocket"] } +litep2p = { version = "0.6.2" } log = { version = "0.4.22", default-features = false } macro_magic = { version = "0.5.1" } maplit = { version = "1.0.2" } diff --git a/prdoc/pr_5609.prdoc b/prdoc/pr_5609.prdoc deleted file mode 100644 index 799071f04c1e3..0000000000000 --- a/prdoc/pr_5609.prdoc +++ /dev/null @@ -1,21 +0,0 @@ -title: Update litep2p network backend to v0.7.0 - -doc: - - audience: [ Node Dev, Node Operator ] - description: | - This PR updates the Litep2p network backend to version 0.7.0. - This new release introduces several new features, improvements, and fixes to the litep2p library. - Key updates include enhanced error handling propagated through metrics, configurable connection limits, - and a new API for managing public addresses. - - The Identify protocol no longer includes public addresses in its configuration. - Instead, we rely on the `litep2p.public_addresses` interface to propagate external addresses of the node. - - Litep2p uses hickory DNS resolver (formerly known as trust DNS). - Similarly to the trust DNS, the hickory logs are silenced. - -crates: - - name: sc-network - bump: patch - - name: sc-tracing - bump: minor diff --git a/substrate/client/network/src/litep2p/discovery.rs b/substrate/client/network/src/litep2p/discovery.rs index 13cf8a4c6ee0c..2e52c3e88f923 100644 --- a/substrate/client/network/src/litep2p/discovery.rs +++ b/substrate/client/network/src/litep2p/discovery.rs @@ -243,9 +243,11 @@ impl Discovery { ) -> (Self, PingConfig, IdentifyConfig, KademliaConfig, Option) { let (ping_config, ping_event_stream) = PingConfig::default(); let user_agent = format!("{} ({})", config.client_version, config.node_name); - - let (identify_config, identify_event_stream) = - IdentifyConfig::new("/substrate/1.0".to_string(), Some(user_agent)); + let (identify_config, identify_event_stream) = IdentifyConfig::new( + "/substrate/1.0".to_string(), + Some(user_agent), + config.public_addresses.clone().into_iter().map(Into::into).collect(), + ); let (mdns_config, mdns_event_stream) = match config.transport { crate::config::TransportConfig::Normal { enable_mdns, .. } => match enable_mdns { diff --git a/substrate/client/network/src/litep2p/mod.rs b/substrate/client/network/src/litep2p/mod.rs index df4244890f967..360076da18da5 100644 --- a/substrate/client/network/src/litep2p/mod.rs +++ b/substrate/client/network/src/litep2p/mod.rs @@ -54,7 +54,6 @@ use libp2p::kad::{PeerRecord, Record as P2PRecord, RecordKey}; use litep2p::{ config::ConfigBuilder, crypto::ed25519::Keypair, - error::{DialError, NegotiationError}, executor::Executor, protocol::{ libp2p::{ @@ -65,14 +64,15 @@ use litep2p::{ }, transport::{ tcp::config::Config as TcpTransportConfig, - websocket::config::Config as WebSocketTransportConfig, ConnectionLimitsConfig, Endpoint, + websocket::config::Config as WebSocketTransportConfig, Endpoint, }, types::{ multiaddr::{Multiaddr, Protocol}, ConnectionId, }, - Litep2p, Litep2pEvent, ProtocolName as Litep2pProtocolName, + Error as Litep2pError, Litep2p, Litep2pEvent, ProtocolName as Litep2pProtocolName, }; +use parking_lot::RwLock; use prometheus_endpoint::Registry; use sc_client_api::BlockBackend; @@ -183,6 +183,9 @@ pub struct Litep2pNetworkBackend { /// Prometheus metrics. metrics: Option, + + /// External addresses. + external_addresses: Arc>>, } impl Litep2pNetworkBackend { @@ -554,9 +557,6 @@ impl NetworkBackend for Litep2pNetworkBac .with_libp2p_ping(ping_config) .with_libp2p_identify(identify_config) .with_libp2p_kademlia(kademlia_config) - .with_connection_limits(ConnectionLimitsConfig::default().max_incoming_connections( - Some(crate::MAX_CONNECTIONS_ESTABLISHED_INCOMING as usize), - )) .with_executor(executor); if let Some(config) = maybe_mdns_config { @@ -570,22 +570,15 @@ impl NetworkBackend for Litep2pNetworkBac let litep2p = Litep2p::new(config_builder.build()).map_err(|error| Error::Litep2p(error))?; + let external_addresses: Arc>> = Arc::new(RwLock::new( + HashSet::from_iter(network_config.public_addresses.iter().cloned().map(Into::into)), + )); litep2p.listen_addresses().for_each(|address| { log::debug!(target: LOG_TARGET, "listening on: {address}"); listen_addresses.write().insert(address.clone()); }); - let public_addresses = litep2p.public_addresses(); - for address in network_config.public_addresses.iter() { - if let Err(err) = public_addresses.add_address(address.clone().into()) { - log::warn!( - target: LOG_TARGET, - "failed to add public address {address:?}: {err:?}", - ); - } - } - let network_service = Arc::new(Litep2pNetworkService::new( local_peer_id, keypair.clone(), @@ -595,7 +588,7 @@ impl NetworkBackend for Litep2pNetworkBac block_announce_protocol.clone(), request_response_senders, Arc::clone(&listen_addresses), - public_addresses, + Arc::clone(&external_addresses), )); // register rest of the metrics now that `Litep2p` has been created @@ -621,6 +614,7 @@ impl NetworkBackend for Litep2pNetworkBac event_streams: out_events::OutChannels::new(None)?, peers: HashMap::new(), litep2p, + external_addresses, }) } @@ -923,16 +917,10 @@ impl NetworkBackend for Litep2pNetworkBac self.discovery.add_self_reported_address(peer, supported_protocols, listen_addresses).await; } Some(DiscoveryEvent::ExternalAddressDiscovered { address }) => { - match self.litep2p.public_addresses().add_address(address.clone().into()) { - Ok(inserted) => if inserted { - log::info!(target: LOG_TARGET, "🔍 Discovered new external address for our node: {address}"); - }, - Err(err) => { - log::warn!( - target: LOG_TARGET, - "🔍 Failed to add discovered external address {address:?}: {err:?}", - ); - }, + let mut addresses = self.external_addresses.write(); + + if addresses.insert(address.clone()) { + log::info!(target: LOG_TARGET, "🔍 Discovered new external address for our node: {address}"); } } Some(DiscoveryEvent::ExternalAddressExpired{ address }) => { @@ -1037,40 +1025,20 @@ impl NetworkBackend for Litep2pNetworkBac } } Some(Litep2pEvent::DialFailure { address, error }) => { - log::debug!( + log::trace!( target: LOG_TARGET, "failed to dial peer at {address:?}: {error:?}", ); - if let Some(metrics) = &self.metrics { - let reason = match error { - DialError::Timeout => "timeout", - DialError::AddressError(_) => "invalid-address", - DialError::DnsError(_) => "cannot-resolve-dns", - DialError::NegotiationError(error) => match error { - NegotiationError::Timeout => "timeout", - NegotiationError::PeerIdMissing => "missing-peer-id", - NegotiationError::StateMismatch => "state-mismatch", - NegotiationError::PeerIdMismatch(_,_) => "peer-id-missmatch", - NegotiationError::MultistreamSelectError(_) => "multistream-select-error", - NegotiationError::SnowError(_) => "noise-error", - NegotiationError::ParseError(_) => "parse-error", - NegotiationError::IoError(_) => "io-error", - NegotiationError::WebSocket(_) => "webscoket-error", - } - }; - - metrics.pending_connections_errors_total.with_label_values(&[&reason]).inc(); - } - } - Some(Litep2pEvent::ListDialFailures { errors }) => { - log::debug!( - target: LOG_TARGET, - "failed to dial peer on multiple addresses {errors:?}", - ); + let reason = match error { + Litep2pError::PeerIdMismatch(_, _) => "invalid-peer-id", + Litep2pError::Timeout | Litep2pError::TransportError(_) | + Litep2pError::IoError(_) | Litep2pError::WebSocket(_) => "transport-error", + _ => "other", + }; if let Some(metrics) = &self.metrics { - metrics.pending_connections_errors_total.with_label_values(&["transport-errors"]).inc(); + metrics.pending_connections_errors_total.with_label_values(&[reason]).inc(); } } _ => {} diff --git a/substrate/client/network/src/litep2p/service.rs b/substrate/client/network/src/litep2p/service.rs index 693217f5ad94c..67fc44e6bfe0e 100644 --- a/substrate/client/network/src/litep2p/service.rs +++ b/substrate/client/network/src/litep2p/service.rs @@ -36,10 +36,7 @@ use crate::litep2p::Record; use codec::DecodeAll; use futures::{channel::oneshot, stream::BoxStream}; use libp2p::{identity::SigningError, kad::record::Key as KademliaKey}; -use litep2p::{ - addresses::PublicAddresses, crypto::ed25519::Keypair, - types::multiaddr::Multiaddr as LiteP2pMultiaddr, -}; +use litep2p::{crypto::ed25519::Keypair, types::multiaddr::Multiaddr as LiteP2pMultiaddr}; use parking_lot::RwLock; use sc_network_common::{ @@ -199,7 +196,7 @@ pub struct Litep2pNetworkService { listen_addresses: Arc>>, /// External addresses. - external_addresses: PublicAddresses, + external_addresses: Arc>>, } impl Litep2pNetworkService { @@ -213,7 +210,7 @@ impl Litep2pNetworkService { block_announce_protocol: ProtocolName, request_response_protocols: HashMap>, listen_addresses: Arc>>, - external_addresses: PublicAddresses, + external_addresses: Arc>>, ) -> Self { Self { local_peer_id, @@ -326,8 +323,9 @@ impl NetworkStatusProvider for Litep2pNetworkService { .collect(), external_addresses: self .external_addresses - .get_addresses() - .into_iter() + .read() + .iter() + .cloned() .map(|a| Multiaddr::from(a).into()) .collect(), connected_peers: HashMap::new(), @@ -493,7 +491,7 @@ impl NetworkEventStream for Litep2pNetworkService { impl NetworkStateInfo for Litep2pNetworkService { fn external_addresses(&self) -> Vec { - self.external_addresses.get_addresses().into_iter().map(Into::into).collect() + self.external_addresses.read().iter().cloned().map(Into::into).collect() } fn listen_addresses(&self) -> Vec { diff --git a/substrate/client/network/src/litep2p/shim/request_response/mod.rs b/substrate/client/network/src/litep2p/shim/request_response/mod.rs index bfd7a60ef9fe6..a77acb464144f 100644 --- a/substrate/client/network/src/litep2p/shim/request_response/mod.rs +++ b/substrate/client/network/src/litep2p/shim/request_response/mod.rs @@ -29,10 +29,8 @@ use crate::{ use futures::{channel::oneshot, future::BoxFuture, stream::FuturesUnordered, StreamExt}; use litep2p::{ - error::{ImmediateDialError, NegotiationError, SubstreamError}, protocol::request_response::{ - DialOptions, RejectReason, RequestResponseError, RequestResponseEvent, - RequestResponseHandle, + DialOptions, RequestResponseError, RequestResponseEvent, RequestResponseHandle, }, types::RequestId, }; @@ -374,32 +372,7 @@ impl RequestResponseProtocol { let status = match error { RequestResponseError::NotConnected => Some((RequestFailure::NotConnected, "not-connected")), - RequestResponseError::Rejected(reason) => { - let reason = match reason { - RejectReason::ConnectionClosed => "connection-closed", - RejectReason::SubstreamClosed => "substream-closed", - RejectReason::SubstreamOpenError(substream_error) => match substream_error { - SubstreamError::NegotiationError(NegotiationError::Timeout) => - "substream-timeout", - _ => "substream-open-error", - }, - RejectReason::DialFailed(None) => "dial-failed", - RejectReason::DialFailed(Some(ImmediateDialError::AlreadyConnected)) => - "dial-already-connected", - RejectReason::DialFailed(Some(ImmediateDialError::PeerIdMissing)) => - "dial-peerid-missing", - RejectReason::DialFailed(Some(ImmediateDialError::TriedToDialSelf)) => - "dial-tried-to-dial-self", - RejectReason::DialFailed(Some(ImmediateDialError::NoAddressAvailable)) => - "dial-no-address-available", - RejectReason::DialFailed(Some(ImmediateDialError::TaskClosed)) => - "dial-task-closed", - RejectReason::DialFailed(Some(ImmediateDialError::ChannelClogged)) => - "dial-channel-clogged", - }; - - Some((RequestFailure::Refused, reason)) - }, + RequestResponseError::Rejected => Some((RequestFailure::Refused, "rejected")), RequestResponseError::Timeout => Some((RequestFailure::Network(OutboundFailure::Timeout), "timeout")), RequestResponseError::Canceled => { diff --git a/substrate/client/network/src/litep2p/shim/request_response/tests.rs b/substrate/client/network/src/litep2p/shim/request_response/tests.rs index 78b6ef0a481c9..e3e82aa395c58 100644 --- a/substrate/client/network/src/litep2p/shim/request_response/tests.rs +++ b/substrate/client/network/src/litep2p/shim/request_response/tests.rs @@ -271,12 +271,7 @@ async fn too_many_inbound_requests() { match handle2.next().await { Some(RequestResponseEvent::RequestFailed { peer, error, .. }) => { assert_eq!(peer, peer1); - assert_eq!( - error, - RequestResponseError::Rejected( - litep2p::protocol::request_response::RejectReason::SubstreamClosed - ) - ); + assert_eq!(error, RequestResponseError::Rejected); }, event => panic!("inavlid event: {event:?}"), } diff --git a/substrate/client/tracing/src/logging/mod.rs b/substrate/client/tracing/src/logging/mod.rs index 33fec2d418813..74ce5f90ede9e 100644 --- a/substrate/client/tracing/src/logging/mod.rs +++ b/substrate/client/tracing/src/logging/mod.rs @@ -138,9 +138,6 @@ where .add_directive( parse_default_directive("trust_dns_proto=off").expect("provided directive is valid"), ) - .add_directive( - parse_default_directive("hickory_proto=off").expect("provided directive is valid"), - ) .add_directive( parse_default_directive("libp2p_mdns::behaviour::iface=off") .expect("provided directive is valid"),