From 585edb642fec8575d1f4ddf8211a13aa199d206d Mon Sep 17 00:00:00 2001 From: Dmitry Markin Date: Wed, 7 Sep 2022 18:26:12 +0300 Subject: [PATCH 01/18] cargo upgrade libp2p --- Cargo.lock | 323 +++++++++++++++----------- client/authority-discovery/Cargo.toml | 2 +- client/cli/Cargo.toml | 2 +- client/consensus/common/Cargo.toml | 2 +- client/network-gossip/Cargo.toml | 2 +- client/network/Cargo.toml | 2 +- client/network/common/Cargo.toml | 2 +- client/network/light/Cargo.toml | 2 +- client/network/sync/Cargo.toml | 2 +- client/network/test/Cargo.toml | 2 +- client/offchain/Cargo.toml | 2 +- client/peerset/Cargo.toml | 2 +- client/telemetry/Cargo.toml | 2 +- 13 files changed, 200 insertions(+), 147 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f6c2df81d6ee1..b0fb215fa30af 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3013,9 +3013,9 @@ dependencies = [ [[package]] name = "if-watch" -version = "1.0.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8f4a3c3d4c89351ca83e120c1c00b27df945d38e05695668c9d4b4f7bc52f3" +checksum = "015a7df1eb6dda30df37f34b63ada9b7b352984b0e84de2a20ed526345000791" dependencies = [ "async-io", "core-foundation", @@ -3541,9 +3541,9 @@ checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" [[package]] name = "libp2p" -version = "0.46.1" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81327106887e42d004fbdab1fef93675be2e2e07c1b95fce45e2cc813485611d" +checksum = "94c996fe5bfdba47f5a5af71d48ecbe8cec900b7b97391cc1d3ba1afb0e2d3b6" dependencies = [ "bytes", "futures", @@ -3585,9 +3585,9 @@ dependencies = [ [[package]] name = "libp2p-autonat" -version = "0.5.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4decc51f3573653a9f4ecacb31b1b922dd20c25a6322bb15318ec04287ec46f9" +checksum = "994920fe343302fec9d8f4b86fca78cc19817334b8eaff89f5e5bc3441a6dbae" dependencies = [ "async-trait", "futures", @@ -3597,16 +3597,16 @@ dependencies = [ "libp2p-request-response", "libp2p-swarm", "log", - "prost", - "prost-build", + "prost 0.11.0", + "prost-build 0.11.1", "rand 0.8.4", ] [[package]] name = "libp2p-core" -version = "0.34.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbf9b94cefab7599b2d3dff2f93bee218c6621d68590b23ede4485813cbcece6" +checksum = "b1fff5bd889c82a0aec668f2045edd066f559d4e5c40354e5a4c77ac00caac38" dependencies = [ "asn1_der", "bs58", @@ -3624,8 +3624,8 @@ dependencies = [ "multistream-select", "parking_lot 0.12.1", "pin-project", - "prost", - "prost-build", + "prost 0.11.0", + "prost-build 0.11.1", "rand 0.8.4", "ring", "rw-stream-sink", @@ -3639,9 +3639,9 @@ dependencies = [ [[package]] name = "libp2p-deflate" -version = "0.34.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0183dc2a3da1fbbf85e5b6cf51217f55b14f5daea0c455a9536eef646bfec71" +checksum = "282a994808e6a0bd7a920978c174bd8ab1c3cc33b6616a727311fd90dafa2245" dependencies = [ "flate2", "futures", @@ -3650,9 +3650,9 @@ dependencies = [ [[package]] name = "libp2p-dns" -version = "0.34.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cbf54723250fa5d521383be789bf60efdabe6bacfb443f87da261019a49b4b5" +checksum = "6cb3c16e3bb2f76c751ae12f0f26e788c89d353babdded40411e7923f01fc978" dependencies = [ "async-std-resolver", "futures", @@ -3665,9 +3665,9 @@ dependencies = [ [[package]] name = "libp2p-floodsub" -version = "0.37.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98a4b6ffd53e355775d24b76f583fdda54b3284806f678499b57913adb94f231" +checksum = "6febd4da35cb9ada02f8d92bdb41f479d2b3452313ecffaf7448958a94c42060" dependencies = [ "cuckoofilter", "fnv", @@ -3675,17 +3675,17 @@ dependencies = [ "libp2p-core", "libp2p-swarm", "log", - "prost", - "prost-build", + "prost 0.11.0", + "prost-build 0.11.1", "rand 0.7.3", "smallvec", ] [[package]] name = "libp2p-gossipsub" -version = "0.39.0" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74b4b888cfbeb1f5551acd3aa1366e01bf88ede26cc3c4645d0d2d004d5ca7b0" +checksum = "2185aac44b162c95180ae4ddd1f4dfb705217ea1cb8e16bdfc70d31496fd80fa" dependencies = [ "asynchronous-codec", "base64", @@ -3699,8 +3699,8 @@ dependencies = [ "libp2p-swarm", "log", "prometheus-client", - "prost", - "prost-build", + "prost 0.11.0", + "prost-build 0.11.1", "rand 0.7.3", "regex", "sha2 0.10.2", @@ -3711,9 +3711,9 @@ dependencies = [ [[package]] name = "libp2p-identify" -version = "0.37.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c50b585518f8efd06f93ac2f976bd672e17cdac794644b3117edd078e96bda06" +checksum = "f19440c84b509d69b13f0c9c28caa9bd3a059d25478527e937e86761f25c821e" dependencies = [ "asynchronous-codec", "futures", @@ -3722,8 +3722,8 @@ dependencies = [ "libp2p-swarm", "log", "lru", - "prost", - "prost-build", + "prost 0.11.0", + "prost-build 0.11.1", "prost-codec", "smallvec", "thiserror", @@ -3732,9 +3732,9 @@ dependencies = [ [[package]] name = "libp2p-kad" -version = "0.38.0" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "740862893bb5f06ac24acc9d49bdeadc3a5e52e51818a30a25c1f3519da2c851" +checksum = "f840579eed6503ec8a7a0c7e919bcd645df11c991be8e54640ff09f7109b8a43" dependencies = [ "arrayvec 0.7.2", "asynchronous-codec", @@ -3747,8 +3747,8 @@ dependencies = [ "libp2p-core", "libp2p-swarm", "log", - "prost", - "prost-build", + "prost 0.11.0", + "prost-build 0.11.1", "rand 0.7.3", "sha2 0.10.2", "smallvec", @@ -3760,9 +3760,9 @@ dependencies = [ [[package]] name = "libp2p-mdns" -version = "0.38.0" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66e5e5919509603281033fd16306c61df7a4428ce274b67af5e14b07de5cdcb2" +checksum = "ff531fbceee32be0e39409e985c5536897e4578addb1c702fd4973e2c381fc76" dependencies = [ "async-io", "data-encoding", @@ -3781,9 +3781,9 @@ dependencies = [ [[package]] name = "libp2p-metrics" -version = "0.7.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef8aff4a1abef42328fbb30b17c853fff9be986dc39af17ee39f9c5f755c5e0c" +checksum = "a74ab339e8b5d989e8c1000a78adb5c064a6319245bb22d1e70b415ec18c39b8" dependencies = [ "libp2p-core", "libp2p-gossipsub", @@ -3797,9 +3797,9 @@ dependencies = [ [[package]] name = "libp2p-mplex" -version = "0.34.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61fd1b20638ec209c5075dfb2e8ce6a7ea4ec3cd3ad7b77f7a477c06d53322e2" +checksum = "ce53169351226ee0eb18ee7bef8d38f308fa8ad7244f986ae776390c0ae8a44d" dependencies = [ "asynchronous-codec", "bytes", @@ -3815,9 +3815,9 @@ dependencies = [ [[package]] name = "libp2p-noise" -version = "0.37.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "762408cb5d84b49a600422d7f9a42c18012d8da6ebcd570f9a4a4290ba41fb6f" +checksum = "7cb0f939a444b06779ce551b3d78ebf13970ac27906ada452fd70abd160b09b8" dependencies = [ "bytes", "curve25519-dalek 3.0.2", @@ -3825,8 +3825,8 @@ dependencies = [ "lazy_static", "libp2p-core", "log", - "prost", - "prost-build", + "prost 0.11.0", + "prost-build 0.11.1", "rand 0.8.4", "sha2 0.10.2", "snow", @@ -3837,9 +3837,9 @@ dependencies = [ [[package]] name = "libp2p-ping" -version = "0.37.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "100a6934ae1dbf8a693a4e7dd1d730fd60b774dafc45688ed63b554497c6c925" +checksum = "76a36f78e107bb55330341018874c5168851f455f8bdc3e0cd44e6c84e0a7069" dependencies = [ "futures", "futures-timer", @@ -3853,17 +3853,17 @@ dependencies = [ [[package]] name = "libp2p-plaintext" -version = "0.34.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be27bf0820a6238a4e06365b096d428271cce85a129cf16f2fe9eb1610c4df86" +checksum = "328e8c654a55ac7f093eb96dfd0386244dd337f2bd2822dc019522b743ea8add" dependencies = [ "asynchronous-codec", "bytes", "futures", "libp2p-core", "log", - "prost", - "prost-build", + "prost 0.11.0", + "prost-build 0.11.1", "unsigned-varint", "void", ] @@ -3884,9 +3884,9 @@ dependencies = [ [[package]] name = "libp2p-relay" -version = "0.10.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4931547ee0cce03971ccc1733ff05bb0c4349fd89120a39e9861e2bbe18843c3" +checksum = "56d9c1390382ab8938f490783dfb6e7c7b559f6c6f2e1bef92fdbf57d3cd4aa1" dependencies = [ "asynchronous-codec", "bytes", @@ -3898,8 +3898,8 @@ dependencies = [ "libp2p-swarm", "log", "pin-project", - "prost", - "prost-build", + "prost 0.11.0", + "prost-build 0.11.1", "prost-codec", "rand 0.8.4", "smallvec", @@ -3910,9 +3910,9 @@ dependencies = [ [[package]] name = "libp2p-rendezvous" -version = "0.7.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9511c9672ba33284838e349623319c8cad2d18cfad243ae46c6b7e8a2982ea4e" +checksum = "f5cac3ef547c1fd807aa903497afb928afa3d09c3b7c6a6da2b8a6f1988968f5" dependencies = [ "asynchronous-codec", "bimap", @@ -3922,8 +3922,8 @@ dependencies = [ "libp2p-core", "libp2p-swarm", "log", - "prost", - "prost-build", + "prost 0.11.0", + "prost-build 0.11.1", "rand 0.8.4", "sha2 0.10.2", "thiserror", @@ -3933,9 +3933,9 @@ dependencies = [ [[package]] name = "libp2p-request-response" -version = "0.19.0" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "508a189e2795d892c8f5c1fa1e9e0b1845d32d7b0b249dbf7b05b18811361843" +checksum = "2344aa93dc8b1de90e26091d7cf63044519bbea7b0b03d829f350563a2dd26f7" dependencies = [ "async-trait", "bytes", @@ -3951,9 +3951,9 @@ dependencies = [ [[package]] name = "libp2p-swarm" -version = "0.37.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95ac5be6c2de2d1ff3f7693fda6faf8a827b1f3e808202277783fea9f527d114" +checksum = "70ad2db60c06603606b54b58e4247e32efec87a93cb4387be24bf32926c600f2" dependencies = [ "either", "fnv", @@ -3971,19 +3971,20 @@ dependencies = [ [[package]] name = "libp2p-swarm-derive" -version = "0.28.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f54a64b6957249e0ce782f8abf41d97f69330d02bf229f0672d864f0650cc76" +checksum = "1f02622b9dd150011b4eeec387f8bd013189a2f27da08ba363e7c6e606d77a48" dependencies = [ + "heck", "quote", "syn", ] [[package]] name = "libp2p-tcp" -version = "0.34.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a6771dc19aa3c65d6af9a8c65222bfc8fcd446630ddca487acd161fa6096f3b" +checksum = "9675432b4c94b3960f3d2c7e57427b81aea92aab67fd0eebef09e2ae0ff54895" dependencies = [ "async-io", "futures", @@ -3998,9 +3999,9 @@ dependencies = [ [[package]] name = "libp2p-uds" -version = "0.33.0" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d125e3e5f0d58f3c6ac21815b20cf4b6a88b8db9dc26368ea821838f4161fd4d" +checksum = "7ec5aa09dfcdb5867eda38f201a076716754574e592fb178cd798d4bd87592ef" dependencies = [ "async-std", "futures", @@ -4010,9 +4011,9 @@ dependencies = [ [[package]] name = "libp2p-wasm-ext" -version = "0.34.0" +version = "0.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec894790eec3c1608f8d1a8a0bdf0dbeb79ed4de2dce964222011c2896dfa05a" +checksum = "feaafcfaeab981be0efbd872548c72a941496adaa928dadd5fd74b36e3faa481" dependencies = [ "futures", "js-sys", @@ -4024,9 +4025,9 @@ dependencies = [ [[package]] name = "libp2p-websocket" -version = "0.36.0" +version = "0.38.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9808e57e81be76ff841c106b4c5974fb4d41a233a7bdd2afbf1687ac6def3818" +checksum = "de8a9e825cc03f2fc194d2e1622113d7fe18e1c7f4458a582b83140c9b9aea27" dependencies = [ "either", "futures", @@ -4043,9 +4044,9 @@ dependencies = [ [[package]] name = "libp2p-yamux" -version = "0.38.0" +version = "0.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6dea686217a06072033dc025631932810e2f6ad784e4fafa42e27d311c7a81c" +checksum = "b74ec8dc042b583f0b2b93d52917f3b374c1e4b1cfa79ee74c7672c41257694c" dependencies = [ "futures", "libp2p-core", @@ -4554,9 +4555,9 @@ dependencies = [ [[package]] name = "netlink-packet-route" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "733ea73609acfd7fa7ddadfb7bf709b0471668c456ad9513685af543a06342b2" +checksum = "d9ea4302b9759a7a88242299225ea3688e63c85ea136371bb6cf94fd674efaab" dependencies = [ "anyhow", "bitflags", @@ -4580,23 +4581,24 @@ dependencies = [ [[package]] name = "netlink-proto" -version = "0.9.2" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef8785b8141e8432aa45fceb922a7e876d7da3fad37fa7e7ec702ace3aa0826b" +checksum = "65b4b14489ab424703c092062176d52ba55485a89c076b4f9db05092b7223aa6" dependencies = [ "bytes", "futures", "log", "netlink-packet-core", "netlink-sys", + "thiserror", "tokio", ] [[package]] name = "netlink-sys" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c9f9547a08241bee7b6558b9b98e1f290d187de8b7cfca2bbb4937bcaa8f8" +checksum = "92b654097027250401127914afb37cb1f311df6610a9891ff07a757e94199027" dependencies = [ "async-io", "bytes", @@ -4607,9 +4609,9 @@ dependencies = [ [[package]] name = "nix" -version = "0.22.3" +version = "0.23.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4916f159ed8e5de0082076562152a76b7a1f64a01fd9d1e0fea002c37624faf" +checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6" dependencies = [ "bitflags", "cc", @@ -4620,15 +4622,13 @@ dependencies = [ [[package]] name = "nix" -version = "0.23.1" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6" +checksum = "195cdbc1741b8134346d515b3a56a1c94b0912758009cfd53f99ea0f57b065fc" dependencies = [ "bitflags", - "cc", "cfg-if 1.0.0", "libc", - "memoffset", ] [[package]] @@ -7020,21 +7020,21 @@ dependencies = [ [[package]] name = "prometheus-client" -version = "0.16.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac1abe0255c04d15f571427a2d1e00099016506cf3297b53853acd2b7eb87825" +checksum = "3c473049631c233933d6286c88bbb7be30e62ec534cf99a9ae0079211f7fa603" dependencies = [ "dtoa", "itoa 1.0.1", - "owning_ref", + "parking_lot 0.12.1", "prometheus-client-derive-text-encode", ] [[package]] name = "prometheus-client-derive-text-encode" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8e12d01b9d66ad9eb4529c57666b6263fc1993cb30261d83ead658fdd932652" +checksum = "66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd" dependencies = [ "proc-macro2", "quote", @@ -7048,7 +7048,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bc03e116981ff7d8da8e5c220e374587b98d294af7ba7dd7fda761158f00086f" dependencies = [ "bytes", - "prost-derive", + "prost-derive 0.10.1", +] + +[[package]] +name = "prost" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "399c3c31cdec40583bb68f0b18403400d01ec4289c383aa047560439952c4dd7" +dependencies = [ + "bytes", + "prost-derive 0.11.0", ] [[package]] @@ -7066,8 +7076,28 @@ dependencies = [ "log", "multimap", "petgraph", - "prost", - "prost-types", + "prost 0.10.3", + "prost-types 0.10.1", + "regex", + "tempfile", + "which", +] + +[[package]] +name = "prost-build" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f835c582e6bd972ba8347313300219fed5bfa52caf175298d860b61ff6069bb" +dependencies = [ + "bytes", + "heck", + "itertools", + "lazy_static", + "log", + "multimap", + "petgraph", + "prost 0.11.0", + "prost-types 0.11.1", "regex", "tempfile", "which", @@ -7075,13 +7105,13 @@ dependencies = [ [[package]] name = "prost-codec" -version = "0.1.0" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "00af1e92c33b4813cc79fda3f2dbf56af5169709be0202df730e9ebc3e4cd007" +checksum = "011ae9ff8359df7915f97302d591cdd9e0e27fbd5a4ddc5bd13b71079bb20987" dependencies = [ "asynchronous-codec", "bytes", - "prost", + "prost 0.11.0", "thiserror", "unsigned-varint", ] @@ -7099,6 +7129,19 @@ dependencies = [ "syn", ] +[[package]] +name = "prost-derive" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7345d5f0e08c0536d7ac7229952590239e77abf0a0100a1b1d890add6ea96364" +dependencies = [ + "anyhow", + "itertools", + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "prost-types" version = "0.10.1" @@ -7106,7 +7149,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2d0a014229361011dc8e69c8a1ec6c2e8d0f2af7c91e3ea3f5b2170298461e68" dependencies = [ "bytes", - "prost", + "prost 0.10.3", +] + +[[package]] +name = "prost-types" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dfaa718ad76a44b3415e6c4d53b17c8f99160dcb3a99b10470fce8ad43f6e3e" +dependencies = [ + "bytes", + "prost 0.11.0", ] [[package]] @@ -7559,16 +7612,16 @@ dependencies = [ [[package]] name = "rtnetlink" -version = "0.9.1" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f54290e54521dac3de4149d83ddf9f62a359b3cc93bcb494a794a41e6f4744b" +checksum = "322c53fd76a18698f1c27381d58091de3a043d356aa5bd0d510608b565f469a0" dependencies = [ "async-global-executor", "futures", "log", "netlink-packet-route", "netlink-proto", - "nix 0.22.3", + "nix 0.24.2", "thiserror", ] @@ -7751,8 +7804,8 @@ dependencies = [ "libp2p", "log", "parity-scale-codec", - "prost", - "prost-build", + "prost 0.10.3", + "prost-build 0.10.4", "quickcheck", "rand 0.7.3", "sc-client-api", @@ -8408,8 +8461,8 @@ dependencies = [ "parity-scale-codec", "parking_lot 0.12.1", "pin-project", - "prost", - "prost-build", + "prost 0.10.3", + "prost-build 0.10.4", "rand 0.7.3", "sc-block-builder", "sc-client-api", @@ -8449,7 +8502,7 @@ dependencies = [ "futures", "libp2p", "parity-scale-codec", - "prost-build", + "prost-build 0.10.4", "sc-consensus", "sc-peerset", "serde", @@ -8490,8 +8543,8 @@ dependencies = [ "libp2p", "log", "parity-scale-codec", - "prost", - "prost-build", + "prost 0.10.3", + "prost-build 0.10.4", "sc-client-api", "sc-network-common", "sc-peerset", @@ -8512,8 +8565,8 @@ dependencies = [ "log", "lru", "parity-scale-codec", - "prost", - "prost-build", + "prost 0.10.3", + "prost-build 0.10.4", "quickcheck", "sc-block-builder", "sc-client-api", @@ -11991,15 +12044,15 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows" -version = "0.29.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aac7fef12f4b59cd0a29339406cc9203ab44e440ddff6b3f5a41455349fa9cf3" +checksum = "45296b64204227616fdbf2614cefa4c236b98ee64dfaaaa435207ed99fe7829f" dependencies = [ - "windows_aarch64_msvc 0.29.0", - "windows_i686_gnu 0.29.0", - "windows_i686_msvc 0.29.0", - "windows_x86_64_gnu 0.29.0", - "windows_x86_64_msvc 0.29.0", + "windows_aarch64_msvc 0.34.0", + "windows_i686_gnu 0.34.0", + "windows_i686_msvc 0.34.0", + "windows_x86_64_gnu 0.34.0", + "windows_x86_64_msvc 0.34.0", ] [[package]] @@ -12030,15 +12083,15 @@ dependencies = [ [[package]] name = "windows_aarch64_msvc" -version = "0.29.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d027175d00b01e0cbeb97d6ab6ebe03b12330a35786cbaca5252b1c4bf5d9b" +checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5" [[package]] name = "windows_aarch64_msvc" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e92753b1c443191654ec532f14c199742964a061be25d77d7a96f09db20bf5" +checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" [[package]] name = "windows_aarch64_msvc" @@ -12048,15 +12101,15 @@ checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" [[package]] name = "windows_i686_gnu" -version = "0.29.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8793f59f7b8e8b01eda1a652b2697d87b93097198ae85f823b969ca5b89bba58" +checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615" [[package]] name = "windows_i686_gnu" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a711c68811799e017b6038e0922cb27a5e2f43a2ddb609fe0b6f3eeda9de615" +checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" [[package]] name = "windows_i686_gnu" @@ -12066,15 +12119,15 @@ checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" [[package]] name = "windows_i686_msvc" -version = "0.29.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8602f6c418b67024be2996c512f5f995de3ba417f4c75af68401ab8756796ae4" +checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172" [[package]] name = "windows_i686_msvc" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "146c11bb1a02615db74680b32a68e2d61f553cc24c4eb5b4ca10311740e44172" +checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" [[package]] name = "windows_i686_msvc" @@ -12084,15 +12137,15 @@ checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" [[package]] name = "windows_x86_64_gnu" -version = "0.29.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3d615f419543e0bd7d2b3323af0d86ff19cbc4f816e6453f36a2c2ce889c354" +checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc" [[package]] name = "windows_x86_64_gnu" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c912b12f7454c6620635bbff3450962753834be2a594819bd5e945af18ec64bc" +checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" [[package]] name = "windows_x86_64_gnu" @@ -12102,15 +12155,15 @@ checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" [[package]] name = "windows_x86_64_msvc" -version = "0.29.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11d95421d9ed3672c280884da53201a5c46b7b2765ca6faf34b0d71cf34a3561" +checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316" [[package]] name = "windows_x86_64_msvc" -version = "0.32.0" +version = "0.34.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "504a2476202769977a040c6364301a3f65d0cc9e3fb08600b2bda150a0488316" +checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" [[package]] name = "windows_x86_64_msvc" diff --git a/client/authority-discovery/Cargo.toml b/client/authority-discovery/Cargo.toml index d9e9df4f2a97c..62053efc36942 100644 --- a/client/authority-discovery/Cargo.toml +++ b/client/authority-discovery/Cargo.toml @@ -21,7 +21,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = futures = "0.3.21" futures-timer = "3.0.1" ip_network = "0.4.1" -libp2p = { version = "0.46.1", default-features = false, features = ["kad"] } +libp2p = { version = "0.48.0", default-features = false, features = ["kad"] } log = "0.4.17" prost = "0.10" rand = "0.7.2" diff --git a/client/cli/Cargo.toml b/client/cli/Cargo.toml index 50d110d40eabd..907400f99568e 100644 --- a/client/cli/Cargo.toml +++ b/client/cli/Cargo.toml @@ -18,7 +18,7 @@ clap = { version = "3.1.18", features = ["derive"] } fdlimit = "0.2.1" futures = "0.3.21" hex = "0.4.2" -libp2p = "0.46.1" +libp2p = "0.48.0" log = "0.4.17" names = { version = "0.13.0", default-features = false } parity-scale-codec = "3.0.0" diff --git a/client/consensus/common/Cargo.toml b/client/consensus/common/Cargo.toml index 180ad7c38008d..f58470590a25e 100644 --- a/client/consensus/common/Cargo.toml +++ b/client/consensus/common/Cargo.toml @@ -16,7 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"] async-trait = "0.1.57" futures = { version = "0.3.21", features = ["thread-pool"] } futures-timer = "3.0.1" -libp2p = { version = "0.46.1", default-features = false } +libp2p = { version = "0.48.0", default-features = false } log = "0.4.17" parking_lot = "0.12.1" serde = { version = "1.0", features = ["derive"] } diff --git a/client/network-gossip/Cargo.toml b/client/network-gossip/Cargo.toml index 8ecf2b9cec787..d85a7305dd7e5 100644 --- a/client/network-gossip/Cargo.toml +++ b/client/network-gossip/Cargo.toml @@ -17,7 +17,7 @@ targets = ["x86_64-unknown-linux-gnu"] ahash = "0.7.6" futures = "0.3.21" futures-timer = "3.0.1" -libp2p = { version = "0.46.1", default-features = false } +libp2p = { version = "0.48.0", default-features = false } log = "0.4.17" lru = "0.7.5" tracing = "0.1.29" diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index 82f77fa44450f..45f2460319339 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -29,7 +29,7 @@ futures = "0.3.21" futures-timer = "3.0.2" hex = "0.4.0" ip_network = "0.4.1" -libp2p = "0.46.1" +libp2p = "0.48.0" linked_hash_set = "0.1.3" linked-hash-map = "0.5.4" log = "0.4.17" diff --git a/client/network/common/Cargo.toml b/client/network/common/Cargo.toml index 47d43e8b4b03f..f6468effb484e 100644 --- a/client/network/common/Cargo.toml +++ b/client/network/common/Cargo.toml @@ -24,7 +24,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", features = [ "derive", ] } futures = "0.3.21" -libp2p = "0.46.1" +libp2p = "0.48.0" smallvec = "1.8.0" sc-consensus = { version = "0.10.0-dev", path = "../../consensus/common" } sc-peerset = { version = "4.0.0-dev", path = "../../peerset" } diff --git a/client/network/light/Cargo.toml b/client/network/light/Cargo.toml index c1a0fb4759320..0673b6f33d84b 100644 --- a/client/network/light/Cargo.toml +++ b/client/network/light/Cargo.toml @@ -22,7 +22,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", features = [ ] } futures = "0.3.21" hex = "0.4.0" -libp2p = "0.46.1" +libp2p = "0.48.0" log = "0.4.16" prost = "0.10" sp-blockchain = { version = "4.0.0-dev", path = "../../../primitives/blockchain" } diff --git a/client/network/sync/Cargo.toml b/client/network/sync/Cargo.toml index 7c8f8adafd214..a2d9835abdffc 100644 --- a/client/network/sync/Cargo.toml +++ b/client/network/sync/Cargo.toml @@ -22,7 +22,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", features = [ ] } futures = "0.3.21" hex = "0.4.0" -libp2p = "0.46.1" +libp2p = "0.48.0" log = "0.4.17" lru = "0.7.5" prost = "0.10" diff --git a/client/network/test/Cargo.toml b/client/network/test/Cargo.toml index 990129229a40f..27ffdc2996c34 100644 --- a/client/network/test/Cargo.toml +++ b/client/network/test/Cargo.toml @@ -17,7 +17,7 @@ async-std = "1.11.0" async-trait = "0.1.57" futures = "0.3.21" futures-timer = "3.0.1" -libp2p = { version = "0.46.1", default-features = false } +libp2p = { version = "0.48.0", default-features = false } log = "0.4.17" parking_lot = "0.12.1" rand = "0.7.2" diff --git a/client/offchain/Cargo.toml b/client/offchain/Cargo.toml index ff97f29961155..f1fa6d34ef658 100644 --- a/client/offchain/Cargo.toml +++ b/client/offchain/Cargo.toml @@ -21,7 +21,7 @@ futures-timer = "3.0.2" hex = "0.4" hyper = { version = "0.14.16", features = ["stream", "http2"] } hyper-rustls = { version = "0.23.0", features = ["http2"] } -libp2p = { version = "0.46.1", default-features = false } +libp2p = { version = "0.48.0", default-features = false } num_cpus = "1.13" once_cell = "1.8" parking_lot = "0.12.1" diff --git a/client/peerset/Cargo.toml b/client/peerset/Cargo.toml index d3d6e267f1768..c2f1255d2d488 100644 --- a/client/peerset/Cargo.toml +++ b/client/peerset/Cargo.toml @@ -15,7 +15,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] futures = "0.3.21" -libp2p = { version = "0.46.1", default-features = false } +libp2p = { version = "0.48.0", default-features = false } log = "0.4.17" serde_json = "1.0.85" wasm-timer = "0.2" diff --git a/client/telemetry/Cargo.toml b/client/telemetry/Cargo.toml index 4be7c186720fc..aff61b0811bdf 100644 --- a/client/telemetry/Cargo.toml +++ b/client/telemetry/Cargo.toml @@ -16,7 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] chrono = "0.4.19" futures = "0.3.21" -libp2p = { version = "0.46.1", default-features = false, features = ["dns-async-std", "tcp-async-io", "wasm-ext", "websocket"] } +libp2p = { version = "0.48.0", default-features = false, features = ["dns-async-std", "tcp-async-io", "wasm-ext", "websocket"] } log = "0.4.17" parking_lot = "0.12.1" pin-project = "1.0.10" From f6df7caa90eb3f14344d598af9f4d42061bb489a Mon Sep 17 00:00:00 2001 From: Dmitry Markin Date: Wed, 7 Sep 2022 18:28:52 +0300 Subject: [PATCH 02/18] Get rid of `NetworkBehaviourEventProcess` in handling of `CustomMessageOutcome` --- client/network/src/behaviour.rs | 192 +++++++++++--------------------- client/network/src/service.rs | 92 +++++++++++++++ 2 files changed, 156 insertions(+), 128 deletions(-) diff --git a/client/network/src/behaviour.rs b/client/network/src/behaviour.rs index 24df47db6803f..73fd59555e01c 100644 --- a/client/network/src/behaviour.rs +++ b/client/network/src/behaviour.rs @@ -31,10 +31,7 @@ use libp2p::{ core::{Multiaddr, PeerId, PublicKey}, identify::IdentifyInfo, kad::record, - swarm::{ - behaviour::toggle::Toggle, NetworkBehaviour, NetworkBehaviourAction, - NetworkBehaviourEventProcess, PollParameters, - }, + swarm::{behaviour::toggle::Toggle, NetworkBehaviour, NetworkBehaviourAction, PollParameters}, NetworkBehaviour, }; use log::debug; @@ -47,6 +44,7 @@ use sc_network_common::{ ProtocolName, }, request_responses::{IfDisconnected, ProtocolConfig, RequestFailure}, + sync::{warp::WarpProofRequest, OpaqueBlockRequest, OpaqueStateRequest}, }; use sc_peerset::PeersetHandle; use sp_blockchain::HeaderBackend; @@ -87,21 +85,6 @@ where /// Queue of events to produce for the outside. #[behaviour(ignore)] events: VecDeque>, - - /// Protocol name used to send out block requests via - /// [`request_responses::RequestResponsesBehaviour`]. - #[behaviour(ignore)] - block_request_protocol_name: String, - - /// Protocol name used to send out state requests via - /// [`request_responses::RequestResponsesBehaviour`]. - #[behaviour(ignore)] - state_request_protocol_name: String, - - /// Protocol name used to send out warp sync requests via - /// [`request_responses::RequestResponsesBehaviour`]. - #[behaviour(ignore)] - warp_sync_protocol_name: Option, } /// Event generated by `Behaviour`. @@ -189,6 +172,36 @@ pub enum BehaviourOut { messages: Vec<(ProtocolName, Bytes)>, }, + /// A new block request must be emitted. + BlockRequest { + /// Node we send the request to. + target: PeerId, + /// Opaque implementation-specific block request. + request: OpaqueBlockRequest, + /// One-shot channel to recieve the response. + pending_response: oneshot::Sender, RequestFailure>>, + }, + + /// A new state request must be emitted. + StateRequest { + /// Node we send the request to. + target: PeerId, + /// Opaque implementation-specific state request. + request: OpaqueStateRequest, + /// One-shot channel to recieve the response. + pending_response: oneshot::Sender, RequestFailure>>, + }, + + /// A new warp sync request must be emitted. + WarpSyncRequest { + /// Node we send the request to. + target: PeerId, + /// Warp sync request. + request: WarpProofRequest, + /// One-shot channel to recieve the response. + pending_response: oneshot::Sender, RequestFailure>>, + }, + /// Now connected to a new peer for syncing purposes. SyncConnected(PeerId), @@ -198,6 +211,9 @@ pub enum BehaviourOut { /// Events generated by a DHT as a response to get_value or put_value requests as well as the /// request duration. Dht(DhtEvent, Duration), + + /// Ignored event generated by lower layers. + None, } impl Behaviour @@ -220,17 +236,9 @@ where mut request_response_protocols: Vec, peerset: PeersetHandle, ) -> Result { - // Extract protocol name and add to `request_response_protocols`. - let block_request_protocol_name = block_request_protocol_config.name.to_string(); - let state_request_protocol_name = state_request_protocol_config.name.to_string(); - let warp_sync_protocol_name = match warp_sync_protocol_config { - Some(config) => { - let name = config.name.to_string(); - request_response_protocols.push(config); - Some(name) - }, - None => None, - }; + if let Some(config) = warp_sync_protocol_config { + request_response_protocols.push(config); + } request_response_protocols.push(block_request_protocol_config); request_response_protocols.push(state_request_protocol_config); request_response_protocols.push(light_client_request_protocol_config); @@ -245,9 +253,6 @@ where peerset, )?, events: VecDeque::new(), - block_request_protocol_name, - state_request_protocol_name, - warp_sync_protocol_name, }) } @@ -338,121 +343,52 @@ fn reported_roles_to_observed_role(roles: Roles) -> ObservedRole { } } -impl NetworkBehaviourEventProcess for Behaviour -where - B: BlockT, - Client: HeaderBackend + 'static, -{ - fn inject_event(&mut self, event: void::Void) { +impl From for BehaviourOut { + fn from(event: void::Void) -> Self { void::unreachable(event) } } -impl NetworkBehaviourEventProcess> for Behaviour -where - B: BlockT, - Client: HeaderBackend + 'static, -{ - fn inject_event(&mut self, event: CustomMessageOutcome) { +impl From> for BehaviourOut { + fn from(event: CustomMessageOutcome) { match event { CustomMessageOutcome::BlockImport(origin, blocks) => - self.events.push_back(BehaviourOut::BlockImport(origin, blocks)), - CustomMessageOutcome::JustificationImport(origin, hash, nb, justification) => self - .events - .push_back(BehaviourOut::JustificationImport(origin, hash, nb, justification)), - CustomMessageOutcome::BlockRequest { target, request, pending_response } => { - match self.substrate.encode_block_request(&request) { - Ok(data) => { - self.request_responses.send_request( - &target, - &self.block_request_protocol_name, - data, - pending_response, - IfDisconnected::ImmediateError, - ); - }, - Err(err) => { - log::warn!( - target: "sync", - "Failed to encode block request {:?}: {:?}", - request, err - ); - }, - } - }, - CustomMessageOutcome::StateRequest { target, request, pending_response } => { - match self.substrate.encode_state_request(&request) { - Ok(data) => { - self.request_responses.send_request( - &target, - &self.state_request_protocol_name, - data, - pending_response, - IfDisconnected::ImmediateError, - ); - }, - Err(err) => { - log::warn!( - target: "sync", - "Failed to encode state request {:?}: {:?}", - request, err - ); - }, - } - }, + BehaviourOut::BlockImport(origin, blocks), + CustomMessageOutcome::JustificationImport(origin, hash, nb, justification) => + BehaviourOut::JustificationImport(origin, hash, nb, justification), + CustomMessageOutcome::BlockRequest { target, request, pending_response } => + BehaviourOut::BlockRequest { target, request, pending_response }, + CustomMessageOutcome::StateRequest { target, request, pending_response } => + BehaviourOut::StateRequest { target, request, pending_response }, CustomMessageOutcome::WarpSyncRequest { target, request, pending_response } => - match &self.warp_sync_protocol_name { - Some(name) => self.request_responses.send_request( - &target, - name, - request.encode(), - pending_response, - IfDisconnected::ImmediateError, - ), - None => { - log::warn!( - target: "sync", - "Trying to send warp sync request when no protocol is configured {:?}", - request, - ); - }, - }, + BehaviourOut::WarpSyncRequest { target, request, pending_response }, CustomMessageOutcome::NotificationStreamOpened { remote, protocol, negotiated_fallback, roles, notifications_sink, - } => { - self.events.push_back(BehaviourOut::NotificationStreamOpened { - remote, - protocol, - negotiated_fallback, - role: reported_roles_to_observed_role(roles), - notifications_sink, - }); - }, - CustomMessageOutcome::NotificationStreamReplaced { + } => BehaviourOut::NotificationStreamOpened { remote, protocol, + negotiated_fallback, + role: reported_roles_to_observed_role(roles), notifications_sink, - } => self.events.push_back(BehaviourOut::NotificationStreamReplaced { + }, + CustomMessageOutcome::NotificationStreamReplaced { remote, protocol, notifications_sink, - }), - CustomMessageOutcome::NotificationStreamClosed { remote, protocol } => self - .events - .push_back(BehaviourOut::NotificationStreamClosed { remote, protocol }), - CustomMessageOutcome::NotificationsReceived { remote, messages } => { - self.events.push_back(BehaviourOut::NotificationsReceived { remote, messages }); - }, - CustomMessageOutcome::PeerNewBest(_peer_id, _number) => {}, - CustomMessageOutcome::SyncConnected(peer_id) => - self.events.push_back(BehaviourOut::SyncConnected(peer_id)), + } => BehaviourOut::NotificationStreamReplaced { remote, protocol, notifications_sink }, + CustomMessageOutcome::NotificationStreamClosed { remote, protocol } => + BehaviourOut::NotificationStreamClosed { remote, protocol }, + CustomMessageOutcome::NotificationsReceived { remote, messages } => + BehaviourOut::NotificationsReceived { remote, messages }, + CustomMessageOutcome::PeerNewBest(_peer_id, _number) => BehaviourOut::None, + CustomMessageOutcome::SyncConnected(peer_id) => BehaviourOut::SyncConnected(peer_id), CustomMessageOutcome::SyncDisconnected(peer_id) => - self.events.push_back(BehaviourOut::SyncDisconnected(peer_id)), - CustomMessageOutcome::None => {}, + BehaviourOut::SyncDisconnected(peer_id), + CustomMessageOutcome::None => BehaviourOut::None, } } } diff --git a/client/network/src/service.rs b/client/network/src/service.rs index 4610b025dde0d..529b5089e0fc7 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -1317,6 +1317,15 @@ where peers_notifications_sinks: Arc>>, /// Controller for the handler of incoming and outgoing transactions. tx_handler_controller: transactions::TransactionsHandlerController, + /// Protocol name used to send out block requests via + /// [`request_responses::RequestResponsesBehaviour`]. + block_request_protocol_name: ProtocolName, + /// Protocol name used to send out state requests via + /// [`request_responses::RequestResponsesBehaviour`]. + state_request_protocol_name: ProtocolName, + /// Protocol name used to send out warp sync requests via + /// [`request_responses::RequestResponsesBehaviour`]. + warp_sync_protocol_name: Option, } impl Future for NetworkWorker @@ -1501,6 +1510,86 @@ where } this.import_queue.import_justifications(origin, hash, nb, justifications); }, + Poll::Ready(SwarmEvent::Behaviour(BehaviourOut::BlockRequest { + target, + request, + pending_response, + })) => { + match self + .network_service + .behaviour() + .user_protocol() + .encode_block_request(&request) + { + Ok(data) => { + self.network_service.behaviour().send_request( + &target, + &self.block_request_protocol_name, + data, + pending_response, + IfDisconnected::ImmediateError, + ); + }, + Err(err) => { + log::warn!( + target: "sync", + "Failed to encode block request {:?}: {:?}", + request, err + ); + }, + } + }, + Poll::Ready(SwarmEvent::Behaviour(BehaviourOut::StateRequest { + target, + request, + pending_response, + })) => { + match self + .network_service + .behaviour() + .user_protocol() + .encode_state_request(&request) + { + Ok(data) => { + self.network_service.behaviour().send_request( + &target, + &self.state_request_protocol_name, + data, + pending_response, + IfDisconnected::ImmediateError, + ); + }, + Err(err) => { + log::warn!( + target: "sync", + "Failed to encode state request {:?}: {:?}", + request, err + ); + }, + } + }, + Poll::Ready(SwarmEvent::Behaviour(BehaviourOut::WarpSyncRequest { + target, + request, + pending_response, + })) => { + match self.warp_sync_protocol_name { + Some(name) => self.network_service.behaviour().send_request( + &target, + &name, + request.encode(), + pending_response, + IfDisconnected::ImmediateError, + ), + None => { + log::warn!( + target: "sync", + "Trying to send warp sync request when no protocol is configured {:?}", + request, + ); + }, + } + }, Poll::Ready(SwarmEvent::Behaviour(BehaviourOut::InboundRequest { protocol, result, @@ -1704,6 +1793,9 @@ where this.event_streams.send(Event::Dht(event)); }, + Poll::Ready(SwarmEvent::Behaviour(BehaviourOut::None)) => { + // Ignored event from lower layers. + }, Poll::Ready(SwarmEvent::ConnectionEstablished { peer_id, endpoint, From f85584629f69708373f4d4b89526b44e3e9c614b Mon Sep 17 00:00:00 2001 From: Dmitry Markin Date: Thu, 8 Sep 2022 12:16:52 +0300 Subject: [PATCH 03/18] Get rid of `NetworkBehaviourEventProcess` in handling of `request_responses::Event` --- client/network/src/behaviour.rs | 38 +++++++++++++------------------- client/network/src/service.rs | 39 +++++++++++++++++++-------------- 2 files changed, 37 insertions(+), 40 deletions(-) diff --git a/client/network/src/behaviour.rs b/client/network/src/behaviour.rs index 73fd59555e01c..6adbe7b37df78 100644 --- a/client/network/src/behaviour.rs +++ b/client/network/src/behaviour.rs @@ -25,7 +25,6 @@ use crate::{ }; use bytes::Bytes; -use codec::Encode; use futures::channel::oneshot; use libp2p::{ core::{Multiaddr, PeerId, PublicKey}, @@ -46,7 +45,7 @@ use sc_network_common::{ request_responses::{IfDisconnected, ProtocolConfig, RequestFailure}, sync::{warp::WarpProofRequest, OpaqueBlockRequest, OpaqueStateRequest}, }; -use sc_peerset::PeersetHandle; +use sc_peerset::{PeersetHandle, ReputationChange}; use sp_blockchain::HeaderBackend; use sp_consensus::BlockOrigin; use sp_runtime::{ @@ -122,6 +121,12 @@ pub enum BehaviourOut { result: Result<(), RequestFailure>, }, + /// A request protocol handler issued reputation changes for the given peer. + ReputationChanges { + peer: PeerId, + changes: Vec, + }, + /// Opened a substream with the given node with the given notifications protocol. /// /// The protocol is always one of the notification protocols that have been registered. @@ -350,7 +355,7 @@ impl From for BehaviourOut { } impl From> for BehaviourOut { - fn from(event: CustomMessageOutcome) { + fn from(event: CustomMessageOutcome) -> Self { match event { CustomMessageOutcome::BlockImport(origin, blocks) => BehaviourOut::BlockImport(origin, blocks), @@ -393,28 +398,15 @@ impl From> for BehaviourOut { } } -impl NetworkBehaviourEventProcess for Behaviour -where - B: BlockT, - Client: HeaderBackend + 'static, -{ - fn inject_event(&mut self, event: request_responses::Event) { +impl From for BehaviourOut { + fn from(event: request_responses::Event) -> Self { match event { - request_responses::Event::InboundRequest { peer, protocol, result } => { - self.events.push_back(BehaviourOut::InboundRequest { peer, protocol, result }); - }, - request_responses::Event::RequestFinished { peer, protocol, duration, result } => { - self.events.push_back(BehaviourOut::RequestFinished { - peer, - protocol, - duration, - result, - }); - }, + request_responses::Event::InboundRequest { peer, protocol, result } => + BehaviourOut::InboundRequest { peer, protocol, result }, + request_responses::Event::RequestFinished { peer, protocol, duration, result } => + BehaviourOut::RequestFinished { peer, protocol, duration, result }, request_responses::Event::ReputationChanges { peer, changes } => - for change in changes { - self.substrate.report_peer(peer, change); - }, + BehaviourOut::ReputationChanges { peer, changes }, } } } diff --git a/client/network/src/service.rs b/client/network/src/service.rs index 529b5089e0fc7..b92b6ad46c7a9 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -1572,23 +1572,21 @@ where target, request, pending_response, - })) => { - match self.warp_sync_protocol_name { - Some(name) => self.network_service.behaviour().send_request( - &target, - &name, - request.encode(), - pending_response, - IfDisconnected::ImmediateError, - ), - None => { - log::warn!( - target: "sync", - "Trying to send warp sync request when no protocol is configured {:?}", - request, - ); - }, - } + })) => match self.warp_sync_protocol_name { + Some(name) => self.network_service.behaviour().send_request( + &target, + &name, + request.encode(), + pending_response, + IfDisconnected::ImmediateError, + ), + None => { + log::warn!( + target: "sync", + "Trying to send warp sync request when no protocol is configured {:?}", + request, + ); + }, }, Poll::Ready(SwarmEvent::Behaviour(BehaviourOut::InboundRequest { protocol, @@ -1665,6 +1663,13 @@ where }, } }, + Poll::Ready(SwarmEvent::Behaviour(BehaviourOut::ReputationChanges { + peer, + changes, + })) => + for change in changes { + self.network_service.behaviour().user_protocol().report_peer(peer, change); + }, Poll::Ready(SwarmEvent::Behaviour(BehaviourOut::RandomKademliaStarted( protocol, ))) => From 5cc73ba5762f78d3ffe2d24ac9e6b190b2c8e79e Mon Sep 17 00:00:00 2001 From: Dmitry Markin Date: Thu, 8 Sep 2022 16:58:03 +0300 Subject: [PATCH 04/18] Get rid of `NetworkBehaviourEventProcess` in handling of `peer_info::PeerInfoEvent` --- client/network/src/behaviour.rs | 48 ++++++++++++++++----------------- client/network/src/service.rs | 32 ++++++++++++++++++++++ 2 files changed, 56 insertions(+), 24 deletions(-) diff --git a/client/network/src/behaviour.rs b/client/network/src/behaviour.rs index 6adbe7b37df78..3018d6c3f31e2 100644 --- a/client/network/src/behaviour.rs +++ b/client/network/src/behaviour.rs @@ -213,6 +213,15 @@ pub enum BehaviourOut { /// No longer connected to a peer for syncing purposes. SyncDisconnected(PeerId), + /// We have obtained identity information from a peer, including the addresses it is listening + /// on. + PeerIdentify { + /// Id of the peer that has been identified. + peer_id: PeerId, + /// Information about the peer. + info: IdentifyInfo, + }, + /// Events generated by a DHT as a response to get_value or put_value requests as well as the /// request duration. Dht(DhtEvent, Duration), @@ -325,6 +334,17 @@ where &mut self.substrate } + /// Add a self-reported address of a remote peer to the k-buckets of the supported + /// DHTs (`supported_protocols`). + pub fn add_self_reported_address( + &self, + peer_id: &PeerId, + supported_protocols: impl Iterator>, + addr: Multiaddr, + ) { + self.discovery.add_self_reported_address(peer_id, supported_protocols, addr); + } + /// Start querying a record from the DHT. Will later produce either a `ValueFound` or a /// `ValueNotFound` event. pub fn get_value(&mut self, key: record::Key) { @@ -411,30 +431,10 @@ impl From for BehaviourOut { } } -impl NetworkBehaviourEventProcess for Behaviour -where - B: BlockT, - Client: HeaderBackend + 'static, -{ - fn inject_event(&mut self, event: peer_info::PeerInfoEvent) { - let peer_info::PeerInfoEvent::Identified { - peer_id, - info: IdentifyInfo { protocol_version, agent_version, mut listen_addrs, protocols, .. }, - } = event; - - if listen_addrs.len() > 30 { - debug!( - target: "sub-libp2p", - "Node {:?} has reported more than 30 addresses; it is identified by {:?} and {:?}", - peer_id, protocol_version, agent_version - ); - listen_addrs.truncate(30); - } - - for addr in listen_addrs { - self.discovery.add_self_reported_address(&peer_id, protocols.iter(), addr); - } - self.substrate.add_default_set_discovered_nodes(iter::once(peer_id)); +impl From for BehaviourOut { + fn from(event: peer_info::PeerInfoEvent) -> Self { + let peer_info::PeerInfoEvent::Identified { peer_id, info } = event; + BehaviourOut::PeerIdentify { peer_id, info } } } diff --git a/client/network/src/service.rs b/client/network/src/service.rs index b92b6ad46c7a9..bbbdae34ca37f 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -49,6 +49,7 @@ use libp2p::{ kad::record::Key as KademliaKey, multiaddr, ping::Failure as PingFailure, + protocol::IdentifyInfo, swarm::{ AddressScore, ConnectionError, ConnectionLimits, DialError, NetworkBehaviour, PendingConnectionError, Swarm, SwarmBuilder, SwarmEvent, @@ -1670,6 +1671,37 @@ where for change in changes { self.network_service.behaviour().user_protocol().report_peer(peer, change); }, + Poll::Ready(SwarmEvent::Behaviour(BehaviourOut::PeerIdentify { + peer_id, + info: + IdentifyInfo { + protocol_version, + agent_version, + mut listen_addrs, + protocols, + .. + }, + })) => { + if listen_addrs.len() > 30 { + debug!( + target: "sub-libp2p", + "Node {:?} has reported more than 30 addresses; it is identified by {:?} and {:?}", + peer_id, protocol_version, agent_version + ); + listen_addrs.truncate(30); + } + for addr in listen_addrs { + self.network_service.behaviour().add_self_reported_address( + &peer_id, + protocols.iter(), + addr, + ); + } + self.network_service + .behaviour() + .user_protocol() + .add_default_set_discovered_nodes(iter::once(peer_id)); + }, Poll::Ready(SwarmEvent::Behaviour(BehaviourOut::RandomKademliaStarted( protocol, ))) => From c72c48be2ed24c10bbf5265f7dd052e6afe39ad0 Mon Sep 17 00:00:00 2001 From: Dmitry Markin Date: Thu, 8 Sep 2022 17:32:18 +0300 Subject: [PATCH 05/18] Get rid of `NetworkBehaviourEventProcess` in handling of `DiscoveryOut` --- client/network/src/behaviour.rs | 78 ++++++++++----------------------- client/network/src/service.rs | 23 +++++++--- 2 files changed, 40 insertions(+), 61 deletions(-) diff --git a/client/network/src/behaviour.rs b/client/network/src/behaviour.rs index 3018d6c3f31e2..4b99bcb7c0414 100644 --- a/client/network/src/behaviour.rs +++ b/client/network/src/behaviour.rs @@ -30,10 +30,9 @@ use libp2p::{ core::{Multiaddr, PeerId, PublicKey}, identify::IdentifyInfo, kad::record, - swarm::{behaviour::toggle::Toggle, NetworkBehaviour, NetworkBehaviourAction, PollParameters}, + swarm::behaviour::toggle::Toggle, NetworkBehaviour, }; -use log::debug; use sc_consensus::import_queue::{IncomingBlock, Origin}; use sc_network_common::{ @@ -54,8 +53,6 @@ use sp_runtime::{ }; use std::{ collections::{HashSet, VecDeque}, - iter, - task::{Context, Poll}, time::Duration, }; @@ -92,7 +89,7 @@ pub enum BehaviourOut { JustificationImport(Origin, B::Hash, NumberFor, Justifications), /// Started a random iterative Kademlia discovery query. - RandomKademliaStarted(ProtocolId), + RandomKademliaStarted(Vec), /// We have received a request from a peer and answered it. /// @@ -222,6 +219,9 @@ pub enum BehaviourOut { info: IdentifyInfo, }, + /// We have learned about the existence of a node on the default set. + Discovered(PeerId), + /// Events generated by a DHT as a response to get_value or put_value requests as well as the /// request duration. Dht(DhtEvent, Duration), @@ -368,13 +368,13 @@ fn reported_roles_to_observed_role(roles: Roles) -> ObservedRole { } } -impl From for BehaviourOut { +impl From for BehaviourOut { fn from(event: void::Void) -> Self { void::unreachable(event) } } -impl From> for BehaviourOut { +impl From> for BehaviourOut { fn from(event: CustomMessageOutcome) -> Self { match event { CustomMessageOutcome::BlockImport(origin, blocks) => @@ -418,7 +418,7 @@ impl From> for BehaviourOut { } } -impl From for BehaviourOut { +impl From for BehaviourOut { fn from(event: request_responses::Event) -> Self { match event { request_responses::Event::InboundRequest { peer, protocol, result } => @@ -431,66 +431,34 @@ impl From for BehaviourOut { } } -impl From for BehaviourOut { +impl From for BehaviourOut { fn from(event: peer_info::PeerInfoEvent) -> Self { let peer_info::PeerInfoEvent::Identified { peer_id, info } = event; BehaviourOut::PeerIdentify { peer_id, info } } } -impl NetworkBehaviourEventProcess for Behaviour -where - B: BlockT, - Client: HeaderBackend + 'static, -{ - fn inject_event(&mut self, out: DiscoveryOut) { - match out { +impl From for BehaviourOut { + fn from(event: DiscoveryOut) -> Self { + match event { DiscoveryOut::UnroutablePeer(_peer_id) => { // Obtaining and reporting listen addresses for unroutable peers back // to Kademlia is handled by the `Identify` protocol, part of the // `PeerInfoBehaviour`. See the `NetworkBehaviourEventProcess` // implementation for `PeerInfoEvent`. + BehaviourOut::None }, - DiscoveryOut::Discovered(peer_id) => { - self.substrate.add_default_set_discovered_nodes(iter::once(peer_id)); - }, - DiscoveryOut::ValueFound(results, duration) => { - self.events - .push_back(BehaviourOut::Dht(DhtEvent::ValueFound(results), duration)); - }, - DiscoveryOut::ValueNotFound(key, duration) => { - self.events.push_back(BehaviourOut::Dht(DhtEvent::ValueNotFound(key), duration)); - }, - DiscoveryOut::ValuePut(key, duration) => { - self.events.push_back(BehaviourOut::Dht(DhtEvent::ValuePut(key), duration)); - }, - DiscoveryOut::ValuePutFailed(key, duration) => { - self.events - .push_back(BehaviourOut::Dht(DhtEvent::ValuePutFailed(key), duration)); - }, + DiscoveryOut::Discovered(peer_id) => BehaviourOut::Discovered(peer_id), + DiscoveryOut::ValueFound(results, duration) => + BehaviourOut::Dht(DhtEvent::ValueFound(results), duration), + DiscoveryOut::ValueNotFound(key, duration) => + BehaviourOut::Dht(DhtEvent::ValueNotFound(key), duration), + DiscoveryOut::ValuePut(key, duration) => + BehaviourOut::Dht(DhtEvent::ValuePut(key), duration), + DiscoveryOut::ValuePutFailed(key, duration) => + BehaviourOut::Dht(DhtEvent::ValuePutFailed(key), duration), DiscoveryOut::RandomKademliaStarted(protocols) => - for protocol in protocols { - self.events.push_back(BehaviourOut::RandomKademliaStarted(protocol)); - }, + BehaviourOut::RandomKademliaStarted(protocols), } } } - -impl Behaviour -where - B: BlockT, - Client: HeaderBackend + 'static, -{ - fn poll( - &mut self, - _cx: &mut Context, - _: &mut impl PollParameters, - ) -> Poll, ::ConnectionHandler>> - { - if let Some(event) = self.events.pop_front() { - return Poll::Ready(NetworkBehaviourAction::GenerateEvent(event)) - } - - Poll::Pending - } -} diff --git a/client/network/src/service.rs b/client/network/src/service.rs index bbbdae34ca37f..0bf45e8c996b3 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -49,7 +49,7 @@ use libp2p::{ kad::record::Key as KademliaKey, multiaddr, ping::Failure as PingFailure, - protocol::IdentifyInfo, + identify::IdentifyInfo, swarm::{ AddressScore, ConnectionError, ConnectionLimits, DialError, NetworkBehaviour, PendingConnectionError, Swarm, SwarmBuilder, SwarmEvent, @@ -482,6 +482,9 @@ where tx_handler_controller, metrics, boot_node_ids, + block_request_protocol_name: params.block_request_protocol_config.name, + state_request_protocol_name: params.state_request_protocol_config.name, + warp_sync_protocol_name: params.warp_sync_protocol_config.map(|c| c.name), }) } @@ -1702,14 +1705,22 @@ where .user_protocol() .add_default_set_discovered_nodes(iter::once(peer_id)); }, + Poll::Ready(SwarmEvent::Behaviour(BehaviourOut::Discovered(peer_id))) => { + self.network_service + .behaviour() + .user_protocol() + .add_default_set_discovered_nodes(iter::once(peer_id)); + }, Poll::Ready(SwarmEvent::Behaviour(BehaviourOut::RandomKademliaStarted( - protocol, + protocols, ))) => if let Some(metrics) = this.metrics.as_ref() { - metrics - .kademlia_random_queries_total - .with_label_values(&[protocol.as_ref()]) - .inc(); + for protocol in protocols { + metrics + .kademlia_random_queries_total + .with_label_values(&[protocol.as_ref()]) + .inc(); + } }, Poll::Ready(SwarmEvent::Behaviour(BehaviourOut::NotificationStreamOpened { remote, From fcb39ede1432145700b1edfcacdf4c86711a9c7c Mon Sep 17 00:00:00 2001 From: Dmitry Markin Date: Thu, 8 Sep 2022 17:49:18 +0300 Subject: [PATCH 06/18] Get rid of `poll()` method in `Bahaviour` --- client/network/src/behaviour.rs | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/client/network/src/behaviour.rs b/client/network/src/behaviour.rs index 4b99bcb7c0414..479f4348ebe11 100644 --- a/client/network/src/behaviour.rs +++ b/client/network/src/behaviour.rs @@ -52,7 +52,7 @@ use sp_runtime::{ Justifications, }; use std::{ - collections::{HashSet, VecDeque}, + collections::HashSet, time::Duration, }; @@ -60,7 +60,7 @@ pub use crate::request_responses::{InboundFailure, OutboundFailure, RequestId, R /// General behaviour of the network. Combines all protocols together. #[derive(NetworkBehaviour)] -#[behaviour(out_event = "BehaviourOut", poll_method = "poll", event_process = true)] +#[behaviour(out_event = "BehaviourOut")] pub struct Behaviour where B: BlockT, @@ -77,10 +77,6 @@ where bitswap: Toggle>, /// Generic request-response protocols. request_responses: request_responses::RequestResponsesBehaviour, - - /// Queue of events to produce for the outside. - #[behaviour(ignore)] - events: VecDeque>, } /// Event generated by `Behaviour`. @@ -266,7 +262,6 @@ where request_response_protocols.into_iter(), peerset, )?, - events: VecDeque::new(), }) } From e52c049a6a5b844be29fbc9bb471358f2e9d50d5 Mon Sep 17 00:00:00 2001 From: Dmitry Markin Date: Thu, 8 Sep 2022 18:03:36 +0300 Subject: [PATCH 07/18] minor: comments --- client/network/src/behaviour.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/network/src/behaviour.rs b/client/network/src/behaviour.rs index 479f4348ebe11..a9d1ba39331a2 100644 --- a/client/network/src/behaviour.rs +++ b/client/network/src/behaviour.rs @@ -439,8 +439,8 @@ impl From for BehaviourOut { DiscoveryOut::UnroutablePeer(_peer_id) => { // Obtaining and reporting listen addresses for unroutable peers back // to Kademlia is handled by the `Identify` protocol, part of the - // `PeerInfoBehaviour`. See the `NetworkBehaviourEventProcess` - // implementation for `PeerInfoEvent`. + // `PeerInfoBehaviour`. See the `From` + // implementation. BehaviourOut::None }, DiscoveryOut::Discovered(peer_id) => BehaviourOut::Discovered(peer_id), From 228557b65d3c3217341647145a1f78385e6acd64 Mon Sep 17 00:00:00 2001 From: Dmitry Markin Date: Thu, 15 Sep 2022 13:59:04 +0300 Subject: [PATCH 08/18] Upgrade libp2p to 0.49.0 (unreleased) --- Cargo.lock | 114 ++++++-------------------- client/authority-discovery/Cargo.toml | 2 +- client/cli/Cargo.toml | 2 +- client/consensus/common/Cargo.toml | 2 +- client/network-gossip/Cargo.toml | 2 +- client/network/Cargo.toml | 2 +- client/network/bitswap/Cargo.toml | 2 +- client/network/common/Cargo.toml | 2 +- client/network/light/Cargo.toml | 2 +- client/network/sync/Cargo.toml | 2 +- client/network/test/Cargo.toml | 2 +- client/offchain/Cargo.toml | 2 +- client/peerset/Cargo.toml | 2 +- client/telemetry/Cargo.toml | 2 +- 14 files changed, 40 insertions(+), 100 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ae45ad3df38d5..14d635d797ab9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -645,7 +645,7 @@ version = "0.7.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b" dependencies = [ - "block-padding 0.1.5", + "block-padding", "byte-tools", "byteorder", "generic-array 0.12.4", @@ -657,7 +657,6 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "block-padding 0.2.1", "generic-array 0.14.4", ] @@ -679,12 +678,6 @@ dependencies = [ "byte-tools", ] -[[package]] -name = "block-padding" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae" - [[package]] name = "blocking" version = "1.0.2" @@ -3035,6 +3028,24 @@ dependencies = [ "windows", ] +[[package]] +name = "if-watch" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "065c008e570a43c00de6aed9714035e5ea6a498c255323db9091722af6ee67dd" +dependencies = [ + "async-io", + "core-foundation", + "fnv", + "futures", + "if-addrs", + "ipnet", + "log", + "rtnetlink", + "system-configuration", + "windows", +] + [[package]] name = "impl-codec" version = "0.6.0" @@ -3541,9 +3552,7 @@ checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" [[package]] name = "libp2p" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94c996fe5bfdba47f5a5af71d48ecbe8cec900b7b97391cc1d3ba1afb0e2d3b6" +version = "0.49.0" dependencies = [ "bytes", "futures", @@ -3586,8 +3595,6 @@ dependencies = [ [[package]] name = "libp2p-autonat" version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "994920fe343302fec9d8f4b86fca78cc19817334b8eaff89f5e5bc3441a6dbae" dependencies = [ "async-trait", "futures", @@ -3605,8 +3612,6 @@ dependencies = [ [[package]] name = "libp2p-core" version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1fff5bd889c82a0aec668f2045edd066f559d4e5c40354e5a4c77ac00caac38" dependencies = [ "asn1_der", "bs58", @@ -3640,8 +3645,6 @@ dependencies = [ [[package]] name = "libp2p-deflate" version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282a994808e6a0bd7a920978c174bd8ab1c3cc33b6616a727311fd90dafa2245" dependencies = [ "flate2", "futures", @@ -3651,8 +3654,6 @@ dependencies = [ [[package]] name = "libp2p-dns" version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cb3c16e3bb2f76c751ae12f0f26e788c89d353babdded40411e7923f01fc978" dependencies = [ "async-std-resolver", "futures", @@ -3666,8 +3667,6 @@ dependencies = [ [[package]] name = "libp2p-floodsub" version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6febd4da35cb9ada02f8d92bdb41f479d2b3452313ecffaf7448958a94c42060" dependencies = [ "cuckoofilter", "fnv", @@ -3684,8 +3683,6 @@ dependencies = [ [[package]] name = "libp2p-gossipsub" version = "0.41.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2185aac44b162c95180ae4ddd1f4dfb705217ea1cb8e16bdfc70d31496fd80fa" dependencies = [ "asynchronous-codec", "base64", @@ -3712,8 +3709,6 @@ dependencies = [ [[package]] name = "libp2p-identify" version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f19440c84b509d69b13f0c9c28caa9bd3a059d25478527e937e86761f25c821e" dependencies = [ "asynchronous-codec", "futures", @@ -3733,8 +3728,6 @@ dependencies = [ [[package]] name = "libp2p-kad" version = "0.40.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f840579eed6503ec8a7a0c7e919bcd645df11c991be8e54640ff09f7109b8a43" dependencies = [ "arrayvec 0.7.2", "asynchronous-codec", @@ -3761,14 +3754,12 @@ dependencies = [ [[package]] name = "libp2p-mdns" version = "0.40.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff531fbceee32be0e39409e985c5536897e4578addb1c702fd4973e2c381fc76" dependencies = [ "async-io", "data-encoding", "dns-parser", "futures", - "if-watch", + "if-watch 1.1.1", "lazy_static", "libp2p-core", "libp2p-swarm", @@ -3782,8 +3773,6 @@ dependencies = [ [[package]] name = "libp2p-metrics" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a74ab339e8b5d989e8c1000a78adb5c064a6319245bb22d1e70b415ec18c39b8" dependencies = [ "libp2p-core", "libp2p-gossipsub", @@ -3798,8 +3787,6 @@ dependencies = [ [[package]] name = "libp2p-mplex" version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce53169351226ee0eb18ee7bef8d38f308fa8ad7244f986ae776390c0ae8a44d" dependencies = [ "asynchronous-codec", "bytes", @@ -3816,8 +3803,6 @@ dependencies = [ [[package]] name = "libp2p-noise" version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cb0f939a444b06779ce551b3d78ebf13970ac27906ada452fd70abd160b09b8" dependencies = [ "bytes", "curve25519-dalek 3.0.2", @@ -3838,8 +3823,6 @@ dependencies = [ [[package]] name = "libp2p-ping" version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76a36f78e107bb55330341018874c5168851f455f8bdc3e0cd44e6c84e0a7069" dependencies = [ "futures", "futures-timer", @@ -3854,8 +3837,6 @@ dependencies = [ [[package]] name = "libp2p-plaintext" version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "328e8c654a55ac7f093eb96dfd0386244dd337f2bd2822dc019522b743ea8add" dependencies = [ "asynchronous-codec", "bytes", @@ -3871,22 +3852,18 @@ dependencies = [ [[package]] name = "libp2p-pnet" version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f1a458bbda880107b5b36fcb9b5a1ef0c329685da0e203ed692a8ebe64cc92c" dependencies = [ "futures", "log", "pin-project", "rand 0.7.3", "salsa20", - "sha3 0.9.1", + "sha3", ] [[package]] name = "libp2p-relay" version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56d9c1390382ab8938f490783dfb6e7c7b559f6c6f2e1bef92fdbf57d3cd4aa1" dependencies = [ "asynchronous-codec", "bytes", @@ -3911,8 +3888,6 @@ dependencies = [ [[package]] name = "libp2p-rendezvous" version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5cac3ef547c1fd807aa903497afb928afa3d09c3b7c6a6da2b8a6f1988968f5" dependencies = [ "asynchronous-codec", "bimap", @@ -3934,8 +3909,6 @@ dependencies = [ [[package]] name = "libp2p-request-response" version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2344aa93dc8b1de90e26091d7cf63044519bbea7b0b03d829f350563a2dd26f7" dependencies = [ "async-trait", "bytes", @@ -3952,8 +3925,6 @@ dependencies = [ [[package]] name = "libp2p-swarm" version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70ad2db60c06603606b54b58e4247e32efec87a93cb4387be24bf32926c600f2" dependencies = [ "either", "fnv", @@ -3971,9 +3942,7 @@ dependencies = [ [[package]] name = "libp2p-swarm-derive" -version = "0.30.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1f02622b9dd150011b4eeec387f8bd013189a2f27da08ba363e7c6e606d77a48" +version = "0.30.1" dependencies = [ "heck", "quote", @@ -3982,15 +3951,12 @@ dependencies = [ [[package]] name = "libp2p-tcp" -version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9675432b4c94b3960f3d2c7e57427b81aea92aab67fd0eebef09e2ae0ff54895" +version = "0.37.0" dependencies = [ "async-io", "futures", "futures-timer", - "if-watch", - "ipnet", + "if-watch 2.0.0", "libc", "libp2p-core", "log", @@ -4000,8 +3966,6 @@ dependencies = [ [[package]] name = "libp2p-uds" version = "0.35.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ec5aa09dfcdb5867eda38f201a076716754574e592fb178cd798d4bd87592ef" dependencies = [ "async-std", "futures", @@ -4012,8 +3976,6 @@ dependencies = [ [[package]] name = "libp2p-wasm-ext" version = "0.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "feaafcfaeab981be0efbd872548c72a941496adaa928dadd5fd74b36e3faa481" dependencies = [ "futures", "js-sys", @@ -4026,8 +3988,6 @@ dependencies = [ [[package]] name = "libp2p-websocket" version = "0.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de8a9e825cc03f2fc194d2e1622113d7fe18e1c7f4458a582b83140c9b9aea27" dependencies = [ "either", "futures", @@ -4045,8 +4005,6 @@ dependencies = [ [[package]] name = "libp2p-yamux" version = "0.40.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b74ec8dc042b583f0b2b93d52917f3b374c1e4b1cfa79ee74c7672c41257694c" dependencies = [ "futures", "libp2p-core", @@ -4459,7 +4417,7 @@ dependencies = [ "digest 0.10.3", "multihash-derive", "sha2 0.10.2", - "sha3 0.10.0", + "sha3", "unsigned-varint", ] @@ -4486,8 +4444,6 @@ checksum = "1255076139a83bb467426e7f8d0134968a8118844faa755985e077cf31850333" [[package]] name = "multistream-select" version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "363a84be6453a70e63513660f4894ef815daf88e3356bffcda9ca27d810ce83b" dependencies = [ "bytes", "futures", @@ -7125,8 +7081,6 @@ dependencies = [ [[package]] name = "prost-codec" version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "011ae9ff8359df7915f97302d591cdd9e0e27fbd5a4ddc5bd13b71079bb20987" dependencies = [ "asynchronous-codec", "bytes", @@ -7725,8 +7679,6 @@ dependencies = [ [[package]] name = "rw-stream-sink" version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26338f5e09bb721b85b135ea05af7767c90b52f6de4f087d4f4a3a9d64e7dc04" dependencies = [ "futures", "pin-project", @@ -9332,18 +9284,6 @@ dependencies = [ "digest 0.10.3", ] -[[package]] -name = "sha3" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809" -dependencies = [ - "block-buffer 0.9.0", - "digest 0.9.0", - "keccak", - "opaque-debug 0.3.0", -] - [[package]] name = "sha3" version = "0.10.0" @@ -9782,7 +9722,7 @@ dependencies = [ "byteorder", "digest 0.10.3", "sha2 0.10.2", - "sha3 0.10.0", + "sha3", "sp-std", "twox-hash", ] diff --git a/client/authority-discovery/Cargo.toml b/client/authority-discovery/Cargo.toml index 62053efc36942..2a3403516da66 100644 --- a/client/authority-discovery/Cargo.toml +++ b/client/authority-discovery/Cargo.toml @@ -21,7 +21,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", default-features = futures = "0.3.21" futures-timer = "3.0.1" ip_network = "0.4.1" -libp2p = { version = "0.48.0", default-features = false, features = ["kad"] } +libp2p = { version = "0.49.0", default-features = false, features = ["kad"] } log = "0.4.17" prost = "0.10" rand = "0.7.2" diff --git a/client/cli/Cargo.toml b/client/cli/Cargo.toml index 907400f99568e..70472542be137 100644 --- a/client/cli/Cargo.toml +++ b/client/cli/Cargo.toml @@ -18,7 +18,7 @@ clap = { version = "3.1.18", features = ["derive"] } fdlimit = "0.2.1" futures = "0.3.21" hex = "0.4.2" -libp2p = "0.48.0" +libp2p = "0.49.0" log = "0.4.17" names = { version = "0.13.0", default-features = false } parity-scale-codec = "3.0.0" diff --git a/client/consensus/common/Cargo.toml b/client/consensus/common/Cargo.toml index f58470590a25e..d5745665a79fd 100644 --- a/client/consensus/common/Cargo.toml +++ b/client/consensus/common/Cargo.toml @@ -16,7 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"] async-trait = "0.1.57" futures = { version = "0.3.21", features = ["thread-pool"] } futures-timer = "3.0.1" -libp2p = { version = "0.48.0", default-features = false } +libp2p = { version = "0.49.0", default-features = false } log = "0.4.17" parking_lot = "0.12.1" serde = { version = "1.0", features = ["derive"] } diff --git a/client/network-gossip/Cargo.toml b/client/network-gossip/Cargo.toml index d85a7305dd7e5..e84013fbfe436 100644 --- a/client/network-gossip/Cargo.toml +++ b/client/network-gossip/Cargo.toml @@ -17,7 +17,7 @@ targets = ["x86_64-unknown-linux-gnu"] ahash = "0.7.6" futures = "0.3.21" futures-timer = "3.0.1" -libp2p = { version = "0.48.0", default-features = false } +libp2p = { version = "0.49.0", default-features = false } log = "0.4.17" lru = "0.7.5" tracing = "0.1.29" diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index 0b48861c67da7..b1f3d190f6002 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -26,7 +26,7 @@ futures = "0.3.21" futures-timer = "3.0.2" hex = "0.4.0" ip_network = "0.4.1" -libp2p = "0.48.0" +libp2p = "0.49.0" linked_hash_set = "0.1.3" linked-hash-map = "0.5.4" log = "0.4.17" diff --git a/client/network/bitswap/Cargo.toml b/client/network/bitswap/Cargo.toml index fc598a0d00a73..f60e21b4429fb 100644 --- a/client/network/bitswap/Cargo.toml +++ b/client/network/bitswap/Cargo.toml @@ -19,7 +19,7 @@ prost-build = "0.11" [dependencies] cid = "0.8.6" futures = "0.3.21" -libp2p = "0.48.0" +libp2p = "0.49.0" log = "0.4.17" prost = "0.11" thiserror = "1.0" diff --git a/client/network/common/Cargo.toml b/client/network/common/Cargo.toml index f6468effb484e..87ffaccf17260 100644 --- a/client/network/common/Cargo.toml +++ b/client/network/common/Cargo.toml @@ -24,7 +24,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", features = [ "derive", ] } futures = "0.3.21" -libp2p = "0.48.0" +libp2p = "0.49.0" smallvec = "1.8.0" sc-consensus = { version = "0.10.0-dev", path = "../../consensus/common" } sc-peerset = { version = "4.0.0-dev", path = "../../peerset" } diff --git a/client/network/light/Cargo.toml b/client/network/light/Cargo.toml index 0673b6f33d84b..663a4436b5614 100644 --- a/client/network/light/Cargo.toml +++ b/client/network/light/Cargo.toml @@ -22,7 +22,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", features = [ ] } futures = "0.3.21" hex = "0.4.0" -libp2p = "0.48.0" +libp2p = "0.49.0" log = "0.4.16" prost = "0.10" sp-blockchain = { version = "4.0.0-dev", path = "../../../primitives/blockchain" } diff --git a/client/network/sync/Cargo.toml b/client/network/sync/Cargo.toml index a2d9835abdffc..8f003b4228a6f 100644 --- a/client/network/sync/Cargo.toml +++ b/client/network/sync/Cargo.toml @@ -22,7 +22,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", features = [ ] } futures = "0.3.21" hex = "0.4.0" -libp2p = "0.48.0" +libp2p = "0.49.0" log = "0.4.17" lru = "0.7.5" prost = "0.10" diff --git a/client/network/test/Cargo.toml b/client/network/test/Cargo.toml index 27ffdc2996c34..30a57bc1b5171 100644 --- a/client/network/test/Cargo.toml +++ b/client/network/test/Cargo.toml @@ -17,7 +17,7 @@ async-std = "1.11.0" async-trait = "0.1.57" futures = "0.3.21" futures-timer = "3.0.1" -libp2p = { version = "0.48.0", default-features = false } +libp2p = { version = "0.49.0", default-features = false } log = "0.4.17" parking_lot = "0.12.1" rand = "0.7.2" diff --git a/client/offchain/Cargo.toml b/client/offchain/Cargo.toml index f1fa6d34ef658..5ea6490599a81 100644 --- a/client/offchain/Cargo.toml +++ b/client/offchain/Cargo.toml @@ -21,7 +21,7 @@ futures-timer = "3.0.2" hex = "0.4" hyper = { version = "0.14.16", features = ["stream", "http2"] } hyper-rustls = { version = "0.23.0", features = ["http2"] } -libp2p = { version = "0.48.0", default-features = false } +libp2p = { version = "0.49.0", default-features = false } num_cpus = "1.13" once_cell = "1.8" parking_lot = "0.12.1" diff --git a/client/peerset/Cargo.toml b/client/peerset/Cargo.toml index c2f1255d2d488..ade2bc3d78d03 100644 --- a/client/peerset/Cargo.toml +++ b/client/peerset/Cargo.toml @@ -15,7 +15,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] futures = "0.3.21" -libp2p = { version = "0.48.0", default-features = false } +libp2p = { version = "0.49.0", default-features = false } log = "0.4.17" serde_json = "1.0.85" wasm-timer = "0.2" diff --git a/client/telemetry/Cargo.toml b/client/telemetry/Cargo.toml index aff61b0811bdf..4d3be138c78a6 100644 --- a/client/telemetry/Cargo.toml +++ b/client/telemetry/Cargo.toml @@ -16,7 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"] [dependencies] chrono = "0.4.19" futures = "0.3.21" -libp2p = { version = "0.48.0", default-features = false, features = ["dns-async-std", "tcp-async-io", "wasm-ext", "websocket"] } +libp2p = { version = "0.49.0", default-features = false, features = ["dns-async-std", "tcp-async-io", "wasm-ext", "websocket"] } log = "0.4.17" parking_lot = "0.12.1" pin-project = "1.0.10" From f5213617e0837c8e8203157c8ff021c115367ad8 Mon Sep 17 00:00:00 2001 From: Dmitry Markin Date: Thu, 15 Sep 2022 16:52:01 +0300 Subject: [PATCH 09/18] Support multiple Kad protocol names --- client/network/src/behaviour.rs | 9 +++---- client/network/src/discovery.rs | 43 ++++++++++++++++++++------------- client/network/src/service.rs | 21 +++++++++------- 3 files changed, 41 insertions(+), 32 deletions(-) diff --git a/client/network/src/behaviour.rs b/client/network/src/behaviour.rs index 30ed84838cf14..34969a7758c3c 100644 --- a/client/network/src/behaviour.rs +++ b/client/network/src/behaviour.rs @@ -49,10 +49,7 @@ use sp_runtime::{ traits::{Block as BlockT, NumberFor}, Justifications, }; -use std::{ - collections::HashSet, - time::Duration, -}; +use std::{collections::HashSet, time::Duration}; pub use crate::request_responses::{InboundFailure, OutboundFailure, RequestId, ResponseFailure}; @@ -326,9 +323,9 @@ where /// Add a self-reported address of a remote peer to the k-buckets of the supported /// DHTs (`supported_protocols`). pub fn add_self_reported_address( - &self, + &mut self, peer_id: &PeerId, - supported_protocols: impl Iterator>, + supported_protocols: &[impl AsRef<[u8]>], addr: Multiaddr, ) { self.discovery.add_self_reported_address(peer_id, supported_protocols, addr); diff --git a/client/network/src/discovery.rs b/client/network/src/discovery.rs index ab93662968dc2..1e0d33a6a6e63 100644 --- a/client/network/src/discovery.rs +++ b/client/network/src/discovery.rs @@ -47,6 +47,7 @@ //! of a node's address, you must call `add_self_reported_address`. use crate::utils::LruHashSet; +use bytes::Bytes; use futures::prelude::*; use futures_timer::Delay; use ip_network::IpNetwork; @@ -199,7 +200,7 @@ impl DiscoveryConfig { let proto_name = protocol_name_from_protocol_id(&protocol_id); let mut config = KademliaConfig::default(); - config.set_protocol_name(proto_name); + config.set_protocol_names(std::iter::once(proto_name.into()).collect()); // By default Kademlia attempts to insert all peers into its routing table once a // dialing attempt succeeds. In order to control which peer is added, disable the // auto-insertion and instead add peers manually. @@ -321,7 +322,7 @@ impl DiscoveryBehaviour { pub fn add_self_reported_address( &mut self, peer_id: &PeerId, - supported_protocols: impl Iterator>, + supported_protocols: &[impl AsRef<[u8]>], addr: Multiaddr, ) { if !self.allow_non_globals_in_dht && !self.can_add_to_dht(&addr) { @@ -330,16 +331,25 @@ impl DiscoveryBehaviour { } let mut added = false; - for protocol in supported_protocols { - for kademlia in self.kademlias.values_mut() { - if protocol.as_ref() == kademlia.protocol_name() { - trace!( - target: "sub-libp2p", - "Adding self-reported address {} from {} to Kademlia DHT {}.", - addr, peer_id, String::from_utf8_lossy(kademlia.protocol_name()), - ); - kademlia.add_address(peer_id, addr.clone()); - added = true; + for kademlia in self.kademlias.values_mut() { + let kad_protocols: Vec<_> = kademlia + .protocol_names() + .iter() + .map(AsRef::as_ref) + .map(Bytes::copy_from_slice) + .collect(); + 'kad: for kad_protocol in kad_protocols { + for supported_protocol in supported_protocols { + if supported_protocol.as_ref() == kad_protocol { + trace!( + target: "sub-libp2p", + "Adding self-reported address {} from {} to Kademlia DHT {}.", + addr, peer_id, String::from_utf8_lossy(&kad_protocol), + ); + kademlia.add_address(peer_id, addr.clone()); + added = true; + break 'kad + } } } } @@ -1101,8 +1111,7 @@ mod tests { .behaviour_mut() .add_self_reported_address( &other, - [protocol_name_from_protocol_id(&protocol_id)] - .iter(), + &[protocol_name_from_protocol_id(&protocol_id)], addr, ); @@ -1157,7 +1166,7 @@ mod tests { // Add remote peer with unsupported protocol. discovery.add_self_reported_address( &remote_peer_id, - [protocol_name_from_protocol_id(&unsupported_protocol_id)].iter(), + &[protocol_name_from_protocol_id(&unsupported_protocol_id)], remote_addr.clone(), ); @@ -1174,7 +1183,7 @@ mod tests { // Add remote peer with supported protocol. discovery.add_self_reported_address( &remote_peer_id, - [protocol_name_from_protocol_id(&supported_protocol_id)].iter(), + &[protocol_name_from_protocol_id(&supported_protocol_id)], remote_addr.clone(), ); @@ -1213,7 +1222,7 @@ mod tests { // Add remote peer with `protocol_a` only. discovery.add_self_reported_address( &remote_peer_id, - [protocol_name_from_protocol_id(&protocol_a)].iter(), + &[protocol_name_from_protocol_id(&protocol_a)], remote_addr.clone(), ); diff --git a/client/network/src/service.rs b/client/network/src/service.rs index d1549750c17dd..5d5577124df8b 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -46,10 +46,10 @@ use codec::Encode as _; use futures::{channel::oneshot, prelude::*}; use libp2p::{ core::{either::EitherError, upgrade, ConnectedPoint, Executor}, + identify::IdentifyInfo, kad::record::Key as KademliaKey, multiaddr, ping::Failure as PingFailure, - identify::IdentifyInfo, swarm::{ AddressScore, ConnectionError, ConnectionLimits, DialError, NetworkBehaviour, PendingConnectionError, Swarm, SwarmBuilder, SwarmEvent, @@ -283,6 +283,11 @@ where let num_connected = Arc::new(AtomicUsize::new(0)); let is_major_syncing = Arc::new(AtomicBool::new(false)); + let block_request_protocol_name = params.block_request_protocol_config.name.clone(); + let state_request_protocol_name = params.state_request_protocol_config.name.clone(); + let warp_sync_protocol_name = + params.warp_sync_protocol_config.as_ref().map(|c| c.name.clone()); + // Build the swarm. let (mut swarm, bandwidth): (Swarm>, _) = { let user_agent = format!( @@ -481,9 +486,9 @@ where tx_handler_controller, metrics, boot_node_ids, - block_request_protocol_name: params.block_request_protocol_config.name, - state_request_protocol_name: params.state_request_protocol_config.name, - warp_sync_protocol_name: params.warp_sync_protocol_config.map(|c| c.name), + block_request_protocol_name, + state_request_protocol_name, + warp_sync_protocol_name, }) } @@ -1693,11 +1698,9 @@ where listen_addrs.truncate(30); } for addr in listen_addrs { - self.network_service.behaviour().add_self_reported_address( - &peer_id, - protocols.iter(), - addr, - ); + self.network_service + .behaviour() + .add_self_reported_address(&peer_id, &protocols, addr); } self.network_service .behaviour() From 44ef89a642a1b9a63364b456e67b4626627308d7 Mon Sep 17 00:00:00 2001 From: Dmitry Markin Date: Thu, 15 Sep 2022 17:10:27 +0300 Subject: [PATCH 10/18] Make borrow checker happy --- client/network/src/service.rs | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/client/network/src/service.rs b/client/network/src/service.rs index 5d5577124df8b..ef997497225d5 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -1523,16 +1523,16 @@ where request, pending_response, })) => { - match self + match this .network_service .behaviour() .user_protocol() .encode_block_request(&request) { Ok(data) => { - self.network_service.behaviour().send_request( + this.network_service.behaviour_mut().send_request( &target, - &self.block_request_protocol_name, + &this.block_request_protocol_name, data, pending_response, IfDisconnected::ImmediateError, @@ -1552,16 +1552,16 @@ where request, pending_response, })) => { - match self + match this .network_service .behaviour() .user_protocol() .encode_state_request(&request) { Ok(data) => { - self.network_service.behaviour().send_request( + this.network_service.behaviour_mut().send_request( &target, - &self.state_request_protocol_name, + &this.state_request_protocol_name, data, pending_response, IfDisconnected::ImmediateError, @@ -1580,8 +1580,8 @@ where target, request, pending_response, - })) => match self.warp_sync_protocol_name { - Some(name) => self.network_service.behaviour().send_request( + })) => match &this.warp_sync_protocol_name { + Some(name) => this.network_service.behaviour_mut().send_request( &target, &name, request.encode(), @@ -1676,7 +1676,7 @@ where changes, })) => for change in changes { - self.network_service.behaviour().user_protocol().report_peer(peer, change); + this.network_service.behaviour().user_protocol().report_peer(peer, change); }, Poll::Ready(SwarmEvent::Behaviour(BehaviourOut::PeerIdentify { peer_id, @@ -1698,19 +1698,19 @@ where listen_addrs.truncate(30); } for addr in listen_addrs { - self.network_service - .behaviour() + this.network_service + .behaviour_mut() .add_self_reported_address(&peer_id, &protocols, addr); } - self.network_service - .behaviour() - .user_protocol() + this.network_service + .behaviour_mut() + .user_protocol_mut() .add_default_set_discovered_nodes(iter::once(peer_id)); }, Poll::Ready(SwarmEvent::Behaviour(BehaviourOut::Discovered(peer_id))) => { - self.network_service - .behaviour() - .user_protocol() + this.network_service + .behaviour_mut() + .user_protocol_mut() .add_default_set_discovered_nodes(iter::once(peer_id)); }, Poll::Ready(SwarmEvent::Behaviour(BehaviourOut::RandomKademliaStarted( From 9bdf2f1ecbe7f938da3e64651cfb623aaa9b4556 Mon Sep 17 00:00:00 2001 From: Dmitry Markin Date: Fri, 16 Sep 2022 10:04:03 +0300 Subject: [PATCH 11/18] minor: wording --- client/network/src/behaviour.rs | 2 +- client/network/src/discovery.rs | 4 ++-- client/network/src/service.rs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/client/network/src/behaviour.rs b/client/network/src/behaviour.rs index 34969a7758c3c..d5720b2533cf6 100644 --- a/client/network/src/behaviour.rs +++ b/client/network/src/behaviour.rs @@ -322,7 +322,7 @@ where /// Add a self-reported address of a remote peer to the k-buckets of the supported /// DHTs (`supported_protocols`). - pub fn add_self_reported_address( + pub fn add_self_reported_address_to_dht( &mut self, peer_id: &PeerId, supported_protocols: &[impl AsRef<[u8]>], diff --git a/client/network/src/discovery.rs b/client/network/src/discovery.rs index 1e0d33a6a6e63..a1e2c36ac0275 100644 --- a/client/network/src/discovery.rs +++ b/client/network/src/discovery.rs @@ -338,7 +338,7 @@ impl DiscoveryBehaviour { .map(AsRef::as_ref) .map(Bytes::copy_from_slice) .collect(); - 'kad: for kad_protocol in kad_protocols { + 'outer: for kad_protocol in kad_protocols { for supported_protocol in supported_protocols { if supported_protocol.as_ref() == kad_protocol { trace!( @@ -348,7 +348,7 @@ impl DiscoveryBehaviour { ); kademlia.add_address(peer_id, addr.clone()); added = true; - break 'kad + break 'outer } } } diff --git a/client/network/src/service.rs b/client/network/src/service.rs index ef997497225d5..3d1950b953894 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -1700,7 +1700,7 @@ where for addr in listen_addrs { this.network_service .behaviour_mut() - .add_self_reported_address(&peer_id, &protocols, addr); + .add_self_reported_address_to_dht(&peer_id, &protocols, addr); } this.network_service .behaviour_mut() From 224bcf2a7113669336d6367b2a591f066feed9ae Mon Sep 17 00:00:00 2001 From: Dmitry Markin Date: Sat, 15 Oct 2022 18:13:11 +0300 Subject: [PATCH 12/18] Make substrate build with libp2p-0.49.0 --- Cargo.lock | 525 ++++++++----------------------- client/network/Cargo.toml | 2 +- client/network/common/Cargo.toml | 2 +- client/network/src/config.rs | 1 - client/network/src/discovery.rs | 22 +- client/network/src/service.rs | 1 + 6 files changed, 151 insertions(+), 402 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0bb0e33ec0bbf..ba5702cfeef41 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -29,30 +29,30 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "aead" -version = "0.4.2" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e3e798aa0c8239776f54415bc06f3d74b1850f3f830b45c35cfc80556973f70" +checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" dependencies = [ "generic-array 0.14.4", ] [[package]] name = "aes" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "495ee669413bfbe9e8cace80f4d3d78e6d8c8d99579f97fb93bde351b185f2d4" +checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8" dependencies = [ "cfg-if 1.0.0", "cipher", - "cpufeatures 0.1.5", + "cpufeatures", "opaque-debug 0.3.0", ] [[package]] name = "aes-gcm" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a930fd487faaa92a30afa92cc9dd1526a5cff67124abbbb1c617ce070f4dcf" +checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6" dependencies = [ "aead", "aes", @@ -307,9 +307,9 @@ dependencies = [ [[package]] name = "async-std-resolver" -version = "0.21.2" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f2f8a4a203be3325981310ab243a28e6e4ea55b6519bffce05d41ab60e09ad8" +checksum = "6ba50e24d9ee0a8950d3d03fc6d0dd10aa14b5de3b101949b4e160f7fee7c723" dependencies = [ "async-std", "async-trait", @@ -545,12 +545,6 @@ dependencies = [ "sp-std", ] -[[package]] -name = "bimap" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50ae17cabbc8a38a1e3e4c1a6a664e9a09672dc14d0896fa8d865d3a5a446b07" - [[package]] name = "bincode" version = "1.3.3" @@ -886,21 +880,21 @@ checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e" [[package]] name = "chacha20" -version = "0.8.1" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01b72a433d0cf2aef113ba70f62634c56fddb0f244e6377185c56a7cadbd8f91" +checksum = "5c80e5460aa66fe3b91d40bcbdab953a597b60053e34d684ac6903f863b680a6" dependencies = [ "cfg-if 1.0.0", "cipher", - "cpufeatures 0.2.1", + "cpufeatures", "zeroize", ] [[package]] name = "chacha20poly1305" -version = "0.9.0" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b84ed6d1d5f7aa9bdde921a5090e0ca4d934d250ea3b402a5fab3a994e28a2a" +checksum = "a18446b09be63d457bbec447509e85f662f32952b035ce892290396bc0b0cff5" dependencies = [ "aead", "chacha20", @@ -1037,15 +1031,6 @@ dependencies = [ "os_str_bytes", ] -[[package]] -name = "cmake" -version = "0.1.46" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7b858541263efe664aead4a5209a4ae5c5d2811167d4ed4ee0944503f8d2089" -dependencies = [ - "cc", -] - [[package]] name = "comfy-table" version = "6.0.0" @@ -1113,15 +1098,6 @@ dependencies = [ "glob", ] -[[package]] -name = "cpufeatures" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66c99696f6c9dd7f35d486b9d04d7e6e202aa3e8c40d553f2fdf5e7e0c6a71ef" -dependencies = [ - "libc", -] - [[package]] name = "cpufeatures" version = "0.2.1" @@ -1475,17 +1451,6 @@ dependencies = [ "cipher", ] -[[package]] -name = "cuckoofilter" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b810a8449931679f64cd7eef1bbd0fa315801b6d5d9cdc1ace2804d6529eee18" -dependencies = [ - "byteorder", - "fnv", - "rand 0.7.3", -] - [[package]] name = "curve25519-dalek" version = "2.1.2" @@ -1856,9 +1821,9 @@ dependencies = [ [[package]] name = "enum-as-inner" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21cdad81446a7f7dc43f6a77409efeb9733d2fa65553efef6018ef257c959b73" +checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" dependencies = [ "heck", "proc-macro2", @@ -2685,9 +2650,9 @@ dependencies = [ [[package]] name = "ghash" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b442c439366184de619215247d24e908912b175e824a530253845ac4c251a5c1" +checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99" dependencies = [ "opaque-debug 0.3.0", "polyval", @@ -2864,12 +2829,6 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" -[[package]] -name = "hex_fmt" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b07f60793ff0a4d9cef0f18e63b5357e06209987153a64648c972c1e5aff336f" - [[package]] name = "hmac" version = "0.8.1" @@ -3029,24 +2988,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "if-watch" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "015a7df1eb6dda30df37f34b63ada9b7b352984b0e84de2a20ed526345000791" -dependencies = [ - "async-io", - "core-foundation", - "fnv", - "futures", - "if-addrs", - "ipnet", - "log", - "rtnetlink", - "system-configuration", - "windows", -] - [[package]] name = "if-watch" version = "2.0.0" @@ -3559,6 +3500,8 @@ checksum = "c7d73b3f436185384286bd8098d17ec07c9a7d2388a6599f824d8502b529702a" [[package]] name = "libp2p" version = "0.49.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec878fda12ebec479186b3914ebc48ff180fa4c51847e11a1a68bf65249e02c1" dependencies = [ "bytes", "futures", @@ -3566,12 +3509,8 @@ dependencies = [ "getrandom 0.2.3", "instant", "lazy_static", - "libp2p-autonat", "libp2p-core", - "libp2p-deflate", "libp2p-dns", - "libp2p-floodsub", - "libp2p-gossipsub", "libp2p-identify", "libp2p-kad", "libp2p-mdns", @@ -3579,45 +3518,24 @@ dependencies = [ "libp2p-mplex", "libp2p-noise", "libp2p-ping", - "libp2p-plaintext", - "libp2p-pnet", - "libp2p-relay", - "libp2p-rendezvous", "libp2p-request-response", "libp2p-swarm", "libp2p-swarm-derive", "libp2p-tcp", - "libp2p-uds", "libp2p-wasm-ext", "libp2p-websocket", "libp2p-yamux", "multiaddr", "parking_lot 0.12.1", "pin-project", - "rand 0.7.3", "smallvec", ] -[[package]] -name = "libp2p-autonat" -version = "0.7.0" -dependencies = [ - "async-trait", - "futures", - "futures-timer", - "instant", - "libp2p-core", - "libp2p-request-response", - "libp2p-swarm", - "log", - "prost 0.11.0", - "prost-build 0.11.1", - "rand 0.8.5", -] - [[package]] name = "libp2p-core" -version = "0.36.0" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799676bb0807c788065e57551c6527d461ad572162b0519d1958946ff9e0539d" dependencies = [ "asn1_der", "bs58", @@ -3628,17 +3546,15 @@ dependencies = [ "futures-timer", "instant", "lazy_static", - "libsecp256k1", "log", "multiaddr", "multihash", "multistream-select", "parking_lot 0.12.1", "pin-project", - "prost 0.11.0", - "prost-build 0.11.1", + "prost", + "prost-build", "rand 0.8.5", - "ring", "rw-stream-sink", "sha2 0.10.2", "smallvec", @@ -3648,18 +3564,11 @@ dependencies = [ "zeroize", ] -[[package]] -name = "libp2p-deflate" -version = "0.36.0" -dependencies = [ - "flate2", - "futures", - "libp2p-core", -] - [[package]] name = "libp2p-dns" -version = "0.36.0" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2322c9fb40d99101def6a01612ee30500c89abbbecb6297b3cd252903a4c1720" dependencies = [ "async-std-resolver", "futures", @@ -3670,51 +3579,11 @@ dependencies = [ "trust-dns-resolver", ] -[[package]] -name = "libp2p-floodsub" -version = "0.39.0" -dependencies = [ - "cuckoofilter", - "fnv", - "futures", - "libp2p-core", - "libp2p-swarm", - "log", - "prost 0.11.0", - "prost-build 0.11.1", - "rand 0.7.3", - "smallvec", -] - -[[package]] -name = "libp2p-gossipsub" -version = "0.41.0" -dependencies = [ - "asynchronous-codec", - "base64", - "byteorder", - "bytes", - "fnv", - "futures", - "hex_fmt", - "instant", - "libp2p-core", - "libp2p-swarm", - "log", - "prometheus-client", - "prost 0.11.0", - "prost-build 0.11.1", - "rand 0.7.3", - "regex", - "sha2 0.10.2", - "smallvec", - "unsigned-varint", - "wasm-timer", -] - [[package]] name = "libp2p-identify" -version = "0.39.0" +version = "0.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcf9a121f699e8719bda2e6e9e9b6ddafc6cff4602471d6481c1067930ccb29b" dependencies = [ "asynchronous-codec", "futures", @@ -3722,9 +3591,9 @@ dependencies = [ "libp2p-core", "libp2p-swarm", "log", - "lru", - "prost 0.11.0", - "prost-build 0.11.1", + "lru 0.8.1", + "prost", + "prost-build", "prost-codec", "smallvec", "thiserror", @@ -3733,7 +3602,9 @@ dependencies = [ [[package]] name = "libp2p-kad" -version = "0.40.0" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6721c200e2021f6c3fab8b6cf0272ead8912d871610ee194ebd628cecf428f22" dependencies = [ "arrayvec 0.7.2", "asynchronous-codec", @@ -3746,9 +3617,9 @@ dependencies = [ "libp2p-core", "libp2p-swarm", "log", - "prost 0.11.0", - "prost-build 0.11.1", - "rand 0.7.3", + "prost", + "prost-build", + "rand 0.8.5", "sha2 0.10.2", "smallvec", "thiserror", @@ -3759,14 +3630,15 @@ dependencies = [ [[package]] name = "libp2p-mdns" -version = "0.40.0" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "761704e727f7d68d58d7bc2231eafae5fc1b9814de24290f126df09d4bd37a15" dependencies = [ "async-io", "data-encoding", "dns-parser", "futures", - "if-watch 1.1.1", - "lazy_static", + "if-watch", "libp2p-core", "libp2p-swarm", "log", @@ -3778,21 +3650,23 @@ dependencies = [ [[package]] name = "libp2p-metrics" -version = "0.9.0" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ee31b08e78b7b8bfd1c4204a9dd8a87b4fcdf6dafc57eb51701c1c264a81cb9" dependencies = [ "libp2p-core", - "libp2p-gossipsub", "libp2p-identify", "libp2p-kad", "libp2p-ping", - "libp2p-relay", "libp2p-swarm", "prometheus-client", ] [[package]] name = "libp2p-mplex" -version = "0.36.0" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "692664acfd98652de739a8acbb0a0d670f1d67190a49be6b4395e22c37337d89" dependencies = [ "asynchronous-codec", "bytes", @@ -3801,14 +3675,16 @@ dependencies = [ "log", "nohash-hasher", "parking_lot 0.12.1", - "rand 0.7.3", + "rand 0.8.5", "smallvec", "unsigned-varint", ] [[package]] name = "libp2p-noise" -version = "0.39.0" +version = "0.40.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "048155686bd81fe6cb5efdef0c6290f25ad32a0a42e8f4f72625cf6a505a206f" dependencies = [ "bytes", "curve25519-dalek 3.0.2", @@ -3816,8 +3692,8 @@ dependencies = [ "lazy_static", "libp2p-core", "log", - "prost 0.11.0", - "prost-build 0.11.1", + "prost", + "prost-build", "rand 0.8.5", "sha2 0.10.2", "snow", @@ -3828,93 +3704,25 @@ dependencies = [ [[package]] name = "libp2p-ping" -version = "0.39.0" -dependencies = [ - "futures", - "futures-timer", - "instant", - "libp2p-core", - "libp2p-swarm", - "log", - "rand 0.7.3", - "void", -] - -[[package]] -name = "libp2p-plaintext" -version = "0.36.0" -dependencies = [ - "asynchronous-codec", - "bytes", - "futures", - "libp2p-core", - "log", - "prost 0.11.0", - "prost-build 0.11.1", - "unsigned-varint", - "void", -] - -[[package]] -name = "libp2p-pnet" -version = "0.22.0" -dependencies = [ - "futures", - "log", - "pin-project", - "rand 0.7.3", - "salsa20", - "sha3", -] - -[[package]] -name = "libp2p-relay" -version = "0.12.0" -dependencies = [ - "asynchronous-codec", - "bytes", - "either", - "futures", - "futures-timer", - "instant", - "libp2p-core", - "libp2p-swarm", - "log", - "pin-project", - "prost 0.11.0", - "prost-build 0.11.1", - "prost-codec", - "rand 0.8.5", - "smallvec", - "static_assertions", - "thiserror", - "void", -] - -[[package]] -name = "libp2p-rendezvous" -version = "0.9.0" +version = "0.40.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7228b9318d34689521349a86eb39a3c3a802c9efc99a0568062ffb80913e3f91" dependencies = [ - "asynchronous-codec", - "bimap", "futures", "futures-timer", "instant", "libp2p-core", "libp2p-swarm", "log", - "prost 0.11.0", - "prost-build 0.11.1", "rand 0.8.5", - "sha2 0.10.2", - "thiserror", - "unsigned-varint", "void", ] [[package]] name = "libp2p-request-response" -version = "0.21.0" +version = "0.22.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8827af16a017b65311a410bb626205a9ad92ec0473967618425039fa5231adc1" dependencies = [ "async-trait", "bytes", @@ -3923,14 +3731,16 @@ dependencies = [ "libp2p-core", "libp2p-swarm", "log", - "rand 0.7.3", + "rand 0.8.5", "smallvec", "unsigned-varint", ] [[package]] name = "libp2p-swarm" -version = "0.39.0" +version = "0.40.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46d13df7c37807965d82930c0e4b04a659efcb6cca237373b206043db5398ecf" dependencies = [ "either", "fnv", @@ -3940,7 +3750,7 @@ dependencies = [ "libp2p-core", "log", "pin-project", - "rand 0.7.3", + "rand 0.8.5", "smallvec", "thiserror", "void", @@ -3949,6 +3759,8 @@ dependencies = [ [[package]] name = "libp2p-swarm-derive" version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0eddc4497a8b5a506013c40e8189864f9c3a00db2b25671f428ae9007f3ba32" dependencies = [ "heck", "quote", @@ -3958,30 +3770,24 @@ dependencies = [ [[package]] name = "libp2p-tcp" version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9839d96761491c6d3e238e70554b856956fca0ab60feb9de2cd08eed4473fa92" dependencies = [ "async-io", "futures", "futures-timer", - "if-watch 2.0.0", + "if-watch", "libc", "libp2p-core", "log", "socket2", ] -[[package]] -name = "libp2p-uds" -version = "0.35.0" -dependencies = [ - "async-std", - "futures", - "libp2p-core", - "log", -] - [[package]] name = "libp2p-wasm-ext" -version = "0.36.0" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a17b5b8e7a73e379e47b1b77f8a82c4721e97eca01abcd18e9cd91a23ca6ce97" dependencies = [ "futures", "js-sys", @@ -3993,7 +3799,9 @@ dependencies = [ [[package]] name = "libp2p-websocket" -version = "0.38.0" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3758ae6f89b2531a24b6d9f5776bda6a626b60a57600d7185d43dfa75ca5ecc4" dependencies = [ "either", "futures", @@ -4010,10 +3818,13 @@ dependencies = [ [[package]] name = "libp2p-yamux" -version = "0.40.0" +version = "0.41.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30f079097a21ad017fc8139460630286f02488c8c13b26affb46623aa20d8845" dependencies = [ "futures", "libp2p-core", + "log", "parking_lot 0.12.1", "thiserror", "yamux", @@ -4192,6 +4003,15 @@ dependencies = [ "hashbrown 0.11.2", ] +[[package]] +name = "lru" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909" +dependencies = [ + "hashbrown 0.12.3", +] + [[package]] name = "lru-cache" version = "0.1.2" @@ -4476,7 +4296,9 @@ checksum = "1255076139a83bb467426e7f8d0134968a8118844faa755985e077cf31850333" [[package]] name = "multistream-select" -version = "0.11.0" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bc41247ec209813e2fd414d6e16b9d94297dacf3cd613fa6ef09cd4d9755c10" dependencies = [ "bytes", "futures", @@ -5153,15 +4975,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "owning_ref" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ff55baddef9e4ad00f88b6c743a2a8062d4c6ade126c2a528644b8e444d52ce" -dependencies = [ - "stable_deref_trait", -] - [[package]] name = "pallet-alliance" version = "4.0.0-dev" @@ -6918,23 +6731,23 @@ dependencies = [ [[package]] name = "poly1305" -version = "0.7.1" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fcffab1f78ebbdf4b93b68c1ffebc24037eedf271edaca795732b24e5e4e349" +checksum = "048aeb476be11a4b6ca432ca569e375810de9294ae78f4774e78ea98a9246ede" dependencies = [ - "cpufeatures 0.1.5", + "cpufeatures", "opaque-debug 0.3.0", "universal-hash", ] [[package]] name = "polyval" -version = "0.5.2" +version = "0.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6ba6a405ef63530d6cb12802014b22f9c5751bd17cdcddbe9e46d5c8ae83287" +checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1" dependencies = [ "cfg-if 1.0.0", - "cpufeatures 0.1.5", + "cpufeatures", "opaque-debug 0.3.0", "universal-hash", ] @@ -7086,16 +6899,6 @@ dependencies = [ "syn", ] -[[package]] -name = "prost" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc03e116981ff7d8da8e5c220e374587b98d294af7ba7dd7fda761158f00086f" -dependencies = [ - "bytes", - "prost-derive 0.10.1", -] - [[package]] name = "prost" version = "0.11.0" @@ -7103,29 +6906,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "399c3c31cdec40583bb68f0b18403400d01ec4289c383aa047560439952c4dd7" dependencies = [ "bytes", - "prost-derive 0.11.0", -] - -[[package]] -name = "prost-build" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae5a4388762d5815a9fc0dea33c56b021cdc8dde0c55e0c9ca57197254b0cab" -dependencies = [ - "bytes", - "cfg-if 1.0.0", - "cmake", - "heck", - "itertools", - "lazy_static", - "log", - "multimap", - "petgraph", - "prost 0.10.3", - "prost-types 0.10.1", - "regex", - "tempfile", - "which", + "prost-derive", ] [[package]] @@ -7141,8 +6922,8 @@ dependencies = [ "log", "multimap", "petgraph", - "prost 0.11.0", - "prost-types 0.11.1", + "prost", + "prost-types", "regex", "tempfile", "which", @@ -7151,27 +6932,16 @@ dependencies = [ [[package]] name = "prost-codec" version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "011ae9ff8359df7915f97302d591cdd9e0e27fbd5a4ddc5bd13b71079bb20987" dependencies = [ "asynchronous-codec", "bytes", - "prost 0.11.0", + "prost", "thiserror", "unsigned-varint", ] -[[package]] -name = "prost-derive" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b670f45da57fb8542ebdbb6105a925fe571b67f9e7ed9f47a06a84e72b4e7cc" -dependencies = [ - "anyhow", - "itertools", - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "prost-derive" version = "0.11.0" @@ -7185,16 +6955,6 @@ dependencies = [ "syn", ] -[[package]] -name = "prost-types" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d0a014229361011dc8e69c8a1ec6c2e8d0f2af7c91e3ea3f5b2170298461e68" -dependencies = [ - "bytes", - "prost 0.10.3", -] - [[package]] name = "prost-types" version = "0.11.1" @@ -7202,7 +6962,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4dfaa718ad76a44b3415e6c4d53b17c8f99160dcb3a99b10470fce8ad43f6e3e" dependencies = [ "bytes", - "prost 0.11.0", + "prost", ] [[package]] @@ -7749,6 +7509,8 @@ dependencies = [ [[package]] name = "rw-stream-sink" version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26338f5e09bb721b85b135ea05af7767c90b52f6de4f087d4f4a3a9d64e7dc04" dependencies = [ "futures", "pin-project", @@ -7770,15 +7532,6 @@ dependencies = [ "rustc_version 0.2.3", ] -[[package]] -name = "salsa20" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0fbb5f676da676c260ba276a8f43a8dc67cf02d1438423aeb1c677a7212686" -dependencies = [ - "cipher", -] - [[package]] name = "same-file" version = "1.0.6" @@ -7809,8 +7562,8 @@ dependencies = [ "libp2p", "log", "parity-scale-codec", - "prost 0.11.0", - "prost-build 0.11.1", + "prost", + "prost-build", "quickcheck", "rand 0.7.3", "sc-client-api", @@ -8248,7 +8001,7 @@ dependencies = [ "criterion", "env_logger", "lazy_static", - "lru", + "lru 0.7.5", "num_cpus", "parity-scale-codec", "parking_lot 0.12.1", @@ -8461,11 +8214,11 @@ dependencies = [ "linked-hash-map", "linked_hash_set", "log", - "lru", + "lru 0.7.5", "parity-scale-codec", "parking_lot 0.12.1", "pin-project", - "prost 0.11.0", + "prost", "rand 0.7.3", "sc-block-builder", "sc-client-api", @@ -8502,8 +8255,8 @@ dependencies = [ "futures", "libp2p", "log", - "prost 0.11.0", - "prost-build 0.11.1", + "prost", + "prost-build", "sc-block-builder", "sc-client-api", "sc-consensus", @@ -8532,7 +8285,7 @@ dependencies = [ "libp2p", "linked_hash_set", "parity-scale-codec", - "prost-build 0.11.1", + "prost-build", "sc-consensus", "sc-peerset", "serde", @@ -8555,7 +8308,7 @@ dependencies = [ "futures-timer", "libp2p", "log", - "lru", + "lru 0.7.5", "quickcheck", "sc-network-common", "sc-peerset", @@ -8574,8 +8327,8 @@ dependencies = [ "libp2p", "log", "parity-scale-codec", - "prost 0.11.0", - "prost-build 0.11.1", + "prost", + "prost-build", "sc-client-api", "sc-network-common", "sc-peerset", @@ -8594,11 +8347,11 @@ dependencies = [ "futures", "libp2p", "log", - "lru", + "lru 0.7.5", "mockall", "parity-scale-codec", - "prost 0.11.0", - "prost-build 0.11.1", + "prost", + "prost-build", "quickcheck", "sc-block-builder", "sc-client-api", @@ -9385,7 +9138,7 @@ checksum = "b69f9a4c9740d74c5baa3fd2e547f9525fa8088a8a958e0ca2409a514e33f5fa" dependencies = [ "block-buffer 0.9.0", "cfg-if 1.0.0", - "cpufeatures 0.2.1", + "cpufeatures", "digest 0.9.0", "opaque-debug 0.3.0", ] @@ -9397,7 +9150,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676" dependencies = [ "cfg-if 1.0.0", - "cpufeatures 0.2.1", + "cpufeatures", "digest 0.10.3", ] @@ -9676,7 +9429,7 @@ version = "4.0.0-dev" dependencies = [ "futures", "log", - "lru", + "lru 0.7.5", "parity-scale-codec", "parking_lot 0.12.1", "sp-api", @@ -10317,7 +10070,7 @@ dependencies = [ "hash-db", "hashbrown 0.12.3", "lazy_static", - "lru", + "lru 0.7.5", "memory-db", "nohash-hasher", "parity-scale-codec", @@ -11227,9 +10980,9 @@ dependencies = [ [[package]] name = "trust-dns-proto" -version = "0.21.2" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c31f240f59877c3d4bb3b3ea0ec5a6a0cff07323580ff8c7a605cd7d08b255d" +checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26" dependencies = [ "async-trait", "cfg-if 1.0.0", @@ -11241,30 +10994,30 @@ dependencies = [ "idna", "ipnet", "lazy_static", - "log", "rand 0.8.5", "smallvec", "thiserror", "tinyvec", + "tracing", "url", ] [[package]] name = "trust-dns-resolver" -version = "0.21.2" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4ba72c2ea84515690c9fcef4c6c660bb9df3036ed1051686de84605b74fd558" +checksum = "aff21aa4dcefb0a1afbfac26deb0adc93888c7d295fb63ab273ef276ba2b7cfe" dependencies = [ "cfg-if 1.0.0", "futures-util", "ipconfig", "lazy_static", - "log", "lru-cache", "parking_lot 0.12.1", "resolv-conf", "smallvec", "thiserror", + "tracing", "trust-dns-proto", ] @@ -11406,9 +11159,9 @@ checksum = "957e51f3646910546462e67d5f7599b9e4fb8acdd304b087a6494730f9eebf04" [[package]] name = "universal-hash" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8326b2c654932e3e4f9196e69d08fdf7cfd718e1dc6f66b347e6024a0c961402" +checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" dependencies = [ "generic-array 0.14.4", "subtle", @@ -12322,9 +12075,9 @@ dependencies = [ [[package]] name = "x25519-dalek" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc614d95359fd7afc321b66d2107ede58b246b844cf5d8a0adcca413e439f088" +checksum = "5a0c105152107e3b96f6a00a65e86ce82d9b125230e1c4302940eca58ff71f4f" dependencies = [ "curve25519-dalek 3.0.2", "rand_core 0.5.1", @@ -12333,9 +12086,9 @@ dependencies = [ [[package]] name = "yamux" -version = "0.10.1" +version = "0.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c0608f53c1dc0bad505d03a34bbd49fbf2ad7b51eb036123e896365532745a1" +checksum = "e5d9ba232399af1783a58d8eb26f6b5006fbefe2dc9ef36bd283324792d03ea5" dependencies = [ "futures", "log", diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index 3536d882d306d..e93ef55e60d43 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -26,7 +26,7 @@ fnv = "1.0.6" futures = "0.3.21" futures-timer = "3.0.2" ip_network = "0.4.1" -libp2p = "0.49.0" +libp2p = { version = "0.49.0", features = [ "identify", "kad", "mdns-async-io", "mplex", "noise", "ping", "yamux" ] } linked_hash_set = "0.1.3" linked-hash-map = "0.5.4" log = "0.4.17" diff --git a/client/network/common/Cargo.toml b/client/network/common/Cargo.toml index cf463e944b3cd..48d83a59c742b 100644 --- a/client/network/common/Cargo.toml +++ b/client/network/common/Cargo.toml @@ -25,7 +25,7 @@ codec = { package = "parity-scale-codec", version = "3.0.0", features = [ ] } futures = "0.3.21" futures-timer = "3.0.2" -libp2p = "0.49.0" +libp2p = { version = "0.49.0", features = [ "request-response", "kad" ] } linked_hash_set = "0.1.3" prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.10.0-dev", path = "../../../utils/prometheus" } smallvec = "1.8.0" diff --git a/client/network/src/config.rs b/client/network/src/config.rs index db3e8f0b98a33..a72b1b0e9ce81 100644 --- a/client/network/src/config.rs +++ b/client/network/src/config.rs @@ -453,7 +453,6 @@ mod tests { fn secret_bytes(kp: &Keypair) -> Vec { match kp { Keypair::Ed25519(p) => p.secret().as_ref().iter().cloned().collect(), - Keypair::Secp256k1(p) => p.secret().to_bytes().to_vec(), _ => panic!("Unexpected keypair."), } } diff --git a/client/network/src/discovery.rs b/client/network/src/discovery.rs index baad9cc167e59..c1df22fe8e1e1 100644 --- a/client/network/src/discovery.rs +++ b/client/network/src/discovery.rs @@ -233,7 +233,13 @@ impl DiscoveryConfig { allow_private_ipv4, discovery_only_if_under_num, mdns: if enable_mdns { - MdnsWrapper::Instantiating(Mdns::new(MdnsConfig::default()).boxed()) + match Mdns::new(MdnsConfig::default()) { + Ok(mdns) => MdnsWrapper::Ready(mdns), + Err(err) => { + warn!(target: "sub-libp2p", "Failed to initialize mDNS: {:?}", err); + MdnsWrapper::Disabled + } + } } else { MdnsWrapper::Disabled }, @@ -969,10 +975,9 @@ fn protocol_name_from_protocol_id(id: &ProtocolId) -> Vec { v } -/// [`Mdns::new`] returns a future. Instead of forcing [`DiscoveryConfig::finish`] and all its -/// callers to be async, lazily instantiate [`Mdns`]. +/// Enable or disable mDNS. +/// TODO: replace with an `Option`. enum MdnsWrapper { - Instantiating(futures::future::BoxFuture<'static, std::io::Result>), Ready(Mdns), Disabled, } @@ -980,7 +985,6 @@ enum MdnsWrapper { impl MdnsWrapper { fn addresses_of_peer(&mut self, peer_id: &PeerId) -> Vec { match self { - Self::Instantiating(_) => Vec::new(), Self::Ready(mdns) => mdns.addresses_of_peer(peer_id), Self::Disabled => Vec::new(), } @@ -993,14 +997,6 @@ impl MdnsWrapper { ) -> Poll::ConnectionHandler>> { loop { match self { - Self::Instantiating(fut) => - *self = match futures::ready!(fut.as_mut().poll(cx)) { - Ok(mdns) => Self::Ready(mdns), - Err(err) => { - warn!(target: "sub-libp2p", "Failed to initialize mDNS: {:?}", err); - Self::Disabled - }, - }, Self::Ready(mdns) => return mdns.poll(cx, params), Self::Disabled => return Poll::Pending, } diff --git a/client/network/src/service.rs b/client/network/src/service.rs index d3d59a198fb7b..1ecb2e717c47d 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -53,6 +53,7 @@ use libp2p::{ }; use log::{debug, error, info, trace, warn}; use metrics::{Histogram, HistogramVec, MetricSources, Metrics}; +use codec::Encode; use parking_lot::Mutex; use sc_consensus::{BlockImportError, BlockImportStatus, ImportQueue, Link}; use sc_network_common::{ From 1707c778eb3dde03ab6dd628745f651455103a07 Mon Sep 17 00:00:00 2001 From: Dmitry Markin Date: Sat, 15 Oct 2022 19:04:17 +0300 Subject: [PATCH 13/18] rustfmt --- client/network/src/discovery.rs | 2 +- client/network/src/service.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/client/network/src/discovery.rs b/client/network/src/discovery.rs index c1df22fe8e1e1..ee04f91c25116 100644 --- a/client/network/src/discovery.rs +++ b/client/network/src/discovery.rs @@ -238,7 +238,7 @@ impl DiscoveryConfig { Err(err) => { warn!(target: "sub-libp2p", "Failed to initialize mDNS: {:?}", err); MdnsWrapper::Disabled - } + }, } } else { MdnsWrapper::Disabled diff --git a/client/network/src/service.rs b/client/network/src/service.rs index 1ecb2e717c47d..05d56b558724d 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -38,6 +38,7 @@ use crate::{ transport, ReputationChange, }; +use codec::Encode; use futures::{channel::oneshot, prelude::*}; use libp2p::{ core::{either::EitherError, upgrade, ConnectedPoint, Executor}, @@ -53,7 +54,6 @@ use libp2p::{ }; use log::{debug, error, info, trace, warn}; use metrics::{Histogram, HistogramVec, MetricSources, Metrics}; -use codec::Encode; use parking_lot::Mutex; use sc_consensus::{BlockImportError, BlockImportStatus, ImportQueue, Link}; use sc_network_common::{ From c9f660ead0a65abe6257c9e03285e9d60e7360c8 Mon Sep 17 00:00:00 2001 From: Dmitry Markin Date: Sat, 15 Oct 2022 19:07:08 +0300 Subject: [PATCH 14/18] Get rid of MdnsWrapper --- client/network/src/discovery.rs | 101 ++++++++++++-------------------- 1 file changed, 38 insertions(+), 63 deletions(-) diff --git a/client/network/src/discovery.rs b/client/network/src/discovery.rs index ee04f91c25116..d6e2427d570aa 100644 --- a/client/network/src/discovery.rs +++ b/client/network/src/discovery.rs @@ -234,14 +234,14 @@ impl DiscoveryConfig { discovery_only_if_under_num, mdns: if enable_mdns { match Mdns::new(MdnsConfig::default()) { - Ok(mdns) => MdnsWrapper::Ready(mdns), + Ok(mdns) => Some(mdns), Err(err) => { warn!(target: "sub-libp2p", "Failed to initialize mDNS: {:?}", err); - MdnsWrapper::Disabled + None }, } } else { - MdnsWrapper::Disabled + None }, allow_non_globals_in_dht, known_external_addresses: LruHashSet::new( @@ -263,7 +263,7 @@ pub struct DiscoveryBehaviour { /// Kademlia requests and answers. kademlias: HashMap>, /// Discovers nodes on the local network. - mdns: MdnsWrapper, + mdns: Option, /// Stream that fires when we need to perform the next random Kademlia query. `None` if /// random walking is disabled. next_kad_random_query: Option, @@ -548,7 +548,9 @@ impl NetworkBehaviour for DiscoveryBehaviour { list_to_filter.extend(k.addresses_of_peer(peer_id)) } - list_to_filter.extend(self.mdns.addresses_of_peer(peer_id)); + if let Some(ref mut mdns) = self.mdns { + list_to_filter.extend(mdns.addresses_of_peer(peer_id)); + } if !self.allow_private_ipv4 { list_to_filter.retain(|addr| match addr.iter().next() { @@ -929,36 +931,38 @@ impl NetworkBehaviour for DiscoveryBehaviour { } // Poll mDNS. - while let Poll::Ready(ev) = self.mdns.poll(cx, params) { - match ev { - NetworkBehaviourAction::GenerateEvent(event) => match event { - MdnsEvent::Discovered(list) => { - if self.num_connections >= self.discovery_only_if_under_num { - continue - } - - self.pending_events - .extend(list.map(|(peer_id, _)| DiscoveryOut::Discovered(peer_id))); - if let Some(ev) = self.pending_events.pop_front() { - return Poll::Ready(NetworkBehaviourAction::GenerateEvent(ev)) - } + if let Some(ref mut mdns) = self.mdns { + while let Poll::Ready(ev) = mdns.poll(cx, params) { + match ev { + NetworkBehaviourAction::GenerateEvent(event) => match event { + MdnsEvent::Discovered(list) => { + if self.num_connections >= self.discovery_only_if_under_num { + continue + } + + self.pending_events + .extend(list.map(|(peer_id, _)| DiscoveryOut::Discovered(peer_id))); + if let Some(ev) = self.pending_events.pop_front() { + return Poll::Ready(NetworkBehaviourAction::GenerateEvent(ev)) + } + }, + MdnsEvent::Expired(_) => {}, + }, + NetworkBehaviourAction::Dial { .. } => { + unreachable!("mDNS never dials!"); }, - MdnsEvent::Expired(_) => {}, - }, - NetworkBehaviourAction::Dial { .. } => { - unreachable!("mDNS never dials!"); - }, - NetworkBehaviourAction::NotifyHandler { event, .. } => match event {}, /* `event` is an enum with no variant */ - NetworkBehaviourAction::ReportObservedAddr { address, score } => - return Poll::Ready(NetworkBehaviourAction::ReportObservedAddr { - address, - score, - }), - NetworkBehaviourAction::CloseConnection { peer_id, connection } => - return Poll::Ready(NetworkBehaviourAction::CloseConnection { - peer_id, - connection, - }), + NetworkBehaviourAction::NotifyHandler { event, .. } => match event {}, /* `event` is an enum with no variant */ + NetworkBehaviourAction::ReportObservedAddr { address, score } => + return Poll::Ready(NetworkBehaviourAction::ReportObservedAddr { + address, + score, + }), + NetworkBehaviourAction::CloseConnection { peer_id, connection } => + return Poll::Ready(NetworkBehaviourAction::CloseConnection { + peer_id, + connection, + }), + } } } @@ -975,35 +979,6 @@ fn protocol_name_from_protocol_id(id: &ProtocolId) -> Vec { v } -/// Enable or disable mDNS. -/// TODO: replace with an `Option`. -enum MdnsWrapper { - Ready(Mdns), - Disabled, -} - -impl MdnsWrapper { - fn addresses_of_peer(&mut self, peer_id: &PeerId) -> Vec { - match self { - Self::Ready(mdns) => mdns.addresses_of_peer(peer_id), - Self::Disabled => Vec::new(), - } - } - - fn poll( - &mut self, - cx: &mut Context<'_>, - params: &mut impl PollParameters, - ) -> Poll::ConnectionHandler>> { - loop { - match self { - Self::Ready(mdns) => return mdns.poll(cx, params), - Self::Disabled => return Poll::Pending, - } - } - } -} - #[cfg(test)] mod tests { use super::{protocol_name_from_protocol_id, DiscoveryConfig, DiscoveryOut}; From 2293f29824fb53e653fee176a5ceb3f6d2a40f97 Mon Sep 17 00:00:00 2001 From: Dmitry Markin Date: Sat, 15 Oct 2022 20:16:07 +0300 Subject: [PATCH 15/18] Resolve deprecation warnings --- client/authority-discovery/src/tests.rs | 5 +---- client/network/Cargo.toml | 2 +- client/network/src/behaviour.rs | 2 +- client/network/src/config.rs | 6 ++---- client/network/src/peer_info.rs | 7 +++++-- client/network/src/service.rs | 2 +- 6 files changed, 11 insertions(+), 13 deletions(-) diff --git a/client/authority-discovery/src/tests.rs b/client/authority-discovery/src/tests.rs index 334b2638ca58c..208440b7ab1ea 100644 --- a/client/authority-discovery/src/tests.rs +++ b/client/authority-discovery/src/tests.rs @@ -91,10 +91,7 @@ fn cryptos_are_compatible() { let libp2p_public = libp2p_secret.public(); let sp_core_secret = { - let libp2p_ed_secret = match libp2p_secret.clone() { - libp2p::identity::Keypair::Ed25519(x) => x, - _ => panic!("generate_ed25519 should have generated an Ed25519 key ¯\\_(ツ)_/¯"), - }; + let libp2p::identity::Keypair::Ed25519(libp2p_ed_secret) = libp2p_secret.clone(); sp_core::ed25519::Pair::from_seed_slice(&libp2p_ed_secret.secret().as_ref()).unwrap() }; let sp_core_public = sp_core_secret.public(); diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index e93ef55e60d43..9c2833ec00908 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -26,7 +26,7 @@ fnv = "1.0.6" futures = "0.3.21" futures-timer = "3.0.2" ip_network = "0.4.1" -libp2p = { version = "0.49.0", features = [ "identify", "kad", "mdns-async-io", "mplex", "noise", "ping", "yamux" ] } +libp2p = { version = "0.49.0", features = ["async-std", "dns", "identify", "kad", "mdns-async-io", "mplex", "noise", "ping", "tcp", "yamux"] } linked_hash_set = "0.1.3" linked-hash-map = "0.5.4" log = "0.4.17" diff --git a/client/network/src/behaviour.rs b/client/network/src/behaviour.rs index b2132c418ee5e..75626096dafbb 100644 --- a/client/network/src/behaviour.rs +++ b/client/network/src/behaviour.rs @@ -27,7 +27,7 @@ use bytes::Bytes; use futures::channel::oneshot; use libp2p::{ core::{Multiaddr, PeerId, PublicKey}, - identify::IdentifyInfo, + identify::Info as IdentifyInfo, kad::record, NetworkBehaviour, }; diff --git a/client/network/src/config.rs b/client/network/src/config.rs index a72b1b0e9ce81..b47f854d08a54 100644 --- a/client/network/src/config.rs +++ b/client/network/src/config.rs @@ -451,10 +451,8 @@ mod tests { } fn secret_bytes(kp: &Keypair) -> Vec { - match kp { - Keypair::Ed25519(p) => p.secret().as_ref().iter().cloned().collect(), - _ => panic!("Unexpected keypair."), - } + let Keypair::Ed25519(p) = kp; + p.secret().as_ref().iter().cloned().collect() } #[test] diff --git a/client/network/src/peer_info.rs b/client/network/src/peer_info.rs index c62c2ea1c5d98..e04d006f50501 100644 --- a/client/network/src/peer_info.rs +++ b/client/network/src/peer_info.rs @@ -23,8 +23,11 @@ use libp2p::{ connection::ConnectionId, either::EitherOutput, transport::ListenerId, ConnectedPoint, PeerId, PublicKey, }, - identify::{Identify, IdentifyConfig, IdentifyEvent, IdentifyInfo}, - ping::{Ping, PingConfig, PingEvent, PingSuccess}, + identify::{ + Behaviour as Identify, Config as IdentifyConfig, Event as IdentifyEvent, + Info as IdentifyInfo, + }, + ping::{Behaviour as Ping, Config as PingConfig, Event as PingEvent, Success as PingSuccess}, swarm::{ ConnectionHandler, IntoConnectionHandler, IntoConnectionHandlerSelect, NetworkBehaviour, NetworkBehaviourAction, PollParameters, diff --git a/client/network/src/service.rs b/client/network/src/service.rs index 05d56b558724d..282407746712d 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -42,7 +42,7 @@ use codec::Encode; use futures::{channel::oneshot, prelude::*}; use libp2p::{ core::{either::EitherError, upgrade, ConnectedPoint, Executor}, - identify::IdentifyInfo, + identify::Info as IdentifyInfo, kad::record::Key as KademliaKey, multiaddr, ping::Failure as PingFailure, From 517a582809f625cf986492df7a4bdec44e57eb53 Mon Sep 17 00:00:00 2001 From: Dmitry Markin Date: Sat, 15 Oct 2022 20:23:48 +0300 Subject: [PATCH 16/18] Fix documentation --- client/network/src/service.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/network/src/service.rs b/client/network/src/service.rs index 282407746712d..a931316375beb 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -1282,13 +1282,13 @@ where /// that peer. Shared with the [`NetworkService`]. peers_notifications_sinks: Arc>>, /// Protocol name used to send out block requests via - /// [`request_responses::RequestResponsesBehaviour`]. + /// [`crate::request_responses::RequestResponsesBehaviour`]. block_request_protocol_name: ProtocolName, /// Protocol name used to send out state requests via - /// [`request_responses::RequestResponsesBehaviour`]. + /// [`crate::request_responses::RequestResponsesBehaviour`]. state_request_protocol_name: ProtocolName, /// Protocol name used to send out warp sync requests via - /// [`request_responses::RequestResponsesBehaviour`]. + /// [`crate::request_responses::RequestResponsesBehaviour`]. warp_sync_protocol_name: Option, /// Marker to pin the `H` generic. Serves no purpose except to not break backwards /// compatibility. From c33a867caec1864e0f372fe778abb8d6e831b32e Mon Sep 17 00:00:00 2001 From: Dmitrii Markin Date: Mon, 17 Oct 2022 12:20:22 +0300 Subject: [PATCH 17/18] Apply suggestions from code review: fix typos Co-authored-by: Aaro Altonen <48052676+altonen@users.noreply.github.com> --- client/network/src/behaviour.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/network/src/behaviour.rs b/client/network/src/behaviour.rs index 75626096dafbb..fa130fb4baacd 100644 --- a/client/network/src/behaviour.rs +++ b/client/network/src/behaviour.rs @@ -170,7 +170,7 @@ pub enum BehaviourOut { target: PeerId, /// Opaque implementation-specific block request. request: OpaqueBlockRequest, - /// One-shot channel to recieve the response. + /// One-shot channel to receive the response. pending_response: oneshot::Sender, RequestFailure>>, }, @@ -180,7 +180,7 @@ pub enum BehaviourOut { target: PeerId, /// Opaque implementation-specific state request. request: OpaqueStateRequest, - /// One-shot channel to recieve the response. + /// One-shot channel to receive the response. pending_response: oneshot::Sender, RequestFailure>>, }, @@ -190,7 +190,7 @@ pub enum BehaviourOut { target: PeerId, /// Warp sync request. request: WarpProofRequest, - /// One-shot channel to recieve the response. + /// One-shot channel to receive the response. pending_response: oneshot::Sender, RequestFailure>>, }, From 02b005383197e79fe49c277d549c74aed2c892c4 Mon Sep 17 00:00:00 2001 From: Dmitry Markin Date: Mon, 17 Oct 2022 13:17:20 +0300 Subject: [PATCH 18/18] Apply suggestion: simplify kad protocol name matching --- client/network/src/discovery.rs | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/client/network/src/discovery.rs b/client/network/src/discovery.rs index d6e2427d570aa..da4dec70b29ab 100644 --- a/client/network/src/discovery.rs +++ b/client/network/src/discovery.rs @@ -46,7 +46,6 @@ //! active mechanism that asks nodes for the addresses they are listening on. Whenever we learn //! of a node's address, you must call `add_self_reported_address`. -use bytes::Bytes; use futures::prelude::*; use futures_timer::Delay; use ip_network::IpNetwork; @@ -337,25 +336,17 @@ impl DiscoveryBehaviour { let mut added = false; for kademlia in self.kademlias.values_mut() { - let kad_protocols: Vec<_> = kademlia - .protocol_names() + if let Some(matching_protocol) = supported_protocols .iter() - .map(AsRef::as_ref) - .map(Bytes::copy_from_slice) - .collect(); - 'outer: for kad_protocol in kad_protocols { - for supported_protocol in supported_protocols { - if supported_protocol.as_ref() == kad_protocol { - trace!( - target: "sub-libp2p", - "Adding self-reported address {} from {} to Kademlia DHT {}.", - addr, peer_id, String::from_utf8_lossy(&kad_protocol), - ); - kademlia.add_address(peer_id, addr.clone()); - added = true; - break 'outer - } - } + .find(|p| kademlia.protocol_names().iter().any(|k| k.as_ref() == p.as_ref())) + { + trace!( + target: "sub-libp2p", + "Adding self-reported address {} from {} to Kademlia DHT {}.", + addr, peer_id, String::from_utf8_lossy(matching_protocol.as_ref()), + ); + kademlia.add_address(peer_id, addr.clone()); + added = true; } }