From 1f838db991066f3682bf7048aab779f88205a2b9 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Mon, 6 Mar 2023 16:10:24 +0400 Subject: [PATCH 01/48] client/network: upgrade to libp2p 0.51.0 --- Cargo.lock | 528 ++++++++---------- 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/src/discovery.rs | 51 +- client/network/src/peer_info.rs | 123 ++-- client/network/src/protocol.rs | 55 +- .../src/protocol/notifications/behaviour.rs | 54 +- .../src/protocol/notifications/tests.rs | 6 +- client/network/src/request_responses.rs | 11 +- client/network/src/service.rs | 24 +- client/network/src/transport.rs | 27 +- client/network/sync/Cargo.toml | 2 +- client/network/test/Cargo.toml | 2 +- client/network/transactions/Cargo.toml | 2 +- client/offchain/Cargo.toml | 2 +- client/peerset/Cargo.toml | 2 +- client/telemetry/Cargo.toml | 2 +- 23 files changed, 474 insertions(+), 433 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 53a8675437ff9..a145fe4260553 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -95,7 +95,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241" dependencies = [ "cfg-if", - "cipher 0.4.3", + "cipher 0.4.4", "cpufeatures", ] @@ -121,7 +121,7 @@ checksum = "82e1366e0c69c9f927b1fa5ce2c7bf9eafc8f9268c0b9800729e8b267612447c" dependencies = [ "aead 0.5.1", "aes 0.8.2", - "cipher 0.4.3", + "cipher 0.4.4", "ctr 0.9.2", "ghash 0.5.0", "subtle", @@ -272,9 +272,9 @@ dependencies = [ [[package]] name = "asn1-rs" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf6690c370453db30743b373a60ba498fc0d6d83b11f4abfd87a84a075db5dd4" +checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" dependencies = [ "asn1-rs-derive 0.4.0", "asn1-rs-impl", @@ -380,12 +380,11 @@ dependencies = [ [[package]] name = "async-lock" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685" +checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" dependencies = [ "event-listener", - "futures-lite", ] [[package]] @@ -412,9 +411,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.64" +version = "0.1.66" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2" +checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" dependencies = [ "proc-macro2", "quote", @@ -510,9 +509,9 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "basic-toml" -version = "0.1.1" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e819b667739967cd44d308b8c7b71305d8bb0729ac44a248aa08f33d01950b4" +checksum = "5c0de75129aa8d0cceaf750b89013f0e08804d6ec61416da787b35ad0d7cddf1" dependencies = [ "serde", ] @@ -652,9 +651,9 @@ dependencies = [ [[package]] name = "block-buffer" -version = "0.10.3" +version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ "generic-array 0.14.6", ] @@ -743,9 +742,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "bytemuck" -version = "1.13.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c041d3eab048880cb0b86b256447da3f18859a163c3b8d8893f4e6368abe6393" +checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" [[package]] name = "byteorder" @@ -972,9 +971,9 @@ dependencies = [ [[package]] name = "cipher" -version = "0.4.3" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1873270f8f7942c191139cb8a40fd228da6c3fd2fc376d7e92d47aa14aeb59e" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" dependencies = [ "crypto-common", "inout", @@ -1154,18 +1153,18 @@ dependencies = [ [[package]] name = "cranelift-bforest" -version = "0.93.0" +version = "0.93.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91b18cf92869a6ae85cde3af4bc4beb6154efa8adef03b18db2ad413d5bce3a2" +checksum = "a7379abaacee0f14abf3204a7606118f0465785252169d186337bcb75030815a" dependencies = [ "cranelift-entity", ] [[package]] name = "cranelift-codegen" -version = "0.93.0" +version = "0.93.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567d9f6e919bac076f39b902a072686eaf9e6d015baa34d10a61b85105b7af59" +checksum = "9489fa336927df749631f1008007ced2871068544f40a202ce6d93fbf2366a7b" dependencies = [ "arrayvec 0.7.2", "bumpalo", @@ -1184,33 +1183,33 @@ dependencies = [ [[package]] name = "cranelift-codegen-meta" -version = "0.93.0" +version = "0.93.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e72b2d5ec8917b2971fe83850187373d0a186db4748a7c23a5f48691b8d92bb" +checksum = "05bbb67da91ec721ed57cef2f7c5ef7728e1cd9bde9ffd3ef8601022e73e3239" dependencies = [ "cranelift-codegen-shared", ] [[package]] name = "cranelift-codegen-shared" -version = "0.93.0" +version = "0.93.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3461c0e0c2ebbeb92533aacb27e219289f60dc84134ef34fbf2d77c9eddf07ef" +checksum = "418ecb2f36032f6665dc1a5e2060a143dbab41d83b784882e97710e890a7a16d" [[package]] name = "cranelift-entity" -version = "0.93.0" +version = "0.93.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af684f7f7b01427b1942c7102673322a51b9d6f261e9663dc5e5595786775531" +checksum = "7cf583f7b093f291005f9fb1323e2c37f6ee4c7909e39ce016b2e8360d461705" dependencies = [ "serde", ] [[package]] name = "cranelift-frontend" -version = "0.93.0" +version = "0.93.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d361ed0373cf5f086b49c499aa72227b646a64f899f32e34312f97c0fadff75" +checksum = "0b66bf9e916f57fbbd0f7703ec6286f4624866bf45000111627c70d272c8dda1" dependencies = [ "cranelift-codegen", "log", @@ -1220,15 +1219,15 @@ dependencies = [ [[package]] name = "cranelift-isle" -version = "0.93.0" +version = "0.93.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cef4f8f3984d772c199a48896d2fb766f96301bf71b371e03a2b99f4f3b7b931" +checksum = "649782a39ce99798dd6b4029e2bb318a2fbeaade1b4fa25330763c10c65bc358" [[package]] name = "cranelift-native" -version = "0.93.0" +version = "0.93.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f98e4e99a353703475d5acb402b9c13482d41d8a4008b352559bd560afb90363" +checksum = "937e021e089c51f9749d09e7ad1c4f255c2f8686cb8c3df63a34b3ec9921bc41" dependencies = [ "cranelift-codegen", "libc", @@ -1237,9 +1236,9 @@ dependencies = [ [[package]] name = "cranelift-wasm" -version = "0.93.0" +version = "0.93.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1e3f4f0779a1b0f286a6ef19835d8665f88326e656a6d7d84fa9a39fa38ca32" +checksum = "d850cf6775477747c9dfda9ae23355dd70512ffebc70cf82b85a5b111ae668b5" dependencies = [ "cranelift-codegen", "cranelift-entity", @@ -1430,7 +1429,7 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ - "cipher 0.4.3", + "cipher 0.4.4", ] [[package]] @@ -1475,9 +1474,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.91" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86d3488e7665a7a483b57e25bdd90d0aeb2bc7608c8d0346acf2ad3f1caf1d62" +checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72" dependencies = [ "cc", "cxxbridge-flags", @@ -1487,9 +1486,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.91" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48fcaf066a053a41a81dfb14d57d99738b767febb8b735c3016e469fac5da690" +checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613" dependencies = [ "cc", "codespan-reporting", @@ -1502,15 +1501,15 @@ dependencies = [ [[package]] name = "cxxbridge-flags" -version = "1.0.91" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2ef98b8b717a829ca5603af80e1f9e2e48013ab227b68ef37872ef84ee479bf" +checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97" [[package]] name = "cxxbridge-macro" -version = "1.0.91" +version = "1.0.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "086c685979a698443656e5cf7856c95c642295a38599f12fb1ff76fb28d19892" +checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56" dependencies = [ "proc-macro2", "quote", @@ -1605,11 +1604,11 @@ dependencies = [ [[package]] name = "der-parser" -version = "8.1.0" +version = "8.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42d4bc9b0db0a0df9ae64634ac5bdefb7afcb534e182275ca0beadbe486701c1" +checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" dependencies = [ - "asn1-rs 0.5.1", + "asn1-rs 0.5.2", "displaydoc", "nom", "num-bigint", @@ -1706,7 +1705,7 @@ version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ - "block-buffer 0.10.3", + "block-buffer 0.10.4", "crypto-common", "subtle", ] @@ -1789,9 +1788,9 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "dtoa" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c00704156a7de8df8da0911424e30c2049957b0a714542a44e05fe693dd85313" +checksum = "65d09067bfacaa79114679b279d7f5885b53295b1e2cfb4e79c8e4bd3d633169" [[package]] name = "dyn-clonable" @@ -2039,9 +2038,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.1.17" +version = "0.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a214f5bb88731d436478f3ae1f8a277b62124089ba9fb67f4f93fb100ef73c90" +checksum = "93ace6ec7cc19c8ed33a32eaa9ea692d7faea05006b5356b9e2b668ec4bc3955" [[package]] name = "file-per-thread-logger" @@ -3260,9 +3259,9 @@ checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" [[package]] name = "io-lifetimes" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" +checksum = "cfa919a82ea574332e2de6e74b4c36e74d41982b335080fa59d4ef31be20fdf3" dependencies = [ "libc", "windows-sys 0.45.0", @@ -3299,8 +3298,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" dependencies = [ "hermit-abi 0.3.1", - "io-lifetimes 1.0.5", - "rustix 0.36.8", + "io-lifetimes 1.0.6", + "rustix 0.36.9", "windows-sys 0.45.0", ] @@ -3315,9 +3314,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" +checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" [[package]] name = "jobserver" @@ -3687,23 +3686,23 @@ checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" [[package]] name = "libp2p" -version = "0.50.0" +version = "0.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e0a0d2f693675f49ded13c5d510c48b78069e23cbd9108d7ccd59f6dc568819" +checksum = "3eb49f950659c645e0606461026387916f91bb2f6058c57ea1df4fab053cc676" dependencies = [ "bytes", "futures", "futures-timer", "getrandom 0.2.8", "instant", - "libp2p-core 0.38.0", + "libp2p-core", "libp2p-dns", "libp2p-identify", "libp2p-kad", "libp2p-mdns", "libp2p-metrics", "libp2p-mplex", - "libp2p-noise 0.41.0", + "libp2p-noise", "libp2p-ping", "libp2p-quic", "libp2p-request-response", @@ -3713,46 +3712,12 @@ dependencies = [ "libp2p-webrtc", "libp2p-websocket", "libp2p-yamux", - "multiaddr 0.16.0", + "multiaddr", "parking_lot 0.12.1", "pin-project", "smallvec", ] -[[package]] -name = "libp2p-core" -version = "0.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6a8fcd392ff67af6cc3f03b1426c41f7f26b6b9aff2dc632c1c56dd649e571f" -dependencies = [ - "asn1_der", - "bs58", - "ed25519-dalek", - "either", - "fnv", - "futures", - "futures-timer", - "instant", - "log", - "multiaddr 0.16.0", - "multihash 0.16.3", - "multistream-select", - "once_cell", - "parking_lot 0.12.1", - "pin-project", - "prost", - "prost-build", - "rand 0.8.5", - "rw-stream-sink", - "sec1", - "sha2 0.10.6", - "smallvec", - "thiserror", - "unsigned-varint", - "void", - "zeroize", -] - [[package]] name = "libp2p-core" version = "0.39.0" @@ -3768,7 +3733,7 @@ dependencies = [ "futures-timer", "instant", "log", - "multiaddr 0.17.0", + "multiaddr", "multihash 0.17.0", "multistream-select", "once_cell", @@ -3789,12 +3754,12 @@ dependencies = [ [[package]] name = "libp2p-dns" -version = "0.38.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e42a271c1b49f789b92f7fc87749fa79ce5c7bdc88cbdfacb818a4bca47fec5" +checksum = "146ff7034daae62077c415c2376b8057368042df6ab95f5432ad5e88568b1554" dependencies = [ "futures", - "libp2p-core 0.38.0", + "libp2p-core", "log", "parking_lot 0.12.1", "smallvec", @@ -3803,17 +3768,18 @@ dependencies = [ [[package]] name = "libp2p-identify" -version = "0.41.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c052d0026f4817b44869bfb6810f4e1112f43aec8553f2cb38881c524b563abf" +checksum = "678c88be066a7fabd2b82fb78ddb9cacb7ad950a20c1acec481c27b312cc6dab" dependencies = [ "asynchronous-codec", + "either", "futures", "futures-timer", - "libp2p-core 0.38.0", + "libp2p-core", "libp2p-swarm", "log", - "lru", + "lru 0.9.0", "prost", "prost-build", "prost-codec", @@ -3824,9 +3790,9 @@ dependencies = [ [[package]] name = "libp2p-kad" -version = "0.42.1" +version = "0.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2766dcd2be8c87d5e1f35487deb22d765f49c6ae1251b3633efe3b25698bd3d2" +checksum = "7fc257f261ecf91bf55dd2ab439c928a05e3099c182d66cd332b28a203a98c84" dependencies = [ "arrayvec 0.7.2", "asynchronous-codec", @@ -3836,7 +3802,7 @@ dependencies = [ "futures", "futures-timer", "instant", - "libp2p-core 0.38.0", + "libp2p-core", "libp2p-swarm", "log", "prost", @@ -3852,14 +3818,14 @@ dependencies = [ [[package]] name = "libp2p-mdns" -version = "0.42.0" +version = "0.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04f378264aade9872d6ccd315c0accc18be3a35d15fc1b9c36e5b6f983b62b5b" +checksum = "687a0b54ee8f7106be36f012b32bd30faceeb4cd857ebad96e512566886ffea5" dependencies = [ "data-encoding", "futures", "if-watch", - "libp2p-core 0.38.0", + "libp2p-core", "libp2p-swarm", "log", "rand 0.8.5", @@ -3872,11 +3838,11 @@ dependencies = [ [[package]] name = "libp2p-metrics" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ad8a64f29da86005c86a4d2728b8a0719e9b192f4092b609fd8790acb9dec55" +checksum = "a42ec91e227d7d0dafa4ce88b333cdf5f277253873ab087555c92798db2ddd46" dependencies = [ - "libp2p-core 0.38.0", + "libp2p-core", "libp2p-identify", "libp2p-kad", "libp2p-ping", @@ -3886,14 +3852,14 @@ dependencies = [ [[package]] name = "libp2p-mplex" -version = "0.38.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03805b44107aa013e7cbbfa5627b31c36cbedfdfb00603c0311998882bc4bace" +checksum = "4d34780b514b159e6f3fd70ba3e72664ec89da28dca2d1e7856ee55e2c7031ba" dependencies = [ "asynchronous-codec", "bytes", "futures", - "libp2p-core 0.38.0", + "libp2p-core", "log", "nohash-hasher", "parking_lot 0.12.1", @@ -3902,29 +3868,6 @@ dependencies = [ "unsigned-varint", ] -[[package]] -name = "libp2p-noise" -version = "0.41.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a978cb57efe82e892ec6f348a536bfbd9fee677adbe5689d7a93ad3a9bffbf2e" -dependencies = [ - "bytes", - "curve25519-dalek 3.2.0", - "futures", - "libp2p-core 0.38.0", - "log", - "once_cell", - "prost", - "prost-build", - "rand 0.8.5", - "sha2 0.10.6", - "snow", - "static_assertions", - "thiserror", - "x25519-dalek 1.1.1", - "zeroize", -] - [[package]] name = "libp2p-noise" version = "0.42.0" @@ -3934,7 +3877,7 @@ dependencies = [ "bytes", "curve25519-dalek 3.2.0", "futures", - "libp2p-core 0.39.0", + "libp2p-core", "log", "once_cell", "prost", @@ -3950,14 +3893,15 @@ dependencies = [ [[package]] name = "libp2p-ping" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "929fcace45a112536e22b3dcfd4db538723ef9c3cb79f672b98be2cc8e25f37f" +checksum = "3e57759c19c28a73ef1eb3585ca410cefb72c1a709fcf6de1612a378e4219202" dependencies = [ + "either", "futures", "futures-timer", "instant", - "libp2p-core 0.38.0", + "libp2p-core", "libp2p-swarm", "log", "rand 0.8.5", @@ -3974,7 +3918,7 @@ dependencies = [ "futures", "futures-timer", "if-watch", - "libp2p-core 0.39.0", + "libp2p-core", "libp2p-tls", "log", "parking_lot 0.12.1", @@ -3987,15 +3931,15 @@ dependencies = [ [[package]] name = "libp2p-request-response" -version = "0.23.0" +version = "0.24.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3236168796727bfcf4927f766393415361e2c644b08bedb6a6b13d957c9a4884" +checksum = "872b9d63fed44d9f81110c30be6c7ca5593a093576d2a95c5d018051e294d2e9" dependencies = [ "async-trait", "bytes", "futures", "instant", - "libp2p-core 0.38.0", + "libp2p-core", "libp2p-swarm", "log", "rand 0.8.5", @@ -4005,16 +3949,16 @@ dependencies = [ [[package]] name = "libp2p-swarm" -version = "0.41.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a35472fe3276b3855c00f1c032ea8413615e030256429ad5349cdf67c6e1a0" +checksum = "92c22a83d70703d140092c969c1ca06ecdffff8ca7ce8ac2fd3b7eb2c1f0da86" dependencies = [ "either", "fnv", "futures", "futures-timer", "instant", - "libp2p-core 0.38.0", + "libp2p-core", "libp2p-swarm-derive", "log", "pin-project", @@ -4027,9 +3971,9 @@ dependencies = [ [[package]] name = "libp2p-swarm-derive" -version = "0.31.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d527d5827582abd44a6d80c07ff8b50b4ee238a8979e05998474179e79dc400" +checksum = "0fba456131824ab6acd4c7bf61e9c0f0a3014b5fc9868ccb8e10d344594cdc4f" dependencies = [ "heck", "quote", @@ -4038,15 +3982,15 @@ dependencies = [ [[package]] name = "libp2p-tcp" -version = "0.38.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b257baf6df8f2df39678b86c578961d48cc8b68642a12f0f763f56c8e5858d" +checksum = "33d33698596d7722d85d3ab0c86c2c322254fce1241e91208e3679b4eb3026cf" dependencies = [ "futures", "futures-timer", "if-watch", "libc", - "libp2p-core 0.38.0", + "libp2p-core", "log", "socket2", "tokio", @@ -4060,7 +4004,7 @@ checksum = "e9baf6f6292149e124ee737d9a79dbee783f29473fc368c7faad9d157841078a" dependencies = [ "futures", "futures-rustls", - "libp2p-core 0.39.0", + "libp2p-core", "rcgen 0.10.0", "ring", "rustls 0.20.8", @@ -4072,13 +4016,13 @@ dependencies = [ [[package]] name = "libp2p-wasm-ext" -version = "0.38.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bb1a35299860e0d4b3c02a3e74e3b293ad35ae0cee8a056363b0c862d082069" +checksum = "77dff9d32353a5887adb86c8afc1de1a94d9e8c3bc6df8b2201d7cdf5c848f43" dependencies = [ "futures", "js-sys", - "libp2p-core 0.38.0", + "libp2p-core", "parity-send-wrapper", "wasm-bindgen", "wasm-bindgen-futures", @@ -4097,8 +4041,8 @@ dependencies = [ "futures-timer", "hex", "if-watch", - "libp2p-core 0.39.0", - "libp2p-noise 0.42.0", + "libp2p-core", + "libp2p-noise", "log", "multihash 0.17.0", "prost", @@ -4117,14 +4061,14 @@ dependencies = [ [[package]] name = "libp2p-websocket" -version = "0.40.0" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d705506030d5c0aaf2882437c70dab437605f21c5f9811978f694e6917a3b54" +checksum = "111273f7b3d3510524c752e8b7a5314b7f7a1fee7e68161c01a7d72cbb06db9f" dependencies = [ "either", "futures", "futures-rustls", - "libp2p-core 0.38.0", + "libp2p-core", "log", "parking_lot 0.12.1", "quicksink", @@ -4136,12 +4080,12 @@ dependencies = [ [[package]] name = "libp2p-yamux" -version = "0.42.0" +version = "0.43.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f63594a0aa818642d9d4915c791945053877253f08a3626f13416b5cd928a29" +checksum = "d048cd82f72c8800655aa1ee9b808ea8c9d523a649d3579b3ef0cfe23952d7fd" dependencies = [ "futures", - "libp2p-core 0.38.0", + "libp2p-core", "log", "parking_lot 0.12.1", "thiserror", @@ -4314,6 +4258,15 @@ dependencies = [ "hashbrown 0.12.3", ] +[[package]] +name = "lru" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71e7d46de488603ffdd5f30afbc64fbba2378214a2c3a2fb83abf3d33126df17" +dependencies = [ + "hashbrown 0.13.2", +] + [[package]] name = "lru-cache" version = "0.1.2" @@ -4412,7 +4365,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix 0.36.8", + "rustix 0.36.9", ] [[package]] @@ -4572,24 +4525,6 @@ dependencies = [ "syn", ] -[[package]] -name = "multiaddr" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aebdb21e90f81d13ed01dc84123320838e53963c2ca94b60b305d3fa64f31e" -dependencies = [ - "arrayref", - "byteorder", - "data-encoding", - "multibase", - "multihash 0.16.3", - "percent-encoding", - "serde", - "static_assertions", - "unsigned-varint", - "url", -] - [[package]] name = "multiaddr" version = "0.17.0" @@ -4685,9 +4620,9 @@ dependencies = [ [[package]] name = "nalgebra" -version = "0.32.1" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6515c882ebfddccaa73ead7320ca28036c4bc84c9bcca3cc0cbba8efe89223a" +checksum = "d68d47bba83f9e2006d117a9a33af1524e655516b8919caac694427a6fb1e511" dependencies = [ "approx", "matrixmultiply", @@ -4774,9 +4709,9 @@ dependencies = [ [[package]] name = "netlink-sys" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "260e21fbb6f3d253a14df90eb0000a6066780a15dd901a7519ce02d77a94985b" +checksum = "6471bf08e7ac0135876a9581bf3217ef0333c191c128d34878079f42ee150411" dependencies = [ "bytes", "futures", @@ -5294,7 +5229,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" dependencies = [ - "asn1-rs 0.5.1", + "asn1-rs 0.5.2", ] [[package]] @@ -7001,9 +6936,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" +checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" [[package]] name = "pbkdf2" @@ -7055,9 +6990,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.5.5" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "028accff104c4e513bad663bbcd2ad7cfd5304144404c31ed0a77ac103d00660" +checksum = "8cbd939b234e95d72bc393d51788aec68aeeb5d51e748ca08ff3aad58cb722f7" dependencies = [ "thiserror", "ucd-trie", @@ -7065,9 +7000,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.5.5" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ac3922aac69a40733080f53c1ce7f91dcf57e1a5f6c52f421fadec7fbdc4b69" +checksum = "a81186863f3d0a27340815be8f2078dd8050b14cd71913db9fbda795e5f707d7" dependencies = [ "pest", "pest_generator", @@ -7075,9 +7010,9 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.5" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d06646e185566b5961b4058dd107e0a7f56e77c3f484549fb119867773c0f202" +checksum = "75a1ef20bf3193c15ac345acb32e26b3dc3223aff4d77ae4fc5359567683796b" dependencies = [ "pest", "pest_meta", @@ -7088,9 +7023,9 @@ dependencies = [ [[package]] name = "pest_meta" -version = "2.5.5" +version = "2.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6f60b2ba541577e2a0c307c8f39d1439108120eb7903adeb6497fa880c59616" +checksum = "5e3b284b1f13a20dc5ebc90aff59a51b8d7137c221131b52a7260c08cbc1cc80" dependencies = [ "once_cell", "pest", @@ -7203,16 +7138,18 @@ dependencies = [ [[package]] name = "polling" -version = "2.5.2" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22122d5ec4f9fe1b3916419b76be1e80bcb93f618d071d2edf841b137b2a2bd6" +checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa" dependencies = [ "autocfg", + "bitflags", "cfg-if", + "concurrent-queue", "libc", "log", - "wepoll-ffi", - "windows-sys 0.42.0", + "pin-project-lite 0.2.9", + "windows-sys 0.45.0", ] [[package]] @@ -7300,9 +7237,9 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e97e3215779627f01ee256d2fad52f3d95e8e1c11e9fc6fd08f7cd455d5d5c78" +checksum = "4ebcd279d20a4a0a2404a33056388e950504d891c855c7975b9a8fef75f3bf04" dependencies = [ "proc-macro2", "syn", @@ -7380,21 +7317,21 @@ dependencies = [ [[package]] name = "prometheus-client" -version = "0.18.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83cd1b99916654a69008fd66b4f9397fbe08e6e51dfe23d4417acf5d3b8cb87c" +checksum = "5d6fa99d535dd930d1249e6c79cb3c2915f9172a540fe2b02a4c8f9ca954721e" dependencies = [ "dtoa", "itoa", "parking_lot 0.12.1", - "prometheus-client-derive-text-encode", + "prometheus-client-derive-encode", ] [[package]] -name = "prometheus-client-derive-text-encode" -version = "0.3.0" +name = "prometheus-client-derive-encode" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd" +checksum = "72b6a5217beb0ad503ee7fa752d451c905113d70721b937126158f3106a48cc1" dependencies = [ "proc-macro2", "quote", @@ -7634,9 +7571,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.6.1" +version = "1.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" +checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" dependencies = [ "either", "rayon-core", @@ -7644,9 +7581,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.10.2" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b" +checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" dependencies = [ "crossbeam-channel", "crossbeam-deque", @@ -7701,18 +7638,18 @@ dependencies = [ [[package]] name = "ref-cast" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c78fb8c9293bcd48ef6fce7b4ca950ceaf21210de6e105a883ee280c0f7b9ed" +checksum = "a9af2cf09ef80e610097515e80095b7f76660a92743c4185aff5406cd5ce3dd5" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.14" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f9c0c92af03644e4806106281fe2e068ac5bc0ae74a707266d06ea27bccee5f" +checksum = "9c501201393982e275433bc55de7d6ae6f00e7699cd5572c5b57581cd69c881b" dependencies = [ "proc-macro2", "quote", @@ -7937,13 +7874,13 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.8" +version = "0.36.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644" +checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc" dependencies = [ "bitflags", "errno", - "io-lifetimes 1.0.5", + "io-lifetimes 1.0.6", "libc", "linux-raw-sys 0.1.4", "windows-sys 0.45.0", @@ -7997,9 +7934,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.11" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" +checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" [[package]] name = "rusty-fork" @@ -8025,9 +7962,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.12" +version = "1.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" +checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" [[package]] name = "safe-mix" @@ -8643,7 +8580,7 @@ dependencies = [ "assert_matches", "criterion", "env_logger 0.9.3", - "lru", + "lru 0.8.1", "num_cpus", "parity-scale-codec", "parking_lot 0.12.1", @@ -8711,7 +8648,7 @@ dependencies = [ "once_cell", "parity-scale-codec", "paste", - "rustix 0.36.8", + "rustix 0.36.9", "sc-allocator", "sc-executor-common", "sc-runtime-test", @@ -8769,7 +8706,7 @@ dependencies = [ "ip_network", "libp2p", "log", - "lru", + "lru 0.8.1", "mockall", "multistream-select", "parity-scale-codec", @@ -8869,7 +8806,7 @@ dependencies = [ "futures-timer", "libp2p", "log", - "lru", + "lru 0.8.1", "quickcheck", "sc-network-common", "sc-peerset", @@ -8911,7 +8848,7 @@ dependencies = [ "futures-timer", "libp2p", "log", - "lru", + "lru 0.8.1", "mockall", "parity-scale-codec", "prost", @@ -9519,9 +9456,9 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "scratch" -version = "1.0.3" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" +checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" [[package]] name = "sct" @@ -9654,18 +9591,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.152" +version = "1.0.154" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" +checksum = "8cdd151213925e7f1ab45a9bbfb129316bd00799784b174b7cc7bcd16961c49e" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.152" +version = "1.0.154" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" +checksum = "4fc80d722935453bcafdc2c9a73cd6fac4dc1938f0346035d84bf99fa9e33217" dependencies = [ "proc-macro2", "quote", @@ -9674,9 +9611,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76" +checksum = "1c533a59c9d8a93a09c6ab31f0fd5e5f4dd1b8fc9434804029839884765d04ea" dependencies = [ "itoa", "ryu", @@ -9852,9 +9789,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" +checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" dependencies = [ "libc", "winapi", @@ -10007,7 +9944,7 @@ version = "4.0.0-dev" dependencies = [ "futures", "log", - "lru", + "lru 0.8.1", "parity-scale-codec", "parking_lot 0.12.1", "sp-api", @@ -11180,7 +11117,7 @@ dependencies = [ "cfg-if", "fastrand", "redox_syscall", - "rustix 0.36.8", + "rustix 0.36.9", "windows-sys 0.42.0", ] @@ -11207,18 +11144,18 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.38" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.38" +version = "1.0.39" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" dependencies = [ "proc-macro2", "quote", @@ -11353,9 +11290,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.25.0" +version = "1.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af" +checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64" dependencies = [ "autocfg", "bytes", @@ -11368,7 +11305,7 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.42.0", + "windows-sys 0.45.0", ] [[package]] @@ -11728,9 +11665,9 @@ dependencies = [ [[package]] name = "trybuild" -version = "1.0.77" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a44da5a6f2164c8e14d3bbc0657d69c5966af9f5f6930d4f600b1f5c4a673413" +checksum = "db3115bddce1b5f52dd4b5e0ec8298a66ce733e4cc6759247dc2d1c11508ec38" dependencies = [ "basic-toml", "dissimilar", @@ -11805,15 +11742,15 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.10" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" +checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" [[package]] name = "unicode-ident" -version = "1.0.6" +version = "1.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" +checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" [[package]] name = "unicode-normalization" @@ -12049,9 +11986,9 @@ checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" [[package]] name = "wasm-encoder" -version = "0.24.1" +version = "0.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68f7d56227d910901ce12dfd19acc40c12687994dfb3f57c90690f80be946ec5" +checksum = "4eff853c4f09eec94d76af527eddad4e9de13b11d6286a1ef7134bc30135a2b7" dependencies = [ "leb128", ] @@ -12214,9 +12151,9 @@ dependencies = [ [[package]] name = "wasmtime" -version = "6.0.0" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9010891d0b8e367c3be94ca35d7bc25c1de3240463bb1d61bcfc8c2233c4e0d0" +checksum = "f6e89f9819523447330ffd70367ef4a18d8c832e24e8150fe054d1d912841632" dependencies = [ "anyhow", "bincode", @@ -12242,18 +12179,18 @@ dependencies = [ [[package]] name = "wasmtime-asm-macros" -version = "6.0.0" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65805c663eaa8257b910666f6d4b056b5c7329750da754ba5df54f3af7dbf35c" +checksum = "9bd3a5e46c198032da934469f3a6e48649d1f9142438e4fd4617b68a35644b8a" dependencies = [ "cfg-if", ] [[package]] name = "wasmtime-cache" -version = "6.0.0" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2049ddfc1b10efc3c5591d0e84b9570ca50478f8818f3bfabb1a467918f53fb4" +checksum = "b389ae9b678b9c3851091a4804f4182d688d27aff7abc9aa37fa7be37d8ecffa" dependencies = [ "anyhow", "base64 0.13.1", @@ -12261,7 +12198,7 @@ dependencies = [ "directories-next", "file-per-thread-logger", "log", - "rustix 0.36.8", + "rustix 0.36.9", "serde", "sha2 0.10.6", "toml", @@ -12271,9 +12208,9 @@ dependencies = [ [[package]] name = "wasmtime-cranelift" -version = "6.0.0" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9065cad6a724fa838ec8497567e0b23acc26417bb2449f8d9d2021925c72f2" +checksum = "59b2c92a08c0db6efffd88fdc97d7aa9c7c63b03edb0971dbca745469f820e8c" dependencies = [ "anyhow", "cranelift-codegen", @@ -12292,9 +12229,9 @@ dependencies = [ [[package]] name = "wasmtime-environ" -version = "6.0.0" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f964bb0b91fa021b8d1b488c62cc77b346c1dae6e3ebd010050b57c1f2ca657" +checksum = "9a6db9fc52985ba06ca601f2ff0ff1f526c5d724c7ac267b47326304b0c97883" dependencies = [ "anyhow", "cranelift-entity", @@ -12311,9 +12248,9 @@ dependencies = [ [[package]] name = "wasmtime-jit" -version = "6.0.0" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7a1d06f5d109539e0168fc74fa65e3948ac8dac3bb8cdbd08b62b36a0ae27b8" +checksum = "b77e3a52cd84d0f7f18554afa8060cfe564ccac61e3b0802d3fd4084772fa5f6" dependencies = [ "addr2line 0.17.0", "anyhow", @@ -12335,20 +12272,20 @@ dependencies = [ [[package]] name = "wasmtime-jit-debug" -version = "6.0.0" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f76ef2e410329aaf8555ac6571d6fe07711be0646dcdf7ff3ab750a42ed2e583" +checksum = "d0245e8a9347017c7185a72e215218a802ff561545c242953c11ba00fccc930f" dependencies = [ "object 0.29.0", "once_cell", - "rustix 0.36.8", + "rustix 0.36.9", ] [[package]] name = "wasmtime-jit-icache-coherence" -version = "6.0.0" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec1fd0f0dd79e7cc0f55b102e320d7c77ab76cd272008a8fd98e25b5777e2636" +checksum = "67d412e9340ab1c83867051d8d1d7c90aa8c9afc91da086088068e2734e25064" dependencies = [ "cfg-if", "libc", @@ -12357,9 +12294,9 @@ dependencies = [ [[package]] name = "wasmtime-runtime" -version = "6.0.0" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271aef9b4ca2e953a866293683f2db33cda46f6933c5e431e68d8373723d4ab6" +checksum = "d594e791b5fdd4dbaf8cf7ae62f2e4ff85018ce90f483ca6f42947688e48827d" dependencies = [ "anyhow", "cc", @@ -12372,7 +12309,7 @@ dependencies = [ "memoffset 0.6.5", "paste", "rand 0.8.5", - "rustix 0.36.8", + "rustix 0.36.9", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-jit-debug", @@ -12381,9 +12318,9 @@ dependencies = [ [[package]] name = "wasmtime-types" -version = "6.0.0" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b18144b0e45479a830ac9fcebfc71a16d90dc72d8ebd5679700eb3bfe974d7df" +checksum = "a6688d6f96d4dbc1f89fab626c56c1778936d122b5f4ae7a57c2eb42b8d982e2" dependencies = [ "cranelift-entity", "serde", @@ -12393,9 +12330,9 @@ dependencies = [ [[package]] name = "wast" -version = "54.0.1" +version = "55.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d48d9d731d835f4f8dacbb8de7d47be068812cb9877f5c60d408858778d8d2a" +checksum = "4984d3e1406571f4930ba5cf79bd70f75f41d0e87e17506e0bd19b0e5d085f05" dependencies = [ "leb128", "memchr", @@ -12405,9 +12342,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.60" +version = "1.0.61" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1db2e3ed05ea31243761439194bec3af6efbbaf87c4c8667fb879e4f23791a0" +checksum = "af2b53f4da14db05d32e70e9c617abdf6620c575bd5dd972b7400037b4df2091" dependencies = [ "wast", ] @@ -12521,7 +12458,7 @@ dependencies = [ "byteorder", "ccm", "curve25519-dalek 3.2.0", - "der-parser 8.1.0", + "der-parser 8.2.0", "elliptic-curve", "hkdf", "hmac 0.12.1", @@ -12663,15 +12600,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "wepoll-ffi" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" -dependencies = [ - "cc", -] - [[package]] name = "which" version = "4.4.0" @@ -12919,10 +12847,10 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" dependencies = [ - "asn1-rs 0.5.1", + "asn1-rs 0.5.2", "base64 0.13.1", "data-encoding", - "der-parser 8.1.0", + "der-parser 8.2.0", "lazy_static", "nom", "oid-registry 0.6.1", diff --git a/client/authority-discovery/Cargo.toml b/client/authority-discovery/Cargo.toml index b37507662bfeb..a727419c9f6cc 100644 --- a/client/authority-discovery/Cargo.toml +++ b/client/authority-discovery/Cargo.toml @@ -21,7 +21,7 @@ codec = { package = "parity-scale-codec", version = "3.2.2", default-features = futures = "0.3.21" futures-timer = "3.0.1" ip_network = "0.4.1" -libp2p = { version = "0.50.0", features = ["kad"] } +libp2p = { version = "0.51.0", features = ["kad"] } log = "0.4.17" prost = "0.11" rand = "0.8.5" diff --git a/client/cli/Cargo.toml b/client/cli/Cargo.toml index c0da53ad129d5..f534d9521c0c3 100644 --- a/client/cli/Cargo.toml +++ b/client/cli/Cargo.toml @@ -18,7 +18,7 @@ chrono = "0.4.10" clap = { version = "4.0.9", features = ["derive", "string"] } fdlimit = "0.2.1" futures = "0.3.21" -libp2p = "0.50.0" +libp2p = "0.51.0" log = "0.4.17" names = { version = "0.13.0", default-features = false } parity-scale-codec = "3.2.2" diff --git a/client/consensus/common/Cargo.toml b/client/consensus/common/Cargo.toml index d9e80e1e5ce99..cf7cda2b83c55 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 = "0.50.0" +libp2p = "0.51.0" log = "0.4.17" mockall = "0.11.3" parking_lot = "0.12.1" diff --git a/client/network-gossip/Cargo.toml b/client/network-gossip/Cargo.toml index 7811e86c095ba..d81b96ea5385b 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.8.2" futures = "0.3.21" futures-timer = "3.0.1" -libp2p = "0.50.0" +libp2p = "0.51.0" log = "0.4.17" lru = "0.8.1" tracing = "0.1.29" diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index 5a918bebd626e..a33d4893e4bb1 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -25,7 +25,7 @@ fnv = "1.0.6" futures = "0.3.21" futures-timer = "3.0.2" ip_network = "0.4.1" -libp2p = { version = "0.50.0", features = ["dns", "identify", "kad", "macros", "mdns", "mplex", "noise", "ping", "tcp", "tokio", "yamux", "websocket"] } +libp2p = { version = "0.51.0", features = ["dns", "identify", "kad", "macros", "mdns", "mplex", "noise", "ping", "tcp", "tokio", "yamux", "websocket"] } log = "0.4.17" lru = "0.8.1" mockall = "0.11.3" diff --git a/client/network/bitswap/Cargo.toml b/client/network/bitswap/Cargo.toml index 0bbb5ff09e4b9..983aca3160f4a 100644 --- a/client/network/bitswap/Cargo.toml +++ b/client/network/bitswap/Cargo.toml @@ -18,7 +18,7 @@ prost-build = "0.11" [dependencies] cid = "0.8.6" futures = "0.3.21" -libp2p = "0.50.0" +libp2p = "0.51.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 c5f9d6d4cb027..35c61461604e0 100644 --- a/client/network/common/Cargo.toml +++ b/client/network/common/Cargo.toml @@ -25,7 +25,7 @@ codec = { package = "parity-scale-codec", version = "3.2.2", features = [ ] } futures = "0.3.21" futures-timer = "3.0.2" -libp2p = { version = "0.50.0", features = ["request-response", "kad"] } +libp2p = { version = "0.51.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/light/Cargo.toml b/client/network/light/Cargo.toml index f3e94790df61e..48ce067b5c976 100644 --- a/client/network/light/Cargo.toml +++ b/client/network/light/Cargo.toml @@ -21,7 +21,7 @@ codec = { package = "parity-scale-codec", version = "3.2.2", features = [ "derive", ] } futures = "0.3.21" -libp2p = "0.50.0" +libp2p = "0.51.0" log = "0.4.16" prost = "0.11" sp-blockchain = { version = "4.0.0-dev", path = "../../../primitives/blockchain" } diff --git a/client/network/src/discovery.rs b/client/network/src/discovery.rs index 6a8c777cac9c6..201ee73ed5d70 100644 --- a/client/network/src/discovery.rs +++ b/client/network/src/discovery.rs @@ -51,9 +51,9 @@ use futures::prelude::*; use futures_timer::Delay; use ip_network::IpNetwork; use libp2p::{ - core::{connection::ConnectionId, Multiaddr, PeerId, PublicKey}, + core::{Multiaddr, PeerId, PublicKey}, kad::{ - handler::KademliaHandlerProto, + handler::KademliaHandlerIn, record::{ self, store::{MemoryStore, RecordStore}, @@ -65,11 +65,11 @@ use libp2p::{ multiaddr::Protocol, swarm::{ behaviour::{ - toggle::{Toggle, ToggleIntoConnectionHandler}, + toggle::{Toggle, ToggleConnectionHandler}, DialFailure, FromSwarm, NewExternalAddr, }, - ConnectionHandler, DialError, IntoConnectionHandler, NetworkBehaviour, - NetworkBehaviourAction, PollParameters, + ConnectionHandler, ConnectionId, DialError, NetworkBehaviour, NetworkBehaviourAction, + PollParameters, THandler, THandlerOutEvent, }, }; use log::{debug, info, trace, warn}; @@ -483,14 +483,36 @@ pub enum DiscoveryOut { } impl NetworkBehaviour for DiscoveryBehaviour { - type ConnectionHandler = ToggleIntoConnectionHandler>; + type ConnectionHandler = ToggleConnectionHandler>; type OutEvent = DiscoveryOut; - fn new_handler(&mut self) -> Self::ConnectionHandler { - self.kademlia.new_handler() + fn handle_established_inbound_connection( + &mut self, + connection_id: ConnectionId, + peer: PeerId, + local_addr: &Multiaddr, + remote_addr: &Multiaddr, + ) -> Result, ConnectionDenied> { + unimplemented!(""); } - fn addresses_of_peer(&mut self, peer_id: &PeerId) -> Vec { + fn handle_established_outbound_connection( + &mut self, + connection_id: ConnectionId, + peer: PeerId, + addr: &Multiaddr, + role_override: Endpoint, + ) -> Result, ConnectionDenied> { + unimplemented!(""); + } + + fn handle_pending_outbound_connection( + &mut self, + _connection_id: ConnectionId, + _maybe_peer: Option, + _addresses: &[Multiaddr], + _effective_role: Endpoint, + ) -> Result, ConnectionDenied> { let mut list = self .permanent_addresses .iter() @@ -521,7 +543,7 @@ impl NetworkBehaviour for DiscoveryBehaviour { trace!(target: "sub-libp2p", "Addresses of {:?}: {:?}", peer_id, list); - list + Ok(list) } fn on_swarm_event(&mut self, event: FromSwarm) { @@ -602,8 +624,7 @@ impl NetworkBehaviour for DiscoveryBehaviour { &mut self, peer_id: PeerId, connection_id: ConnectionId, - event: <::Handler as - ConnectionHandler>::OutEvent, + event: THandlerOutEvent, ) { self.kademlia.on_connection_handler_event(peer_id, connection_id, event); } @@ -612,7 +633,7 @@ impl NetworkBehaviour for DiscoveryBehaviour { &mut self, cx: &mut Context, params: &mut impl PollParameters, - ) -> Poll> { + ) -> Poll>> { // Immediately process the content of `discovered`. if let Some(ev) = self.pending_events.pop_front() { return Poll::Ready(NetworkBehaviourAction::GenerateEvent(ev)) @@ -820,8 +841,8 @@ impl NetworkBehaviour for DiscoveryBehaviour { warn!(target: "sub-libp2p", "Libp2p => Unhandled Kademlia event: {:?}", e) }, }, - NetworkBehaviourAction::Dial { opts, handler } => - return Poll::Ready(NetworkBehaviourAction::Dial { opts, handler }), + NetworkBehaviourAction::Dial { opts } => + return Poll::Ready(NetworkBehaviourAction::Dial { opts }), NetworkBehaviourAction::NotifyHandler { peer_id, handler, event } => return Poll::Ready(NetworkBehaviourAction::NotifyHandler { peer_id, diff --git a/client/network/src/peer_info.rs b/client/network/src/peer_info.rs index 1cf0c928a4067..fd38a66154468 100644 --- a/client/network/src/peer_info.rs +++ b/client/network/src/peer_info.rs @@ -16,10 +16,11 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +use either::Either; use fnv::FnvHashMap; use futures::prelude::*; use libp2p::{ - core::{connection::ConnectionId, either::EitherOutput, ConnectedPoint, PeerId, PublicKey}, + core::{ConnectedPoint, Endpoint, PeerId, PublicKey}, identify::{ Behaviour as Identify, Config as IdentifyConfig, Event as IdentifyEvent, Info as IdentifyInfo, @@ -30,8 +31,9 @@ use libp2p::{ AddressChange, ConnectionClosed, ConnectionEstablished, DialFailure, FromSwarm, ListenFailure, }, - ConnectionHandler, IntoConnectionHandler, IntoConnectionHandlerSelect, NetworkBehaviour, - NetworkBehaviourAction, PollParameters, + ConnectionDenied, ConnectionHandler, ConnectionId, IntoConnectionHandlerSelect, + NetworkBehaviour, NetworkBehaviourAction, PollParameters, THandler, THandlerInEvent, + THandlerOutEvent, }, Multiaddr, }; @@ -180,14 +182,70 @@ impl NetworkBehaviour for PeerInfoBehaviour { >; type OutEvent = PeerInfoEvent; - fn new_handler(&mut self) -> Self::ConnectionHandler { - IntoConnectionHandler::select(self.ping.new_handler(), self.identify.new_handler()) + fn handle_pending_inbound_connection( + &mut self, + connection_id: ConnectionId, + local_addr: &Multiaddr, + remote_addr: &Multiaddr, + ) -> Result<(), ConnectionDenied> { + self.ping + .handle_pending_inbound_connection(connection_id, local_addr, remote_addr)?; + self.identify + .handle_pending_inbound_connection(connection_id, local_addr, remote_addr) + } + + fn handle_pending_outbound_connection( + &mut self, + connection_id: ConnectionId, + maybe_peer: Option, + addresses: &[Multiaddr], + effective_role: Endpoint, + ) -> Result, ConnectionDenied> { + // Only `Discovery::handle_pending_outbound_connection` must be returning addresses to + // ensure that we don't return unwanted addresses. + Ok(Vec::new()) + } + + fn handle_established_inbound_connection( + &mut self, + connection_id: ConnectionId, + peer: PeerId, + local_addr: &Multiaddr, + remote_addr: &Multiaddr, + ) -> Result, ConnectionDenied> { + self.ping.handle_established_inbound_connection( + connection_id, + peer, + local_addr, + remote_addr, + )?; + self.identify.handle_established_inbound_connection( + connection_id, + peer, + local_addr, + remote_addr, + ) } - fn addresses_of_peer(&mut self, _: &PeerId) -> Vec { - // Only `Discovery::addresses_of_peer` must be returning addresses to ensure that we - // don't return unwanted addresses. - Vec::new() + fn handle_established_outbound_connection( + &mut self, + connection_id: ConnectionId, + peer: PeerId, + addr: &Multiaddr, + role_override: Endpoint, + ) -> Result, ConnectionDenied> { + self.ping.handle_established_outbound_connection( + connection_id, + peer, + addr, + role_override, + )?; + self.identify.handle_established_outbound_connection( + connection_id, + peer, + addr, + role_override, + ) } fn on_swarm_event(&mut self, event: FromSwarm) { @@ -247,34 +305,39 @@ impl NetworkBehaviour for PeerInfoBehaviour { "Unknown connection to {:?} closed: {:?}", peer_id, endpoint); } }, - FromSwarm::DialFailure(DialFailure { peer_id, handler, error }) => { - let (ping_handler, identity_handler) = handler.into_inner(); + FromSwarm::DialFailure(DialFailure { peer_id, error, connection_id }) => { self.ping.on_swarm_event(FromSwarm::DialFailure(DialFailure { peer_id, - handler: ping_handler, error, + connection_id, })); self.identify.on_swarm_event(FromSwarm::DialFailure(DialFailure { peer_id, - handler: identity_handler, error, + connection_id, })); }, FromSwarm::ListenerClosed(e) => { self.ping.on_swarm_event(FromSwarm::ListenerClosed(e)); self.identify.on_swarm_event(FromSwarm::ListenerClosed(e)); }, - FromSwarm::ListenFailure(ListenFailure { local_addr, send_back_addr, handler }) => { - let (ping_handler, identity_handler) = handler.into_inner(); + FromSwarm::ListenFailure(ListenFailure { + local_addr, + send_back_addr, + error, + connection_id, + }) => { self.ping.on_swarm_event(FromSwarm::ListenFailure(ListenFailure { local_addr, send_back_addr, - handler: ping_handler, + error, + connection_id, })); self.identify.on_swarm_event(FromSwarm::ListenFailure(ListenFailure { local_addr, send_back_addr, - handler: identity_handler, + error, + connection_id, })); }, FromSwarm::ListenerError(e) => { @@ -324,13 +387,12 @@ impl NetworkBehaviour for PeerInfoBehaviour { &mut self, peer_id: PeerId, connection_id: ConnectionId, - event: <::Handler as - ConnectionHandler>::OutEvent, + event: THandlerOutEvent, ) { match event { - EitherOutput::First(event) => + Either::Left(event) => self.ping.on_connection_handler_event(peer_id, connection_id, event), - EitherOutput::Second(event) => + Either::Right(event) => self.identify.on_connection_handler_event(peer_id, connection_id, event), } } @@ -339,7 +401,7 @@ impl NetworkBehaviour for PeerInfoBehaviour { &mut self, cx: &mut Context, params: &mut impl PollParameters, - ) -> Poll> { + ) -> Poll>> { loop { match self.ping.poll(cx, params) { Poll::Pending => break, @@ -348,16 +410,13 @@ impl NetworkBehaviour for PeerInfoBehaviour { self.handle_ping_report(&peer, rtt) } }, - Poll::Ready(NetworkBehaviourAction::Dial { opts, handler }) => { - let handler = - IntoConnectionHandler::select(handler, self.identify.new_handler()); - return Poll::Ready(NetworkBehaviourAction::Dial { opts, handler }) - }, + Poll::Ready(NetworkBehaviourAction::Dial { opts }) => + return Poll::Ready(NetworkBehaviourAction::Dial { opts }), Poll::Ready(NetworkBehaviourAction::NotifyHandler { peer_id, handler, event }) => return Poll::Ready(NetworkBehaviourAction::NotifyHandler { peer_id, handler, - event: EitherOutput::First(event), + event: Either::Left(event), }), Poll::Ready(NetworkBehaviourAction::ReportObservedAddr { address, score }) => return Poll::Ready(NetworkBehaviourAction::ReportObservedAddr { @@ -387,15 +446,13 @@ impl NetworkBehaviour for PeerInfoBehaviour { IdentifyEvent::Pushed { .. } => {}, IdentifyEvent::Sent { .. } => {}, }, - Poll::Ready(NetworkBehaviourAction::Dial { opts, handler }) => { - let handler = IntoConnectionHandler::select(self.ping.new_handler(), handler); - return Poll::Ready(NetworkBehaviourAction::Dial { opts, handler }) - }, + Poll::Ready(NetworkBehaviourAction::Dial { opts }) => + return Poll::Ready(NetworkBehaviourAction::Dial { opts }), Poll::Ready(NetworkBehaviourAction::NotifyHandler { peer_id, handler, event }) => return Poll::Ready(NetworkBehaviourAction::NotifyHandler { peer_id, handler, - event: EitherOutput::Second(event), + event: Either::Right(event), }), Poll::Ready(NetworkBehaviourAction::ReportObservedAddr { address, score }) => return Poll::Ready(NetworkBehaviourAction::ReportObservedAddr { diff --git a/client/network/src/protocol.rs b/client/network/src/protocol.rs index 8d604124233a0..a161fb6730115 100644 --- a/client/network/src/protocol.rs +++ b/client/network/src/protocol.rs @@ -21,10 +21,10 @@ use crate::config; use bytes::Bytes; use codec::{DecodeAll, Encode}; use libp2p::{ - core::connection::ConnectionId, + core::Endpoint, swarm::{ - behaviour::FromSwarm, ConnectionHandler, IntoConnectionHandler, NetworkBehaviour, - NetworkBehaviourAction, PollParameters, + behaviour::FromSwarm, ConnectionDenied, ConnectionId, NetworkBehaviour, + NetworkBehaviourAction, PollParameters, THandler, THandlerInEvent, THandlerOutEvent, }, Multiaddr, PeerId, }; @@ -366,14 +366,46 @@ impl NetworkBehaviour for Protocol { type ConnectionHandler = ::ConnectionHandler; type OutEvent = CustomMessageOutcome; - fn new_handler(&mut self) -> Self::ConnectionHandler { - self.behaviour.new_handler() + fn handle_established_inbound_connection( + &mut self, + connection_id: ConnectionId, + peer: PeerId, + local_addr: &Multiaddr, + remote_addr: &Multiaddr, + ) -> Result, ConnectionDenied> { + self.behaviour.handle_established_inbound_connection( + connection_id, + peer, + local_addr, + remote_addr, + ) } - fn addresses_of_peer(&mut self, _: &PeerId) -> Vec { + fn handle_established_outbound_connection( + &mut self, + connection_id: ConnectionId, + peer: PeerId, + addr: &Multiaddr, + role_override: Endpoint, + ) -> Result, ConnectionDenied> { + self.behaviour.handle_established_outbound_connection( + connection_id, + peer, + addr, + role_override, + ) + } + + fn handle_pending_outbound_connection( + &mut self, + _connection_id: ConnectionId, + _maybe_peer: Option, + _addresses: &[Multiaddr], + _effective_role: Endpoint, + ) -> Result, ConnectionDenied> { // Only `Discovery::addresses_of_peer` must be returning addresses to ensure that we // don't return unwanted addresses. - Vec::new() + Ok(Vec::new()) } fn on_swarm_event(&mut self, event: FromSwarm) { @@ -384,8 +416,7 @@ impl NetworkBehaviour for Protocol { &mut self, peer_id: PeerId, connection_id: ConnectionId, - event: <::Handler as - ConnectionHandler>::OutEvent, + event: THandlerOutEvent, ) { self.behaviour.on_connection_handler_event(peer_id, connection_id, event); } @@ -394,7 +425,7 @@ impl NetworkBehaviour for Protocol { &mut self, cx: &mut std::task::Context, params: &mut impl PollParameters, - ) -> Poll> { + ) -> Poll>> { if let Some(message) = self.pending_messages.pop_front() { return Poll::Ready(NetworkBehaviourAction::GenerateEvent(message)) } @@ -402,8 +433,8 @@ impl NetworkBehaviour for Protocol { let event = match self.behaviour.poll(cx, params) { Poll::Pending => return Poll::Pending, Poll::Ready(NetworkBehaviourAction::GenerateEvent(ev)) => ev, - Poll::Ready(NetworkBehaviourAction::Dial { opts, handler }) => - return Poll::Ready(NetworkBehaviourAction::Dial { opts, handler }), + Poll::Ready(NetworkBehaviourAction::Dial { opts }) => + return Poll::Ready(NetworkBehaviourAction::Dial { opts }), Poll::Ready(NetworkBehaviourAction::NotifyHandler { peer_id, handler, event }) => return Poll::Ready(NetworkBehaviourAction::NotifyHandler { peer_id, diff --git a/client/network/src/protocol/notifications/behaviour.rs b/client/network/src/protocol/notifications/behaviour.rs index 093d5846db7de..678a249106a4a 100644 --- a/client/network/src/protocol/notifications/behaviour.rs +++ b/client/network/src/protocol/notifications/behaviour.rs @@ -24,12 +24,11 @@ use bytes::BytesMut; use fnv::FnvHashMap; use futures::prelude::*; use libp2p::{ - core::{connection::ConnectionId, Multiaddr, PeerId}, + core::{Endpoint, Multiaddr, PeerId}, swarm::{ behaviour::{ConnectionClosed, ConnectionEstablished, DialFailure, FromSwarm}, - handler::ConnectionHandler, - DialError, IntoConnectionHandler, NetworkBehaviour, NetworkBehaviourAction, NotifyHandler, - PollParameters, + ConnectionDenied, ConnectionId, DialError, NetworkBehaviour, NetworkBehaviourAction, + NotifyHandler, PollParameters, THandler, THandlerOutEvent, }, }; use log::{error, trace, warn}; @@ -546,7 +545,6 @@ impl Notifications { /// Function that is called when the peerset wants us to connect to a peer. fn peerset_report_connect(&mut self, peer_id: PeerId, set_id: sc_peerset::SetId) { // If `PeerId` is unknown to us, insert an entry, start dialing, and return early. - let handler = self.new_handler(); let mut occ_entry = match self.peers.entry((peer_id, set_id)) { Entry::Occupied(entry) => entry, Entry::Vacant(entry) => { @@ -558,10 +556,8 @@ impl Notifications { set_id, ); trace!(target: "sub-libp2p", "Libp2p <= Dial {}", entry.key().0); - self.events.push_back(NetworkBehaviourAction::Dial { - opts: entry.key().0.into(), - handler, - }); + self.events + .push_back(NetworkBehaviourAction::Dial { opts: entry.key().0.into() }); entry.insert(PeerState::Requested); return }, @@ -994,12 +990,34 @@ impl NetworkBehaviour for Notifications { type ConnectionHandler = NotifsHandlerProto; type OutEvent = NotificationsOut; - fn new_handler(&mut self) -> Self::ConnectionHandler { - NotifsHandlerProto::new(self.notif_protocols.clone()) + fn handle_established_inbound_connection( + &mut self, + connection_id: ConnectionId, + peer: PeerId, + local_addr: &Multiaddr, + remote_addr: &Multiaddr, + ) -> Result, ConnectionDenied> { + unimplemented!("todo"); } - fn addresses_of_peer(&mut self, _: &PeerId) -> Vec { - Vec::new() + fn handle_established_outbound_connection( + &mut self, + connection_id: ConnectionId, + peer: PeerId, + addr: &Multiaddr, + role_override: Endpoint, + ) -> Result, ConnectionDenied> { + unimplemented!("todo"); + } + + fn handle_pending_outbound_connection( + &mut self, + _connection_id: ConnectionId, + _maybe_peer: Option, + _addresses: &[Multiaddr], + _effective_role: Endpoint, + ) -> Result, ConnectionDenied> { + Ok(Vec::new()) } fn on_swarm_event(&mut self, event: FromSwarm) { @@ -1432,8 +1450,7 @@ impl NetworkBehaviour for Notifications { &mut self, peer_id: PeerId, connection_id: ConnectionId, - event: <::Handler as - ConnectionHandler>::OutEvent, + event: THandlerOutEvent, ) { match event { NotifsHandlerOut::OpenDesiredByRemote { protocol_index } => { @@ -1954,7 +1971,7 @@ impl NetworkBehaviour for Notifications { &mut self, cx: &mut Context, _params: &mut impl PollParameters, - ) -> Poll> { + ) -> Poll>> { if let Some(event) = self.events.pop_front() { return Poll::Ready(event) } @@ -1986,8 +2003,6 @@ impl NetworkBehaviour for Notifications { while let Poll::Ready(Some((delay_id, peer_id, set_id))) = Pin::new(&mut self.delays).poll_next(cx) { - let handler = self.new_handler(); - let peer_state = match self.peers.get_mut(&(peer_id, set_id)) { Some(s) => s, // We intentionally never remove elements from `delays`, and it may @@ -2003,8 +2018,7 @@ impl NetworkBehaviour for Notifications { PeerState::PendingRequest { timer, .. } if *timer == delay_id => { trace!(target: "sub-libp2p", "Libp2p <= Dial {:?} now that ban has expired", peer_id); - self.events - .push_back(NetworkBehaviourAction::Dial { opts: peer_id.into(), handler }); + self.events.push_back(NetworkBehaviourAction::Dial { opts: peer_id.into() }); *peer_state = PeerState::Requested; }, diff --git a/client/network/src/protocol/notifications/tests.rs b/client/network/src/protocol/notifications/tests.rs index 9ca6974e4cdde..00f4b2072bc68 100644 --- a/client/network/src/protocol/notifications/tests.rs +++ b/client/network/src/protocol/notifications/tests.rs @@ -146,10 +146,6 @@ impl NetworkBehaviour for CustomProtoWithAddr { type ConnectionHandler = ::ConnectionHandler; type OutEvent = ::OutEvent; - fn new_handler(&mut self) -> Self::ConnectionHandler { - self.inner.new_handler() - } - fn addresses_of_peer(&mut self, peer_id: &PeerId) -> Vec { let mut list = self.inner.addresses_of_peer(peer_id); for (p, a) in self.addrs.iter() { @@ -178,7 +174,7 @@ impl NetworkBehaviour for CustomProtoWithAddr { &mut self, cx: &mut Context, params: &mut impl PollParameters, - ) -> Poll> { + ) -> Poll>> { self.inner.poll(cx, params) } } diff --git a/client/network/src/request_responses.rs b/client/network/src/request_responses.rs index 37c97e8282b4c..5213eabf69b44 100644 --- a/client/network/src/request_responses.rs +++ b/client/network/src/request_responses.rs @@ -40,7 +40,7 @@ use futures::{ prelude::*, }; use libp2p::{ - core::{connection::ConnectionId, Multiaddr, PeerId}, + core::{Multiaddr, PeerId}, request_response::{ handler::RequestResponseHandler, ProtocolSupport, RequestResponse, RequestResponseCodec, RequestResponseConfig, RequestResponseEvent, RequestResponseMessage, ResponseChannel, @@ -48,8 +48,8 @@ use libp2p::{ swarm::{ behaviour::{ConnectionClosed, DialFailure, FromSwarm, ListenFailure}, handler::multi::MultiHandler, - ConnectionHandler, IntoConnectionHandler, NetworkBehaviour, NetworkBehaviourAction, - PollParameters, + ConnectionHandler, ConnectionId, NetworkBehaviour, NetworkBehaviourAction, PollParameters, + THandlerOutEvent, }, }; use sc_network_common::{ @@ -415,8 +415,7 @@ impl NetworkBehaviour for RequestResponsesBehaviour { &mut self, peer_id: PeerId, connection_id: ConnectionId, - (p_name, event): <::Handler as - ConnectionHandler>::OutEvent, + event: THandlerOutEvent, ) { if let Some((proto, _)) = self.protocols.get_mut(&*p_name) { return proto.on_connection_handler_event(peer_id, connection_id, event) @@ -433,7 +432,7 @@ impl NetworkBehaviour for RequestResponsesBehaviour { &mut self, cx: &mut Context, params: &mut impl PollParameters, - ) -> Poll> { + ) -> Poll>> { 'poll_all: loop { if let Some(message_request) = self.message_request.take() { // Now we can can poll `MessageRequest` until we get the reputation diff --git a/client/network/src/service.rs b/client/network/src/service.rs index 4a05393618cfb..da9050f7a57f1 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -38,17 +38,17 @@ use crate::{ transport, ReputationChange, }; +use either::Either; use futures::{channel::oneshot, prelude::*}; use libp2p::{ - core::{either::EitherError, upgrade, ConnectedPoint}, + core::{upgrade, ConnectedPoint}, identify::Info as IdentifyInfo, kad::record::Key as KademliaKey, multiaddr, ping::Failure as PingFailure, swarm::{ AddressScore, ConnectionError, ConnectionHandler, ConnectionLimits, DialError, Executor, - IntoConnectionHandler, NetworkBehaviour, PendingConnectionError, Swarm, SwarmBuilder, - SwarmEvent, + ListenError, NetworkBehaviour, Swarm, SwarmBuilder, SwarmEvent, }, Multiaddr, PeerId, }; @@ -1586,6 +1586,7 @@ where endpoint, num_established, concurrent_dial_errors, + established_in, } => { if let Some(errors) = concurrent_dial_errors { debug!(target: "sub-libp2p", "Libp2p => Connected({:?}) with errors: {:?}", peer_id, errors); @@ -1614,11 +1615,11 @@ where }; let reason = match cause { Some(ConnectionError::IO(_)) => "transport-error", - Some(ConnectionError::Handler(EitherError::A(EitherError::A( - EitherError::B(EitherError::A(PingFailure::Timeout)), + Some(ConnectionError::Handler(Either::Left(Either::Left( + Either::Right(Either::Left(PingFailure::Timeout)), )))) => "ping-timeout", - Some(ConnectionError::Handler(EitherError::A(EitherError::A( - EitherError::A(NotifsHandlerError::SyncNotificationsClogged), + Some(ConnectionError::Handler(Either::Left(Either::Left( + Either::Left(NotifsHandlerError::SyncNotificationsClogged), )))) => "sync-notifications-clogged", Some(ConnectionError::Handler(_)) => "protocol-error", Some(ConnectionError::KeepAliveTimeout) => "keep-alive-timeout", @@ -1702,11 +1703,10 @@ where ); if let Some(metrics) = self.metrics.as_ref() { let reason = match error { - PendingConnectionError::ConnectionLimit(_) => Some("limit-reached"), - PendingConnectionError::WrongPeerId { .. } => Some("invalid-peer-id"), - PendingConnectionError::Transport(_) | PendingConnectionError::IO(_) => - Some("transport-error"), - PendingConnectionError::Aborted => None, // ignore it + ListenError::ConnectionLimit(_) => Some("limit-reached"), + ListenError::WrongPeerId { .. } => Some("invalid-peer-id"), + ListenError::Transport(_) | ListenError::IO(_) => Some("transport-error"), + ListenError::Aborted => None, // ignore it }; if let Some(reason) = reason { diff --git a/client/network/src/transport.rs b/client/network/src/transport.rs index 3aa0bb48dec53..6af9cebd854ec 100644 --- a/client/network/src/transport.rs +++ b/client/network/src/transport.rs @@ -16,20 +16,19 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . +use either::Either; use libp2p::{ - bandwidth, core::{ self, - either::EitherTransport, muxing::StreamMuxerBox, transport::{Boxed, OptionalTransport}, upgrade, }, - dns, identity, mplex, noise, tcp, websocket, PeerId, Transport, + dns, identity, mplex, noise, tcp, websocket, PeerId, Transport, TransportExt, }; use std::{sync::Arc, time::Duration}; -pub use self::bandwidth::BandwidthSinks; +pub use libp2p::bandwidth::BandwidthSinks; /// Builds the transport that serves as a common ground for all connections. /// @@ -59,7 +58,7 @@ pub fn build_transport( let tcp_trans = tcp::tokio::Transport::new(tcp_config.clone()); let dns_init = dns::TokioDnsConfig::system(tcp_trans); - EitherTransport::Left(if let Ok(dns) = dns_init { + Either::Left(if let Ok(dns) = dns_init { // WS + WSS transport // // Main transport can't be used for `/wss` addresses because WSS transport needs @@ -68,22 +67,18 @@ pub fn build_transport( let tcp_trans = tcp::tokio::Transport::new(tcp_config); let dns_for_wss = dns::TokioDnsConfig::system(tcp_trans) .expect("same system_conf & resolver to work"); - EitherTransport::Left(websocket::WsConfig::new(dns_for_wss).or_transport(dns)) + Either::Left(websocket::WsConfig::new(dns_for_wss).or_transport(dns)) } else { // In case DNS can't be constructed, fallback to TCP + WS (WSS won't work) let tcp_trans = tcp::tokio::Transport::new(tcp_config.clone()); let desktop_trans = websocket::WsConfig::new(tcp_trans) .or_transport(tcp::tokio::Transport::new(tcp_config)); - EitherTransport::Right(desktop_trans) + Either::Right(desktop_trans) }) } else { - EitherTransport::Right(OptionalTransport::some( - libp2p::core::transport::MemoryTransport::default(), - )) + Either::Right(OptionalTransport::some(libp2p::core::transport::MemoryTransport::default())) }; - let (transport, bandwidth) = bandwidth::BandwidthLogging::new(transport); - let authentication_config = { // For more information about these two panics, see in "On the Importance of @@ -95,11 +90,11 @@ pub fn build_transport( rare panic here is basically zero"); // Legacy noise configurations for backward compatibility. - let noise_legacy = - noise::LegacyConfig { recv_legacy_handshake: true, ..Default::default() }; + // let noise_legacy = + // noise::LegacyConfig { recv_legacy_handshake: true, ..Default::default() }; let mut xx_config = noise::NoiseConfig::xx(noise_keypair); - xx_config.set_legacy_config(noise_legacy); + // xx_config.set_legacy_config(noise_legacy); xx_config.into_authenticated() }; @@ -128,5 +123,5 @@ pub fn build_transport( .timeout(Duration::from_secs(20)) .boxed(); - (transport, bandwidth) + transport.with_bandwidth_logging() } diff --git a/client/network/sync/Cargo.toml b/client/network/sync/Cargo.toml index 52ab0d15e1670..64c90fb996c6c 100644 --- a/client/network/sync/Cargo.toml +++ b/client/network/sync/Cargo.toml @@ -21,7 +21,7 @@ async-trait = "0.1.58" codec = { package = "parity-scale-codec", version = "3.2.2", features = ["derive"] } futures = "0.3.21" futures-timer = "3.0.2" -libp2p = "0.50.0" +libp2p = "0.51.0" log = "0.4.17" lru = "0.8.1" mockall = "0.11.3" diff --git a/client/network/test/Cargo.toml b/client/network/test/Cargo.toml index 8368fa278712a..6c0269a635e87 100644 --- a/client/network/test/Cargo.toml +++ b/client/network/test/Cargo.toml @@ -17,7 +17,7 @@ tokio = "1.22.0" async-trait = "0.1.57" futures = "0.3.21" futures-timer = "3.0.1" -libp2p = "0.50.0" +libp2p = "0.51.0" log = "0.4.17" parking_lot = "0.12.1" rand = "0.8.5" diff --git a/client/network/transactions/Cargo.toml b/client/network/transactions/Cargo.toml index cab702fbd7a6c..c33585dc49ccb 100644 --- a/client/network/transactions/Cargo.toml +++ b/client/network/transactions/Cargo.toml @@ -16,7 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"] array-bytes = "4.1" codec = { package = "parity-scale-codec", version = "3.2.2", features = ["derive"] } futures = "0.3.21" -libp2p = "0.50.0" +libp2p = "0.51.0" log = "0.4.17" pin-project = "1.0.12" prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.10.0-dev", path = "../../../utils/prometheus" } diff --git a/client/offchain/Cargo.toml b/client/offchain/Cargo.toml index dd6e2e44caf55..614b4d12a4f45 100644 --- a/client/offchain/Cargo.toml +++ b/client/offchain/Cargo.toml @@ -21,7 +21,7 @@ futures = "0.3.21" futures-timer = "3.0.2" hyper = { version = "0.14.16", features = ["stream", "http2"] } hyper-rustls = { version = "0.23.0", features = ["http2"] } -libp2p = "0.50.0" +libp2p = "0.51.0" 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 a09508c831189..45e4efd19da02 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 = "0.50.0" +libp2p = "0.51.0" 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 4d09a28370e6d..c1d10ae7bbee1 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.50.0", features = ["dns", "tcp", "tokio", "wasm-ext", "websocket"] } +libp2p = { version = "0.51.0", features = ["dns", "tcp", "tokio", "wasm-ext", "websocket"] } log = "0.4.17" parking_lot = "0.12.1" pin-project = "1.0.12" From a96ec0265b55b63d3da2baec4670d63be46fcb7e Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Mon, 13 Mar 2023 12:20:44 +0400 Subject: [PATCH 02/48] make discovery.rs compile --- client/network/src/discovery.rs | 79 ++++++++++++++++++++++++--------- 1 file changed, 57 insertions(+), 22 deletions(-) diff --git a/client/network/src/discovery.rs b/client/network/src/discovery.rs index 201ee73ed5d70..be447f7eed2b1 100644 --- a/client/network/src/discovery.rs +++ b/client/network/src/discovery.rs @@ -51,9 +51,9 @@ use futures::prelude::*; use futures_timer::Delay; use ip_network::IpNetwork; use libp2p::{ - core::{Multiaddr, PeerId, PublicKey}, + core::{Endpoint, Multiaddr, PeerId, PublicKey}, kad::{ - handler::KademliaHandlerIn, + handler::KademliaHandler, record::{ self, store::{MemoryStore, RecordStore}, @@ -68,8 +68,8 @@ use libp2p::{ toggle::{Toggle, ToggleConnectionHandler}, DialFailure, FromSwarm, NewExternalAddr, }, - ConnectionHandler, ConnectionId, DialError, NetworkBehaviour, NetworkBehaviourAction, - PollParameters, THandler, THandlerOutEvent, + ConnectionDenied, ConnectionId, DialError, NetworkBehaviour, NetworkBehaviourAction, + PollParameters, THandler, THandlerInEvent, THandlerOutEvent, }, }; use log::{debug, info, trace, warn}; @@ -234,7 +234,7 @@ impl DiscoveryConfig { allow_private_ip, discovery_only_if_under_num, mdns: if enable_mdns { - match TokioMdns::new(mdns::Config::default()) { + match TokioMdns::new(mdns::Config::default(), local_peer_id) { Ok(mdns) => Some(mdns), Err(err) => { warn!(target: "sub-libp2p", "Failed to initialize mDNS: {:?}", err); @@ -483,7 +483,7 @@ pub enum DiscoveryOut { } impl NetworkBehaviour for DiscoveryBehaviour { - type ConnectionHandler = ToggleConnectionHandler>; + type ConnectionHandler = ToggleConnectionHandler>; type OutEvent = DiscoveryOut; fn handle_established_inbound_connection( @@ -493,7 +493,12 @@ impl NetworkBehaviour for DiscoveryBehaviour { local_addr: &Multiaddr, remote_addr: &Multiaddr, ) -> Result, ConnectionDenied> { - unimplemented!(""); + self.kademlia.handle_established_inbound_connection( + connection_id, + peer, + local_addr, + remote_addr, + ) } fn handle_established_outbound_connection( @@ -503,31 +508,61 @@ impl NetworkBehaviour for DiscoveryBehaviour { addr: &Multiaddr, role_override: Endpoint, ) -> Result, ConnectionDenied> { - unimplemented!(""); + self.kademlia.handle_established_outbound_connection( + connection_id, + peer, + addr, + role_override, + ) + } + + fn handle_pending_inbound_connection( + &mut self, + connection_id: ConnectionId, + local_addr: &Multiaddr, + remote_addr: &Multiaddr, + ) -> Result<(), ConnectionDenied> { + self.kademlia + .handle_pending_inbound_connection(connection_id, local_addr, remote_addr) } fn handle_pending_outbound_connection( &mut self, - _connection_id: ConnectionId, - _maybe_peer: Option, - _addresses: &[Multiaddr], - _effective_role: Endpoint, + connection_id: ConnectionId, + maybe_peer: Option, + addresses: &[Multiaddr], + effective_role: Endpoint, ) -> Result, ConnectionDenied> { - let mut list = self - .permanent_addresses - .iter() - .filter_map(|(p, a)| if p == peer_id { Some(a.clone()) } else { None }) - .collect::>(); + let mut list = Vec::new(); + + if let Some(peer_id) = maybe_peer { + list.extend( + self.permanent_addresses + .iter() + .filter_map(|(p, a)| if *p == peer_id { Some(a.clone()) } else { None }) + .collect::>(), + ); - if let Some(ephemeral_addresses) = self.ephemeral_addresses.get(peer_id) { - list.extend(ephemeral_addresses.clone()); + if let Some(ephemeral_addresses) = self.ephemeral_addresses.get(&peer_id) { + list.extend(ephemeral_addresses.clone()); + } } { - let mut list_to_filter = self.kademlia.addresses_of_peer(peer_id); + let mut list_to_filter = self.kademlia.handle_pending_outbound_connection( + connection_id, + maybe_peer, + addresses, + effective_role, + )?; if let Some(ref mut mdns) = self.mdns { - list_to_filter.extend(mdns.addresses_of_peer(peer_id)); + list_to_filter.extend(mdns.handle_pending_outbound_connection( + connection_id, + maybe_peer, + addresses, + effective_role, + )?); } if !self.allow_private_ip { @@ -541,7 +576,7 @@ impl NetworkBehaviour for DiscoveryBehaviour { list.extend(list_to_filter); } - trace!(target: "sub-libp2p", "Addresses of {:?}: {:?}", peer_id, list); + trace!(target: "sub-libp2p", "Addresses of {:?}: {:?}", maybe_peer, list); Ok(list) } From 1feeea58433011d9a3e825da2e90b59c1cd8066a Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Mon, 13 Mar 2023 12:38:55 +0400 Subject: [PATCH 03/48] make peer_info.rs compile --- client/network/src/discovery.rs | 2 +- client/network/src/peer_info.rs | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/client/network/src/discovery.rs b/client/network/src/discovery.rs index be447f7eed2b1..729696a20dae2 100644 --- a/client/network/src/discovery.rs +++ b/client/network/src/discovery.rs @@ -576,7 +576,7 @@ impl NetworkBehaviour for DiscoveryBehaviour { list.extend(list_to_filter); } - trace!(target: "sub-libp2p", "Addresses of {:?}: {:?}", maybe_peer, list); + trace!(target: "sub-libp2p","Addresses of {:?} (connection ID: {:?}): {:?}", maybe_peer, connection_id, list); Ok(list) } diff --git a/client/network/src/peer_info.rs b/client/network/src/peer_info.rs index fd38a66154468..0d27162c3f8b5 100644 --- a/client/network/src/peer_info.rs +++ b/client/network/src/peer_info.rs @@ -213,18 +213,19 @@ impl NetworkBehaviour for PeerInfoBehaviour { local_addr: &Multiaddr, remote_addr: &Multiaddr, ) -> Result, ConnectionDenied> { - self.ping.handle_established_inbound_connection( + let ping_handler = self.ping.handle_established_inbound_connection( connection_id, peer, local_addr, remote_addr, )?; - self.identify.handle_established_inbound_connection( + let identity_handler = self.identify.handle_established_inbound_connection( connection_id, peer, local_addr, remote_addr, - ) + )?; + Ok(ping_handler.select(identity_handler)) } fn handle_established_outbound_connection( @@ -234,18 +235,19 @@ impl NetworkBehaviour for PeerInfoBehaviour { addr: &Multiaddr, role_override: Endpoint, ) -> Result, ConnectionDenied> { - self.ping.handle_established_outbound_connection( + let ping_handler = self.ping.handle_established_outbound_connection( connection_id, peer, addr, role_override, )?; - self.identify.handle_established_outbound_connection( + let identity_handler = self.identify.handle_established_outbound_connection( connection_id, peer, addr, role_override, - ) + )?; + Ok(ping_handler.select(identity_handler)) } fn on_swarm_event(&mut self, event: FromSwarm) { From 7f5bd59a99f200870c7d7eafb68b132f09b74d67 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Tue, 14 Mar 2023 12:22:38 +0400 Subject: [PATCH 04/48] changes to notifications and request-response proto --- .../src/protocol/notifications/behaviour.rs | 13 ++- .../src/protocol/notifications/tests.rs | 59 ++++++++-- client/network/src/request_responses.rs | 101 ++++++++++++------ 3 files changed, 132 insertions(+), 41 deletions(-) diff --git a/client/network/src/protocol/notifications/behaviour.rs b/client/network/src/protocol/notifications/behaviour.rs index 678a249106a4a..831d67f1f4315 100644 --- a/client/network/src/protocol/notifications/behaviour.rs +++ b/client/network/src/protocol/notifications/behaviour.rs @@ -997,7 +997,7 @@ impl NetworkBehaviour for Notifications { local_addr: &Multiaddr, remote_addr: &Multiaddr, ) -> Result, ConnectionDenied> { - unimplemented!("todo"); + Ok(NotifsHandlerProto::new(self.notif_protocols.clone())) } fn handle_established_outbound_connection( @@ -1007,7 +1007,16 @@ impl NetworkBehaviour for Notifications { addr: &Multiaddr, role_override: Endpoint, ) -> Result, ConnectionDenied> { - unimplemented!("todo"); + Ok(NotifsHandlerProto::new(self.notif_protocols.clone())) + } + + fn handle_pending_inbound_connection( + &mut self, + _connection_id: ConnectionId, + _local_addr: &Multiaddr, + _remote_addr: &Multiaddr, + ) -> Result<(), ConnectionDenied> { + Ok(()) } fn handle_pending_outbound_connection( diff --git a/client/network/src/protocol/notifications/tests.rs b/client/network/src/protocol/notifications/tests.rs index 00f4b2072bc68..83f4ac3e9ead7 100644 --- a/client/network/src/protocol/notifications/tests.rs +++ b/client/network/src/protocol/notifications/tests.rs @@ -22,11 +22,11 @@ use crate::protocol::notifications::{Notifications, NotificationsOut, ProtocolCo use futures::prelude::*; use libp2p::{ - core::{connection::ConnectionId, transport::MemoryTransport, upgrade}, + core::{connection::ConnectionId, transport::MemoryTransport, upgrade, Endpoint}, identity, noise, swarm::{ - behaviour::FromSwarm, ConnectionHandler, Executor, IntoConnectionHandler, NetworkBehaviour, - NetworkBehaviourAction, PollParameters, Swarm, SwarmEvent, + behaviour::FromSwarm, ConnectionDenied, ConnectionHandler, Executor, IntoConnectionHandler, + NetworkBehaviour, NetworkBehaviourAction, PollParameters, Swarm, SwarmEvent, THandler, }, yamux, Multiaddr, PeerId, Transport, }; @@ -146,14 +146,61 @@ impl NetworkBehaviour for CustomProtoWithAddr { type ConnectionHandler = ::ConnectionHandler; type OutEvent = ::OutEvent; - fn addresses_of_peer(&mut self, peer_id: &PeerId) -> Vec { - let mut list = self.inner.addresses_of_peer(peer_id); + fn handle_established_inbound_connection( + &mut self, + connection_id: ConnectionId, + peer: PeerId, + local_addr: &Multiaddr, + remote_addr: &Multiaddr, + ) -> Result, ConnectionDenied> { + self.inner.handle_established_inbound_connection( + connection_id, + peer, + local_addr, + remote_addr, + ) + } + + fn handle_established_outbound_connection( + &mut self, + connection_id: ConnectionId, + peer: PeerId, + addr: &Multiaddr, + role_override: Endpoint, + ) -> Result, ConnectionDenied> { + self.inner + .handle_established_outbound_connection(connection_id, peer, addr, role_override) + } + + fn handle_pending_inbound_connection( + &mut self, + connection_id: ConnectionId, + local_addr: &Multiaddr, + remote_addr: &Multiaddr, + ) -> Result<(), ConnectionDenied> { + self.inner + .handle_pending_inbound_connection(connection_id, local_addr, remote_addr) + } + + fn handle_pending_outbound_connection( + &mut self, + connection_id: ConnectionId, + maybe_peer: Option, + addresses: &[Multiaddr], + effective_role: Endpoint, + ) -> Result, ConnectionDenied> { + let mut list = self.inner.handle_pending_outbound_connection( + connection_id, + maybe_peer, + addresses, + effective_role, + ); for (p, a) in self.addrs.iter() { if p == peer_id { list.push(a.clone()); } } - list + Ok(list) } fn on_swarm_event(&mut self, event: FromSwarm) { diff --git a/client/network/src/request_responses.rs b/client/network/src/request_responses.rs index 5213eabf69b44..91e1e7df420cb 100644 --- a/client/network/src/request_responses.rs +++ b/client/network/src/request_responses.rs @@ -48,7 +48,7 @@ use libp2p::{ swarm::{ behaviour::{ConnectionClosed, DialFailure, FromSwarm, ListenFailure}, handler::multi::MultiHandler, - ConnectionHandler, ConnectionId, NetworkBehaviour, NetworkBehaviourAction, PollParameters, + ConnectionId, NetworkBehaviour, NetworkBehaviourAction, PollParameters, THandlerInEvent, THandlerOutEvent, }, }; @@ -269,26 +269,26 @@ impl RequestResponsesBehaviour { } } - fn new_handler_with_replacement( - &mut self, - protocol: String, - handler: RequestResponseHandler, - ) -> ::ConnectionHandler { - let mut handlers: HashMap<_, _> = self - .protocols - .iter_mut() - .map(|(p, (r, _))| (p.to_string(), NetworkBehaviour::new_handler(r))) - .collect(); - - if let Some(h) = handlers.get_mut(&protocol) { - *h = handler - } - - MultiHandler::try_from_iter(handlers).expect( - "Protocols are in a HashMap and there can be at most one handler per protocol name, \ - which is the only possible error; qed", - ) - } + // fn new_handler_with_replacement( + // &mut self, + // protocol: String, + // handler: RequestResponseHandler, + // ) -> ::ConnectionHandler { + // let mut handlers: HashMap<_, _> = self + // .protocols + // .iter_mut() + // .map(|(p, (r, _))| (p.to_string(), NetworkBehaviour::new_handler(r))) + // .collect(); + + // if let Some(h) = handlers.get_mut(&protocol) { + // *h = handler + // } + + // MultiHandler::try_from_iter(handlers).expect( + // "Protocols are in a HashMap and there can be at most one handler per protocol name, \ + // which is the only possible error; qed", + // ) + // } } impl NetworkBehaviour for RequestResponsesBehaviour { @@ -298,20 +298,50 @@ impl NetworkBehaviour for RequestResponsesBehaviour { >; type OutEvent = Event; - fn new_handler(&mut self) -> Self::ConnectionHandler { + fn handle_pending_inbound_connection( + &mut self, + _connection_id: ConnectionId, + _local_addr: &Multiaddr, + _remote_addr: &Multiaddr, + ) -> Result<(), ConnectionDenied> { + Ok(()) + } + + fn handle_pending_outbound_connection( + &mut self, + connection_id: ConnectionId, + maybe_peer: Option, + addresses: &[Multiaddr], + effective_role: Endpoint, + ) -> Result, ConnectionDenied> { + Ok(Vec::new()) + } + + fn handle_established_inbound_connection( + &mut self, + connection_id: ConnectionId, + peer: PeerId, + local_addr: &Multiaddr, + remote_addr: &Multiaddr, + ) -> Result, ConnectionDenied> { let iter = self .protocols .iter_mut() .map(|(p, (r, _))| (p.to_string(), NetworkBehaviour::new_handler(r))); - MultiHandler::try_from_iter(iter).expect( + Ok(MultiHandler::try_from_iter(iter).expect( "Protocols are in a HashMap and there can be at most one handler per protocol name, \ which is the only possible error; qed", - ) + )) } - fn addresses_of_peer(&mut self, _: &PeerId) -> Vec { - Vec::new() + fn handle_established_outbound_connection( + &mut self, + connection_id: ConnectionId, + peer: PeerId, + addr: &Multiaddr, + role_override: Endpoint, + ) -> Result, ConnectionDenied> { } fn on_swarm_event(&mut self, event: FromSwarm) { @@ -344,13 +374,13 @@ impl NetworkBehaviour for RequestResponsesBehaviour { ) } }, - FromSwarm::DialFailure(DialFailure { peer_id, error, handler }) => + FromSwarm::DialFailure(DialFailure { peer_id, error, connection_id }) => for (p_name, p_handler) in handler.into_iter() { if let Some((proto, _)) = self.protocols.get_mut(p_name.as_str()) { proto.on_swarm_event(FromSwarm::DialFailure(DialFailure { peer_id, - handler: p_handler, error, + connection_id, })); } else { log::error!( @@ -364,13 +394,19 @@ impl NetworkBehaviour for RequestResponsesBehaviour { for (p, _) in self.protocols.values_mut() { NetworkBehaviour::on_swarm_event(p, FromSwarm::ListenerClosed(e)); }, - FromSwarm::ListenFailure(ListenFailure { local_addr, send_back_addr, handler }) => + FromSwarm::ListenFailure(ListenFailure { + local_addr, + send_back_addr, + error, + connection_id, + }) => for (p_name, p_handler) in handler.into_iter() { if let Some((proto, _)) = self.protocols.get_mut(p_name.as_str()) { proto.on_swarm_event(FromSwarm::ListenFailure(ListenFailure { local_addr, send_back_addr, - handler: p_handler, + error, + connection_id, })); } else { log::error!( @@ -570,15 +606,14 @@ impl NetworkBehaviour for RequestResponsesBehaviour { // Other events generated by the underlying behaviour are transparently // passed through. - NetworkBehaviourAction::Dial { opts, handler } => { + NetworkBehaviourAction::Dial { opts } => { if opts.get_peer_id().is_none() { log::error!( "The request-response isn't supposed to start dialing addresses" ); } let protocol = protocol.to_string(); - let handler = self.new_handler_with_replacement(protocol, handler); - return Poll::Ready(NetworkBehaviourAction::Dial { opts, handler }) + return Poll::Ready(NetworkBehaviourAction::Dial { opts }) }, NetworkBehaviourAction::NotifyHandler { peer_id, handler, event } => return Poll::Ready(NetworkBehaviourAction::NotifyHandler { From 6fa1fec00410ce226c42ee00313c72b08f04ce73 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Tue, 14 Mar 2023 15:48:17 +0400 Subject: [PATCH 05/48] make service.rs compile --- client/network/src/service.rs | 34 +++++++++++++--------------------- 1 file changed, 13 insertions(+), 21 deletions(-) diff --git a/client/network/src/service.rs b/client/network/src/service.rs index da9050f7a57f1..59b55fa666106 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -48,7 +48,7 @@ use libp2p::{ ping::Failure as PingFailure, swarm::{ AddressScore, ConnectionError, ConnectionHandler, ConnectionLimits, DialError, Executor, - ListenError, NetworkBehaviour, Swarm, SwarmBuilder, SwarmEvent, + ListenError, NetworkBehaviour, Swarm, SwarmBuilder, SwarmEvent, THandlerErr, }, Multiaddr, PeerId, }; @@ -99,12 +99,6 @@ mod tests; pub use libp2p::identity::{error::DecodingError, Keypair, PublicKey}; use sc_network_common::service::NetworkRequest; -/// Custom error that can be produced by the [`ConnectionHandler`] of the [`NetworkBehaviour`]. -/// Used as a template parameter of [`SwarmEvent`] below. -type ConnectionHandlerErr = - <<::ConnectionHandler as IntoConnectionHandler> - ::Handler as ConnectionHandler>::Error; - /// Substrate network service. Handles network IO and manages connectivity. pub struct NetworkService { /// Number of peers we're connected to. @@ -400,7 +394,7 @@ where ) .substream_upgrade_protocol_override(upgrade::Version::V1Lazy) .notify_handler_buffer_size(NonZeroUsize::new(32).expect("32 != 0; qed")) - .connection_event_buffer_size(1024) + .per_connection_event_buffer_size(24) .max_negotiating_inbound_streams(2048); (builder.build(), bandwidth) @@ -1356,10 +1350,7 @@ where } /// Process the next event coming from `Swarm`. - fn handle_swarm_event( - &mut self, - event: SwarmEvent>>, - ) { + fn handle_swarm_event(&mut self, event: SwarmEvent>>) { match event { SwarmEvent::Behaviour(BehaviourOut::InboundRequest { protocol, result, .. }) => { if let Some(metrics) = self.metrics.as_ref() { @@ -1670,15 +1661,15 @@ where if let Some(metrics) = self.metrics.as_ref() { let reason = match error { DialError::ConnectionLimit(_) => Some("limit-reached"), - DialError::InvalidPeerId(_) => Some("invalid-peer-id"), - DialError::Transport(_) | DialError::ConnectionIo(_) => - Some("transport-error"), + DialError::InvalidPeerId(_) | + DialError::WrongPeerId { .. } | + DialError::LocalPeerId { .. } => Some("invalid-peer-id"), + DialError::Transport(_) => Some("transport-error"), DialError::Banned | - DialError::LocalPeerId | DialError::NoAddresses | DialError::DialPeerConditionFalse(_) | - DialError::WrongPeerId { .. } | - DialError::Aborted => None, // ignore them + DialError::Aborted | + DialError::Denied { .. } => None, // ignore them }; if let Some(reason) = reason { metrics.pending_connections_errors_total.with_label_values(&[reason]).inc(); @@ -1704,9 +1695,10 @@ where if let Some(metrics) = self.metrics.as_ref() { let reason = match error { ListenError::ConnectionLimit(_) => Some("limit-reached"), - ListenError::WrongPeerId { .. } => Some("invalid-peer-id"), - ListenError::Transport(_) | ListenError::IO(_) => Some("transport-error"), - ListenError::Aborted => None, // ignore it + ListenError::WrongPeerId { .. } | ListenError::LocalPeerId { .. } => + Some("invalid-peer-id"), + ListenError::Transport(_) => Some("transport-error"), + ListenError::Aborted | ListenError::Denied { .. } => None, // ignore it }; if let Some(reason) = reason { From 84fa16ee7008e1cd16afaebbc56f7cf9c162c844 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Tue, 14 Mar 2023 16:46:16 +0400 Subject: [PATCH 06/48] towards making request_responses.rs compile --- client/network/src/request_responses.rs | 113 ++++++++++++------------ 1 file changed, 56 insertions(+), 57 deletions(-) diff --git a/client/network/src/request_responses.rs b/client/network/src/request_responses.rs index 91e1e7df420cb..643919539e87d 100644 --- a/client/network/src/request_responses.rs +++ b/client/network/src/request_responses.rs @@ -40,16 +40,15 @@ use futures::{ prelude::*, }; use libp2p::{ - core::{Multiaddr, PeerId}, + core::{Endpoint, Multiaddr, PeerId}, request_response::{ - handler::RequestResponseHandler, ProtocolSupport, RequestResponse, RequestResponseCodec, - RequestResponseConfig, RequestResponseEvent, RequestResponseMessage, ResponseChannel, + self, handler::Handler, Behaviour, Codec, Config, Message, ProtocolSupport, ResponseChannel, }, swarm::{ behaviour::{ConnectionClosed, DialFailure, FromSwarm, ListenFailure}, handler::multi::MultiHandler, - ConnectionId, NetworkBehaviour, NetworkBehaviourAction, PollParameters, THandlerInEvent, - THandlerOutEvent, + ConnectionDenied, ConnectionId, NetworkBehaviour, NetworkBehaviourAction, PollParameters, + THandler, THandlerInEvent, THandlerOutEvent, }, }; use sc_network_common::{ @@ -127,14 +126,13 @@ impl From<(ProtocolName, RequestId)> for ProtocolRequestId { /// Implementation of `NetworkBehaviour` that provides support for request-response protocols. pub struct RequestResponsesBehaviour { /// The multiple sub-protocols, by name. - /// Contains the underlying libp2p `RequestResponse` behaviour, plus an optional + /// + /// Contains the underlying libp2p [`Behaviour`] behaviour, plus an optional /// "response builder" used to build responses for incoming requests. - protocols: HashMap< - ProtocolName, - (RequestResponse, Option>), - >, + protocols: + HashMap, Option>)>, - /// Pending requests, passed down to a [`RequestResponse`] behaviour, awaiting a reply. + /// Pending requests, passed down to a [`Behaviour`] behaviour, awaiting a reply. pending_requests: HashMap, RequestFailure>>)>, @@ -191,7 +189,7 @@ impl RequestResponsesBehaviour { ) -> Result { let mut protocols = HashMap::new(); for protocol in list { - let mut cfg = RequestResponseConfig::default(); + let mut cfg = Config::default(); cfg.set_connection_keep_alive(Duration::from_secs(10)); cfg.set_request_timeout(protocol.request_timeout); @@ -201,7 +199,7 @@ impl RequestResponsesBehaviour { ProtocolSupport::Outbound }; - let rq_rp = RequestResponse::new( + let rq_rp = Behaviour::new( GenericCodec { max_request_size: protocol.max_request_size, max_response_size: protocol.max_response_size, @@ -268,34 +266,11 @@ impl RequestResponsesBehaviour { ); } } - - // fn new_handler_with_replacement( - // &mut self, - // protocol: String, - // handler: RequestResponseHandler, - // ) -> ::ConnectionHandler { - // let mut handlers: HashMap<_, _> = self - // .protocols - // .iter_mut() - // .map(|(p, (r, _))| (p.to_string(), NetworkBehaviour::new_handler(r))) - // .collect(); - - // if let Some(h) = handlers.get_mut(&protocol) { - // *h = handler - // } - - // MultiHandler::try_from_iter(handlers).expect( - // "Protocols are in a HashMap and there can be at most one handler per protocol name, \ - // which is the only possible error; qed", - // ) - // } } impl NetworkBehaviour for RequestResponsesBehaviour { - type ConnectionHandler = MultiHandler< - String, - as NetworkBehaviour>::ConnectionHandler, - >; + type ConnectionHandler = + MultiHandler as NetworkBehaviour>::ConnectionHandler>; type OutEvent = Event; fn handle_pending_inbound_connection( @@ -324,10 +299,18 @@ impl NetworkBehaviour for RequestResponsesBehaviour { local_addr: &Multiaddr, remote_addr: &Multiaddr, ) -> Result, ConnectionDenied> { - let iter = self - .protocols - .iter_mut() - .map(|(p, (r, _))| (p.to_string(), NetworkBehaviour::new_handler(r))); + let iter = self.protocols.iter_mut().filter_map(|(p, (r, _))| { + if let Ok(handler) = r.handle_established_inbound_connection( + connection_id, + peer, + local_addr, + remote_addr, + ) { + Some((p.to_string(), handler)) + } else { + None + } + }); Ok(MultiHandler::try_from_iter(iter).expect( "Protocols are in a HashMap and there can be at most one handler per protocol name, \ @@ -342,6 +325,20 @@ impl NetworkBehaviour for RequestResponsesBehaviour { addr: &Multiaddr, role_override: Endpoint, ) -> Result, ConnectionDenied> { + let iter = self.protocols.iter_mut().filter_map(|(p, (r, _))| { + if let Ok(handler) = + r.handle_established_outbound_connection(connection_id, peer, addr, role_override) + { + Some((p.to_string(), handler)) + } else { + None + } + }); + + Ok(MultiHandler::try_from_iter(iter).expect( + "Protocols are in a HashMap and there can be at most one handler per protocol name, \ + which is the only possible error; qed", + )) } fn on_swarm_event(&mut self, event: FromSwarm) { @@ -522,7 +519,7 @@ impl NetworkBehaviour for RequestResponsesBehaviour { // initialization. if let Some(mut resp_builder) = resp_builder { // If the response builder is too busy, silently drop `tx`. This - // will be reported by the corresponding `RequestResponse` through + // will be reported by the corresponding [`Behaviour`] through // an `InboundFailure::Omission` event. let _ = resp_builder.try_send(IncomingRequest { peer, @@ -575,7 +572,7 @@ impl NetworkBehaviour for RequestResponsesBehaviour { if let Some((protocol, _)) = self.protocols.get_mut(&*protocol_name) { if protocol.send_response(inner_channel, Ok(payload)).is_err() { // Note: Failure is handled further below when receiving - // `InboundFailure` event from `RequestResponse` behaviour. + // `InboundFailure` event from [`Behaviour`] behaviour. log::debug!( target: "sub-libp2p", "Failed to send response for {:?} on protocol {:?} due to a \ @@ -635,10 +632,9 @@ impl NetworkBehaviour for RequestResponsesBehaviour { match ev { // Received a request from a remote. - RequestResponseEvent::Message { + request_response::Event::Message { peer, - message: - RequestResponseMessage::Request { request_id, request, channel, .. }, + message: Message::Request { request_id, request, channel, .. }, } => { self.pending_responses_arrival_time .insert((protocol.clone(), request_id).into(), Instant::now()); @@ -665,9 +661,9 @@ impl NetworkBehaviour for RequestResponsesBehaviour { }, // Received a response from a remote to one of our requests. - RequestResponseEvent::Message { + request_response::Event::Message { peer, - message: RequestResponseMessage::Response { request_id, response }, + message: Message::Response { request_id, response }, .. } => { let (started, delivered) = match self @@ -702,8 +698,11 @@ impl NetworkBehaviour for RequestResponsesBehaviour { }, // One of our requests has failed. - RequestResponseEvent::OutboundFailure { - peer, request_id, error, .. + request_response::Event::OutboundFailure { + peer, + request_id, + error, + .. } => { let started = match self .pending_requests @@ -746,7 +745,7 @@ impl NetworkBehaviour for RequestResponsesBehaviour { // An inbound request failed, either while reading the request or due to // failing to send a response. - RequestResponseEvent::InboundFailure { + request_response::Event::InboundFailure { request_id, peer, error, .. } => { self.pending_responses_arrival_time @@ -761,7 +760,7 @@ impl NetworkBehaviour for RequestResponsesBehaviour { }, // A response to an inbound request has been sent. - RequestResponseEvent::ResponseSent { request_id, peer } => { + request_response::Event::ResponseSent { request_id, peer } => { let arrival_time = self .pending_responses_arrival_time .remove(&(protocol.clone(), request_id).into()) @@ -813,7 +812,7 @@ pub enum ResponseFailure { Network(InboundFailure), } -/// Implements the libp2p [`RequestResponseCodec`] trait. Defines how streams of bytes are turned +/// Implements the libp2p [`Codec`] trait. Defines how streams of bytes are turned /// into requests and responses and vice-versa. #[derive(Debug, Clone)] #[doc(hidden)] // Needs to be public in order to satisfy the Rust compiler. @@ -823,7 +822,7 @@ pub struct GenericCodec { } #[async_trait::async_trait] -impl RequestResponseCodec for GenericCodec { +impl Codec for GenericCodec { type Protocol = Vec; type Request = Vec; type Response = Result, ()>; @@ -1017,7 +1016,7 @@ mod tests { let protocol_name = "/test/req-resp/1"; let mut pool = LocalPool::new(); - // Build swarms whose behaviour is `RequestResponsesBehaviour`. + // Build swarms whose behaviour is [`RequestResponsesBehaviour`]. let mut swarms = (0..2) .map(|_| { let (tx, mut rx) = mpsc::channel::(64); @@ -1120,7 +1119,7 @@ mod tests { let protocol_name = "/test/req-resp/1"; let mut pool = LocalPool::new(); - // Build swarms whose behaviour is `RequestResponsesBehaviour`. + // Build swarms whose behaviour is [`RequestResponsesBehaviour`]. let mut swarms = (0..2) .map(|_| { let (tx, mut rx) = mpsc::channel::(64); From b469184e3689ad02980a59ee06a8ec500f951b2e Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Wed, 15 Mar 2023 11:14:18 +0400 Subject: [PATCH 07/48] make request_responses.rs compile --- client/network/src/request_responses.rs | 92 +++++++++++++++---------- 1 file changed, 54 insertions(+), 38 deletions(-) diff --git a/client/network/src/request_responses.rs b/client/network/src/request_responses.rs index 643919539e87d..7afed07d7a8b5 100644 --- a/client/network/src/request_responses.rs +++ b/client/network/src/request_responses.rs @@ -41,9 +41,7 @@ use futures::{ }; use libp2p::{ core::{Endpoint, Multiaddr, PeerId}, - request_response::{ - self, handler::Handler, Behaviour, Codec, Config, Message, ProtocolSupport, ResponseChannel, - }, + request_response::{self, Behaviour, Codec, Config, Message, ProtocolSupport, ResponseChannel}, swarm::{ behaviour::{ConnectionClosed, DialFailure, FromSwarm, ListenFailure}, handler::multi::MultiHandler, @@ -132,6 +130,9 @@ pub struct RequestResponsesBehaviour { protocols: HashMap, Option>)>, + // A map from [`ConnectionId`] to the sub-protocols. + connection_to_protocols_map: HashMap>, + /// Pending requests, passed down to a [`Behaviour`] behaviour, awaiting a reply. pending_requests: HashMap, RequestFailure>>)>, @@ -224,6 +225,7 @@ impl RequestResponsesBehaviour { send_feedback: Default::default(), peerset, message_request: None, + connection_to_protocols_map: HashMap::new(), }) } @@ -312,6 +314,9 @@ impl NetworkBehaviour for RequestResponsesBehaviour { } }); + self.connection_to_protocols_map + .insert(connection_id, iter.map(|(k, _)| k).collect()); + Ok(MultiHandler::try_from_iter(iter).expect( "Protocols are in a HashMap and there can be at most one handler per protocol name, \ which is the only possible error; qed", @@ -335,6 +340,9 @@ impl NetworkBehaviour for RequestResponsesBehaviour { } }); + self.connection_to_protocols_map + .insert(connection_id, iter.map(|(k, _)| k).collect()); + Ok(MultiHandler::try_from_iter(iter).expect( "Protocols are in a HashMap and there can be at most one handler per protocol name, \ which is the only possible error; qed", @@ -372,19 +380,21 @@ impl NetworkBehaviour for RequestResponsesBehaviour { } }, FromSwarm::DialFailure(DialFailure { peer_id, error, connection_id }) => - for (p_name, p_handler) in handler.into_iter() { - if let Some((proto, _)) = self.protocols.get_mut(p_name.as_str()) { - proto.on_swarm_event(FromSwarm::DialFailure(DialFailure { - peer_id, - error, - connection_id, - })); - } else { - log::error!( - target: "sub-libp2p", - "on_swarm_event/dial_failure: no request-response instance registered for protocol {:?}", - p_name, - ) + if let Some(p_names) = self.connection_to_protocols_map.get(&connection_id) { + for p_name in p_names { + if let Some((proto, _)) = self.protocols.get_mut(p_name.as_str()) { + proto.on_swarm_event(FromSwarm::DialFailure(DialFailure { + peer_id, + error, + connection_id, + })); + } else { + log::error!( + target: "sub-libp2p", + "on_swarm_event/dial_failure: no request-response instance registered for protocol {:?}", + p_name, + ) + } } }, FromSwarm::ListenerClosed(e) => @@ -397,20 +407,22 @@ impl NetworkBehaviour for RequestResponsesBehaviour { error, connection_id, }) => - for (p_name, p_handler) in handler.into_iter() { - if let Some((proto, _)) = self.protocols.get_mut(p_name.as_str()) { - proto.on_swarm_event(FromSwarm::ListenFailure(ListenFailure { - local_addr, - send_back_addr, - error, - connection_id, - })); - } else { - log::error!( - target: "sub-libp2p", - "on_swarm_event/listen_failure: no request-response instance registered for protocol {:?}", - p_name, - ) + if let Some(p_names) = self.connection_to_protocols_map.get(&connection_id) { + for p_name in p_names { + if let Some((proto, _)) = self.protocols.get_mut(p_name.as_str()) { + proto.on_swarm_event(FromSwarm::ListenFailure(ListenFailure { + local_addr, + send_back_addr, + error, + connection_id, + })); + } else { + log::error!( + target: "sub-libp2p", + "on_swarm_event/listen_failure: no request-response instance registered for protocol {:?}", + p_name, + ) + } } }, FromSwarm::ListenerError(e) => @@ -450,15 +462,19 @@ impl NetworkBehaviour for RequestResponsesBehaviour { connection_id: ConnectionId, event: THandlerOutEvent, ) { - if let Some((proto, _)) = self.protocols.get_mut(&*p_name) { - return proto.on_connection_handler_event(peer_id, connection_id, event) + if let Some(p_names) = self.connection_to_protocols_map.get(&connection_id) { + for p_name in p_names { + if let Some((proto, _)) = self.protocols.get_mut(p_name.as_str()) { + return proto.on_connection_handler_event(peer_id, connection_id, event.1) + } else { + log::warn!( + target: "sub-libp2p", + "on_connection_handler_event: no request-response instance registered for protocol {:?}", + p_name + ); + } + } } - - log::warn!( - target: "sub-libp2p", - "on_connection_handler_event: no request-response instance registered for protocol {:?}", - p_name - ); } fn poll( From 82381e7a547891523c2e3b34722776b5c5720f6c Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Wed, 15 Mar 2023 13:40:07 +0400 Subject: [PATCH 08/48] make request_responses.rs compile --- .../src/protocol/notifications/behaviour.rs | 67 +++++++----- .../src/protocol/notifications/handler.rs | 102 +++++++----------- client/network/src/request_responses.rs | 85 ++++----------- 3 files changed, 94 insertions(+), 160 deletions(-) diff --git a/client/network/src/protocol/notifications/behaviour.rs b/client/network/src/protocol/notifications/behaviour.rs index 831d67f1f4315..41f9f13963b0c 100644 --- a/client/network/src/protocol/notifications/behaviour.rs +++ b/client/network/src/protocol/notifications/behaviour.rs @@ -17,18 +17,18 @@ // along with this program. If not, see . use crate::protocol::notifications::handler::{ - self, NotificationsSink, NotifsHandlerIn, NotifsHandlerOut, NotifsHandlerProto, + self, NotificationsSink, NotifsHandler, NotifsHandlerIn, NotifsHandlerOut, }; use bytes::BytesMut; use fnv::FnvHashMap; use futures::prelude::*; use libp2p::{ - core::{Endpoint, Multiaddr, PeerId}, + core::{ConnectedPoint, Endpoint, Multiaddr, PeerId}, swarm::{ behaviour::{ConnectionClosed, ConnectionEstablished, DialFailure, FromSwarm}, ConnectionDenied, ConnectionId, DialError, NetworkBehaviour, NetworkBehaviourAction, - NotifyHandler, PollParameters, THandler, THandlerOutEvent, + NotifyHandler, PollParameters, THandler, THandlerInEvent, THandlerOutEvent, }, }; use log::{error, trace, warn}; @@ -133,7 +133,7 @@ pub struct Notifications { next_incoming_index: sc_peerset::IncomingIndex, /// Events to produce from `poll()`. - events: VecDeque>, + events: VecDeque>, } /// Configuration for a notifications protocol. @@ -589,10 +589,8 @@ impl Notifications { set_id, ); trace!(target: "sub-libp2p", "Libp2p <= Dial {:?}", occ_entry.key()); - self.events.push_back(NetworkBehaviourAction::Dial { - opts: occ_entry.key().0.into(), - handler, - }); + self.events + .push_back(NetworkBehaviourAction::Dial { opts: occ_entry.key().0.into() }); *occ_entry.into_mut() = PeerState::Requested; }, @@ -987,29 +985,9 @@ impl Notifications { } impl NetworkBehaviour for Notifications { - type ConnectionHandler = NotifsHandlerProto; + type ConnectionHandler = NotifsHandler; type OutEvent = NotificationsOut; - fn handle_established_inbound_connection( - &mut self, - connection_id: ConnectionId, - peer: PeerId, - local_addr: &Multiaddr, - remote_addr: &Multiaddr, - ) -> Result, ConnectionDenied> { - Ok(NotifsHandlerProto::new(self.notif_protocols.clone())) - } - - fn handle_established_outbound_connection( - &mut self, - connection_id: ConnectionId, - peer: PeerId, - addr: &Multiaddr, - role_override: Endpoint, - ) -> Result, ConnectionDenied> { - Ok(NotifsHandlerProto::new(self.notif_protocols.clone())) - } - fn handle_pending_inbound_connection( &mut self, _connection_id: ConnectionId, @@ -1029,6 +1007,37 @@ impl NetworkBehaviour for Notifications { Ok(Vec::new()) } + fn handle_established_inbound_connection( + &mut self, + _connection_id: ConnectionId, + peer: PeerId, + local_addr: &Multiaddr, + remote_addr: &Multiaddr, + ) -> Result, ConnectionDenied> { + Ok(NotifsHandler::new( + peer, + ConnectedPoint::Listener { + local_addr: local_addr.clone(), + send_back_addr: remote_addr.clone(), + }, + self.notif_protocols.clone(), + )) + } + + fn handle_established_outbound_connection( + &mut self, + _connection_id: ConnectionId, + peer: PeerId, + addr: &Multiaddr, + role_override: Endpoint, + ) -> Result, ConnectionDenied> { + Ok(NotifsHandler::new( + peer, + ConnectedPoint::Dialer { address: addr.clone(), role_override }, + self.notif_protocols.clone(), + )) + } + fn on_swarm_event(&mut self, event: FromSwarm) { match event { FromSwarm::ConnectionEstablished(ConnectionEstablished { diff --git a/client/network/src/protocol/notifications/handler.rs b/client/network/src/protocol/notifications/handler.rs index 70157386ef32e..3c7202693f496 100644 --- a/client/network/src/protocol/notifications/handler.rs +++ b/client/network/src/protocol/notifications/handler.rs @@ -71,8 +71,8 @@ use futures::{ use libp2p::{ core::{ConnectedPoint, PeerId}, swarm::{ - handler::ConnectionEvent, ConnectionHandler, ConnectionHandlerEvent, IntoConnectionHandler, - KeepAlive, NegotiatedSubstream, SubstreamProtocol, + handler::ConnectionEvent, ConnectionHandler, ConnectionHandlerEvent, KeepAlive, + NegotiatedSubstream, SubstreamProtocol, }, }; use log::error; @@ -103,19 +103,6 @@ const OPEN_TIMEOUT: Duration = Duration::from_secs(10); /// open substreams. const INITIAL_KEEPALIVE_TIME: Duration = Duration::from_secs(5); -/// Implements the `IntoConnectionHandler` trait of libp2p. -/// -/// Every time a connection with a remote starts, an instance of this struct is created and -/// sent to a background task dedicated to this connection. Once the connection is established, -/// it is turned into a [`NotifsHandler`]. -/// -/// See the documentation at the module level for more information. -pub struct NotifsHandlerProto { - /// Name of protocols, prototypes for upgrades for inbound substreams, and the message we - /// send or respond with in the handshake. - protocols: Vec, -} - /// The actual handler once the connection has been established. /// /// See the documentation at the module level for more information. @@ -138,6 +125,29 @@ pub struct NotifsHandler { >, } +impl NotifsHandler { + pub fn new(peer_id: PeerId, endpoint: ConnectedPoint, protocols: Vec) -> Self { + Self { + protocols: protocols + .into_iter() + .map(|config| { + let in_upgrade = NotificationsIn::new( + config.name.clone(), + config.fallback_names.clone(), + config.max_notification_size, + ); + + Protocol { config, in_upgrade, state: State::Closed { pending_opening: false } } + }) + .collect(), + peer_id, + endpoint, + when_connection_open: Instant::now(), + events_queue: VecDeque::with_capacity(16), + } + } +} + /// Configuration for a notifications protocol. #[derive(Debug, Clone)] pub struct ProtocolConfig { @@ -221,44 +231,18 @@ enum State { }, } -impl IntoConnectionHandler for NotifsHandlerProto { - type Handler = NotifsHandler; - - fn inbound_protocol(&self) -> UpgradeCollec { - self.protocols - .iter() - .map(|cfg| { - NotificationsIn::new( - cfg.name.clone(), - cfg.fallback_names.clone(), - cfg.max_notification_size, - ) - }) - .collect::>() - } - - fn into_handler(self, peer_id: &PeerId, connected_point: &ConnectedPoint) -> Self::Handler { - NotifsHandler { - protocols: self - .protocols - .into_iter() - .map(|config| { - let in_upgrade = NotificationsIn::new( - config.name.clone(), - config.fallback_names.clone(), - config.max_notification_size, - ); - - Protocol { config, in_upgrade, state: State::Closed { pending_opening: false } } - }) - .collect(), - peer_id: *peer_id, - endpoint: connected_point.clone(), - when_connection_open: Instant::now(), - events_queue: VecDeque::with_capacity(16), - } - } -} +// fn inbound_protocol(&self) -> UpgradeCollec { +// self.protocols +// .iter() +// .map(|cfg| { +// NotificationsIn::new( +// cfg.name.clone(), +// cfg.fallback_names.clone(), +// cfg.max_notification_size, +// ) +// }) +// .collect::>() +// } /// Event that can be received by a `NotifsHandler`. #[derive(Debug, Clone)] @@ -459,18 +443,6 @@ pub enum NotifsHandlerError { SyncNotificationsClogged, } -impl NotifsHandlerProto { - /// Builds a new handler. - /// - /// `list` is a list of notification protocols names, the message to send as part of the - /// handshake, and the maximum allowed size of a notification. At the moment, the message - /// is always the same whether we open a substream ourselves or respond to handshake from - /// the remote. - pub fn new(list: impl Into>) -> Self { - Self { protocols: list.into() } - } -} - impl ConnectionHandler for NotifsHandler { type InEvent = NotifsHandlerIn; type OutEvent = NotifsHandlerOut; diff --git a/client/network/src/request_responses.rs b/client/network/src/request_responses.rs index 7afed07d7a8b5..603da1496af24 100644 --- a/client/network/src/request_responses.rs +++ b/client/network/src/request_responses.rs @@ -130,9 +130,6 @@ pub struct RequestResponsesBehaviour { protocols: HashMap, Option>)>, - // A map from [`ConnectionId`] to the sub-protocols. - connection_to_protocols_map: HashMap>, - /// Pending requests, passed down to a [`Behaviour`] behaviour, awaiting a reply. pending_requests: HashMap, RequestFailure>>)>, @@ -225,7 +222,6 @@ impl RequestResponsesBehaviour { send_feedback: Default::default(), peerset, message_request: None, - connection_to_protocols_map: HashMap::new(), }) } @@ -286,10 +282,10 @@ impl NetworkBehaviour for RequestResponsesBehaviour { fn handle_pending_outbound_connection( &mut self, - connection_id: ConnectionId, - maybe_peer: Option, - addresses: &[Multiaddr], - effective_role: Endpoint, + _connection_id: ConnectionId, + _maybe_peer: Option, + _addresses: &[Multiaddr], + _effective_role: Endpoint, ) -> Result, ConnectionDenied> { Ok(Vec::new()) } @@ -314,9 +310,6 @@ impl NetworkBehaviour for RequestResponsesBehaviour { } }); - self.connection_to_protocols_map - .insert(connection_id, iter.map(|(k, _)| k).collect()); - Ok(MultiHandler::try_from_iter(iter).expect( "Protocols are in a HashMap and there can be at most one handler per protocol name, \ which is the only possible error; qed", @@ -340,9 +333,6 @@ impl NetworkBehaviour for RequestResponsesBehaviour { } }); - self.connection_to_protocols_map - .insert(connection_id, iter.map(|(k, _)| k).collect()); - Ok(MultiHandler::try_from_iter(iter).expect( "Protocols are in a HashMap and there can be at most one handler per protocol name, \ which is the only possible error; qed", @@ -379,51 +369,17 @@ impl NetworkBehaviour for RequestResponsesBehaviour { ) } }, - FromSwarm::DialFailure(DialFailure { peer_id, error, connection_id }) => - if let Some(p_names) = self.connection_to_protocols_map.get(&connection_id) { - for p_name in p_names { - if let Some((proto, _)) = self.protocols.get_mut(p_name.as_str()) { - proto.on_swarm_event(FromSwarm::DialFailure(DialFailure { - peer_id, - error, - connection_id, - })); - } else { - log::error!( - target: "sub-libp2p", - "on_swarm_event/dial_failure: no request-response instance registered for protocol {:?}", - p_name, - ) - } - } + FromSwarm::DialFailure(e) => + for (p, _) in self.protocols.values_mut() { + NetworkBehaviour::on_swarm_event(p, FromSwarm::DialFailure(e)); }, FromSwarm::ListenerClosed(e) => for (p, _) in self.protocols.values_mut() { NetworkBehaviour::on_swarm_event(p, FromSwarm::ListenerClosed(e)); }, - FromSwarm::ListenFailure(ListenFailure { - local_addr, - send_back_addr, - error, - connection_id, - }) => - if let Some(p_names) = self.connection_to_protocols_map.get(&connection_id) { - for p_name in p_names { - if let Some((proto, _)) = self.protocols.get_mut(p_name.as_str()) { - proto.on_swarm_event(FromSwarm::ListenFailure(ListenFailure { - local_addr, - send_back_addr, - error, - connection_id, - })); - } else { - log::error!( - target: "sub-libp2p", - "on_swarm_event/listen_failure: no request-response instance registered for protocol {:?}", - p_name, - ) - } - } + FromSwarm::ListenFailure(e) => + for (p, _) in self.protocols.values_mut() { + NetworkBehaviour::on_swarm_event(p, FromSwarm::ListenFailure(e)); }, FromSwarm::ListenerError(e) => for (p, _) in self.protocols.values_mut() { @@ -462,18 +418,15 @@ impl NetworkBehaviour for RequestResponsesBehaviour { connection_id: ConnectionId, event: THandlerOutEvent, ) { - if let Some(p_names) = self.connection_to_protocols_map.get(&connection_id) { - for p_name in p_names { - if let Some((proto, _)) = self.protocols.get_mut(p_name.as_str()) { - return proto.on_connection_handler_event(peer_id, connection_id, event.1) - } else { - log::warn!( - target: "sub-libp2p", - "on_connection_handler_event: no request-response instance registered for protocol {:?}", - p_name - ); - } - } + let p_name = event.0; + if let Some((proto, _)) = self.protocols.get_mut(p_name.as_str()) { + return proto.on_connection_handler_event(peer_id, connection_id, event.1) + } else { + log::warn!( + target: "sub-libp2p", + "on_connection_handler_event: no request-response instance registered for protocol {:?}", + p_name + ); } } From 5d47761382dcf07b5bc4142a8b2b0104bee0f658 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Wed, 15 Mar 2023 15:34:28 +0400 Subject: [PATCH 09/48] fix notifications/behaviour.rs tests --- .../src/protocol/notifications/behaviour.rs | 142 +++++++++--------- .../src/protocol/notifications/tests.rs | 72 ++++----- client/network/src/transport.rs | 7 +- 3 files changed, 112 insertions(+), 109 deletions(-) diff --git a/client/network/src/protocol/notifications/behaviour.rs b/client/network/src/protocol/notifications/behaviour.rs index 41f9f13963b0c..10994194d37fe 100644 --- a/client/network/src/protocol/notifications/behaviour.rs +++ b/client/network/src/protocol/notifications/behaviour.rs @@ -2253,7 +2253,7 @@ mod tests { fn remote_opens_connection_and_substream() { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), send_back_addr: Multiaddr::empty(), @@ -2303,7 +2303,7 @@ mod tests { async fn disconnect_remote_substream_before_handled_by_peerset() { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), send_back_addr: Multiaddr::empty(), @@ -2340,7 +2340,7 @@ mod tests { let (mut notif, _peerset) = development_notifs(); let set_id = sc_peerset::SetId::from(0); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), send_back_addr: Multiaddr::empty(), @@ -2375,7 +2375,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected, - handler: NotifsHandlerProto::new(vec![]).into_handler(&peer, &connected), + handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, )); @@ -2404,7 +2404,7 @@ mod tests { fn peerset_connect_incoming() { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), @@ -2439,7 +2439,7 @@ mod tests { let (mut notif, _peerset) = development_notifs(); let set_id = sc_peerset::SetId::from(0); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), send_back_addr: Multiaddr::empty(), @@ -2485,7 +2485,7 @@ mod tests { fn peerset_disconnect_enabled() { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), @@ -2535,7 +2535,7 @@ mod tests { let (mut notif, _peerset) = development_notifs(); let set_id = sc_peerset::SetId::from(0); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), send_back_addr: Multiaddr::empty(), @@ -2565,7 +2565,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected, - handler: NotifsHandlerProto::new(vec![]).into_handler(&peer, &connected), + handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, )); @@ -2587,7 +2587,7 @@ mod tests { fn peerset_accept_peer_not_alive() { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), @@ -2634,7 +2634,7 @@ mod tests { fn secondary_connection_peer_state_incoming() { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let conn2 = ConnectionId::new(1usize); let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { @@ -2691,7 +2691,7 @@ mod tests { fn close_connection_for_disabled_peer() { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), @@ -2714,7 +2714,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected, - handler: NotifsHandlerProto::new(vec![]).into_handler(&peer, &connected), + handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, )); @@ -2725,7 +2725,7 @@ mod tests { fn close_connection_for_incoming_peer_one_connection() { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), @@ -2755,7 +2755,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected, - handler: NotifsHandlerProto::new(vec![]).into_handler(&peer, &connected), + handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, )); @@ -2770,7 +2770,7 @@ mod tests { fn close_connection_for_incoming_peer_two_connections() { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let conn1 = ConnectionId::new(1usize); let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { @@ -2822,7 +2822,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected, - handler: NotifsHandlerProto::new(vec![]).into_handler(&peer, &connected), + handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, )); @@ -2840,7 +2840,7 @@ mod tests { fn connection_and_substream_open() { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), @@ -2892,7 +2892,7 @@ mod tests { fn connection_closed_sink_replaced() { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); - let conn1 = ConnectionId::new(0usize); + let conn1 = ConnectionId::DUMMY; let conn2 = ConnectionId::new(1usize); let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { @@ -2967,7 +2967,7 @@ mod tests { peer_id: peer, connection_id: conn1, endpoint: &connected, - handler: NotifsHandlerProto::new(vec![]).into_handler(&peer, &connected), + handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, )); @@ -2998,8 +2998,8 @@ mod tests { notif.on_swarm_event(FromSwarm::DialFailure(libp2p::swarm::behaviour::DialFailure { peer_id: Some(peer), - handler: NotifsHandlerProto::new(vec![]), error: &libp2p::swarm::DialError::Banned, + connection_id: ConnectionId::DUMMY, })); if let Some(PeerState::Backoff { timer_deadline, .. }) = notif.peers.get(&(peer, set_id)) { @@ -3013,7 +3013,7 @@ mod tests { async fn write_notification() { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), @@ -3063,7 +3063,7 @@ mod tests { let (mut notif, _peerset) = development_notifs(); let set_id = sc_peerset::SetId::from(0); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), send_back_addr: Multiaddr::empty(), @@ -3093,7 +3093,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected, - handler: NotifsHandlerProto::new(vec![]).into_handler(&peer, &connected), + handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, )); @@ -3111,7 +3111,7 @@ mod tests { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); let set_id = sc_peerset::SetId::from(0); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), send_back_addr: Multiaddr::empty(), @@ -3137,7 +3137,7 @@ mod tests { let (mut notif, _peerset) = development_notifs(); let set_id = sc_peerset::SetId::from(0); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), send_back_addr: Multiaddr::empty(), @@ -3167,7 +3167,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected, - handler: NotifsHandlerProto::new(vec![]).into_handler(&peer, &connected), + handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, )); @@ -3183,8 +3183,8 @@ mod tests { let (mut notif, _peerset) = development_notifs(); let set_id = sc_peerset::SetId::from(0); let peer = PeerId::random(); - let conn1 = ConnectionId::new(0usize); - let conn2 = ConnectionId::new(0usize); + let conn1 = ConnectionId::DUMMY; + let conn2 = ConnectionId::DUMMY; let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), send_back_addr: Multiaddr::empty(), @@ -3230,7 +3230,7 @@ mod tests { peer_id: peer, connection_id: conn1, endpoint: &connected, - handler: NotifsHandlerProto::new(vec![]).into_handler(&peer, &connected), + handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, )); @@ -3244,7 +3244,7 @@ mod tests { peer_id: peer, connection_id: conn2, endpoint: &connected, - handler: NotifsHandlerProto::new(vec![]).into_handler(&peer, &connected), + handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, )); @@ -3256,7 +3256,7 @@ mod tests { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); let set_id = sc_peerset::SetId::from(0); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), send_back_addr: Multiaddr::empty(), @@ -3295,7 +3295,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected, - handler: NotifsHandlerProto::new(vec![]).into_handler(&peer, &connected), + handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, )); @@ -3306,7 +3306,7 @@ mod tests { fn two_connections_inactive_connection_gets_closed_peer_state_is_still_incoming() { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); - let conn1 = ConnectionId::new(0usize); + let conn1 = ConnectionId::DUMMY; let conn2 = ConnectionId::new(1usize); let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { @@ -3351,7 +3351,7 @@ mod tests { peer_id: peer, connection_id: conn2, endpoint: &connected, - handler: NotifsHandlerProto::new(vec![]).into_handler(&peer, &connected), + handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, )); @@ -3362,7 +3362,7 @@ mod tests { fn two_connections_active_connection_gets_closed_peer_state_is_disabled() { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); - let conn1 = ConnectionId::new(0usize); + let conn1 = ConnectionId::DUMMY; let conn2 = ConnectionId::new(1usize); let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { @@ -3410,7 +3410,7 @@ mod tests { peer_id: peer, connection_id: conn1, endpoint: &connected, - handler: NotifsHandlerProto::new(vec![]).into_handler(&peer, &connected), + handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, )); @@ -3421,7 +3421,7 @@ mod tests { fn inject_connection_closed_for_active_connection() { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); - let conn1 = ConnectionId::new(0usize); + let conn1 = ConnectionId::DUMMY; let conn2 = ConnectionId::new(1usize); let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { @@ -3481,7 +3481,7 @@ mod tests { peer_id: peer, connection_id: conn1, endpoint: &connected, - handler: NotifsHandlerProto::new(vec![]).into_handler(&peer, &connected), + handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, )); @@ -3492,7 +3492,7 @@ mod tests { let (mut notif, _peerset) = development_notifs(); let set_id = sc_peerset::SetId::from(0); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), send_back_addr: Multiaddr::empty(), @@ -3522,7 +3522,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected, - handler: NotifsHandlerProto::new(vec![]).into_handler(&peer, &connected), + handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, )); @@ -3539,8 +3539,8 @@ mod tests { let now = Instant::now(); notif.on_swarm_event(FromSwarm::DialFailure(libp2p::swarm::behaviour::DialFailure { peer_id: Some(peer), - handler: NotifsHandlerProto::new(vec![]), error: &libp2p::swarm::DialError::Banned, + connection_id: ConnectionId::DUMMY, })); if let Some(PeerState::PendingRequest { ref timer_deadline, .. }) = @@ -3555,7 +3555,7 @@ mod tests { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); let set_id = sc_peerset::SetId::from(0); - let conn1 = ConnectionId::new(0usize); + let conn1 = ConnectionId::DUMMY; let conn2 = ConnectionId::new(1usize); let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), @@ -3609,7 +3609,7 @@ mod tests { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); let set_id = sc_peerset::SetId::from(0); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), send_back_addr: Multiaddr::empty(), @@ -3639,7 +3639,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected, - handler: NotifsHandlerProto::new(vec![]).into_handler(&peer, &connected), + handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, )); @@ -3686,7 +3686,7 @@ mod tests { async fn reschedule_disabled_pending_enable_when_connection_not_closed() { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), @@ -3802,7 +3802,7 @@ mod tests { fn peerset_report_connect_with_enabled_peer() { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), @@ -3854,7 +3854,7 @@ mod tests { let (mut notif, _peerset) = development_notifs(); let set_id = sc_peerset::SetId::from(0); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), send_back_addr: Multiaddr::empty(), @@ -3911,7 +3911,7 @@ mod tests { let (mut notif, _peerset) = development_notifs(); let set_id = sc_peerset::SetId::from(0); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), send_back_addr: Multiaddr::empty(), @@ -3941,7 +3941,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected, - handler: NotifsHandlerProto::new(vec![]).into_handler(&peer, &connected), + handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, )); @@ -3964,7 +3964,7 @@ mod tests { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); let set_id = sc_peerset::SetId::from(0); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), send_back_addr: Multiaddr::empty(), @@ -3999,7 +3999,7 @@ mod tests { fn peerset_report_accept_incoming_peer() { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), @@ -4040,7 +4040,7 @@ mod tests { fn peerset_report_accept_not_incoming_peer() { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), @@ -4097,9 +4097,9 @@ mod tests { notif.on_swarm_event(FromSwarm::ConnectionClosed( libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, - connection_id: ConnectionId::new(0usize), + connection_id: ConnectionId::DUMMY, endpoint: &endpoint, - handler: NotifsHandlerProto::new(vec![]).into_handler(&peer, &endpoint), + handler: NotifsHandler::new(peer, endpoint, vec![]), remaining_established: 0usize, }, )); @@ -4141,7 +4141,7 @@ mod tests { fn reject_non_active_connection() { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), @@ -4179,7 +4179,7 @@ mod tests { fn reject_non_existent_peer_but_alive_connection() { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), @@ -4219,7 +4219,7 @@ mod tests { fn inject_non_existent_connection_closed_for_incoming_peer() { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), @@ -4250,7 +4250,7 @@ mod tests { peer_id: peer, connection_id: ConnectionId::new(1337usize), endpoint: &connected, - handler: NotifsHandlerProto::new(vec![]).into_handler(&peer, &connected), + handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, )); @@ -4263,7 +4263,7 @@ mod tests { let (mut notif, _peerset) = development_notifs(); let set_id = sc_peerset::SetId::from(0); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), send_back_addr: Multiaddr::empty(), @@ -4285,7 +4285,7 @@ mod tests { peer_id: peer, connection_id: ConnectionId::new(1337usize), endpoint: &connected, - handler: NotifsHandlerProto::new(vec![]).into_handler(&peer, &connected), + handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, )); @@ -4298,7 +4298,7 @@ mod tests { let (mut notif, _peerset) = development_notifs(); let set_id = sc_peerset::SetId::from(0); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), send_back_addr: Multiaddr::empty(), @@ -4336,7 +4336,7 @@ mod tests { peer_id: peer, connection_id: ConnectionId::new(1337usize), endpoint: &connected, - handler: NotifsHandlerProto::new(vec![]).into_handler(&peer, &connected), + handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, )); @@ -4348,7 +4348,7 @@ mod tests { fn inject_connection_closed_for_incoming_peer_state_mismatch() { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), @@ -4380,7 +4380,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected, - handler: NotifsHandlerProto::new(vec![]).into_handler(&peer, &connected), + handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, )); @@ -4392,7 +4392,7 @@ mod tests { fn inject_connection_closed_for_enabled_state_mismatch() { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), @@ -4427,7 +4427,7 @@ mod tests { peer_id: peer, connection_id: ConnectionId::new(1337usize), endpoint: &connected, - handler: NotifsHandlerProto::new(vec![]).into_handler(&peer, &connected), + handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, )); @@ -4440,7 +4440,7 @@ mod tests { let (mut notif, _peerset) = development_notifs(); let set_id = sc_peerset::SetId::from(0); let peer = PeerId::random(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), send_back_addr: Multiaddr::empty(), @@ -4470,7 +4470,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected, - handler: NotifsHandlerProto::new(vec![]).into_handler(&peer, &connected), + handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, )); @@ -4481,7 +4481,7 @@ mod tests { peer_id: peer, connection_id: conn, endpoint: &connected, - handler: NotifsHandlerProto::new(vec![]).into_handler(&peer, &connected), + handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, )); @@ -4492,7 +4492,7 @@ mod tests { #[cfg(debug_assertions)] fn open_result_ok_non_existent_peer() { let (mut notif, _peerset) = development_notifs(); - let conn = ConnectionId::new(0usize); + let conn = ConnectionId::DUMMY; let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), send_back_addr: Multiaddr::empty(), diff --git a/client/network/src/protocol/notifications/tests.rs b/client/network/src/protocol/notifications/tests.rs index 83f4ac3e9ead7..4f5f397d81648 100644 --- a/client/network/src/protocol/notifications/tests.rs +++ b/client/network/src/protocol/notifications/tests.rs @@ -22,11 +22,12 @@ use crate::protocol::notifications::{Notifications, NotificationsOut, ProtocolCo use futures::prelude::*; use libp2p::{ - core::{connection::ConnectionId, transport::MemoryTransport, upgrade, Endpoint}, + core::{transport::MemoryTransport, upgrade, Endpoint}, identity, noise, swarm::{ - behaviour::FromSwarm, ConnectionDenied, ConnectionHandler, Executor, IntoConnectionHandler, - NetworkBehaviour, NetworkBehaviourAction, PollParameters, Swarm, SwarmEvent, THandler, + behaviour::FromSwarm, ConnectionDenied, ConnectionId, Executor, NetworkBehaviour, + NetworkBehaviourAction, PollParameters, Swarm, SwarmEvent, THandler, THandlerInEvent, + THandlerOutEvent, }, yamux, Multiaddr, PeerId, Transport, }; @@ -146,32 +147,6 @@ impl NetworkBehaviour for CustomProtoWithAddr { type ConnectionHandler = ::ConnectionHandler; type OutEvent = ::OutEvent; - fn handle_established_inbound_connection( - &mut self, - connection_id: ConnectionId, - peer: PeerId, - local_addr: &Multiaddr, - remote_addr: &Multiaddr, - ) -> Result, ConnectionDenied> { - self.inner.handle_established_inbound_connection( - connection_id, - peer, - local_addr, - remote_addr, - ) - } - - fn handle_established_outbound_connection( - &mut self, - connection_id: ConnectionId, - peer: PeerId, - addr: &Multiaddr, - role_override: Endpoint, - ) -> Result, ConnectionDenied> { - self.inner - .handle_established_outbound_connection(connection_id, peer, addr, role_override) - } - fn handle_pending_inbound_connection( &mut self, connection_id: ConnectionId, @@ -194,15 +169,43 @@ impl NetworkBehaviour for CustomProtoWithAddr { maybe_peer, addresses, effective_role, - ); - for (p, a) in self.addrs.iter() { - if p == peer_id { - list.push(a.clone()); + )?; + if let Some(peer_id) = maybe_peer { + for (p, a) in self.addrs.iter() { + if *p == peer_id { + list.push(a.clone()); + } } } Ok(list) } + fn handle_established_inbound_connection( + &mut self, + connection_id: ConnectionId, + peer: PeerId, + local_addr: &Multiaddr, + remote_addr: &Multiaddr, + ) -> Result, ConnectionDenied> { + self.inner.handle_established_inbound_connection( + connection_id, + peer, + local_addr, + remote_addr, + ) + } + + fn handle_established_outbound_connection( + &mut self, + connection_id: ConnectionId, + peer: PeerId, + addr: &Multiaddr, + role_override: Endpoint, + ) -> Result, ConnectionDenied> { + self.inner + .handle_established_outbound_connection(connection_id, peer, addr, role_override) + } + fn on_swarm_event(&mut self, event: FromSwarm) { self.inner.on_swarm_event(event); } @@ -211,8 +214,7 @@ impl NetworkBehaviour for CustomProtoWithAddr { &mut self, peer_id: PeerId, connection_id: ConnectionId, - event: <::Handler as - ConnectionHandler>::OutEvent, + event: THandlerOutEvent, ) { self.inner.on_connection_handler_event(peer_id, connection_id, event); } diff --git a/client/network/src/transport.rs b/client/network/src/transport.rs index 6af9cebd854ec..619961dd0b4fc 100644 --- a/client/network/src/transport.rs +++ b/client/network/src/transport.rs @@ -90,11 +90,12 @@ pub fn build_transport( rare panic here is basically zero"); // Legacy noise configurations for backward compatibility. - // let noise_legacy = - // noise::LegacyConfig { recv_legacy_handshake: true, ..Default::default() }; + #[allow(deprecated)] + let noise_legacy = noise::LegacyConfig { recv_legacy_handshake: true, ..Default::default() }; let mut xx_config = noise::NoiseConfig::xx(noise_keypair); - // xx_config.set_legacy_config(noise_legacy); + #[allow(deprecated)] + xx_config.set_legacy_config(noise_legacy); xx_config.into_authenticated() }; From 683f7d067885aab4e724169d6c1602f1d6a0c566 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Wed, 15 Mar 2023 15:52:01 +0400 Subject: [PATCH 10/48] fix warnings --- client/network/src/peer_info.rs | 8 ++++---- client/network/src/request_responses.rs | 3 +-- client/network/src/service.rs | 6 +++--- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/client/network/src/peer_info.rs b/client/network/src/peer_info.rs index 0d27162c3f8b5..ddf24e686b197 100644 --- a/client/network/src/peer_info.rs +++ b/client/network/src/peer_info.rs @@ -196,10 +196,10 @@ impl NetworkBehaviour for PeerInfoBehaviour { fn handle_pending_outbound_connection( &mut self, - connection_id: ConnectionId, - maybe_peer: Option, - addresses: &[Multiaddr], - effective_role: Endpoint, + _connection_id: ConnectionId, + _maybe_peer: Option, + _addresses: &[Multiaddr], + _effective_role: Endpoint, ) -> Result, ConnectionDenied> { // Only `Discovery::handle_pending_outbound_connection` must be returning addresses to // ensure that we don't return unwanted addresses. diff --git a/client/network/src/request_responses.rs b/client/network/src/request_responses.rs index 603da1496af24..9efa7f5c4f4ef 100644 --- a/client/network/src/request_responses.rs +++ b/client/network/src/request_responses.rs @@ -43,7 +43,7 @@ use libp2p::{ core::{Endpoint, Multiaddr, PeerId}, request_response::{self, Behaviour, Codec, Config, Message, ProtocolSupport, ResponseChannel}, swarm::{ - behaviour::{ConnectionClosed, DialFailure, FromSwarm, ListenFailure}, + behaviour::{ConnectionClosed, FromSwarm}, handler::multi::MultiHandler, ConnectionDenied, ConnectionId, NetworkBehaviour, NetworkBehaviourAction, PollParameters, THandler, THandlerInEvent, THandlerOutEvent, @@ -578,7 +578,6 @@ impl NetworkBehaviour for RequestResponsesBehaviour { "The request-response isn't supposed to start dialing addresses" ); } - let protocol = protocol.to_string(); return Poll::Ready(NetworkBehaviourAction::Dial { opts }) }, NetworkBehaviourAction::NotifyHandler { peer_id, handler, event } => diff --git a/client/network/src/service.rs b/client/network/src/service.rs index 59b55fa666106..d2f9ba3b6f6c7 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -47,8 +47,8 @@ use libp2p::{ multiaddr, ping::Failure as PingFailure, swarm::{ - AddressScore, ConnectionError, ConnectionHandler, ConnectionLimits, DialError, Executor, - ListenError, NetworkBehaviour, Swarm, SwarmBuilder, SwarmEvent, THandlerErr, + AddressScore, ConnectionError, ConnectionLimits, DialError, Executor, ListenError, + NetworkBehaviour, Swarm, SwarmBuilder, SwarmEvent, THandlerErr, }, Multiaddr, PeerId, }; @@ -1577,7 +1577,7 @@ where endpoint, num_established, concurrent_dial_errors, - established_in, + .. } => { if let Some(errors) = concurrent_dial_errors { debug!(target: "sub-libp2p", "Libp2p => Connected({:?}) with errors: {:?}", peer_id, errors); From 88faef00691ef4459511231c5aeee7ed6c41e60b Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Thu, 16 Mar 2023 11:29:05 +0400 Subject: [PATCH 11/48] remove old code --- .../network/src/protocol/notifications/handler.rs | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/client/network/src/protocol/notifications/handler.rs b/client/network/src/protocol/notifications/handler.rs index 3c7202693f496..4d3f9faaf6fda 100644 --- a/client/network/src/protocol/notifications/handler.rs +++ b/client/network/src/protocol/notifications/handler.rs @@ -126,6 +126,7 @@ pub struct NotifsHandler { } impl NotifsHandler { + /// Creates new [`NotifsHandler`]. pub fn new(peer_id: PeerId, endpoint: ConnectedPoint, protocols: Vec) -> Self { Self { protocols: protocols @@ -231,19 +232,6 @@ enum State { }, } -// fn inbound_protocol(&self) -> UpgradeCollec { -// self.protocols -// .iter() -// .map(|cfg| { -// NotificationsIn::new( -// cfg.name.clone(), -// cfg.fallback_names.clone(), -// cfg.max_notification_size, -// ) -// }) -// .collect::>() -// } - /// Event that can be received by a `NotifsHandler`. #[derive(Debug, Clone)] pub enum NotifsHandlerIn { From 0e4e65056643af43207b6ad96275acc4f4209e07 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Thu, 16 Mar 2023 15:35:32 +0400 Subject: [PATCH 12/48] allow deprecated code (temporary) --- .../src/protocol/notifications/behaviour.rs | 77 ++++++++++--------- client/network/src/service.rs | 14 +++- 2 files changed, 49 insertions(+), 42 deletions(-) diff --git a/client/network/src/protocol/notifications/behaviour.rs b/client/network/src/protocol/notifications/behaviour.rs index 10994194d37fe..5c77b95ce1b50 100644 --- a/client/network/src/protocol/notifications/behaviour.rs +++ b/client/network/src/protocol/notifications/behaviour.rs @@ -2085,6 +2085,7 @@ impl NetworkBehaviour for Notifications { } #[cfg(test)] +#[allow(deprecated)] mod tests { use super::*; use crate::protocol::notifications::handler::tests::*; @@ -2374,7 +2375,7 @@ mod tests { libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, connection_id: conn, - endpoint: &connected, + endpoint: &connected.clone(), handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, @@ -2564,7 +2565,7 @@ mod tests { libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, connection_id: conn, - endpoint: &connected, + endpoint: &connected.clone(), handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, @@ -2635,7 +2636,7 @@ mod tests { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); let conn = ConnectionId::DUMMY; - let conn2 = ConnectionId::new(1usize); + let conn2 = ConnectionId::DUMMY; // 1 let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), @@ -2713,7 +2714,7 @@ mod tests { libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, connection_id: conn, - endpoint: &connected, + endpoint: &connected.clone(), handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, @@ -2754,7 +2755,7 @@ mod tests { libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, connection_id: conn, - endpoint: &connected, + endpoint: &connected.clone(), handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, @@ -2771,7 +2772,7 @@ mod tests { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); let conn = ConnectionId::DUMMY; - let conn1 = ConnectionId::new(1usize); + let conn1 = ConnectionId::DUMMY; // 1 let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), @@ -2821,7 +2822,7 @@ mod tests { libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, connection_id: conn, - endpoint: &connected, + endpoint: &connected.clone(), handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, @@ -2893,7 +2894,7 @@ mod tests { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); let conn1 = ConnectionId::DUMMY; - let conn2 = ConnectionId::new(1usize); + let conn2 = ConnectionId::DUMMY; // 1 let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), @@ -2966,7 +2967,7 @@ mod tests { libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, connection_id: conn1, - endpoint: &connected, + endpoint: &connected.clone(), handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, @@ -3092,7 +3093,7 @@ mod tests { libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, connection_id: conn, - endpoint: &connected, + endpoint: &connected.clone(), handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, @@ -3166,7 +3167,7 @@ mod tests { libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, connection_id: conn, - endpoint: &connected, + endpoint: &connected.clone(), handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, @@ -3229,8 +3230,8 @@ mod tests { libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, connection_id: conn1, - endpoint: &connected, - handler: NotifsHandler::new(peer, connected, vec![]), + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected.clone(), vec![]), remaining_established: 0usize, }, )); @@ -3243,7 +3244,7 @@ mod tests { libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, connection_id: conn2, - endpoint: &connected, + endpoint: &connected.clone(), handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, @@ -3294,7 +3295,7 @@ mod tests { libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, connection_id: conn, - endpoint: &connected, + endpoint: &connected.clone(), handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, @@ -3307,7 +3308,7 @@ mod tests { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); let conn1 = ConnectionId::DUMMY; - let conn2 = ConnectionId::new(1usize); + let conn2 = ConnectionId::DUMMY; // 1 let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), @@ -3350,7 +3351,7 @@ mod tests { libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, connection_id: conn2, - endpoint: &connected, + endpoint: &connected.clone(), handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, @@ -3363,7 +3364,7 @@ mod tests { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); let conn1 = ConnectionId::DUMMY; - let conn2 = ConnectionId::new(1usize); + let conn2 = ConnectionId::DUMMY; // 1 let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), @@ -3409,7 +3410,7 @@ mod tests { libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, connection_id: conn1, - endpoint: &connected, + endpoint: &connected.clone(), handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, @@ -3422,7 +3423,7 @@ mod tests { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); let conn1 = ConnectionId::DUMMY; - let conn2 = ConnectionId::new(1usize); + let conn2 = ConnectionId::DUMMY; // 1 let set_id = sc_peerset::SetId::from(0); let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), @@ -3480,7 +3481,7 @@ mod tests { libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, connection_id: conn1, - endpoint: &connected, + endpoint: &connected.clone(), handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, @@ -3521,7 +3522,7 @@ mod tests { libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, connection_id: conn, - endpoint: &connected, + endpoint: &connected.clone(), handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, @@ -3556,7 +3557,7 @@ mod tests { let peer = PeerId::random(); let set_id = sc_peerset::SetId::from(0); let conn1 = ConnectionId::DUMMY; - let conn2 = ConnectionId::new(1usize); + let conn2 = ConnectionId::DUMMY; // 1 let connected = ConnectedPoint::Listener { local_addr: Multiaddr::empty(), send_back_addr: Multiaddr::empty(), @@ -3638,7 +3639,7 @@ mod tests { libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, connection_id: conn, - endpoint: &connected, + endpoint: &connected.clone(), handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, @@ -3940,7 +3941,7 @@ mod tests { libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, connection_id: conn, - endpoint: &connected, + endpoint: &connected.clone(), handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, @@ -4098,7 +4099,7 @@ mod tests { libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, connection_id: ConnectionId::DUMMY, - endpoint: &endpoint, + endpoint: &endpoint.clone(), handler: NotifsHandler::new(peer, endpoint, vec![]), remaining_established: 0usize, }, @@ -4248,8 +4249,8 @@ mod tests { notif.on_swarm_event(FromSwarm::ConnectionClosed( libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, - connection_id: ConnectionId::new(1337usize), - endpoint: &connected, + connection_id: ConnectionId::DUMMY, // 1337 + endpoint: &connected.clone(), handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, @@ -4283,8 +4284,8 @@ mod tests { notif.on_swarm_event(FromSwarm::ConnectionClosed( libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, - connection_id: ConnectionId::new(1337usize), - endpoint: &connected, + connection_id: ConnectionId::DUMMY, // 1337 + endpoint: &connected.clone(), handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, @@ -4334,8 +4335,8 @@ mod tests { notif.on_swarm_event(FromSwarm::ConnectionClosed( libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, - connection_id: ConnectionId::new(1337usize), - endpoint: &connected, + connection_id: ConnectionId::DUMMY, // 1337 + endpoint: &connected.clone(), handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, @@ -4379,7 +4380,7 @@ mod tests { libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, connection_id: conn, - endpoint: &connected, + endpoint: &connected.clone(), handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, @@ -4425,8 +4426,8 @@ mod tests { notif.on_swarm_event(FromSwarm::ConnectionClosed( libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, - connection_id: ConnectionId::new(1337usize), - endpoint: &connected, + connection_id: ConnectionId::DUMMY, // 1337 + endpoint: &connected.clone(), handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, @@ -4469,8 +4470,8 @@ mod tests { libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, connection_id: conn, - endpoint: &connected, - handler: NotifsHandler::new(peer, connected, vec![]), + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected.clone(), vec![]), remaining_established: 0usize, }, )); @@ -4480,7 +4481,7 @@ mod tests { libp2p::swarm::behaviour::ConnectionClosed { peer_id: peer, connection_id: conn, - endpoint: &connected, + endpoint: &connected.clone(), handler: NotifsHandler::new(peer, connected, vec![]), remaining_established: 0usize, }, diff --git a/client/network/src/service.rs b/client/network/src/service.rs index d2f9ba3b6f6c7..4a420e19c8ccc 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -524,10 +524,12 @@ where let swarm = &mut *swarm; open.iter() .filter_map(move |peer_id| { - let known_addresses = - NetworkBehaviour::addresses_of_peer(swarm.behaviour_mut(), peer_id) - .into_iter() - .collect(); + // TODO: either use `NetworkBehaviour::handle_pending_outbound_connection`, + // which requires `ConnectionId` OR store this info somewhere. + #[allow(deprecated)] + let known_addresses = NetworkBehaviour::addresses_of_peer(swarm.behaviour_mut(), peer_id) + .into_iter() + .collect(); let endpoint = if let Some(e) = swarm.behaviour_mut().node(peer_id).and_then(|i| i.endpoint()) @@ -560,6 +562,7 @@ where let not_connected_peers = { let swarm = &mut *swarm; + #[allow(deprecated)] swarm .behaviour_mut() .known_peers() @@ -577,6 +580,9 @@ where .behaviour_mut() .node(&peer_id) .and_then(|i| i.latest_ping()), + // TODO: either use + // `NetworkBehaviour::handle_pending_outbound_connection`, which + // requires `ConnectionId` OR store this info somewhere. known_addresses: NetworkBehaviour::addresses_of_peer( swarm.behaviour_mut(), &peer_id, From 44734ce1c4f1ea48333114a4cf58e5e5562531a9 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Thu, 23 Mar 2023 11:43:19 +0400 Subject: [PATCH 13/48] upgrade to libp2p 0.51.1 --- Cargo.lock | 677 +-- client/authority-discovery/Cargo.toml | 3 +- client/authority-discovery/src/error.rs | 2 +- client/authority-discovery/src/lib.rs | 3 +- client/authority-discovery/src/service.rs | 3 +- client/authority-discovery/src/tests.rs | 18 +- client/authority-discovery/src/worker.rs | 6 +- .../src/worker/addr_cache.rs | 6 +- .../src/worker/schema/tests.rs | 5 +- .../authority-discovery/src/worker/tests.rs | 3 +- client/cli/Cargo.toml | 2 +- client/cli/src/commands/generate_node_key.rs | 6 +- client/cli/src/commands/inspect_node_key.rs | 10 +- client/cli/src/params/node_key_params.rs | 11 +- client/consensus/common/Cargo.toml | 2 +- client/network-gossip/Cargo.toml | 2 +- client/network/Cargo.toml | 3 +- client/network/bitswap/Cargo.toml | 2 +- client/network/bitswap/src/lib.rs | 2 +- client/network/common/Cargo.toml | 3 +- client/network/common/src/config.rs | 30 +- client/network/common/src/protocol/event.rs | 3 +- client/network/common/src/service.rs | 5 +- .../network/common/src/service/signature.rs | 5 +- client/network/light/Cargo.toml | 2 +- client/network/src/behaviour.rs | 6 +- client/network/src/config.rs | 3 +- client/network/src/discovery.rs | 19 +- client/network/src/lib.rs | 3 +- client/network/src/peer_info.rs | 3 +- .../src/protocol/notifications/behaviour.rs | 4456 ++++++++--------- .../src/protocol/notifications/handler.rs | 164 +- client/network/src/request_responses.rs | 3 +- client/network/src/service.rs | 7 +- client/network/sync/Cargo.toml | 2 +- client/network/test/Cargo.toml | 2 +- client/network/transactions/Cargo.toml | 2 +- client/offchain/Cargo.toml | 2 +- client/peerset/Cargo.toml | 2 +- client/telemetry/Cargo.toml | 2 +- 40 files changed, 2775 insertions(+), 2715 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a145fe4260553..53a4fcaca4c3a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -203,11 +203,17 @@ dependencies = [ "winapi", ] +[[package]] +name = "anstyle" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" + [[package]] name = "anyhow" -version = "1.0.69" +version = "1.0.70" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" +checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" [[package]] name = "approx" @@ -220,9 +226,9 @@ dependencies = [ [[package]] name = "arbitrary" -version = "1.2.3" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e90af4de65aa7b293ef2d09daff88501eb254f58edde2e1ac02c82d873eadad" +checksum = "e2d098ff73c1ca148721f37baad5ea6a465a13f9573aba8641fbbbae8164a54e" [[package]] name = "arc-swap" @@ -238,9 +244,9 @@ checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" [[package]] name = "arrayref" -version = "0.3.6" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" [[package]] name = "arrayvec" @@ -294,7 +300,7 @@ checksum = "db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] @@ -306,7 +312,7 @@ checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] @@ -318,24 +324,19 @@ checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] -[[package]] -name = "asn1_der" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21" - [[package]] name = "assert_cmd" -version = "2.0.8" +version = "2.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9834fcc22e0874394a010230586367d4a3e9f11b560f469262678547e1d2575e" +checksum = "ec0b2340f55d9661d76793b2bfc2eb0e62689bd79d067a95707ea762afd5e9dd" dependencies = [ + "anstyle", "bstr", "doc-comment", - "predicates", + "predicates 3.0.1", "predicates-core", "predicates-tree", "wait-timeout", @@ -406,18 +407,18 @@ checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] name = "async-trait" -version = "0.1.66" +version = "0.1.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b84f9ebcc6c1f5b8cb160f6990096a5c127f423fcb6e1ccc46c370cbdfb75dfc" +checksum = "86ea188f25f0255d8f92797797c97ebf5631fa88178beb1a46fdf5622c9a00e4" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.4", ] [[package]] @@ -552,7 +553,7 @@ version = "0.64.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4243e6031260db77ede97ad86c27e501d646a27ab57b59a574f725d98ab1fb4" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cexpr", "clang-sys", "lazy_static", @@ -563,7 +564,7 @@ dependencies = [ "regex", "rustc-hash", "shlex", - "syn", + "syn 1.0.109", ] [[package]] @@ -572,6 +573,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "487f1e0fcbe47deb8b0574e646def1c903389d95241dd1bbcc6ce4a715dfc0c1" + [[package]] name = "bitvec" version = "1.0.1" @@ -703,9 +710,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1" +checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" dependencies = [ "memchr", "once_cell", @@ -771,9 +778,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.3" +version = "1.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6031a462f977dd38968b6f23378356512feeace69cef817e1a4475108093cec3" +checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2" dependencies = [ "serde", ] @@ -795,7 +802,7 @@ checksum = "08a1ec454bc3eead8719cb56e15dbbfecdbc14e4b3a3ae4936cc6e31f5fc0d07" dependencies = [ "camino", "cargo-platform", - "semver 1.0.16", + "semver 1.0.17", "serde", "serde_json", "thiserror", @@ -887,7 +894,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.1.8", + "clap 4.1.11", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -898,9 +905,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.23" +version = "0.4.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" +checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" dependencies = [ "iana-time-zone", "js-sys", @@ -1005,7 +1012,7 @@ version = "3.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "71655c45cb9845d3270c9d6df84ebe72b4dad3c2ba3f7023ad47c144e4e473a5" dependencies = [ - "bitflags", + "bitflags 1.3.2", "clap_lex 0.2.4", "indexmap", "textwrap", @@ -1013,13 +1020,13 @@ dependencies = [ [[package]] name = "clap" -version = "4.1.8" +version = "4.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d7ae14b20b94cb02149ed21a86c423859cbe18dc7ed69845cace50e52b40a5" +checksum = "42dfd32784433290c51d92c438bb72ea5063797fc3cc9a21a8c4346bebbb2098" dependencies = [ - "bitflags", + "bitflags 2.0.2", "clap_derive", - "clap_lex 0.3.2", + "clap_lex 0.3.3", "is-terminal", "once_cell", "strsim", @@ -1028,24 +1035,24 @@ dependencies = [ [[package]] name = "clap_complete" -version = "4.1.4" +version = "4.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501ff0a401473ea1d4c3b125ff95506b62c5bc5768d818634195fbb7c4ad5ff4" +checksum = "37686beaba5ac9f3ab01ee3172f792fc6ffdd685bfb9e63cfef02c0571a4e8e1" dependencies = [ - "clap 4.1.8", + "clap 4.1.11", ] [[package]] name = "clap_derive" -version = "4.1.8" +version = "4.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44bec8e5c9d09e439c4335b1af0abaab56dcf3b94999a936e1bb47b9134288f0" +checksum = "fddf67631444a3a3e3e5ac51c36a5e01335302de677bd78759eaa90ab1f46644" dependencies = [ "heck", "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1059,9 +1066,9 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "350b9cf31731f9957399229e9b2adc51eeabdfbe9d71d9a0552275fd12710d09" +checksum = "033f6b7a4acb1f358c742aaca805c939ee73b4c6209ae4318ec7aca81c42e646" dependencies = [ "os_str_bytes", ] @@ -1104,9 +1111,9 @@ checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" [[package]] name = "constant_time_eq" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279" +checksum = "13418e745008f7349ec7e449155f419a61b92b58a99cc3616942b926825ec76b" [[package]] name = "core-foundation" @@ -1411,7 +1418,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096" dependencies = [ "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1460,9 +1467,9 @@ dependencies = [ [[package]] name = "curve25519-dalek" -version = "4.0.0-rc.0" +version = "4.0.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8da00a7a9a4eb92a0a0f8e75660926d48f0d0f3c537e455c457bcdaa1e16b1ac" +checksum = "8d4ba9852b42210c7538b75484f9daa0655e9a3ac04f693747bb0f02cf3cfe16" dependencies = [ "cfg-if", "fiat-crypto", @@ -1474,9 +1481,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a140f260e6f3f79013b8bfc65e7ce630c9ab4388c6a89c71e07226f49487b72" +checksum = "a9c00419335c41018365ddf7e4d5f1c12ee3659ddcf3e01974650ba1de73d038" dependencies = [ "cc", "cxxbridge-flags", @@ -1486,9 +1493,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da6383f459341ea689374bf0a42979739dc421874f112ff26f829b8040b8e613" +checksum = "fb8307ad413a98fff033c8545ecf133e3257747b3bae935e7602aab8aa92d4ca" dependencies = [ "cc", "codespan-reporting", @@ -1496,31 +1503,31 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn", + "syn 2.0.4", ] [[package]] name = "cxxbridge-flags" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90201c1a650e95ccff1c8c0bb5a343213bdd317c6e600a93075bca2eff54ec97" +checksum = "edc52e2eb08915cb12596d29d55f0b5384f00d697a646dbd269b6ecb0fbd9d31" [[package]] name = "cxxbridge-macro" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b75aed41bb2e6367cae39e6326ef817a851db13c13e4f3263714ca3cfb8de56" +checksum = "631569015d0d8d54e6c241733f944042623ab6df7bc3be7466874b05fcdb1c5f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.4", ] [[package]] name = "darling" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0808e1bd8671fb44a113a14e13497557533369847788fa2ae912b6ebfce9fa8" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" dependencies = [ "darling_core", "darling_macro", @@ -1528,27 +1535,27 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "001d80444f28e193f30c2f293455da62dcf9a6b29918a4253152ae2b1de592cb" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn", + "syn 1.0.109", ] [[package]] name = "darling_macro" -version = "0.14.3" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b36230598a2d5de7ec1c6f51f72d8a99a9208daff41de2084d06e3fd3ea56685" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ "darling_core", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1574,7 +1581,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db" dependencies = [ "data-encoding", - "syn", + "syn 1.0.109", ] [[package]] @@ -1624,7 +1631,7 @@ checksum = "e79116f119dd1dba1abf1f3405f03b9b0e79a27a3883864bfebded8a3dc768cd" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1645,7 +1652,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1655,7 +1662,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68" dependencies = [ "derive_builder_core", - "syn", + "syn 1.0.109", ] [[package]] @@ -1666,7 +1673,7 @@ checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1759,7 +1766,7 @@ checksum = "3bf95dc3f046b9da4f2d51833c0d3547d8564ef6910f5c1ed130306a75b92886" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1810,7 +1817,7 @@ checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1905,7 +1912,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -1925,7 +1932,7 @@ checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2066,9 +2073,9 @@ dependencies = [ [[package]] name = "finality-grandpa" -version = "0.16.1" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e24e6c429951433ccb7c87fd528c60084834dcd14763182c1f83291bcde24c34" +checksum = "36530797b9bf31cd4ff126dcfee8170f86b00cfdcea3269d73133cc0415945c3" dependencies = [ "either", "futures", @@ -2181,7 +2188,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.1.8", + "clap 4.1.11", "comfy-table", "frame-benchmarking", "frame-support", @@ -2246,7 +2253,7 @@ dependencies = [ "quote", "scale-info", "sp-arithmetic", - "syn", + "syn 1.0.109", "trybuild", ] @@ -2272,7 +2279,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.8", + "clap 4.1.11", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -2341,7 +2348,7 @@ name = "frame-support" version = "4.0.0-dev" dependencies = [ "assert_matches", - "bitflags", + "bitflags 1.3.2", "environmental", "frame-metadata", "frame-support-procedural", @@ -2383,7 +2390,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2394,7 +2401,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2403,7 +2410,7 @@ version = "3.0.0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2541,9 +2548,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13e2792b0ff0340399d58445b88fd9770e3489eff258a4cbc1523418f12abf84" +checksum = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549" dependencies = [ "futures-channel", "futures-core", @@ -2556,9 +2563,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e5317663a9089767a1ec00a487df42e0ca174b61b4483213ac24448e4664df5" +checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac" dependencies = [ "futures-core", "futures-sink", @@ -2566,15 +2573,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec90ff4d0fe1f57d600049061dc6bb68ed03c7d2fbd697274c41805dcb3f8608" +checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd" [[package]] name = "futures-executor" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8de0a35a6ab97ec8869e32a2473f4b1324459e14c29275d14b10cb1fd19b50e" +checksum = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83" dependencies = [ "futures-core", "futures-task", @@ -2584,9 +2591,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfb8371b6fb2aeb2d280374607aeabfc99d95c72edfe51692e42d3d7f0d08531" +checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91" [[package]] name = "futures-lite" @@ -2605,13 +2612,13 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95a73af87da33b5acf53acfebdc339fe592ecf5357ac7c0a7734ab9d8c876a70" +checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -2627,15 +2634,15 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f310820bb3e8cfd46c80db4d7fb8353e15dfff853a127158425f31e0be6c8364" +checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2" [[package]] name = "futures-task" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf79a1bf610b10f42aea489289c5a2c478a786509693b80cd39c44ccd936366" +checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879" [[package]] name = "futures-timer" @@ -2645,9 +2652,9 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] name = "futures-util" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c1d6de3acfef38d2be4b1f543f553131788603495be83da675e180c8d6b7bd1" +checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab" dependencies = [ "futures-channel", "futures-core", @@ -2777,7 +2784,7 @@ version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccf7f68c2995f392c49fffb4f95ae2c873297830eb25c6bc4c114ce8f4562acc" dependencies = [ - "bitflags", + "bitflags 1.3.2", "libc", "libgit2-sys", "log", @@ -3042,9 +3049,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.24" +version = "0.14.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c" +checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899" dependencies = [ "bytes", "futures-channel", @@ -3185,7 +3192,7 @@ checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3259,10 +3266,11 @@ checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" [[package]] name = "io-lifetimes" -version = "1.0.6" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfa919a82ea574332e2de6e74b4c36e74d41982b335080fa59d4ef31be20fdf3" +checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb" dependencies = [ + "hermit-abi 0.3.1", "libc", "windows-sys 0.45.0", ] @@ -3293,13 +3301,13 @@ checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "is-terminal" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" +checksum = "8687c819457e979cc940d09cb16e42a1bf70aa6b60a549de6d3a62a0ee90c69e" dependencies = [ "hermit-abi 0.3.1", - "io-lifetimes 1.0.6", - "rustix 0.36.9", + "io-lifetimes 1.0.9", + "rustix 0.36.11", "windows-sys 0.45.0", ] @@ -3409,7 +3417,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3646,9 +3654,9 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.139" +version = "0.2.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" +checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" [[package]] name = "libgit2-sys" @@ -3686,9 +3694,9 @@ checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" [[package]] name = "libp2p" -version = "0.51.0" +version = "0.51.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eb49f950659c645e0606461026387916f91bb2f6058c57ea1df4fab053cc676" +checksum = "53e068bb83ef4e0bed45de5ca4a4118018ac1f70ea3ecb1f4878742d08a97473" dependencies = [ "bytes", "futures", @@ -3698,6 +3706,7 @@ dependencies = [ "libp2p-core", "libp2p-dns", "libp2p-identify", + "libp2p-identity", "libp2p-kad", "libp2p-mdns", "libp2p-metrics", @@ -3713,25 +3722,21 @@ dependencies = [ "libp2p-websocket", "libp2p-yamux", "multiaddr", - "parking_lot 0.12.1", "pin-project", - "smallvec", ] [[package]] name = "libp2p-core" -version = "0.39.0" +version = "0.39.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881d9a54e97d97cdaa4125d48269d97ca8c40e5fefec6b85b30440dc60cc551f" +checksum = "9b7f8b7d65c070a5a1b5f8f0510648189da08f787b8963f8e21219e0710733af" dependencies = [ - "asn1_der", - "bs58", - "ed25519-dalek", "either", "fnv", "futures", "futures-timer", "instant", + "libp2p-identity", "log", "multiaddr", "multihash 0.17.0", @@ -3739,17 +3744,13 @@ dependencies = [ "once_cell", "parking_lot 0.12.1", "pin-project", - "prost", - "prost-build", + "quick-protobuf", "rand 0.8.5", "rw-stream-sink", - "sec1", - "sha2 0.10.6", "smallvec", "thiserror", "unsigned-varint", "void", - "zeroize", ] [[package]] @@ -3768,31 +3769,49 @@ dependencies = [ [[package]] name = "libp2p-identify" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "678c88be066a7fabd2b82fb78ddb9cacb7ad950a20c1acec481c27b312cc6dab" +checksum = "40d1da1f75baf824cfdc80f6aced51f7cbf8dc14e32363e9443570a80d4ee337" dependencies = [ "asynchronous-codec", "either", "futures", "futures-timer", "libp2p-core", + "libp2p-identity", "libp2p-swarm", "log", "lru 0.9.0", - "prost", - "prost-build", - "prost-codec", + "quick-protobuf", + "quick-protobuf-codec", "smallvec", "thiserror", "void", ] +[[package]] +name = "libp2p-identity" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a8ea433ae0cea7e3315354305237b9897afe45278b2118a7a57ca744e70fd27" +dependencies = [ + "bs58", + "ed25519-dalek", + "log", + "multiaddr", + "multihash 0.17.0", + "prost", + "quick-protobuf", + "rand 0.8.5", + "thiserror", + "zeroize", +] + [[package]] name = "libp2p-kad" -version = "0.43.0" +version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fc257f261ecf91bf55dd2ab439c928a05e3099c182d66cd332b28a203a98c84" +checksum = "5bc57e02d7ad49a63792370f24b829af38f34982ff56556e59e4cb325a4dbf6b" dependencies = [ "arrayvec 0.7.2", "asynchronous-codec", @@ -3803,10 +3822,10 @@ dependencies = [ "futures-timer", "instant", "libp2p-core", + "libp2p-identity", "libp2p-swarm", "log", - "prost", - "prost-build", + "quick-protobuf", "rand 0.8.5", "sha2 0.10.6", "smallvec", @@ -3870,18 +3889,18 @@ dependencies = [ [[package]] name = "libp2p-noise" -version = "0.42.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1216f9ec823ac7a2289b954674c54cbce81c9e45920b4fcf173018ede4295246" +checksum = "9c87c2803deffeae94108072a0387f8c9ff494af68a4908454c11c811e27b5e5" dependencies = [ "bytes", "curve25519-dalek 3.2.0", "futures", "libp2p-core", + "libp2p-identity", "log", "once_cell", - "prost", - "prost-build", + "quick-protobuf", "rand 0.8.5", "sha2 0.10.6", "snow", @@ -3910,15 +3929,16 @@ dependencies = [ [[package]] name = "libp2p-quic" -version = "0.7.0-alpha.2" +version = "0.7.0-alpha.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971f629ff7519f4d4889a7c981f0dc09c6ad493423cd8a13ee442de241bc8c8" +checksum = "c6b26abd81cd2398382a1edfe739b539775be8a90fa6914f39b2ab49571ec735" dependencies = [ "bytes", "futures", "futures-timer", "if-watch", "libp2p-core", + "libp2p-identity", "libp2p-tls", "log", "parking_lot 0.12.1", @@ -3977,7 +3997,7 @@ checksum = "0fba456131824ab6acd4c7bf61e9c0f0a3014b5fc9868ccb8e10d344594cdc4f" dependencies = [ "heck", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -3998,13 +4018,14 @@ dependencies = [ [[package]] name = "libp2p-tls" -version = "0.1.0-alpha.2" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9baf6f6292149e124ee737d9a79dbee783f29473fc368c7faad9d157841078a" +checksum = "ff08d13d0dc66e5e9ba6279c1de417b84fa0d0adc3b03e5732928c180ec02781" dependencies = [ "futures", "futures-rustls", "libp2p-core", + "libp2p-identity", "rcgen 0.10.0", "ring", "rustls 0.20.8", @@ -4030,9 +4051,9 @@ dependencies = [ [[package]] name = "libp2p-webrtc" -version = "0.4.0-alpha.2" +version = "0.4.0-alpha.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db4401ec550d36f413310ba5d4bf564bb21f89fb1601cadb32b2300f8bc1eb5b" +checksum = "ffd0c3af5921e3bdd5fecdf3eef3be5a197def64c1d23cd3ea79abcadbd461f7" dependencies = [ "async-trait", "asynchronous-codec", @@ -4042,12 +4063,12 @@ dependencies = [ "hex", "if-watch", "libp2p-core", + "libp2p-identity", "libp2p-noise", "log", "multihash 0.17.0", - "prost", - "prost-build", - "prost-codec", + "quick-protobuf", + "quick-protobuf-codec", "rand 0.8.5", "rcgen 0.9.3", "serde", @@ -4365,7 +4386,7 @@ version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix 0.36.9", + "rustix 0.36.11", ] [[package]] @@ -4509,7 +4530,7 @@ dependencies = [ "fragile", "lazy_static", "mockall_derive", - "predicates", + "predicates 2.1.5", "predicates-tree", ] @@ -4522,7 +4543,7 @@ dependencies = [ "cfg-if", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4594,7 +4615,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] @@ -4642,7 +4663,7 @@ checksum = "d232c68884c0c99810a5a4d333ef7e47689cfd0edc85efc9e54e1e6bf5212766" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -4673,7 +4694,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d9ea4302b9759a7a88242299225ea3688e63c85ea136371bb6cf94fd674efaab" dependencies = [ "anyhow", - "bitflags", + "bitflags 1.3.2", "byteorder", "libc", "netlink-packet-core", @@ -4726,7 +4747,7 @@ version = "0.24.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fa52e972a9a719cecb6864fb88568781eb706bac2cd1d4f04a648542dbf78069" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if", "libc", "memoffset 0.6.5", @@ -4738,7 +4759,7 @@ version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg-if", "libc", "memoffset 0.7.1", @@ -4751,7 +4772,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes", - "clap 4.1.8", + "clap 4.1.11", "derive_more", "fs_extra", "futures", @@ -4788,7 +4809,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes", "assert_cmd", - "clap 4.1.8", + "clap 4.1.11", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -4909,7 +4930,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.1.8", + "clap 4.1.11", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -4968,7 +4989,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.1.8", + "clap 4.1.11", "generate-bags", "kitchensink-runtime", ] @@ -4977,7 +4998,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.1.8", + "clap 4.1.11", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -5264,9 +5285,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "os_str_bytes" -version = "6.4.1" +version = "6.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" +checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267" [[package]] name = "output_vt100" @@ -5640,7 +5661,7 @@ version = "4.0.0-dev" dependencies = [ "array-bytes", "assert_matches", - "bitflags", + "bitflags 1.3.2", "env_logger 0.9.3", "environmental", "frame-benchmarking", @@ -5677,7 +5698,7 @@ dependencies = [ name = "pallet-contracts-primitives" version = "7.0.0" dependencies = [ - "bitflags", + "bitflags 1.3.2", "parity-scale-codec", "scale-info", "sp-runtime", @@ -5691,7 +5712,7 @@ version = "4.0.0-dev" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -6557,7 +6578,7 @@ dependencies = [ "proc-macro2", "quote", "sp-runtime", - "syn", + "syn 1.0.109", ] [[package]] @@ -6823,9 +6844,9 @@ dependencies = [ [[package]] name = "parity-db" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df89dd8311063c54ae4e03d9aeb597b04212a57e82c339344130a9cad9b3e2d9" +checksum = "00bfb81cf5c90a222db2fb7b3a7cbf8cc7f38dfb6647aca4d98edf8281f56ed5" dependencies = [ "blake2", "crc32fast", @@ -6865,7 +6886,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7018,7 +7039,7 @@ dependencies = [ "pest_meta", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7059,7 +7080,7 @@ checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7143,7 +7164,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa" dependencies = [ "autocfg", - "bitflags", + "bitflags 1.3.2", "cfg-if", "concurrent-queue", "libc", @@ -7207,17 +7228,29 @@ dependencies = [ "regex", ] +[[package]] +name = "predicates" +version = "3.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ba7d6ead3e3966038f68caa9fc1f860185d95a793180bbcfe0d0da47b3961ed" +dependencies = [ + "anstyle", + "difflib", + "itertools", + "predicates-core", +] + [[package]] name = "predicates-core" -version = "1.0.5" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72f883590242d3c6fc5bf50299011695fa6590c2c70eac95ee1bdb9a733ad1a2" +checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" [[package]] name = "predicates-tree" -version = "1.0.7" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d" +checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" dependencies = [ "predicates-core", "termtree", @@ -7237,12 +7270,12 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.1.24" +version = "0.1.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebcd279d20a4a0a2404a33056388e950504d891c855c7975b9a8fef75f3bf04" +checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" dependencies = [ "proc-macro2", - "syn", + "syn 1.0.109", ] [[package]] @@ -7277,7 +7310,7 @@ dependencies = [ "proc-macro-error-attr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "version_check", ] @@ -7294,9 +7327,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.51" +version = "1.0.52" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d727cae5b39d21da60fa540906919ad737832fe0b1c165da3a34d6548c849d6" +checksum = "1d0e1ae9e836cc3beddd63db0df682593d7e2d3d891ae8c9083d2113e1744224" dependencies = [ "unicode-ident", ] @@ -7335,7 +7368,7 @@ checksum = "72b6a5217beb0ad503ee7fa752d451c905113d70721b937126158f3106a48cc1" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7365,24 +7398,11 @@ dependencies = [ "prost", "prost-types", "regex", - "syn", + "syn 1.0.109", "tempfile", "which", ] -[[package]] -name = "prost-codec" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc34979ff898b6e141106178981ce2596c387ea6e62533facfc61a37fc879c0" -dependencies = [ - "asynchronous-codec", - "bytes", - "prost", - "thiserror", - "unsigned-varint", -] - [[package]] name = "prost-derive" version = "0.11.8" @@ -7393,7 +7413,7 @@ dependencies = [ "itertools", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -7420,6 +7440,28 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" +[[package]] +name = "quick-protobuf" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d6da84cc204722a989e01ba2f6e1e276e190f22263d0cb6ce8526fcdb0d2e1f" +dependencies = [ + "byteorder", +] + +[[package]] +name = "quick-protobuf-codec" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1693116345026436eb2f10b677806169c1a1260c1c60eaaffe3fb5a29ae23d8b" +dependencies = [ + "asynchronous-codec", + "bytes", + "quick-protobuf", + "thiserror", + "unsigned-varint", +] + [[package]] name = "quickcheck" version = "1.0.3" @@ -7460,9 +7502,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.23" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" dependencies = [ "proc-macro2", ] @@ -7622,7 +7664,7 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -7638,22 +7680,22 @@ dependencies = [ [[package]] name = "ref-cast" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9af2cf09ef80e610097515e80095b7f76660a92743c4185aff5406cd5ce3dd5" +checksum = "f43faa91b1c8b36841ee70e97188a869d37ae21759da6846d4be66de5bf7b12c" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.15" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c501201393982e275433bc55de7d6ae6f00e7699cd5572c5b57581cd69c881b" +checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.4", ] [[package]] @@ -7700,7 +7742,7 @@ version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "76e189c2369884dce920945e2ddf79b3dff49e071a167dd1817fa9c4c00d512e" dependencies = [ - "bitflags", + "bitflags 1.3.2", "libc", "mach", "winapi", @@ -7846,7 +7888,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.16", + "semver 1.0.17", ] [[package]] @@ -7864,7 +7906,7 @@ version = "0.35.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "727a1a6d65f786ec22df8a81ca3121107f235970dc1705ed681d3e6e8b9cd5f9" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno", "io-lifetimes 0.7.5", "libc", @@ -7874,13 +7916,13 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.9" +version = "0.36.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd5c6ff11fecd55b40746d1995a02f2eb375bf8c00d192d521ee09f42bef37bc" +checksum = "db4165c9963ab29e422d6c26fbc1d37f15bace6b2810221f9d925023480fcf0e" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno", - "io-lifetimes 1.0.6", + "io-lifetimes 1.0.9", "libc", "linux-raw-sys 0.1.4", "windows-sys 0.45.0", @@ -8012,6 +8054,7 @@ dependencies = [ "futures-timer", "ip_network", "libp2p", + "libp2p-identity", "log", "parity-scale-codec", "prost", @@ -8098,7 +8141,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -8107,11 +8150,11 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "chrono", - "clap 4.1.8", + "clap 4.1.11", "fdlimit", "futures", "futures-timer", - "libp2p", + "libp2p-identity", "log", "names", "parity-scale-codec", @@ -8648,7 +8691,7 @@ dependencies = [ "once_cell", "parity-scale-codec", "paste", - "rustix 0.36.9", + "rustix 0.36.11", "sc-allocator", "sc-executor-common", "sc-runtime-test", @@ -8705,6 +8748,7 @@ dependencies = [ "futures-timer", "ip_network", "libp2p", + "libp2p-identity", "log", "lru 0.8.1", "mockall", @@ -8749,7 +8793,7 @@ version = "0.10.0-dev" dependencies = [ "cid", "futures", - "libp2p", + "libp2p-identity", "log", "prost", "prost-build", @@ -8774,11 +8818,12 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "async-trait", - "bitflags", + "bitflags 1.3.2", "bytes", "futures", "futures-timer", "libp2p", + "libp2p-identity", "linked_hash_set", "parity-scale-codec", "prost-build", @@ -9214,7 +9259,7 @@ dependencies = [ name = "sc-storage-monitor" version = "0.1.0" dependencies = [ - "clap 4.1.8", + "clap 4.1.11", "fs4", "futures", "log", @@ -9318,7 +9363,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -9407,7 +9452,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -9539,7 +9584,7 @@ version = "2.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a332be01508d814fed64bf28f798a146d73792121129962fdf335bb3c49a4254" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "core-foundation-sys", "libc", @@ -9576,9 +9621,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.16" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" +checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" dependencies = [ "serde", ] @@ -9591,22 +9636,22 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.154" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cdd151213925e7f1ab45a9bbfb129316bd00799784b174b7cc7bcd16961c49e" +checksum = "771d4d9c4163ee138805e12c710dd365e4f44be8be0503cb1bb9eb989425d9c9" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.154" +version = "1.0.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fc80d722935453bcafdc2c9a73cd6fac4dc1938f0346035d84bf99fa9e33217" +checksum = "e801c1712f48475582b7696ac71e0ca34ebb30e09338425384269d9717c62cad" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.4", ] [[package]] @@ -9772,14 +9817,14 @@ checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831" [[package]] name = "snow" -version = "0.9.1" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12ba5f4d4ff12bdb6a169ed51b7c48c0e0ac4b0b4b31012b2571e97d78d3201d" +checksum = "5ccba027ba85743e09d15c03296797cad56395089b832b48b5a5217880f57733" dependencies = [ "aes-gcm 0.9.4", "blake2", "chacha20poly1305", - "curve25519-dalek 4.0.0-rc.0", + "curve25519-dalek 4.0.0-rc.1", "rand_core 0.6.4", "ring", "rustc_version 0.4.0", @@ -9840,7 +9885,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -10086,7 +10131,7 @@ version = "7.0.0" dependencies = [ "array-bytes", "base58", - "bitflags", + "bitflags 1.3.2", "blake2", "bounded-collections", "criterion", @@ -10146,7 +10191,7 @@ dependencies = [ "proc-macro2", "quote", "sp-core-hashing", - "syn", + "syn 1.0.109", ] [[package]] @@ -10163,7 +10208,7 @@ version = "5.0.0" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -10288,7 +10333,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.1.8", + "clap 4.1.11", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -10383,7 +10428,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -10607,7 +10652,7 @@ dependencies = [ "proc-macro2", "quote", "sp-version", - "syn", + "syn 1.0.109", ] [[package]] @@ -10645,9 +10690,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "spin" -version = "0.9.5" +version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dccf47db1b41fa1573ed27ccf5e08e3ca771cb994f776668c5ebda893b248fc" +checksum = "b5d6e0250b93c8427a177b849d144a96d5acc57006149479403d7861ab721e34" [[package]] name = "spki" @@ -10692,7 +10737,7 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a2a1c578e98c1c16fc3b8ec1328f7659a500737d7a0c6d625e73e830ff9c1f6" dependencies = [ - "bitflags", + "bitflags 1.3.2", "cfg_aliases", "libc", "parking_lot 0.11.2", @@ -10711,7 +10756,7 @@ dependencies = [ "memchr", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -10739,7 +10784,7 @@ dependencies = [ "proc-macro2", "quote", "rustversion", - "syn", + "syn 1.0.109", ] [[package]] @@ -10765,7 +10810,7 @@ dependencies = [ name = "subkey" version = "3.0.0" dependencies = [ - "clap 4.1.8", + "clap 4.1.11", "sc-cli", ] @@ -10793,7 +10838,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.1.8", + "clap 4.1.11", "frame-support", "frame-system", "sc-cli", @@ -11009,7 +11054,7 @@ dependencies = [ "proc-macro-crate", "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -11063,6 +11108,17 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "syn" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c622ae390c9302e214c31013517c2061ecb2699935882c60a9b37f82f8625ae" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "synstructure" version = "0.12.6" @@ -11071,7 +11127,7 @@ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "unicode-xid", ] @@ -11081,7 +11137,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d75182f12f490e953596550b65ee31bda7c8e043d9386174b353bda50838c3fd" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "system-configuration-sys", ] @@ -11117,7 +11173,7 @@ dependencies = [ "cfg-if", "fastrand", "redox_syscall", - "rustix 0.36.9", + "rustix 0.36.11", "windows-sys 0.42.0", ] @@ -11132,9 +11188,9 @@ dependencies = [ [[package]] name = "termtree" -version = "0.4.0" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8" +checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" [[package]] name = "textwrap" @@ -11144,22 +11200,22 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d" [[package]] name = "thiserror" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5ab016db510546d856297882807df8da66a16fb8c4101cb8b30054b0d5b2d9c" +checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.39" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5420d42e90af0c38c3290abcca25b9b3bdf379fc9f55c528f53a269d9c9a267e" +checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 2.0.4", ] [[package]] @@ -11316,7 +11372,7 @@ checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -11396,7 +11452,7 @@ version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858" dependencies = [ - "bitflags", + "bitflags 1.3.2", "bytes", "futures-core", "futures-util", @@ -11441,7 +11497,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] @@ -11631,7 +11687,7 @@ name = "try-runtime-cli" version = "0.10.0-dev" dependencies = [ "async-trait", - "clap 4.1.8", + "clap 4.1.11", "frame-remote-externalities", "frame-try-runtime", "hex", @@ -11665,9 +11721,9 @@ dependencies = [ [[package]] name = "trybuild" -version = "1.0.79" +version = "1.0.80" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db3115bddce1b5f52dd4b5e0ec8298a66ce733e4cc6759247dc2d1c11508ec38" +checksum = "501dbdbb99861e4ab6b60eb6a7493956a9defb644fd034bc4a5ef27c693c8a3a" dependencies = [ "basic-toml", "dissimilar", @@ -11742,9 +11798,9 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.11" +version = "0.3.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524b68aca1d05e03fdf03fcdce2c6c94b6daf6d16861ddaa7e4f2b6638a9052c" +checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" [[package]] name = "unicode-ident" @@ -11881,12 +11937,11 @@ checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" [[package]] name = "walkdir" -version = "2.3.2" +version = "2.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" +checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" dependencies = [ "same-file", - "winapi", "winapi-util", ] @@ -11939,7 +11994,7 @@ dependencies = [ "once_cell", "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-shared", ] @@ -11973,7 +12028,7 @@ checksum = "2aff81306fcac3c7515ad4e177f521b5c9a15f2b08f4e32d823066102f35a5f6" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -12084,7 +12139,7 @@ version = "0.20.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01bf50edb2ea9d922aa75a7bf3c15e26a6c9e2d18c56e862b49737a582901729" dependencies = [ - "spin 0.9.5", + "spin 0.9.6", "wasmi_arena", "wasmi_core 0.5.0", "wasmparser-nostd", @@ -12198,7 +12253,7 @@ dependencies = [ "directories-next", "file-per-thread-logger", "log", - "rustix 0.36.9", + "rustix 0.36.11", "serde", "sha2 0.10.6", "toml", @@ -12278,7 +12333,7 @@ checksum = "d0245e8a9347017c7185a72e215218a802ff561545c242953c11ba00fccc930f" dependencies = [ "object 0.29.0", "once_cell", - "rustix 0.36.9", + "rustix 0.36.11", ] [[package]] @@ -12309,7 +12364,7 @@ dependencies = [ "memoffset 0.6.5", "paste", "rand 0.8.5", - "rustix 0.36.9", + "rustix 0.36.11", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-jit-debug", @@ -12586,7 +12641,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "93f1db1727772c05cf7a2cfece52c3aca8045ca1e176cd517d323489aa3c6d87" dependencies = [ "async-trait", - "bitflags", + "bitflags 1.3.2", "bytes", "cc", "ipnet", @@ -12678,12 +12733,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", + "windows_x86_64_msvc 0.42.2", ] [[package]] @@ -12697,24 +12752,24 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" +checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.1", - "windows_i686_gnu 0.42.1", - "windows_i686_msvc 0.42.1", - "windows_x86_64_gnu 0.42.1", + "windows_aarch64_msvc 0.42.2", + "windows_i686_gnu 0.42.2", + "windows_i686_msvc 0.42.2", + "windows_x86_64_gnu 0.42.2", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.1", + "windows_x86_64_msvc 0.42.2", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" +checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" [[package]] name = "windows_aarch64_msvc" @@ -12724,9 +12779,9 @@ checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" [[package]] name = "windows_aarch64_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" +checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" [[package]] name = "windows_i686_gnu" @@ -12736,9 +12791,9 @@ checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" [[package]] name = "windows_i686_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" +checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" [[package]] name = "windows_i686_msvc" @@ -12748,9 +12803,9 @@ checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" [[package]] name = "windows_i686_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" +checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" [[package]] name = "windows_x86_64_gnu" @@ -12760,15 +12815,15 @@ checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" [[package]] name = "windows_x86_64_gnu" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" +checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" +checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" [[package]] name = "windows_x86_64_msvc" @@ -12778,9 +12833,9 @@ checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" [[package]] name = "windows_x86_64_msvc" -version = "0.42.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" +checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" [[package]] name = "winreg" @@ -12905,7 +12960,7 @@ checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", "synstructure", ] diff --git a/client/authority-discovery/Cargo.toml b/client/authority-discovery/Cargo.toml index a727419c9f6cc..08fd613a75f12 100644 --- a/client/authority-discovery/Cargo.toml +++ b/client/authority-discovery/Cargo.toml @@ -21,7 +21,8 @@ codec = { package = "parity-scale-codec", version = "3.2.2", default-features = futures = "0.3.21" futures-timer = "3.0.1" ip_network = "0.4.1" -libp2p = { version = "0.51.0", features = ["kad"] } +libp2p = { version = "0.51.1", features = ["kad"] } +libp2p-identity = { version = "0.1.0", features = ["peerid", "ed25519"] } log = "0.4.17" prost = "0.11" rand = "0.8.5" diff --git a/client/authority-discovery/src/error.rs b/client/authority-discovery/src/error.rs index 89c05b71b9ea6..f6923df945a38 100644 --- a/client/authority-discovery/src/error.rs +++ b/client/authority-discovery/src/error.rs @@ -57,7 +57,7 @@ pub enum Error { ParsingMultiaddress(#[from] libp2p::core::multiaddr::Error), #[error("Failed to parse a libp2p key.")] - ParsingLibp2pIdentity(#[from] libp2p::identity::error::DecodingError), + ParsingLibp2pIdentity(#[from] libp2p_identity::DecodingError), #[error("Failed to sign using a specific public key.")] MissingSignature(CryptoTypePublicPair), diff --git a/client/authority-discovery/src/lib.rs b/client/authority-discovery/src/lib.rs index 579b9d8b15051..19fff4d858ce6 100644 --- a/client/authority-discovery/src/lib.rs +++ b/client/authority-discovery/src/lib.rs @@ -39,7 +39,8 @@ use futures::{ Stream, }; -use libp2p::{Multiaddr, PeerId}; +use libp2p::Multiaddr; +use libp2p_identity::PeerId; use sc_network_common::protocol::event::DhtEvent; use sp_authority_discovery::AuthorityId; use sp_blockchain::HeaderBackend; diff --git a/client/authority-discovery/src/service.rs b/client/authority-discovery/src/service.rs index 89ae058d17f7a..bbb0f3568a4ca 100644 --- a/client/authority-discovery/src/service.rs +++ b/client/authority-discovery/src/service.rs @@ -25,7 +25,8 @@ use futures::{ SinkExt, }; -use libp2p::{Multiaddr, PeerId}; +use libp2p::Multiaddr; +use libp2p_identity::PeerId; use sp_authority_discovery::AuthorityId; /// Service to interact with the [`crate::Worker`]. diff --git a/client/authority-discovery/src/tests.rs b/client/authority-discovery/src/tests.rs index 982c3fc04c590..3e32400f2f117 100644 --- a/client/authority-discovery/src/tests.rs +++ b/client/authority-discovery/src/tests.rs @@ -25,10 +25,8 @@ use crate::{ }; use futures::{channel::mpsc::channel, executor::LocalPool, task::LocalSpawn}; -use libp2p::core::{ - multiaddr::{Multiaddr, Protocol}, - PeerId, -}; +use libp2p::core::multiaddr::{Multiaddr, Protocol}; +use libp2p_identity::{ed25519, PeerId}; use std::{collections::HashSet, sync::Arc}; use sp_authority_discovery::AuthorityId; @@ -87,18 +85,16 @@ fn get_addresses_and_authority_id() { fn cryptos_are_compatible() { use sp_core::crypto::Pair; - let libp2p_secret = libp2p::identity::Keypair::generate_ed25519(); - let libp2p_public = libp2p_secret.public(); + let libp2p_keypair = ed25519::Keypair::generate(); + let libp2p_public = libp2p_keypair.public(); - let sp_core_secret = { - 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_secret = + { sp_core::ed25519::Pair::from_seed_slice(&libp2p_keypair.secret().as_ref()).unwrap() }; let sp_core_public = sp_core_secret.public(); let message = b"we are more powerful than not to be better"; - let libp2p_signature = libp2p_secret.sign(message).unwrap(); + let libp2p_signature = libp2p_keypair.sign(message); let sp_core_signature = sp_core_secret.sign(message); // no error expected... assert!(sp_core::ed25519::Pair::verify( diff --git a/client/authority-discovery/src/worker.rs b/client/authority-discovery/src/worker.rs index bc5fe2848d5a1..9c508eef9d719 100644 --- a/client/authority-discovery/src/worker.rs +++ b/client/authority-discovery/src/worker.rs @@ -37,8 +37,10 @@ use ip_network::IpNetwork; use libp2p::{ core::multiaddr, multihash::{Multihash, MultihashDigest}, - Multiaddr, PeerId, + Multiaddr, }; +use libp2p_identity::PeerId; + use log::{debug, error, log_enabled}; use prometheus_endpoint::{register, Counter, CounterVec, Gauge, Opts, U64}; use prost::Message; @@ -547,7 +549,7 @@ where // properly signed by the owner of the PeerId if let Some(peer_signature) = peer_signature { - let public_key = libp2p::identity::PublicKey::from_protobuf_encoding( + let public_key = libp2p_identity::PublicKey::from_protobuf_encoding( &peer_signature.public_key, ) .map_err(Error::ParsingLibp2pIdentity)?; diff --git a/client/authority-discovery/src/worker/addr_cache.rs b/client/authority-discovery/src/worker/addr_cache.rs index 8084b7f0a6dff..06419d38d33f4 100644 --- a/client/authority-discovery/src/worker/addr_cache.rs +++ b/client/authority-discovery/src/worker/addr_cache.rs @@ -16,10 +16,8 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use libp2p::{ - core::multiaddr::{Multiaddr, Protocol}, - PeerId, -}; +use libp2p::core::multiaddr::{Multiaddr, Protocol}; +use libp2p_identity::PeerId; use sp_authority_discovery::AuthorityId; use std::collections::{hash_map::Entry, HashMap, HashSet}; diff --git a/client/authority-discovery/src/worker/schema/tests.rs b/client/authority-discovery/src/worker/schema/tests.rs index 89c921e0c9fda..33275204eca69 100644 --- a/client/authority-discovery/src/worker/schema/tests.rs +++ b/client/authority-discovery/src/worker/schema/tests.rs @@ -21,7 +21,8 @@ mod schema_v1 { } use super::*; -use libp2p::{multiaddr::Multiaddr, PeerId}; +use libp2p::multiaddr::Multiaddr; +use libp2p_identity::PeerId; use prost::Message; #[test] @@ -55,7 +56,7 @@ fn v2_decodes_v1() { #[test] fn v1_decodes_v2() { - let peer_secret = libp2p::identity::Keypair::generate_ed25519(); + let peer_secret = libp2p_identity::Keypair::generate_ed25519(); let peer_public = peer_secret.public(); let peer_id = peer_public.to_peer_id(); let multiaddress: Multiaddr = diff --git a/client/authority-discovery/src/worker/tests.rs b/client/authority-discovery/src/worker/tests.rs index 22f984d9718ee..a205d9f5fed1d 100644 --- a/client/authority-discovery/src/worker/tests.rs +++ b/client/authority-discovery/src/worker/tests.rs @@ -29,7 +29,8 @@ use futures::{ sink::SinkExt, task::LocalSpawn, }; -use libp2p::{core::multiaddr, identity::Keypair, PeerId}; +use libp2p::{core::multiaddr, identity::Keypair}; +use libp2p_identity::PeerId; use prometheus_endpoint::prometheus::default_registry; use sc_client_api::HeaderBackend; diff --git a/client/cli/Cargo.toml b/client/cli/Cargo.toml index f534d9521c0c3..c11e102dad061 100644 --- a/client/cli/Cargo.toml +++ b/client/cli/Cargo.toml @@ -18,7 +18,7 @@ chrono = "0.4.10" clap = { version = "4.0.9", features = ["derive", "string"] } fdlimit = "0.2.1" futures = "0.3.21" -libp2p = "0.51.0" +libp2p-identity = { version = "0.1.0", features = ["peerid", "ed25519"]} log = "0.4.17" names = { version = "0.13.0", default-features = false } parity-scale-codec = "3.2.2" diff --git a/client/cli/src/commands/generate_node_key.rs b/client/cli/src/commands/generate_node_key.rs index 2288cd4037773..6ba84ad9d634a 100644 --- a/client/cli/src/commands/generate_node_key.rs +++ b/client/cli/src/commands/generate_node_key.rs @@ -19,7 +19,7 @@ use crate::Error; use clap::Parser; -use libp2p::identity::{ed25519 as libp2p_ed25519, PublicKey}; +use libp2p_identity::{ed25519, Keypair}; use std::{ fs, io::{self, Write}, @@ -50,7 +50,7 @@ pub struct GenerateNodeKeyCmd { impl GenerateNodeKeyCmd { /// Run the command pub fn run(&self) -> Result<(), Error> { - let keypair = libp2p_ed25519::Keypair::generate(); + let keypair = ed25519::Keypair::generate(); let secret = keypair.secret(); @@ -65,7 +65,7 @@ impl GenerateNodeKeyCmd { None => io::stdout().lock().write_all(&file_data)?, } - eprintln!("{}", PublicKey::Ed25519(keypair.public()).to_peer_id()); + eprintln!("{}", Keypair::from(keypair).public().to_peer_id()); Ok(()) } diff --git a/client/cli/src/commands/inspect_node_key.rs b/client/cli/src/commands/inspect_node_key.rs index 2370f4a0989ba..4ff12f4e2255b 100644 --- a/client/cli/src/commands/inspect_node_key.rs +++ b/client/cli/src/commands/inspect_node_key.rs @@ -19,7 +19,7 @@ use crate::Error; use clap::Parser; -use libp2p::identity::{ed25519, PublicKey}; +use libp2p_identity::Keypair; use std::{ fs, io::{self, Read}, @@ -70,12 +70,10 @@ impl InspectNodeKeyCmd { .map_err(|_| "failed to decode secret as hex")?; } - let secret = - ed25519::SecretKey::from_bytes(&mut file_data).map_err(|_| "Bad node key file")?; + let keypair = + Keypair::ed25519_from_bytes(&mut file_data).map_err(|_| "Bad node key file")?; - let keypair = ed25519::Keypair::from(secret); - - println!("{}", PublicKey::Ed25519(keypair.public()).to_peer_id()); + println!("{}", keypair.public().to_peer_id()); Ok(()) } diff --git a/client/cli/src/params/node_key_params.rs b/client/cli/src/params/node_key_params.rs index d470ef1fad12a..687f782ee2a95 100644 --- a/client/cli/src/params/node_key_params.rs +++ b/client/cli/src/params/node_key_params.rs @@ -123,7 +123,7 @@ fn parse_ed25519_secret(hex: &str) -> error::Result {}, - _ => panic!("Invalid key"), + if let Some(pair) = node_key.into_ed25519() { + if pair.secret().as_ref() != key.as_ref() { + panic!("Invalid key") + } + } else { + panic!("Invalid key") } } diff --git a/client/consensus/common/Cargo.toml b/client/consensus/common/Cargo.toml index cf7cda2b83c55..786b23d31ddb4 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 = "0.51.0" +libp2p = "0.51.1" log = "0.4.17" mockall = "0.11.3" parking_lot = "0.12.1" diff --git a/client/network-gossip/Cargo.toml b/client/network-gossip/Cargo.toml index d81b96ea5385b..c281228530a0b 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.8.2" futures = "0.3.21" futures-timer = "3.0.1" -libp2p = "0.51.0" +libp2p = "0.51.1" log = "0.4.17" lru = "0.8.1" tracing = "0.1.29" diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index a33d4893e4bb1..ba6f466cf5157 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -25,7 +25,8 @@ fnv = "1.0.6" futures = "0.3.21" futures-timer = "3.0.2" ip_network = "0.4.1" -libp2p = { version = "0.51.0", features = ["dns", "identify", "kad", "macros", "mdns", "mplex", "noise", "ping", "tcp", "tokio", "yamux", "websocket"] } +libp2p = { version = "0.51.1", features = ["dns", "identify", "kad", "macros", "mdns", "mplex", "noise", "ping", "tcp", "tokio", "yamux", "websocket", "request-response"] } +libp2p-identity = { version = "0.1.0", features = ["ed25519", "peerid"] } log = "0.4.17" lru = "0.8.1" mockall = "0.11.3" diff --git a/client/network/bitswap/Cargo.toml b/client/network/bitswap/Cargo.toml index 983aca3160f4a..7a1373ca6cea5 100644 --- a/client/network/bitswap/Cargo.toml +++ b/client/network/bitswap/Cargo.toml @@ -18,7 +18,7 @@ prost-build = "0.11" [dependencies] cid = "0.8.6" futures = "0.3.21" -libp2p = "0.51.0" +libp2p-identity = { version = "0.1.0", features = ["peerid"] } log = "0.4.17" prost = "0.11" thiserror = "1.0" diff --git a/client/network/bitswap/src/lib.rs b/client/network/bitswap/src/lib.rs index dd5fc46f6ca71..83e47dda83506 100644 --- a/client/network/bitswap/src/lib.rs +++ b/client/network/bitswap/src/lib.rs @@ -22,7 +22,7 @@ use cid::{self, Version}; use futures::{channel::mpsc, StreamExt}; -use libp2p::core::PeerId; +use libp2p_identity::PeerId; use log::{debug, error, trace}; use prost::Message; use sc_client_api::BlockBackend; diff --git a/client/network/common/Cargo.toml b/client/network/common/Cargo.toml index 35c61461604e0..9bf6176b3493e 100644 --- a/client/network/common/Cargo.toml +++ b/client/network/common/Cargo.toml @@ -25,7 +25,8 @@ codec = { package = "parity-scale-codec", version = "3.2.2", features = [ ] } futures = "0.3.21" futures-timer = "3.0.2" -libp2p = { version = "0.51.0", features = ["request-response", "kad"] } +libp2p = { version = "0.51.1", features = ["request-response", "kad"] } +libp2p-identity = { version = "0.1", features = ["ed25519", "peerid"] } 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/common/src/config.rs b/client/network/common/src/config.rs index 6a02129fcfe06..0918d99c53fe8 100644 --- a/client/network/common/src/config.rs +++ b/client/network/common/src/config.rs @@ -26,13 +26,12 @@ pub use crate::{ sync::warp::WarpSyncProvider, ExHashT, }; -pub use libp2p::{build_multiaddr, core::PublicKey, identity}; +pub use libp2p::{build_multiaddr, identity}; +pub use libp2p_identity::PublicKey; use codec::Encode; -use libp2p::{ - identity::{ed25519, Keypair}, - multiaddr, Multiaddr, PeerId, -}; +use libp2p::{multiaddr, Multiaddr}; +use libp2p_identity::{ed25519, Keypair, PeerId}; use zeroize::Zeroize; use std::{ @@ -581,7 +580,7 @@ impl NodeKeyConfig { match self { Ed25519(Secret::New) => Ok(Keypair::generate_ed25519()), - Ed25519(Secret::Input(k)) => Ok(Keypair::Ed25519(k.into())), + Ed25519(Secret::Input(k)) => Ok(ed25519::Keypair::from(k).into()), Ed25519(Secret::File(f)) => get_secret( f, @@ -599,7 +598,7 @@ impl NodeKeyConfig { |b| b.as_ref().to_vec(), ) .map(ed25519::Keypair::from) - .map(Keypair::Ed25519), + .map(Keypair::from), } } } @@ -670,9 +669,14 @@ mod tests { tempfile::Builder::new().prefix(prefix).tempdir().unwrap() } - fn secret_bytes(kp: &Keypair) -> Vec { - let Keypair::Ed25519(p) = kp; - p.secret().as_ref().iter().cloned().collect() + fn secret_bytes(kp: Keypair) -> Vec { + kp.into_ed25519() + .expect("ed25519 keypair") + .secret() + .as_ref() + .iter() + .cloned() + .collect() } #[test] @@ -682,7 +686,7 @@ mod tests { let file = tmp.path().join("x").to_path_buf(); let kp1 = NodeKeyConfig::Ed25519(Secret::File(file.clone())).into_keypair().unwrap(); let kp2 = NodeKeyConfig::Ed25519(Secret::File(file.clone())).into_keypair().unwrap(); - assert!(file.is_file() && secret_bytes(&kp1) == secret_bytes(&kp2)) + assert!(file.is_file() && secret_bytes(kp1) == secret_bytes(kp2)) } #[test] @@ -690,13 +694,13 @@ mod tests { let sk = ed25519::SecretKey::generate(); let kp1 = NodeKeyConfig::Ed25519(Secret::Input(sk.clone())).into_keypair().unwrap(); let kp2 = NodeKeyConfig::Ed25519(Secret::Input(sk)).into_keypair().unwrap(); - assert!(secret_bytes(&kp1) == secret_bytes(&kp2)); + assert!(secret_bytes(kp1) == secret_bytes(kp2)); } #[test] fn test_secret_new() { let kp1 = NodeKeyConfig::Ed25519(Secret::New).into_keypair().unwrap(); let kp2 = NodeKeyConfig::Ed25519(Secret::New).into_keypair().unwrap(); - assert!(secret_bytes(&kp1) != secret_bytes(&kp2)); + assert!(secret_bytes(kp1) != secret_bytes(kp2)); } } diff --git a/client/network/common/src/protocol/event.rs b/client/network/common/src/protocol/event.rs index 90c38b48c320f..156108aa2f61f 100644 --- a/client/network/common/src/protocol/event.rs +++ b/client/network/common/src/protocol/event.rs @@ -22,7 +22,8 @@ use super::ProtocolName; use crate::protocol::role::ObservedRole; use bytes::Bytes; -use libp2p::{core::PeerId, kad::record::Key}; +use libp2p::kad::record::Key; +use libp2p_identity::PeerId; /// Events generated by DHT as a response to get_value and put_value requests. #[derive(Debug, Clone)] diff --git a/client/network/common/src/service.rs b/client/network/common/src/service.rs index d3c5c2f439450..986fc4f941473 100644 --- a/client/network/common/src/service.rs +++ b/client/network/common/src/service.rs @@ -24,10 +24,13 @@ use crate::{ request_responses::{IfDisconnected, RequestFailure}, }; use futures::{channel::oneshot, Stream}; -pub use libp2p::{identity::error::SigningError, kad::record::Key as KademliaKey}; use libp2p::{Multiaddr, PeerId}; use sc_peerset::ReputationChange; + +pub use libp2p::kad::record::Key as KademliaKey; +pub use libp2p_identity::SigningError; pub use signature::Signature; + use std::{collections::HashSet, future::Future, pin::Pin, sync::Arc}; mod signature; diff --git a/client/network/common/src/service/signature.rs b/client/network/common/src/service/signature.rs index 14addafc6bba2..3b82d14da2a1a 100644 --- a/client/network/common/src/service/signature.rs +++ b/client/network/common/src/service/signature.rs @@ -18,10 +18,7 @@ // // If you read this, you are very thorough, congratulations. -use libp2p::{ - identity::{error::SigningError, Keypair, PublicKey}, - PeerId, -}; +use libp2p_identity::{Keypair, PeerId, PublicKey, SigningError}; /// A result of signing a message with a network identity. Since `PeerId` is potentially a hash of a /// `PublicKey`, you need to reveal the `PublicKey` next to the signature, so the verifier can check diff --git a/client/network/light/Cargo.toml b/client/network/light/Cargo.toml index 48ce067b5c976..7cc99197333c0 100644 --- a/client/network/light/Cargo.toml +++ b/client/network/light/Cargo.toml @@ -21,7 +21,7 @@ codec = { package = "parity-scale-codec", version = "3.2.2", features = [ "derive", ] } futures = "0.3.21" -libp2p = "0.51.0" +libp2p = "0.51.1" log = "0.4.16" prost = "0.11" sp-blockchain = { version = "4.0.0-dev", path = "../../../primitives/blockchain" } diff --git a/client/network/src/behaviour.rs b/client/network/src/behaviour.rs index 5591290200361..496271775090d 100644 --- a/client/network/src/behaviour.rs +++ b/client/network/src/behaviour.rs @@ -26,11 +26,9 @@ use crate::{ use bytes::Bytes; use futures::channel::oneshot; use libp2p::{ - core::{Multiaddr, PeerId, PublicKey}, - identify::Info as IdentifyInfo, - kad::record, - swarm::NetworkBehaviour, + core::Multiaddr, identify::Info as IdentifyInfo, kad::record, swarm::NetworkBehaviour, }; +use libp2p_identity::{PeerId, PublicKey}; use sc_network_common::{ protocol::{ diff --git a/client/network/src/config.rs b/client/network/src/config.rs index 90d02af848bf4..c1e2f8642f720 100644 --- a/client/network/src/config.rs +++ b/client/network/src/config.rs @@ -31,7 +31,8 @@ pub use sc_network_common::{ ExHashT, }; -pub use libp2p::{build_multiaddr, core::PublicKey, identity}; +pub use libp2p::{build_multiaddr, identity}; +pub use libp2p_identity::PublicKey; use prometheus_endpoint::Registry; use sc_network_common::config::NonDefaultSetConfig; diff --git a/client/network/src/discovery.rs b/client/network/src/discovery.rs index 729696a20dae2..e11d5fea14bd5 100644 --- a/client/network/src/discovery.rs +++ b/client/network/src/discovery.rs @@ -51,7 +51,7 @@ use futures::prelude::*; use futures_timer::Delay; use ip_network::IpNetwork; use libp2p::{ - core::{Endpoint, Multiaddr, PeerId, PublicKey}, + core::{Endpoint, Multiaddr}, kad::{ handler::KademliaHandler, record::{ @@ -72,6 +72,7 @@ use libp2p::{ PollParameters, THandler, THandlerInEvent, THandlerOutEvent, }, }; +use libp2p_identity::PeerId; use log::{debug, info, trace, warn}; use sc_network_common::{config::ProtocolId, utils::LruHashSet}; use sp_core::hexdisplay::HexDisplay; @@ -106,9 +107,9 @@ pub struct DiscoveryConfig { impl DiscoveryConfig { /// Create a default configuration with the given public key. - pub fn new(local_public_key: PublicKey) -> Self { + pub fn new(local_peer_id: PeerId) -> Self { Self { - local_peer_id: local_public_key.to_peer_id(), + local_peer_id, permanent_addresses: Vec::new(), dht_random_walk: true, allow_private_ip: true, @@ -966,7 +967,7 @@ mod tests { transport::{MemoryTransport, Transport}, upgrade, }, - identity::{ed25519, Keypair}, + identity::Keypair, noise, swarm::{Executor, Swarm, SwarmEvent}, yamux, Multiaddr, @@ -1006,7 +1007,7 @@ mod tests { .boxed(); let behaviour = { - let mut config = DiscoveryConfig::new(keypair.public()); + let mut config = DiscoveryConfig::new(keypair.public().to_peer_id()); config .with_permanent_addresses(first_swarm_peer_id_and_addr.clone()) .allow_private_ip(true) @@ -1125,7 +1126,7 @@ mod tests { let mut discovery = { let keypair = Keypair::generate_ed25519(); - let mut config = DiscoveryConfig::new(keypair.public()); + let mut config = DiscoveryConfig::new(keypair.public().to_peer_id()); config .allow_private_ip(true) .allow_non_globals_in_dht(true) @@ -1135,11 +1136,7 @@ mod tests { }; let predictable_peer_id = |bytes: &[u8; 32]| { - Keypair::Ed25519(ed25519::Keypair::from( - ed25519::SecretKey::from_bytes(bytes.to_owned()).unwrap(), - )) - .public() - .to_peer_id() + Keypair::ed25519_from_bytes(bytes.to_owned()).unwrap().public().to_peer_id() }; let remote_peer_id = predictable_peer_id(b"00000000000000000000000000000001"); diff --git a/client/network/src/lib.rs b/client/network/src/lib.rs index f94a71681cd3d..ea0e0a4b00519 100644 --- a/client/network/src/lib.rs +++ b/client/network/src/lib.rs @@ -256,7 +256,8 @@ pub mod config; pub mod network_state; #[doc(inline)] -pub use libp2p::{multiaddr, Multiaddr, PeerId}; +pub use libp2p::{multiaddr, Multiaddr}; +pub use libp2p_identity::PeerId; pub use sc_network_common::{ protocol::{ event::{DhtEvent, Event}, diff --git a/client/network/src/peer_info.rs b/client/network/src/peer_info.rs index ddf24e686b197..802e17487e832 100644 --- a/client/network/src/peer_info.rs +++ b/client/network/src/peer_info.rs @@ -20,7 +20,7 @@ use either::Either; use fnv::FnvHashMap; use futures::prelude::*; use libp2p::{ - core::{ConnectedPoint, Endpoint, PeerId, PublicKey}, + core::{ConnectedPoint, Endpoint}, identify::{ Behaviour as Identify, Config as IdentifyConfig, Event as IdentifyEvent, Info as IdentifyInfo, @@ -37,6 +37,7 @@ use libp2p::{ }, Multiaddr, }; +use libp2p_identity::{PeerId, PublicKey}; use log::{debug, error, trace}; use sc_network_common::utils::interval; use smallvec::SmallVec; diff --git a/client/network/src/protocol/notifications/behaviour.rs b/client/network/src/protocol/notifications/behaviour.rs index 5c77b95ce1b50..ec60ad795bb6e 100644 --- a/client/network/src/protocol/notifications/behaviour.rs +++ b/client/network/src/protocol/notifications/behaviour.rs @@ -24,13 +24,14 @@ use bytes::BytesMut; use fnv::FnvHashMap; use futures::prelude::*; use libp2p::{ - core::{ConnectedPoint, Endpoint, Multiaddr, PeerId}, + core::{ConnectedPoint, Endpoint, Multiaddr}, swarm::{ behaviour::{ConnectionClosed, ConnectionEstablished, DialFailure, FromSwarm}, ConnectionDenied, ConnectionId, DialError, NetworkBehaviour, NetworkBehaviourAction, NotifyHandler, PollParameters, THandler, THandlerInEvent, THandlerOutEvent, }, }; +use libp2p_identity::PeerId; use log::{error, trace, warn}; use parking_lot::RwLock; use rand::distributions::{Distribution as _, Uniform}; @@ -2088,11 +2089,8 @@ impl NetworkBehaviour for Notifications { #[allow(deprecated)] mod tests { use super::*; - use crate::protocol::notifications::handler::tests::*; - use libp2p::{ - core::ConnectedPoint, - swarm::{behaviour::FromSwarm, AddressRecord}, - }; + // use crate::protocol::notifications::handler::tests::*; + use libp2p::swarm::AddressRecord; use std::{collections::HashSet, iter}; impl PartialEq for ConnectionState { @@ -2250,1861 +2248,1861 @@ mod tests { )); } - #[test] - fn remote_opens_connection_and_substream() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - - if let Some(&PeerState::Disabled { ref connections, backoff_until: None }) = - notif.peers.get(&(peer, 0.into())) - { - assert_eq!(connections[0], (conn, ConnectionState::Closed)); - } else { - panic!("invalid state"); - } - - // remote opens a substream, verify that peer state is updated to `Incoming` - notif.on_connection_handler_event( - peer, - conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); - - if let Some(&PeerState::Incoming { ref connections, backoff_until: None }) = - notif.peers.get(&(peer, 0.into())) - { - assert_eq!(connections.len(), 1); - assert_eq!(connections[0], (conn, ConnectionState::OpenDesiredByRemote)); - } else { - panic!("invalid state"); - } - - assert!(std::matches!( - notif.incoming.pop(), - Some(IncomingPeer { alive: true, incoming_id: sc_peerset::IncomingIndex(0), .. }), - )); - } - - #[tokio::test] - async fn disconnect_remote_substream_before_handled_by_peerset() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - notif.on_connection_handler_event( - peer, - conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); - notif.disconnect_peer(&peer, 0.into()); - - if let Some(&PeerState::Disabled { ref connections, backoff_until: None }) = - notif.peers.get(&(peer, 0.into())) - { - assert_eq!(connections.len(), 1); - assert_eq!(connections[0], (conn, ConnectionState::Closing)); - } else { - panic!("invalid state"); - } - } - - #[test] - fn peerset_report_connect_backoff() { - let (mut notif, _peerset) = development_notifs(); - let set_id = sc_peerset::SetId::from(0); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // manually add backoff for the entry - // - // there is not straight-forward way of adding backoff to `PeerState::Disabled` - // so manually adjust the value in order to progress on to the next stage. - // This modification together with `ConnectionClosed` will conver the peer - // state into `PeerState::Backoff`. - if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = - notif.peers.get_mut(&(peer, set_id)) - { - *backoff_until = - Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); - } - - notif.on_swarm_event(FromSwarm::ConnectionClosed( - libp2p::swarm::behaviour::ConnectionClosed { - peer_id: peer, - connection_id: conn, - endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), - remaining_established: 0usize, - }, - )); - - let timer = if let Some(&PeerState::Backoff { timer_deadline, .. }) = - notif.peers.get(&(peer, set_id)) - { - timer_deadline - } else { - panic!("invalid state"); - }; - - // attempt to connect the backed-off peer and verify that the request is pending - notif.peerset_report_connect(peer, set_id); - - if let Some(&PeerState::PendingRequest { timer_deadline, .. }) = - notif.peers.get(&(peer, set_id)) - { - assert_eq!(timer, timer_deadline); - } else { - panic!("invalid state"); - } - } - - #[test] - fn peerset_connect_incoming() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let set_id = sc_peerset::SetId::from(0); - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // remote opens a substream, verify that peer state is updated to `Incoming` - notif.on_connection_handler_event( - peer, - conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); - - // attempt to connect to the peer and verify that the peer state is `Enabled` - notif.peerset_report_connect(peer, set_id); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); - } - - #[test] - fn peerset_disconnect_disable_pending_enable() { - let (mut notif, _peerset) = development_notifs(); - let set_id = sc_peerset::SetId::from(0); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // manually add backoff for the entry - if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = - notif.peers.get_mut(&(peer, set_id)) - { - *backoff_until = - Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); - } - - // switch state to `DisabledPendingEnable` - notif.peerset_report_connect(peer, set_id); - assert!(std::matches!( - notif.peers.get(&(peer, set_id)), - Some(&PeerState::DisabledPendingEnable { .. }) - )); - - notif.peerset_report_disconnect(peer, set_id); - - if let Some(PeerState::Disabled { backoff_until, .. }) = notif.peers.get(&(peer, set_id)) { - assert!(backoff_until.is_some()); - assert!(backoff_until.unwrap() > Instant::now()); - } else { - panic!("invalid state"); - } - } - - #[test] - fn peerset_disconnect_enabled() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let set_id = sc_peerset::SetId::from(0); - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - // Set peer into `Enabled` state. - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - notif.on_connection_handler_event( - peer, - conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); - notif.peerset_report_connect(peer, set_id); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); - - // disconnect peer and verify that the state is `Disabled` - notif.peerset_report_disconnect(peer, set_id); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - } - - #[test] - fn peerset_disconnect_requested() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let set_id = sc_peerset::SetId::from(0); - - // Set peer into `Requested` state. - notif.peerset_report_connect(peer, set_id); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Requested))); - - // disconnect peer and verify that the state is `Disabled` - notif.peerset_report_disconnect(peer, set_id); - assert!(notif.peers.get(&(peer, set_id)).is_none()); - } - - #[test] - fn peerset_disconnect_pending_request() { - let (mut notif, _peerset) = development_notifs(); - let set_id = sc_peerset::SetId::from(0); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // manually add backoff for the entry - if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = - notif.peers.get_mut(&(peer, set_id)) - { - *backoff_until = - Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); - } - - notif.on_swarm_event(FromSwarm::ConnectionClosed( - libp2p::swarm::behaviour::ConnectionClosed { - peer_id: peer, - connection_id: conn, - endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), - remaining_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); - - // attempt to connect the backed-off peer and verify that the request is pending - notif.peerset_report_connect(peer, set_id); - assert!(std::matches!( - notif.peers.get(&(peer, set_id)), - Some(&PeerState::PendingRequest { .. }) - )); - - // attempt to disconnect the backed-off peer and verify that the request is pending - notif.peerset_report_disconnect(peer, set_id); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); - } - - #[test] - fn peerset_accept_peer_not_alive() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let set_id = sc_peerset::SetId::from(0); - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // remote opens a substream, verify that peer state is updated to `Incoming` - notif.on_connection_handler_event( - peer, - conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - assert!(std::matches!( - notif.incoming[0], - IncomingPeer { alive: true, incoming_id: sc_peerset::IncomingIndex(0), .. }, - )); - - notif.disconnect_peer(&peer, set_id); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - assert!(std::matches!( - notif.incoming[0], - IncomingPeer { alive: false, incoming_id: sc_peerset::IncomingIndex(0), .. }, - )); - - notif.peerset_report_accept(sc_peerset::IncomingIndex(0)); - assert_eq!(notif.incoming.len(), 0); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(PeerState::Disabled { .. }))); - } - - #[test] - fn secondary_connection_peer_state_incoming() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let conn2 = ConnectionId::DUMMY; // 1 - let set_id = sc_peerset::SetId::from(0); - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - notif.on_connection_handler_event( - peer, - conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); - if let Some(&PeerState::Incoming { ref connections, .. }) = notif.peers.get(&(peer, set_id)) - { - assert_eq!(connections.len(), 1); - assert_eq!(connections[0], (conn, ConnectionState::OpenDesiredByRemote)); - } else { - panic!("invalid state"); - } - - // add another connection - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn2, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - - if let Some(&PeerState::Incoming { ref connections, .. }) = notif.peers.get(&(peer, set_id)) - { - assert_eq!(connections.len(), 2); - assert_eq!(connections[0], (conn, ConnectionState::OpenDesiredByRemote)); - assert_eq!(connections[1], (conn2, ConnectionState::Closed)); - } else { - panic!("invalid state"); - } - } - - #[test] - fn close_connection_for_disabled_peer() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let set_id = sc_peerset::SetId::from(0); - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - notif.on_swarm_event(FromSwarm::ConnectionClosed( - libp2p::swarm::behaviour::ConnectionClosed { - peer_id: peer, - connection_id: conn, - endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), - remaining_established: 0usize, - }, - )); - assert!(notif.peers.get(&(peer, set_id)).is_none()); - } - - #[test] - fn close_connection_for_incoming_peer_one_connection() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let set_id = sc_peerset::SetId::from(0); - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - notif.on_connection_handler_event( - peer, - conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - notif.on_swarm_event(FromSwarm::ConnectionClosed( - libp2p::swarm::behaviour::ConnectionClosed { - peer_id: peer, - connection_id: conn, - endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), - remaining_established: 0usize, - }, - )); - assert!(notif.peers.get(&(peer, set_id)).is_none()); - assert!(std::matches!( - notif.incoming[0], - IncomingPeer { alive: false, incoming_id: sc_peerset::IncomingIndex(0), .. }, - )); - } - - #[test] - fn close_connection_for_incoming_peer_two_connections() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let conn1 = ConnectionId::DUMMY; // 1 - let set_id = sc_peerset::SetId::from(0); - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - let mut conns = SmallVec::< - [(ConnectionId, ConnectionState); crate::MAX_CONNECTIONS_PER_PEER], - >::from(vec![(conn, ConnectionState::Closed)]); - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - notif.on_connection_handler_event( - peer, - conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn1, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - conns.push((conn1, ConnectionState::Closed)); - - if let Some(PeerState::Incoming { ref connections, .. }) = notif.peers.get(&(peer, set_id)) - { - assert_eq!(connections.len(), 2); - assert_eq!(connections[0], (conn, ConnectionState::OpenDesiredByRemote)); - assert_eq!(connections[1], (conn1, ConnectionState::Closed)); - } - - notif.on_swarm_event(FromSwarm::ConnectionClosed( - libp2p::swarm::behaviour::ConnectionClosed { - peer_id: peer, - connection_id: conn, - endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), - remaining_established: 0usize, - }, - )); - - if let Some(&PeerState::Disabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) - { - assert_eq!(connections.len(), 1); - assert_eq!(connections[0], (conn1, ConnectionState::Closed)); - } else { - panic!("invalid state"); - } - } - - #[test] - fn connection_and_substream_open() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let set_id = sc_peerset::SetId::from(0); - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - let mut conn_yielder = ConnectionYielder::new(); - - // move the peer to `Enabled` state - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - notif.on_connection_handler_event( - peer, - conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - notif.peerset_report_connect(peer, set_id); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); - - // open new substream - let event = conn_yielder.open_substream(peer, 0, connected, vec![1, 2, 3, 4]); - - notif.on_connection_handler_event(peer, conn, event); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); - - if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { - assert_eq!(connections.len(), 1); - assert_eq!(connections[0].0, conn); - assert!(std::matches!(connections[0].1, ConnectionState::Open(_))); - } - - assert!(std::matches!( - notif.events[notif.events.len() - 1], - NetworkBehaviourAction::GenerateEvent(NotificationsOut::CustomProtocolOpen { .. }) - )); - } - - #[test] - fn connection_closed_sink_replaced() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let conn1 = ConnectionId::DUMMY; - let conn2 = ConnectionId::DUMMY; // 1 - let set_id = sc_peerset::SetId::from(0); - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - let mut conn_yielder = ConnectionYielder::new(); - - // open two connections - for conn_id in vec![conn1, conn2] { - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn_id, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - } - - if let Some(&PeerState::Disabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) - { - assert_eq!(connections[0], (conn1, ConnectionState::Closed)); - assert_eq!(connections[1], (conn2, ConnectionState::Closed)); - } else { - panic!("invalid state"); - } - - // open substreams on both active connections - notif.peerset_report_connect(peer, set_id); - notif.on_connection_handler_event( - peer, - conn2, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); - - if let Some(&PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) - { - assert_eq!(connections[0], (conn1, ConnectionState::Opening)); - assert_eq!(connections[1], (conn2, ConnectionState::Opening)); - } else { - panic!("invalid state"); - } - - // add two new substreams, one for each connection and verify that both are in open state - for conn in vec![conn1, conn2].iter() { - notif.on_connection_handler_event( - peer, - *conn, - conn_yielder.open_substream(peer, 0, connected.clone(), vec![1, 2, 3, 4]), - ); - } - - if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { - assert_eq!(connections[0].0, conn1); - assert!(std::matches!(connections[0].1, ConnectionState::Open(_))); - assert_eq!(connections[1].0, conn2); - assert!(std::matches!(connections[1].1, ConnectionState::Open(_))); - } else { - panic!("invalid state"); - } - - // check peer information - assert_eq!(notif.open_peers().collect::>(), vec![&peer],); - assert_eq!(notif.reserved_peers(set_id).collect::>(), Vec::<&PeerId>::new(),); - assert_eq!(notif.num_discovered_peers(), 0usize); - - // close the other connection and verify that notification replacement event is emitted - notif.on_swarm_event(FromSwarm::ConnectionClosed( - libp2p::swarm::behaviour::ConnectionClosed { - peer_id: peer, - connection_id: conn1, - endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), - remaining_established: 0usize, - }, - )); - - if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { - assert_eq!(connections.len(), 1); - assert_eq!(connections[0].0, conn2); - assert!(std::matches!(connections[0].1, ConnectionState::Open(_))); - } else { - panic!("invalid state"); - } - - assert!(std::matches!( - notif.events[notif.events.len() - 1], - NetworkBehaviourAction::GenerateEvent(NotificationsOut::CustomProtocolReplaced { .. }) - )); - } - - #[test] - fn dial_failure_for_requested_peer() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let set_id = sc_peerset::SetId::from(0); - - // Set peer into `Requested` state. - notif.peerset_report_connect(peer, set_id); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Requested))); - - notif.on_swarm_event(FromSwarm::DialFailure(libp2p::swarm::behaviour::DialFailure { - peer_id: Some(peer), - error: &libp2p::swarm::DialError::Banned, - connection_id: ConnectionId::DUMMY, - })); - - if let Some(PeerState::Backoff { timer_deadline, .. }) = notif.peers.get(&(peer, set_id)) { - assert!(timer_deadline > &Instant::now()); - } else { - panic!("invalid state"); - } - } - - #[tokio::test] - async fn write_notification() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let set_id = sc_peerset::SetId::from(0); - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - let mut conn_yielder = ConnectionYielder::new(); - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - notif.peerset_report_connect(peer, set_id); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); - - notif.on_connection_handler_event( - peer, - conn, - conn_yielder.open_substream(peer, 0, connected, vec![1, 2, 3, 4]), - ); - - if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { - assert_eq!(connections[0].0, conn); - assert!(std::matches!(connections[0].1, ConnectionState::Open(_))); - } else { - panic!("invalid state"); - } - - notif - .peers - .get(&(peer, set_id)) - .unwrap() - .get_open() - .unwrap() - .send_sync_notification(vec![1, 3, 3, 7]); - assert_eq!(conn_yielder.get_next_event(peer, set_id.into()).await, Some(vec![1, 3, 3, 7])); - } - - #[test] - fn peerset_report_connect_backoff_expired() { - let (mut notif, _peerset) = development_notifs(); - let set_id = sc_peerset::SetId::from(0); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - let backoff_duration = Duration::from_millis(100); - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // manually add backoff for the entry - if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = - notif.peers.get_mut(&(peer, set_id)) - { - *backoff_until = Some(Instant::now().checked_add(backoff_duration).unwrap()); - } - - notif.on_swarm_event(FromSwarm::ConnectionClosed( - libp2p::swarm::behaviour::ConnectionClosed { - peer_id: peer, - connection_id: conn, - endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), - remaining_established: 0usize, - }, - )); - - // wait until the backoff time has passed - std::thread::sleep(backoff_duration * 2); - - // attempt to connect the backed-off peer and verify that the request is pending - notif.peerset_report_connect(peer, set_id); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Requested { .. }))) - } - - #[test] - fn peerset_report_disconnect_disabled() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let set_id = sc_peerset::SetId::from(0); - let conn = ConnectionId::DUMMY; - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - notif.peerset_report_disconnect(peer, set_id); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - } - - #[test] - fn peerset_report_disconnect_backoff() { - let (mut notif, _peerset) = development_notifs(); - let set_id = sc_peerset::SetId::from(0); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - let backoff_duration = Duration::from_secs(2); - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // manually add backoff for the entry - if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = - notif.peers.get_mut(&(peer, set_id)) - { - *backoff_until = Some(Instant::now().checked_add(backoff_duration).unwrap()); - } - - notif.on_swarm_event(FromSwarm::ConnectionClosed( - libp2p::swarm::behaviour::ConnectionClosed { - peer_id: peer, - connection_id: conn, - endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), - remaining_established: 0usize, - }, - )); - - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); - - notif.peerset_report_disconnect(peer, set_id); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); - } - - #[test] - fn peer_is_backed_off_if_both_connections_get_closed_while_peer_is_disabled_with_back_off() { - let (mut notif, _peerset) = development_notifs(); - let set_id = sc_peerset::SetId::from(0); - let peer = PeerId::random(); - let conn1 = ConnectionId::DUMMY; - let conn2 = ConnectionId::DUMMY; - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn1, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn2, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // manually add backoff for the entry - if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = - notif.peers.get_mut(&(peer, set_id)) - { - *backoff_until = - Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); - } - - // switch state to `DisabledPendingEnable` - notif.peerset_report_connect(peer, set_id); - assert!(std::matches!( - notif.peers.get(&(peer, set_id)), - Some(&PeerState::DisabledPendingEnable { .. }) - )); - - notif.on_swarm_event(FromSwarm::ConnectionClosed( - libp2p::swarm::behaviour::ConnectionClosed { - peer_id: peer, - connection_id: conn1, - endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected.clone(), vec![]), - remaining_established: 0usize, - }, - )); - assert!(std::matches!( - notif.peers.get(&(peer, set_id)), - Some(&PeerState::DisabledPendingEnable { .. }) - )); - - notif.on_swarm_event(FromSwarm::ConnectionClosed( - libp2p::swarm::behaviour::ConnectionClosed { - peer_id: peer, - connection_id: conn2, - endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), - remaining_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); - } - - #[test] - fn inject_connection_closed_incoming_with_backoff() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let set_id = sc_peerset::SetId::from(0); - let conn = ConnectionId::DUMMY; - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // remote opens a substream, verify that peer state is updated to `Incoming` - notif.on_connection_handler_event( - peer, - conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); - - // manually add backoff for the entry - if let Some(&mut PeerState::Incoming { ref mut backoff_until, .. }) = - notif.peers.get_mut(&(peer, 0.into())) - { - *backoff_until = - Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); - } else { - panic!("invalid state"); - } - - notif.on_swarm_event(FromSwarm::ConnectionClosed( - libp2p::swarm::behaviour::ConnectionClosed { - peer_id: peer, - connection_id: conn, - endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), - remaining_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); - } - - #[test] - fn two_connections_inactive_connection_gets_closed_peer_state_is_still_incoming() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let conn1 = ConnectionId::DUMMY; - let conn2 = ConnectionId::DUMMY; // 1 - let set_id = sc_peerset::SetId::from(0); - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - // open two connections - for conn_id in vec![conn1, conn2] { - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn_id, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - } - - if let Some(&PeerState::Disabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) - { - assert_eq!(connections[0], (conn1, ConnectionState::Closed)); - assert_eq!(connections[1], (conn2, ConnectionState::Closed)); - } else { - panic!("invalid state"); - } - - // remote opens a substream, verify that peer state is updated to `Incoming` - notif.on_connection_handler_event( - peer, - conn1, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); - assert!(std::matches!( - notif.peers.get_mut(&(peer, 0.into())), - Some(&mut PeerState::Incoming { .. }) - )); - - notif.on_swarm_event(FromSwarm::ConnectionClosed( - libp2p::swarm::behaviour::ConnectionClosed { - peer_id: peer, - connection_id: conn2, - endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), - remaining_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - } - - #[test] - fn two_connections_active_connection_gets_closed_peer_state_is_disabled() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let conn1 = ConnectionId::DUMMY; - let conn2 = ConnectionId::DUMMY; // 1 - let set_id = sc_peerset::SetId::from(0); - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - // open two connections - for conn_id in vec![conn1, conn2] { - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn_id, - endpoint: &ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }, - failed_addresses: &[], - other_established: 0usize, - }, - )); - } - - if let Some(&PeerState::Disabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) - { - assert_eq!(connections[0], (conn1, ConnectionState::Closed)); - assert_eq!(connections[1], (conn2, ConnectionState::Closed)); - } else { - panic!("invalid state"); - } - - // remote opens a substream, verify that peer state is updated to `Incoming` - notif.on_connection_handler_event( - peer, - conn1, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); - assert!(std::matches!( - notif.peers.get_mut(&(peer, 0.into())), - Some(PeerState::Incoming { .. }) - )); - - notif.on_swarm_event(FromSwarm::ConnectionClosed( - libp2p::swarm::behaviour::ConnectionClosed { - peer_id: peer, - connection_id: conn1, - endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), - remaining_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - } - - #[test] - fn inject_connection_closed_for_active_connection() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let conn1 = ConnectionId::DUMMY; - let conn2 = ConnectionId::DUMMY; // 1 - let set_id = sc_peerset::SetId::from(0); - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - let mut conn_yielder = ConnectionYielder::new(); - - // open two connections - for conn_id in vec![conn1, conn2] { - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn_id, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - } - - if let Some(&PeerState::Disabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) - { - assert_eq!(connections[0], (conn1, ConnectionState::Closed)); - assert_eq!(connections[1], (conn2, ConnectionState::Closed)); - } else { - panic!("invalid state"); - } - - // open substreams on both active connections - notif.peerset_report_connect(peer, set_id); - - if let Some(&PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) - { - assert_eq!(connections[0], (conn1, ConnectionState::Opening)); - assert_eq!(connections[1], (conn2, ConnectionState::Closed)); - } else { - panic!("invalid state"); - } - - notif.on_connection_handler_event( - peer, - conn1, - conn_yielder.open_substream(peer, 0, connected.clone(), vec![1, 2, 3, 4]), - ); - - if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { - assert!(std::matches!(connections[0].1, ConnectionState::Open(_))); - assert_eq!(connections[0].0, conn1); - assert_eq!(connections[1], (conn2, ConnectionState::Closed)); - } else { - panic!("invalid state"); - } - - notif.on_swarm_event(FromSwarm::ConnectionClosed( - libp2p::swarm::behaviour::ConnectionClosed { - peer_id: peer, - connection_id: conn1, - endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), - remaining_established: 0usize, - }, - )); - } - - #[test] - fn inject_dial_failure_for_pending_request() { - let (mut notif, _peerset) = development_notifs(); - let set_id = sc_peerset::SetId::from(0); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // manually add backoff for the entry - if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = - notif.peers.get_mut(&(peer, set_id)) - { - *backoff_until = - Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); - } - - notif.on_swarm_event(FromSwarm::ConnectionClosed( - libp2p::swarm::behaviour::ConnectionClosed { - peer_id: peer, - connection_id: conn, - endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), - remaining_established: 0usize, - }, - )); - - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); - - // attempt to connect the backed-off peer and verify that the request is pending - notif.peerset_report_connect(peer, set_id); - assert!(std::matches!( - notif.peers.get(&(peer, set_id)), - Some(&PeerState::PendingRequest { .. }) - )); - - let now = Instant::now(); - notif.on_swarm_event(FromSwarm::DialFailure(libp2p::swarm::behaviour::DialFailure { - peer_id: Some(peer), - error: &libp2p::swarm::DialError::Banned, - connection_id: ConnectionId::DUMMY, - })); - - if let Some(PeerState::PendingRequest { ref timer_deadline, .. }) = - notif.peers.get(&(peer, set_id)) - { - assert!(timer_deadline > &(now + std::time::Duration::from_secs(5))); - } - } - - #[test] - fn peerstate_incoming_open_desired_by_remote() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let set_id = sc_peerset::SetId::from(0); - let conn1 = ConnectionId::DUMMY; - let conn2 = ConnectionId::DUMMY; // 1 - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn1, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn2, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // remote opens a substream, verify that peer state is updated to `Incoming` - notif.on_connection_handler_event( - peer, - conn1, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - // add another open event from remote - notif.on_connection_handler_event( - peer, - conn2, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); - - if let Some(PeerState::Incoming { ref connections, .. }) = notif.peers.get(&(peer, set_id)) - { - assert_eq!(connections[0], (conn1, ConnectionState::OpenDesiredByRemote)); - assert_eq!(connections[1], (conn2, ConnectionState::OpenDesiredByRemote)); - } - } - - #[tokio::test] - async fn remove_backoff_peer_after_timeout() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let set_id = sc_peerset::SetId::from(0); - let conn = ConnectionId::DUMMY; - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - - if let Some(&mut PeerState::Disabled { ref mut backoff_until, .. }) = - notif.peers.get_mut(&(peer, 0.into())) - { - *backoff_until = - Some(Instant::now().checked_add(std::time::Duration::from_millis(100)).unwrap()); - } else { - panic!("invalid state"); - } - - notif.on_swarm_event(FromSwarm::ConnectionClosed( - libp2p::swarm::behaviour::ConnectionClosed { - peer_id: peer, - connection_id: conn, - endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), - remaining_established: 0usize, - }, - )); - - let until = if let Some(&PeerState::Backoff { timer_deadline, .. }) = - notif.peers.get(&(peer, set_id)) - { - timer_deadline - } else { - panic!("invalid state"); - }; - - if until > Instant::now() { - std::thread::sleep(until - Instant::now()); - } - - assert!(notif.peers.get(&(peer, set_id)).is_some()); - - if tokio::time::timeout(Duration::from_secs(5), async { - let mut params = MockPollParams { peer_id: PeerId::random(), addr: Multiaddr::empty() }; - - loop { - futures::future::poll_fn(|cx| { - let _ = notif.poll(cx, &mut params); - Poll::Ready(()) - }) - .await; - - if notif.peers.get(&(peer, set_id)).is_none() { - break - } - } - }) - .await - .is_err() - { - panic!("backoff peer was not removed in time"); - } - - assert!(notif.peers.get(&(peer, set_id)).is_none()); - } - - #[tokio::test] - async fn reschedule_disabled_pending_enable_when_connection_not_closed() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let set_id = sc_peerset::SetId::from(0); - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - let mut conn_yielder = ConnectionYielder::new(); - - // move the peer to `Enabled` state - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // open substream - notif.on_connection_handler_event( - peer, - conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - notif.peerset_report_connect(peer, set_id); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); - - let event = conn_yielder.open_substream(peer, 0, connected, vec![1, 2, 3, 4]); - - notif.on_connection_handler_event(peer, conn, event); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); - - if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { - assert!(std::matches!(connections[0], (_, ConnectionState::Open(_)))); - assert_eq!(connections[0].0, conn); - } else { - panic!("invalid state"); - } - - notif.peerset_report_disconnect(peer, set_id); - - if let Some(PeerState::Disabled { ref connections, ref mut backoff_until }) = - notif.peers.get_mut(&(peer, set_id)) - { - assert!(std::matches!(connections[0], (_, ConnectionState::Closing))); - assert_eq!(connections[0].0, conn); - - *backoff_until = - Some(Instant::now().checked_add(std::time::Duration::from_secs(2)).unwrap()); - } else { - panic!("invalid state"); - } - - notif.peerset_report_connect(peer, set_id); - - let prev_instant = - if let Some(PeerState::DisabledPendingEnable { - ref connections, timer_deadline, .. - }) = notif.peers.get(&(peer, set_id)) - { - assert!(std::matches!(connections[0], (_, ConnectionState::Closing))); - assert_eq!(connections[0].0, conn); - - *timer_deadline - } else { - panic!("invalid state"); - }; - - // one of the peers has an active backoff timer so poll the notifications code until - // the timer has expired. Because the connection is still in the state of `Closing`, - // verify that the code continues to keep the peer disabled by resetting the timer - // after the first one expired. - if tokio::time::timeout(Duration::from_secs(5), async { - let mut params = MockPollParams { peer_id: PeerId::random(), addr: Multiaddr::empty() }; - - loop { - futures::future::poll_fn(|cx| { - let _ = notif.poll(cx, &mut params); - Poll::Ready(()) - }) - .await; - - if let Some(PeerState::DisabledPendingEnable { - timer_deadline, connections, .. - }) = notif.peers.get(&(peer, set_id)) - { - assert!(std::matches!(connections[0], (_, ConnectionState::Closing))); - - if timer_deadline != &prev_instant { - break - } - } else { - panic!("invalid state"); - } - } - }) - .await - .is_err() - { - panic!("backoff peer was not removed in time"); - } - } - - #[test] - #[should_panic] - #[cfg(debug_assertions)] - fn peerset_report_connect_with_enabled_peer() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let set_id = sc_peerset::SetId::from(0); - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - let mut conn_yielder = ConnectionYielder::new(); - - // move the peer to `Enabled` state - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - notif.on_connection_handler_event( - peer, - conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - notif.peerset_report_connect(peer, set_id); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); - - let event = conn_yielder.open_substream(peer, 0, connected, vec![1, 2, 3, 4]); - - notif.on_connection_handler_event(peer, conn, event); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); - - if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { - assert!(std::matches!(connections[0], (_, ConnectionState::Open(_)))); - assert_eq!(connections[0].0, conn); - } else { - panic!("invalid state"); - } - - notif.peerset_report_connect(peer, set_id); - } - - #[test] - #[should_panic] - #[cfg(debug_assertions)] - fn peerset_report_connect_with_disabled_pending_enable_peer() { - let (mut notif, _peerset) = development_notifs(); - let set_id = sc_peerset::SetId::from(0); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // manually add backoff for the entry - if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = - notif.peers.get_mut(&(peer, set_id)) - { - *backoff_until = - Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); - } - - // switch state to `DisabledPendingEnable` - notif.peerset_report_connect(peer, set_id); - assert!(std::matches!( - notif.peers.get(&(peer, set_id)), - Some(&PeerState::DisabledPendingEnable { .. }) - )); - - notif.peerset_report_connect(peer, set_id); - } - - #[test] - #[should_panic] - #[cfg(debug_assertions)] - fn peerset_report_connect_with_requested_peer() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let set_id = sc_peerset::SetId::from(0); - - // Set peer into `Requested` state. - notif.peerset_report_connect(peer, set_id); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Requested))); - - notif.peerset_report_connect(peer, set_id); - } - - #[test] - #[should_panic] - #[cfg(debug_assertions)] - fn peerset_report_connect_with_pending_requested() { - let (mut notif, _peerset) = development_notifs(); - let set_id = sc_peerset::SetId::from(0); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // manually add backoff for the entry - if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = - notif.peers.get_mut(&(peer, set_id)) - { - *backoff_until = - Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); - } - - notif.on_swarm_event(FromSwarm::ConnectionClosed( - libp2p::swarm::behaviour::ConnectionClosed { - peer_id: peer, - connection_id: conn, - endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), - remaining_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); - - // attempt to connect the backed-off peer and verify that the request is pending - notif.peerset_report_connect(peer, set_id); - assert!(std::matches!( - notif.peers.get(&(peer, set_id)), - Some(&PeerState::PendingRequest { .. }) - )); - - notif.peerset_report_connect(peer, set_id); - } - - #[test] - #[should_panic] - #[cfg(debug_assertions)] - fn peerset_report_disconnect_with_incoming_peer() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let set_id = sc_peerset::SetId::from(0); - let conn = ConnectionId::DUMMY; - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // remote opens a substream, verify that peer state is updated to `Incoming` - notif.on_connection_handler_event( - peer, - conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); - - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - notif.peerset_report_disconnect(peer, set_id); - } - - #[test] - #[should_panic] - #[cfg(debug_assertions)] - fn peerset_report_accept_incoming_peer() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let set_id = sc_peerset::SetId::from(0); - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // remote opens a substream, verify that peer state is updated to `Incoming` - notif.on_connection_handler_event( - peer, - conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - assert!(std::matches!( - notif.incoming[0], - IncomingPeer { alive: true, incoming_id: sc_peerset::IncomingIndex(0), .. }, - )); - - notif.peers.remove(&(peer, set_id)); - notif.peerset_report_accept(sc_peerset::IncomingIndex(0)); - } - - #[test] - #[should_panic] - #[cfg(debug_assertions)] - fn peerset_report_accept_not_incoming_peer() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let set_id = sc_peerset::SetId::from(0); - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - let mut conn_yielder = ConnectionYielder::new(); - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // remote opens a substream, verify that peer state is updated to `Incoming` - notif.on_connection_handler_event( - peer, - conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - assert!(std::matches!( - notif.incoming[0], - IncomingPeer { alive: true, incoming_id: sc_peerset::IncomingIndex(0), .. }, - )); - - notif.peerset_report_connect(peer, set_id); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); - - let event = conn_yielder.open_substream(peer, 0, connected, vec![1, 2, 3, 4]); - notif.on_connection_handler_event(peer, conn, event); - - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); - notif.incoming[0].alive = true; - notif.peerset_report_accept(sc_peerset::IncomingIndex(0)); - } - - #[test] - #[should_panic] - #[cfg(debug_assertions)] - fn inject_connection_closed_non_existent_peer() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let endpoint = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionClosed( - libp2p::swarm::behaviour::ConnectionClosed { - peer_id: peer, - connection_id: ConnectionId::DUMMY, - endpoint: &endpoint.clone(), - handler: NotifsHandler::new(peer, endpoint, vec![]), - remaining_established: 0usize, - }, - )); - } + // #[test] + // fn remote_opens_connection_and_substream() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + + // if let Some(&PeerState::Disabled { ref connections, backoff_until: None }) = + // notif.peers.get(&(peer, 0.into())) + // { + // assert_eq!(connections[0], (conn, ConnectionState::Closed)); + // } else { + // panic!("invalid state"); + // } + + // // remote opens a substream, verify that peer state is updated to `Incoming` + // notif.on_connection_handler_event( + // peer, + // conn, + // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + // ); + + // if let Some(&PeerState::Incoming { ref connections, backoff_until: None }) = + // notif.peers.get(&(peer, 0.into())) + // { + // assert_eq!(connections.len(), 1); + // assert_eq!(connections[0], (conn, ConnectionState::OpenDesiredByRemote)); + // } else { + // panic!("invalid state"); + // } + + // assert!(std::matches!( + // notif.incoming.pop(), + // Some(IncomingPeer { alive: true, incoming_id: sc_peerset::IncomingIndex(0), .. }), + // )); + // } + + // #[tokio::test] + // async fn disconnect_remote_substream_before_handled_by_peerset() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // notif.on_connection_handler_event( + // peer, + // conn, + // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + // ); + // notif.disconnect_peer(&peer, 0.into()); + + // if let Some(&PeerState::Disabled { ref connections, backoff_until: None }) = + // notif.peers.get(&(peer, 0.into())) + // { + // assert_eq!(connections.len(), 1); + // assert_eq!(connections[0], (conn, ConnectionState::Closing)); + // } else { + // panic!("invalid state"); + // } + // } + + // #[test] + // fn peerset_report_connect_backoff() { + // let (mut notif, _peerset) = development_notifs(); + // let set_id = sc_peerset::SetId::from(0); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // // manually add backoff for the entry + // // + // // there is not straight-forward way of adding backoff to `PeerState::Disabled` + // // so manually adjust the value in order to progress on to the next stage. + // // This modification together with `ConnectionClosed` will conver the peer + // // state into `PeerState::Backoff`. + // if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = + // notif.peers.get_mut(&(peer, set_id)) + // { + // *backoff_until = + // Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); + // } + + // notif.on_swarm_event(FromSwarm::ConnectionClosed( + // libp2p::swarm::behaviour::ConnectionClosed { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected.clone(), + // handler: NotifsHandler::new(peer, connected, vec![]), + // remaining_established: 0usize, + // }, + // )); + + // let timer = if let Some(&PeerState::Backoff { timer_deadline, .. }) = + // notif.peers.get(&(peer, set_id)) + // { + // timer_deadline + // } else { + // panic!("invalid state"); + // }; + + // // attempt to connect the backed-off peer and verify that the request is pending + // notif.peerset_report_connect(peer, set_id); + + // if let Some(&PeerState::PendingRequest { timer_deadline, .. }) = + // notif.peers.get(&(peer, set_id)) + // { + // assert_eq!(timer, timer_deadline); + // } else { + // panic!("invalid state"); + // } + // } + + // #[test] + // fn peerset_connect_incoming() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let set_id = sc_peerset::SetId::from(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // // remote opens a substream, verify that peer state is updated to `Incoming` + // notif.on_connection_handler_event( + // peer, + // conn, + // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + // ); + + // // attempt to connect to the peer and verify that the peer state is `Enabled` + // notif.peerset_report_connect(peer, set_id); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); + // } + + // #[test] + // fn peerset_disconnect_disable_pending_enable() { + // let (mut notif, _peerset) = development_notifs(); + // let set_id = sc_peerset::SetId::from(0); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // // manually add backoff for the entry + // if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = + // notif.peers.get_mut(&(peer, set_id)) + // { + // *backoff_until = + // Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); + // } + + // // switch state to `DisabledPendingEnable` + // notif.peerset_report_connect(peer, set_id); + // assert!(std::matches!( + // notif.peers.get(&(peer, set_id)), + // Some(&PeerState::DisabledPendingEnable { .. }) + // )); + + // notif.peerset_report_disconnect(peer, set_id); + + // if let Some(PeerState::Disabled { backoff_until, .. }) = notif.peers.get(&(peer, set_id)) { + // assert!(backoff_until.is_some()); + // assert!(backoff_until.unwrap() > Instant::now()); + // } else { + // panic!("invalid state"); + // } + // } + + // #[test] + // fn peerset_disconnect_enabled() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let set_id = sc_peerset::SetId::from(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // // Set peer into `Enabled` state. + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // notif.on_connection_handler_event( + // peer, + // conn, + // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + // ); + // notif.peerset_report_connect(peer, set_id); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); + + // // disconnect peer and verify that the state is `Disabled` + // notif.peerset_report_disconnect(peer, set_id); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + // } + + // #[test] + // fn peerset_disconnect_requested() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let set_id = sc_peerset::SetId::from(0); + + // // Set peer into `Requested` state. + // notif.peerset_report_connect(peer, set_id); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Requested))); + + // // disconnect peer and verify that the state is `Disabled` + // notif.peerset_report_disconnect(peer, set_id); + // assert!(notif.peers.get(&(peer, set_id)).is_none()); + // } + + // #[test] + // fn peerset_disconnect_pending_request() { + // let (mut notif, _peerset) = development_notifs(); + // let set_id = sc_peerset::SetId::from(0); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // // manually add backoff for the entry + // if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = + // notif.peers.get_mut(&(peer, set_id)) + // { + // *backoff_until = + // Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); + // } + + // notif.on_swarm_event(FromSwarm::ConnectionClosed( + // libp2p::swarm::behaviour::ConnectionClosed { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected.clone(), + // handler: NotifsHandler::new(peer, connected, vec![]), + // remaining_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); + + // // attempt to connect the backed-off peer and verify that the request is pending + // notif.peerset_report_connect(peer, set_id); + // assert!(std::matches!( + // notif.peers.get(&(peer, set_id)), + // Some(&PeerState::PendingRequest { .. }) + // )); + + // // attempt to disconnect the backed-off peer and verify that the request is pending + // notif.peerset_report_disconnect(peer, set_id); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); + // } + + // #[test] + // fn peerset_accept_peer_not_alive() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let set_id = sc_peerset::SetId::from(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // // remote opens a substream, verify that peer state is updated to `Incoming` + // notif.on_connection_handler_event( + // peer, + // conn, + // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + // ); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + // assert!(std::matches!( + // notif.incoming[0], + // IncomingPeer { alive: true, incoming_id: sc_peerset::IncomingIndex(0), .. }, + // )); + + // notif.disconnect_peer(&peer, set_id); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + // assert!(std::matches!( + // notif.incoming[0], + // IncomingPeer { alive: false, incoming_id: sc_peerset::IncomingIndex(0), .. }, + // )); + + // notif.peerset_report_accept(sc_peerset::IncomingIndex(0)); + // assert_eq!(notif.incoming.len(), 0); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(PeerState::Disabled { .. }))); + // } + + // #[test] + // fn secondary_connection_peer_state_incoming() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let conn2 = ConnectionId::new_unchecked(1); + // let set_id = sc_peerset::SetId::from(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // notif.on_connection_handler_event( + // peer, + // conn, + // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + // ); + // if let Some(&PeerState::Incoming { ref connections, .. }) = notif.peers.get(&(peer, set_id)) + // { + // assert_eq!(connections.len(), 1); + // assert_eq!(connections[0], (conn, ConnectionState::OpenDesiredByRemote)); + // } else { + // panic!("invalid state"); + // } + + // // add another connection + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn2, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + + // if let Some(&PeerState::Incoming { ref connections, .. }) = notif.peers.get(&(peer, set_id)) + // { + // assert_eq!(connections.len(), 2); + // assert_eq!(connections[0], (conn, ConnectionState::OpenDesiredByRemote)); + // assert_eq!(connections[1], (conn2, ConnectionState::Closed)); + // } else { + // panic!("invalid state"); + // } + // } + + // #[test] + // fn close_connection_for_disabled_peer() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let set_id = sc_peerset::SetId::from(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // notif.on_swarm_event(FromSwarm::ConnectionClosed( + // libp2p::swarm::behaviour::ConnectionClosed { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected.clone(), + // handler: NotifsHandler::new(peer, connected, vec![]), + // remaining_established: 0usize, + // }, + // )); + // assert!(notif.peers.get(&(peer, set_id)).is_none()); + // } + + // #[test] + // fn close_connection_for_incoming_peer_one_connection() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let set_id = sc_peerset::SetId::from(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // notif.on_connection_handler_event( + // peer, + // conn, + // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + // ); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + // notif.on_swarm_event(FromSwarm::ConnectionClosed( + // libp2p::swarm::behaviour::ConnectionClosed { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected.clone(), + // handler: NotifsHandler::new(peer, connected, vec![]), + // remaining_established: 0usize, + // }, + // )); + // assert!(notif.peers.get(&(peer, set_id)).is_none()); + // assert!(std::matches!( + // notif.incoming[0], + // IncomingPeer { alive: false, incoming_id: sc_peerset::IncomingIndex(0), .. }, + // )); + // } + + // #[test] + // fn close_connection_for_incoming_peer_two_connections() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let conn1 = ConnectionId::new_unchecked(1); + // let set_id = sc_peerset::SetId::from(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + // let mut conns = SmallVec::< + // [(ConnectionId, ConnectionState); crate::MAX_CONNECTIONS_PER_PEER], + // >::from(vec![(conn, ConnectionState::Closed)]); + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // notif.on_connection_handler_event( + // peer, + // conn, + // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + // ); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn1, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // conns.push((conn1, ConnectionState::Closed)); + + // if let Some(PeerState::Incoming { ref connections, .. }) = notif.peers.get(&(peer, set_id)) + // { + // assert_eq!(connections.len(), 2); + // assert_eq!(connections[0], (conn, ConnectionState::OpenDesiredByRemote)); + // assert_eq!(connections[1], (conn1, ConnectionState::Closed)); + // } + + // notif.on_swarm_event(FromSwarm::ConnectionClosed( + // libp2p::swarm::behaviour::ConnectionClosed { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected.clone(), + // handler: NotifsHandler::new(peer, connected, vec![]), + // remaining_established: 0usize, + // }, + // )); + + // if let Some(&PeerState::Disabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) + // { + // assert_eq!(connections.len(), 1); + // assert_eq!(connections[0], (conn1, ConnectionState::Closed)); + // } else { + // panic!("invalid state"); + // } + // } + + // #[test] + // fn connection_and_substream_open() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let set_id = sc_peerset::SetId::from(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + // let mut conn_yielder = ConnectionYielder::new(); + + // // move the peer to `Enabled` state + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // notif.on_connection_handler_event( + // peer, + // conn, + // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + // ); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + // notif.peerset_report_connect(peer, set_id); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); + + // // open new substream + // let event = conn_yielder.open_substream(peer, 0, connected, vec![1, 2, 3, 4]); + + // notif.on_connection_handler_event(peer, conn, event); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); + + // if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { + // assert_eq!(connections.len(), 1); + // assert_eq!(connections[0].0, conn); + // assert!(std::matches!(connections[0].1, ConnectionState::Open(_))); + // } + + // assert!(std::matches!( + // notif.events[notif.events.len() - 1], + // NetworkBehaviourAction::GenerateEvent(NotificationsOut::CustomProtocolOpen { .. }) + // )); + // } + + // #[test] + // fn connection_closed_sink_replaced() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let conn1 = ConnectionId::new_unchecked(0); + // let conn2 = ConnectionId::new_unchecked(1); + // let set_id = sc_peerset::SetId::from(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + // let mut conn_yielder = ConnectionYielder::new(); + + // // open two connections + // for conn_id in vec![conn1, conn2] { + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn_id, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // } + + // if let Some(&PeerState::Disabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) + // { + // assert_eq!(connections[0], (conn1, ConnectionState::Closed)); + // assert_eq!(connections[1], (conn2, ConnectionState::Closed)); + // } else { + // panic!("invalid state"); + // } + + // // open substreams on both active connections + // notif.peerset_report_connect(peer, set_id); + // notif.on_connection_handler_event( + // peer, + // conn2, + // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + // ); + + // if let Some(&PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) + // { + // assert_eq!(connections[0], (conn1, ConnectionState::Opening)); + // assert_eq!(connections[1], (conn2, ConnectionState::Opening)); + // } else { + // panic!("invalid state"); + // } + + // // add two new substreams, one for each connection and verify that both are in open state + // for conn in vec![conn1, conn2].iter() { + // notif.on_connection_handler_event( + // peer, + // *conn, + // conn_yielder.open_substream(peer, 0, connected.clone(), vec![1, 2, 3, 4]), + // ); + // } + + // if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { + // assert_eq!(connections[0].0, conn1); + // assert!(std::matches!(connections[0].1, ConnectionState::Open(_))); + // assert_eq!(connections[1].0, conn2); + // assert!(std::matches!(connections[1].1, ConnectionState::Open(_))); + // } else { + // panic!("invalid state"); + // } + + // // check peer information + // assert_eq!(notif.open_peers().collect::>(), vec![&peer],); + // assert_eq!(notif.reserved_peers(set_id).collect::>(), Vec::<&PeerId>::new(),); + // assert_eq!(notif.num_discovered_peers(), 0usize); + + // // close the other connection and verify that notification replacement event is emitted + // notif.on_swarm_event(FromSwarm::ConnectionClosed( + // libp2p::swarm::behaviour::ConnectionClosed { + // peer_id: peer, + // connection_id: conn1, + // endpoint: &connected.clone(), + // handler: NotifsHandler::new(peer, connected, vec![]), + // remaining_established: 0usize, + // }, + // )); + + // if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { + // assert_eq!(connections.len(), 1); + // assert_eq!(connections[0].0, conn2); + // assert!(std::matches!(connections[0].1, ConnectionState::Open(_))); + // } else { + // panic!("invalid state"); + // } + + // assert!(std::matches!( + // notif.events[notif.events.len() - 1], + // NetworkBehaviourAction::GenerateEvent(NotificationsOut::CustomProtocolReplaced { .. }) + // )); + // } + + // #[test] + // fn dial_failure_for_requested_peer() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let set_id = sc_peerset::SetId::from(0); + + // // Set peer into `Requested` state. + // notif.peerset_report_connect(peer, set_id); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Requested))); + + // notif.on_swarm_event(FromSwarm::DialFailure(libp2p::swarm::behaviour::DialFailure { + // peer_id: Some(peer), + // error: &libp2p::swarm::DialError::Banned, + // connection_id: ConnectionId::new_unchecked(1337), + // })); + + // if let Some(PeerState::Backoff { timer_deadline, .. }) = notif.peers.get(&(peer, set_id)) { + // assert!(timer_deadline > &Instant::now()); + // } else { + // panic!("invalid state"); + // } + // } + + // #[tokio::test] + // async fn write_notification() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let set_id = sc_peerset::SetId::from(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + // let mut conn_yielder = ConnectionYielder::new(); + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // notif.peerset_report_connect(peer, set_id); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); + + // notif.on_connection_handler_event( + // peer, + // conn, + // conn_yielder.open_substream(peer, 0, connected, vec![1, 2, 3, 4]), + // ); + + // if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { + // assert_eq!(connections[0].0, conn); + // assert!(std::matches!(connections[0].1, ConnectionState::Open(_))); + // } else { + // panic!("invalid state"); + // } + + // notif + // .peers + // .get(&(peer, set_id)) + // .unwrap() + // .get_open() + // .unwrap() + // .send_sync_notification(vec![1, 3, 3, 7]); + // assert_eq!(conn_yielder.get_next_event(peer, set_id.into()).await, Some(vec![1, 3, 3, 7])); + // } + + // #[test] + // fn peerset_report_connect_backoff_expired() { + // let (mut notif, _peerset) = development_notifs(); + // let set_id = sc_peerset::SetId::from(0); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + // let backoff_duration = Duration::from_millis(100); + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // // manually add backoff for the entry + // if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = + // notif.peers.get_mut(&(peer, set_id)) + // { + // *backoff_until = Some(Instant::now().checked_add(backoff_duration).unwrap()); + // } + + // notif.on_swarm_event(FromSwarm::ConnectionClosed( + // libp2p::swarm::behaviour::ConnectionClosed { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected.clone(), + // handler: NotifsHandler::new(peer, connected, vec![]), + // remaining_established: 0usize, + // }, + // )); + + // // wait until the backoff time has passed + // std::thread::sleep(backoff_duration * 2); + + // // attempt to connect the backed-off peer and verify that the request is pending + // notif.peerset_report_connect(peer, set_id); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Requested { .. }))) + // } + + // #[test] + // fn peerset_report_disconnect_disabled() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let set_id = sc_peerset::SetId::from(0); + // let conn = ConnectionId::new_unchecked(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // notif.peerset_report_disconnect(peer, set_id); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + // } + + // #[test] + // fn peerset_report_disconnect_backoff() { + // let (mut notif, _peerset) = development_notifs(); + // let set_id = sc_peerset::SetId::from(0); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + // let backoff_duration = Duration::from_secs(2); + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // // manually add backoff for the entry + // if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = + // notif.peers.get_mut(&(peer, set_id)) + // { + // *backoff_until = Some(Instant::now().checked_add(backoff_duration).unwrap()); + // } + + // notif.on_swarm_event(FromSwarm::ConnectionClosed( + // libp2p::swarm::behaviour::ConnectionClosed { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected.clone(), + // handler: NotifsHandler::new(peer, connected, vec![]), + // remaining_established: 0usize, + // }, + // )); + + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); + + // notif.peerset_report_disconnect(peer, set_id); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); + // } + + // #[test] + // fn peer_is_backed_off_if_both_connections_get_closed_while_peer_is_disabled_with_back_off() { + // let (mut notif, _peerset) = development_notifs(); + // let set_id = sc_peerset::SetId::from(0); + // let peer = PeerId::random(); + // let conn1 = ConnectionId::new_unchecked(0); + // let conn2 = ConnectionId::new_unchecked(1); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn1, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn2, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // // manually add backoff for the entry + // if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = + // notif.peers.get_mut(&(peer, set_id)) + // { + // *backoff_until = + // Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); + // } + + // // switch state to `DisabledPendingEnable` + // notif.peerset_report_connect(peer, set_id); + // assert!(std::matches!( + // notif.peers.get(&(peer, set_id)), + // Some(&PeerState::DisabledPendingEnable { .. }) + // )); + + // notif.on_swarm_event(FromSwarm::ConnectionClosed( + // libp2p::swarm::behaviour::ConnectionClosed { + // peer_id: peer, + // connection_id: conn1, + // endpoint: &connected.clone(), + // handler: NotifsHandler::new(peer, connected.clone(), vec![]), + // remaining_established: 0usize, + // }, + // )); + // assert!(std::matches!( + // notif.peers.get(&(peer, set_id)), + // Some(&PeerState::DisabledPendingEnable { .. }) + // )); + + // notif.on_swarm_event(FromSwarm::ConnectionClosed( + // libp2p::swarm::behaviour::ConnectionClosed { + // peer_id: peer, + // connection_id: conn2, + // endpoint: &connected.clone(), + // handler: NotifsHandler::new(peer, connected, vec![]), + // remaining_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); + // } + + // #[test] + // fn inject_connection_closed_incoming_with_backoff() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let set_id = sc_peerset::SetId::from(0); + // let conn = ConnectionId::new_unchecked(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // // remote opens a substream, verify that peer state is updated to `Incoming` + // notif.on_connection_handler_event( + // peer, + // conn, + // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + // ); + + // // manually add backoff for the entry + // if let Some(&mut PeerState::Incoming { ref mut backoff_until, .. }) = + // notif.peers.get_mut(&(peer, 0.into())) + // { + // *backoff_until = + // Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); + // } else { + // panic!("invalid state"); + // } + + // notif.on_swarm_event(FromSwarm::ConnectionClosed( + // libp2p::swarm::behaviour::ConnectionClosed { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected.clone(), + // handler: NotifsHandler::new(peer, connected, vec![]), + // remaining_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); + // } + + // #[test] + // fn two_connections_inactive_connection_gets_closed_peer_state_is_still_incoming() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let conn1 = ConnectionId::new_unchecked(0); + // let conn2 = ConnectionId::new_unchecked(1); + // let set_id = sc_peerset::SetId::from(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // // open two connections + // for conn_id in vec![conn1, conn2] { + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn_id, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // } + + // if let Some(&PeerState::Disabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) + // { + // assert_eq!(connections[0], (conn1, ConnectionState::Closed)); + // assert_eq!(connections[1], (conn2, ConnectionState::Closed)); + // } else { + // panic!("invalid state"); + // } + + // // remote opens a substream, verify that peer state is updated to `Incoming` + // notif.on_connection_handler_event( + // peer, + // conn1, + // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + // ); + // assert!(std::matches!( + // notif.peers.get_mut(&(peer, 0.into())), + // Some(&mut PeerState::Incoming { .. }) + // )); + + // notif.on_swarm_event(FromSwarm::ConnectionClosed( + // libp2p::swarm::behaviour::ConnectionClosed { + // peer_id: peer, + // connection_id: conn2, + // endpoint: &connected.clone(), + // handler: NotifsHandler::new(peer, connected, vec![]), + // remaining_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + // } + + // #[test] + // fn two_connections_active_connection_gets_closed_peer_state_is_disabled() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let conn1 = ConnectionId::new_unchecked(0); + // let conn2 = ConnectionId::new_unchecked(1); + // let set_id = sc_peerset::SetId::from(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // // open two connections + // for conn_id in vec![conn1, conn2] { + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn_id, + // endpoint: &ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // } + + // if let Some(&PeerState::Disabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) + // { + // assert_eq!(connections[0], (conn1, ConnectionState::Closed)); + // assert_eq!(connections[1], (conn2, ConnectionState::Closed)); + // } else { + // panic!("invalid state"); + // } + + // // remote opens a substream, verify that peer state is updated to `Incoming` + // notif.on_connection_handler_event( + // peer, + // conn1, + // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + // ); + // assert!(std::matches!( + // notif.peers.get_mut(&(peer, 0.into())), + // Some(PeerState::Incoming { .. }) + // )); + + // notif.on_swarm_event(FromSwarm::ConnectionClosed( + // libp2p::swarm::behaviour::ConnectionClosed { + // peer_id: peer, + // connection_id: conn1, + // endpoint: &connected.clone(), + // handler: NotifsHandler::new(peer, connected, vec![]), + // remaining_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + // } + + // #[test] + // fn inject_connection_closed_for_active_connection() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let conn1 = ConnectionId::new_unchecked(0); + // let conn2 = ConnectionId::new_unchecked(1); + // let set_id = sc_peerset::SetId::from(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + // let mut conn_yielder = ConnectionYielder::new(); + + // // open two connections + // for conn_id in vec![conn1, conn2] { + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn_id, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // } + + // if let Some(&PeerState::Disabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) + // { + // assert_eq!(connections[0], (conn1, ConnectionState::Closed)); + // assert_eq!(connections[1], (conn2, ConnectionState::Closed)); + // } else { + // panic!("invalid state"); + // } + + // // open substreams on both active connections + // notif.peerset_report_connect(peer, set_id); + + // if let Some(&PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) + // { + // assert_eq!(connections[0], (conn1, ConnectionState::Opening)); + // assert_eq!(connections[1], (conn2, ConnectionState::Closed)); + // } else { + // panic!("invalid state"); + // } + + // notif.on_connection_handler_event( + // peer, + // conn1, + // conn_yielder.open_substream(peer, 0, connected.clone(), vec![1, 2, 3, 4]), + // ); + + // if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { + // assert!(std::matches!(connections[0].1, ConnectionState::Open(_))); + // assert_eq!(connections[0].0, conn1); + // assert_eq!(connections[1], (conn2, ConnectionState::Closed)); + // } else { + // panic!("invalid state"); + // } + + // notif.on_swarm_event(FromSwarm::ConnectionClosed( + // libp2p::swarm::behaviour::ConnectionClosed { + // peer_id: peer, + // connection_id: conn1, + // endpoint: &connected.clone(), + // handler: NotifsHandler::new(peer, connected, vec![]), + // remaining_established: 0usize, + // }, + // )); + // } + + // #[test] + // fn inject_dial_failure_for_pending_request() { + // let (mut notif, _peerset) = development_notifs(); + // let set_id = sc_peerset::SetId::from(0); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // // manually add backoff for the entry + // if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = + // notif.peers.get_mut(&(peer, set_id)) + // { + // *backoff_until = + // Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); + // } + + // notif.on_swarm_event(FromSwarm::ConnectionClosed( + // libp2p::swarm::behaviour::ConnectionClosed { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected.clone(), + // handler: NotifsHandler::new(peer, connected, vec![]), + // remaining_established: 0usize, + // }, + // )); + + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); + + // // attempt to connect the backed-off peer and verify that the request is pending + // notif.peerset_report_connect(peer, set_id); + // assert!(std::matches!( + // notif.peers.get(&(peer, set_id)), + // Some(&PeerState::PendingRequest { .. }) + // )); + + // let now = Instant::now(); + // notif.on_swarm_event(FromSwarm::DialFailure(libp2p::swarm::behaviour::DialFailure { + // peer_id: Some(peer), + // error: &libp2p::swarm::DialError::Banned, + // connection_id: ConnectionId::new_unchecked(0), + // })); + + // if let Some(PeerState::PendingRequest { ref timer_deadline, .. }) = + // notif.peers.get(&(peer, set_id)) + // { + // assert!(timer_deadline > &(now + std::time::Duration::from_secs(5))); + // } + // } + + // #[test] + // fn peerstate_incoming_open_desired_by_remote() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let set_id = sc_peerset::SetId::from(0); + // let conn1 = ConnectionId::new_unchecked(0); + // let conn2 = ConnectionId::new_unchecked(1); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn1, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn2, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // // remote opens a substream, verify that peer state is updated to `Incoming` + // notif.on_connection_handler_event( + // peer, + // conn1, + // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + // ); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + // // add another open event from remote + // notif.on_connection_handler_event( + // peer, + // conn2, + // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + // ); + + // if let Some(PeerState::Incoming { ref connections, .. }) = notif.peers.get(&(peer, set_id)) + // { + // assert_eq!(connections[0], (conn1, ConnectionState::OpenDesiredByRemote)); + // assert_eq!(connections[1], (conn2, ConnectionState::OpenDesiredByRemote)); + // } + // } + + // #[tokio::test] + // async fn remove_backoff_peer_after_timeout() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let set_id = sc_peerset::SetId::from(0); + // let conn = ConnectionId::new_unchecked(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + + // if let Some(&mut PeerState::Disabled { ref mut backoff_until, .. }) = + // notif.peers.get_mut(&(peer, 0.into())) + // { + // *backoff_until = + // Some(Instant::now().checked_add(std::time::Duration::from_millis(100)).unwrap()); + // } else { + // panic!("invalid state"); + // } + + // notif.on_swarm_event(FromSwarm::ConnectionClosed( + // libp2p::swarm::behaviour::ConnectionClosed { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected.clone(), + // handler: NotifsHandler::new(peer, connected, vec![]), + // remaining_established: 0usize, + // }, + // )); + + // let until = if let Some(&PeerState::Backoff { timer_deadline, .. }) = + // notif.peers.get(&(peer, set_id)) + // { + // timer_deadline + // } else { + // panic!("invalid state"); + // }; + + // if until > Instant::now() { + // std::thread::sleep(until - Instant::now()); + // } + + // assert!(notif.peers.get(&(peer, set_id)).is_some()); + + // if tokio::time::timeout(Duration::from_secs(5), async { + // let mut params = MockPollParams { peer_id: PeerId::random(), addr: Multiaddr::empty() }; + + // loop { + // futures::future::poll_fn(|cx| { + // let _ = notif.poll(cx, &mut params); + // Poll::Ready(()) + // }) + // .await; + + // if notif.peers.get(&(peer, set_id)).is_none() { + // break + // } + // } + // }) + // .await + // .is_err() + // { + // panic!("backoff peer was not removed in time"); + // } + + // assert!(notif.peers.get(&(peer, set_id)).is_none()); + // } + + // #[tokio::test] + // async fn reschedule_disabled_pending_enable_when_connection_not_closed() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let set_id = sc_peerset::SetId::from(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + // let mut conn_yielder = ConnectionYielder::new(); + + // // move the peer to `Enabled` state + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // // open substream + // notif.on_connection_handler_event( + // peer, + // conn, + // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + // ); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + // notif.peerset_report_connect(peer, set_id); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); + + // let event = conn_yielder.open_substream(peer, 0, connected, vec![1, 2, 3, 4]); + + // notif.on_connection_handler_event(peer, conn, event); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); + + // if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { + // assert!(std::matches!(connections[0], (_, ConnectionState::Open(_)))); + // assert_eq!(connections[0].0, conn); + // } else { + // panic!("invalid state"); + // } + + // notif.peerset_report_disconnect(peer, set_id); + + // if let Some(PeerState::Disabled { ref connections, ref mut backoff_until }) = + // notif.peers.get_mut(&(peer, set_id)) + // { + // assert!(std::matches!(connections[0], (_, ConnectionState::Closing))); + // assert_eq!(connections[0].0, conn); + + // *backoff_until = + // Some(Instant::now().checked_add(std::time::Duration::from_secs(2)).unwrap()); + // } else { + // panic!("invalid state"); + // } + + // notif.peerset_report_connect(peer, set_id); + + // let prev_instant = + // if let Some(PeerState::DisabledPendingEnable { + // ref connections, timer_deadline, .. + // }) = notif.peers.get(&(peer, set_id)) + // { + // assert!(std::matches!(connections[0], (_, ConnectionState::Closing))); + // assert_eq!(connections[0].0, conn); + + // *timer_deadline + // } else { + // panic!("invalid state"); + // }; + + // // one of the peers has an active backoff timer so poll the notifications code until + // // the timer has expired. Because the connection is still in the state of `Closing`, + // // verify that the code continues to keep the peer disabled by resetting the timer + // // after the first one expired. + // if tokio::time::timeout(Duration::from_secs(5), async { + // let mut params = MockPollParams { peer_id: PeerId::random(), addr: Multiaddr::empty() }; + + // loop { + // futures::future::poll_fn(|cx| { + // let _ = notif.poll(cx, &mut params); + // Poll::Ready(()) + // }) + // .await; + + // if let Some(PeerState::DisabledPendingEnable { + // timer_deadline, connections, .. + // }) = notif.peers.get(&(peer, set_id)) + // { + // assert!(std::matches!(connections[0], (_, ConnectionState::Closing))); + + // if timer_deadline != &prev_instant { + // break + // } + // } else { + // panic!("invalid state"); + // } + // } + // }) + // .await + // .is_err() + // { + // panic!("backoff peer was not removed in time"); + // } + // } + + // #[test] + // #[should_panic] + // #[cfg(debug_assertions)] + // fn peerset_report_connect_with_enabled_peer() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let set_id = sc_peerset::SetId::from(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + // let mut conn_yielder = ConnectionYielder::new(); + + // // move the peer to `Enabled` state + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // notif.on_connection_handler_event( + // peer, + // conn, + // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + // ); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + // notif.peerset_report_connect(peer, set_id); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); + + // let event = conn_yielder.open_substream(peer, 0, connected, vec![1, 2, 3, 4]); + + // notif.on_connection_handler_event(peer, conn, event); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); + + // if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { + // assert!(std::matches!(connections[0], (_, ConnectionState::Open(_)))); + // assert_eq!(connections[0].0, conn); + // } else { + // panic!("invalid state"); + // } + + // notif.peerset_report_connect(peer, set_id); + // } + + // #[test] + // #[should_panic] + // #[cfg(debug_assertions)] + // fn peerset_report_connect_with_disabled_pending_enable_peer() { + // let (mut notif, _peerset) = development_notifs(); + // let set_id = sc_peerset::SetId::from(0); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // // manually add backoff for the entry + // if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = + // notif.peers.get_mut(&(peer, set_id)) + // { + // *backoff_until = + // Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); + // } + + // // switch state to `DisabledPendingEnable` + // notif.peerset_report_connect(peer, set_id); + // assert!(std::matches!( + // notif.peers.get(&(peer, set_id)), + // Some(&PeerState::DisabledPendingEnable { .. }) + // )); + + // notif.peerset_report_connect(peer, set_id); + // } + + // #[test] + // #[should_panic] + // #[cfg(debug_assertions)] + // fn peerset_report_connect_with_requested_peer() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let set_id = sc_peerset::SetId::from(0); + + // // Set peer into `Requested` state. + // notif.peerset_report_connect(peer, set_id); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Requested))); + + // notif.peerset_report_connect(peer, set_id); + // } + + // #[test] + // #[should_panic] + // #[cfg(debug_assertions)] + // fn peerset_report_connect_with_pending_requested() { + // let (mut notif, _peerset) = development_notifs(); + // let set_id = sc_peerset::SetId::from(0); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // // manually add backoff for the entry + // if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = + // notif.peers.get_mut(&(peer, set_id)) + // { + // *backoff_until = + // Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); + // } + + // notif.on_swarm_event(FromSwarm::ConnectionClosed( + // libp2p::swarm::behaviour::ConnectionClosed { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected.clone(), + // handler: NotifsHandler::new(peer, connected, vec![]), + // remaining_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); + + // // attempt to connect the backed-off peer and verify that the request is pending + // notif.peerset_report_connect(peer, set_id); + // assert!(std::matches!( + // notif.peers.get(&(peer, set_id)), + // Some(&PeerState::PendingRequest { .. }) + // )); + + // notif.peerset_report_connect(peer, set_id); + // } + + // #[test] + // #[should_panic] + // #[cfg(debug_assertions)] + // fn peerset_report_disconnect_with_incoming_peer() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let set_id = sc_peerset::SetId::from(0); + // let conn = ConnectionId::new_unchecked(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // // remote opens a substream, verify that peer state is updated to `Incoming` + // notif.on_connection_handler_event( + // peer, + // conn, + // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + // ); + + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + // notif.peerset_report_disconnect(peer, set_id); + // } + + // #[test] + // #[should_panic] + // #[cfg(debug_assertions)] + // fn peerset_report_accept_incoming_peer() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let set_id = sc_peerset::SetId::from(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // // remote opens a substream, verify that peer state is updated to `Incoming` + // notif.on_connection_handler_event( + // peer, + // conn, + // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + // ); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + // assert!(std::matches!( + // notif.incoming[0], + // IncomingPeer { alive: true, incoming_id: sc_peerset::IncomingIndex(0), .. }, + // )); + + // notif.peers.remove(&(peer, set_id)); + // notif.peerset_report_accept(sc_peerset::IncomingIndex(0)); + // } + + // #[test] + // #[should_panic] + // #[cfg(debug_assertions)] + // fn peerset_report_accept_not_incoming_peer() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let set_id = sc_peerset::SetId::from(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + // let mut conn_yielder = ConnectionYielder::new(); + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // // remote opens a substream, verify that peer state is updated to `Incoming` + // notif.on_connection_handler_event( + // peer, + // conn, + // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + // ); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + // assert!(std::matches!( + // notif.incoming[0], + // IncomingPeer { alive: true, incoming_id: sc_peerset::IncomingIndex(0), .. }, + // )); + + // notif.peerset_report_connect(peer, set_id); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); + + // let event = conn_yielder.open_substream(peer, 0, connected, vec![1, 2, 3, 4]); + // notif.on_connection_handler_event(peer, conn, event); + + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); + // notif.incoming[0].alive = true; + // notif.peerset_report_accept(sc_peerset::IncomingIndex(0)); + // } + + // #[test] + // #[should_panic] + // #[cfg(debug_assertions)] + // fn inject_connection_closed_non_existent_peer() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let endpoint = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionClosed( + // libp2p::swarm::behaviour::ConnectionClosed { + // peer_id: peer, + // connection_id: ConnectionId::new_unchecked(0), + // endpoint: &endpoint.clone(), + // handler: NotifsHandler::new(peer, endpoint, vec![]), + // remaining_established: 0usize, + // }, + // )); + // } #[test] fn disconnect_non_existent_peer() { @@ -4138,372 +4136,372 @@ mod tests { assert!(notif.incoming.is_empty()); } - #[test] - fn reject_non_active_connection() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let set_id = sc_peerset::SetId::from(0); - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // remote opens a substream, verify that peer state is updated to `Incoming` - notif.on_connection_handler_event( - peer, - conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - notif.incoming[0].alive = false; - notif.peerset_report_reject(0.into()); - - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - } - - #[test] - #[should_panic] - #[cfg(debug_assertions)] - fn reject_non_existent_peer_but_alive_connection() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let set_id = sc_peerset::SetId::from(0); - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // remote opens a substream, verify that peer state is updated to `Incoming` - notif.on_connection_handler_event( - peer, - conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - assert!(std::matches!( - notif.incoming[0], - IncomingPeer { alive: true, incoming_id: sc_peerset::IncomingIndex(0), .. }, - )); - - notif.peers.remove(&(peer, set_id)); - notif.peerset_report_reject(0.into()); - } - - #[test] - #[should_panic] - #[cfg(debug_assertions)] - fn inject_non_existent_connection_closed_for_incoming_peer() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let set_id = sc_peerset::SetId::from(0); - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // remote opens a substream, verify that peer state is updated to `Incoming` - notif.on_connection_handler_event( - peer, - conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - notif.on_swarm_event(FromSwarm::ConnectionClosed( - libp2p::swarm::behaviour::ConnectionClosed { - peer_id: peer, - connection_id: ConnectionId::DUMMY, // 1337 - endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), - remaining_established: 0usize, - }, - )); - } - - #[test] - #[should_panic] - #[cfg(debug_assertions)] - fn inject_non_existent_connection_closed_for_disabled_peer() { - let (mut notif, _peerset) = development_notifs(); - let set_id = sc_peerset::SetId::from(0); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - notif.on_swarm_event(FromSwarm::ConnectionClosed( - libp2p::swarm::behaviour::ConnectionClosed { - peer_id: peer, - connection_id: ConnectionId::DUMMY, // 1337 - endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), - remaining_established: 0usize, - }, - )); - } - - #[test] - #[should_panic] - #[cfg(debug_assertions)] - fn inject_non_existent_connection_closed_for_disabled_pending_enable() { - let (mut notif, _peerset) = development_notifs(); - let set_id = sc_peerset::SetId::from(0); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // manually add backoff for the entry - if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = - notif.peers.get_mut(&(peer, set_id)) - { - *backoff_until = - Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); - } - - // switch state to `DisabledPendingEnable` - notif.peerset_report_connect(peer, set_id); - - assert!(std::matches!( - notif.peers.get(&(peer, set_id)), - Some(&PeerState::DisabledPendingEnable { .. }) - )); - - notif.on_swarm_event(FromSwarm::ConnectionClosed( - libp2p::swarm::behaviour::ConnectionClosed { - peer_id: peer, - connection_id: ConnectionId::DUMMY, // 1337 - endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), - remaining_established: 0usize, - }, - )); - } - - #[test] - #[should_panic] - #[cfg(debug_assertions)] - fn inject_connection_closed_for_incoming_peer_state_mismatch() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let set_id = sc_peerset::SetId::from(0); - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // remote opens a substream, verify that peer state is updated to `Incoming` - notif.on_connection_handler_event( - peer, - conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - notif.incoming[0].alive = false; - - notif.on_swarm_event(FromSwarm::ConnectionClosed( - libp2p::swarm::behaviour::ConnectionClosed { - peer_id: peer, - connection_id: conn, - endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), - remaining_established: 0usize, - }, - )); - } - - #[test] - #[should_panic] - #[cfg(debug_assertions)] - fn inject_connection_closed_for_enabled_state_mismatch() { - let (mut notif, _peerset) = development_notifs(); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let set_id = sc_peerset::SetId::from(0); - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // remote opens a substream, verify that peer state is updated to `Incoming` - notif.on_connection_handler_event( - peer, - conn, - NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - ); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - // attempt to connect to the peer and verify that the peer state is `Enabled` - notif.peerset_report_connect(peer, set_id); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); - - notif.on_swarm_event(FromSwarm::ConnectionClosed( - libp2p::swarm::behaviour::ConnectionClosed { - peer_id: peer, - connection_id: ConnectionId::DUMMY, // 1337 - endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), - remaining_established: 0usize, - }, - )); - } - - #[test] - #[should_panic] - #[cfg(debug_assertions)] - fn inject_connection_closed_for_backoff_peer() { - let (mut notif, _peerset) = development_notifs(); - let set_id = sc_peerset::SetId::from(0); - let peer = PeerId::random(); - let conn = ConnectionId::DUMMY; - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - - notif.on_swarm_event(FromSwarm::ConnectionEstablished( - libp2p::swarm::behaviour::ConnectionEstablished { - peer_id: peer, - connection_id: conn, - endpoint: &connected, - failed_addresses: &[], - other_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // manually add backoff for the entry - if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = - notif.peers.get_mut(&(peer, set_id)) - { - *backoff_until = - Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); - } - - notif.on_swarm_event(FromSwarm::ConnectionClosed( - libp2p::swarm::behaviour::ConnectionClosed { - peer_id: peer, - connection_id: conn, - endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected.clone(), vec![]), - remaining_established: 0usize, - }, - )); - assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); - - notif.on_swarm_event(FromSwarm::ConnectionClosed( - libp2p::swarm::behaviour::ConnectionClosed { - peer_id: peer, - connection_id: conn, - endpoint: &connected.clone(), - handler: NotifsHandler::new(peer, connected, vec![]), - remaining_established: 0usize, - }, - )); - } - - #[test] - #[should_panic] - #[cfg(debug_assertions)] - fn open_result_ok_non_existent_peer() { - let (mut notif, _peerset) = development_notifs(); - let conn = ConnectionId::DUMMY; - let connected = ConnectedPoint::Listener { - local_addr: Multiaddr::empty(), - send_back_addr: Multiaddr::empty(), - }; - let mut conn_yielder = ConnectionYielder::new(); - - notif.on_connection_handler_event( - PeerId::random(), - conn, - conn_yielder.open_substream(PeerId::random(), 0, connected, vec![1, 2, 3, 4]), - ); - } + // #[test] + // fn reject_non_active_connection() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let set_id = sc_peerset::SetId::from(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // // remote opens a substream, verify that peer state is updated to `Incoming` + // notif.on_connection_handler_event( + // peer, + // conn, + // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + // ); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + // notif.incoming[0].alive = false; + // notif.peerset_report_reject(0.into()); + + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + // } + + // #[test] + // #[should_panic] + // #[cfg(debug_assertions)] + // fn reject_non_existent_peer_but_alive_connection() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let set_id = sc_peerset::SetId::from(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // // remote opens a substream, verify that peer state is updated to `Incoming` + // notif.on_connection_handler_event( + // peer, + // conn, + // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + // ); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + // assert!(std::matches!( + // notif.incoming[0], + // IncomingPeer { alive: true, incoming_id: sc_peerset::IncomingIndex(0), .. }, + // )); + + // notif.peers.remove(&(peer, set_id)); + // notif.peerset_report_reject(0.into()); + // } + + // #[test] + // #[should_panic] + // #[cfg(debug_assertions)] + // fn inject_non_existent_connection_closed_for_incoming_peer() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let set_id = sc_peerset::SetId::from(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // // remote opens a substream, verify that peer state is updated to `Incoming` + // notif.on_connection_handler_event( + // peer, + // conn, + // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + // ); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + // notif.on_swarm_event(FromSwarm::ConnectionClosed( + // libp2p::swarm::behaviour::ConnectionClosed { + // peer_id: peer, + // connection_id: ConnectionId::new_unchecked(1337), + // endpoint: &connected.clone(), + // handler: NotifsHandler::new(peer, connected, vec![]), + // remaining_established: 0usize, + // }, + // )); + // } + + // #[test] + // #[should_panic] + // #[cfg(debug_assertions)] + // fn inject_non_existent_connection_closed_for_disabled_peer() { + // let (mut notif, _peerset) = development_notifs(); + // let set_id = sc_peerset::SetId::from(0); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // notif.on_swarm_event(FromSwarm::ConnectionClosed( + // libp2p::swarm::behaviour::ConnectionClosed { + // peer_id: peer, + // connection_id: ConnectionId::new_unchecked(1337), + // endpoint: &connected.clone(), + // handler: NotifsHandler::new(peer, connected, vec![]), + // remaining_established: 0usize, + // }, + // )); + // } + + // #[test] + // #[should_panic] + // #[cfg(debug_assertions)] + // fn inject_non_existent_connection_closed_for_disabled_pending_enable() { + // let (mut notif, _peerset) = development_notifs(); + // let set_id = sc_peerset::SetId::from(0); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // // manually add backoff for the entry + // if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = + // notif.peers.get_mut(&(peer, set_id)) + // { + // *backoff_until = + // Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); + // } + + // // switch state to `DisabledPendingEnable` + // notif.peerset_report_connect(peer, set_id); + + // assert!(std::matches!( + // notif.peers.get(&(peer, set_id)), + // Some(&PeerState::DisabledPendingEnable { .. }) + // )); + + // notif.on_swarm_event(FromSwarm::ConnectionClosed( + // libp2p::swarm::behaviour::ConnectionClosed { + // peer_id: peer, + // connection_id: ConnectionId::new_unchecked(1337), + // endpoint: &connected.clone(), + // handler: NotifsHandler::new(peer, connected, vec![]), + // remaining_established: 0usize, + // }, + // )); + // } + + // #[test] + // #[should_panic] + // #[cfg(debug_assertions)] + // fn inject_connection_closed_for_incoming_peer_state_mismatch() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let set_id = sc_peerset::SetId::from(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // // remote opens a substream, verify that peer state is updated to `Incoming` + // notif.on_connection_handler_event( + // peer, + // conn, + // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + // ); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + // notif.incoming[0].alive = false; + + // notif.on_swarm_event(FromSwarm::ConnectionClosed( + // libp2p::swarm::behaviour::ConnectionClosed { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected.clone(), + // handler: NotifsHandler::new(peer, connected, vec![]), + // remaining_established: 0usize, + // }, + // )); + // } + + // #[test] + // #[should_panic] + // #[cfg(debug_assertions)] + // fn inject_connection_closed_for_enabled_state_mismatch() { + // let (mut notif, _peerset) = development_notifs(); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let set_id = sc_peerset::SetId::from(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // // remote opens a substream, verify that peer state is updated to `Incoming` + // notif.on_connection_handler_event( + // peer, + // conn, + // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + // ); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + // // attempt to connect to the peer and verify that the peer state is `Enabled` + // notif.peerset_report_connect(peer, set_id); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); + + // notif.on_swarm_event(FromSwarm::ConnectionClosed( + // libp2p::swarm::behaviour::ConnectionClosed { + // peer_id: peer, + // connection_id: ConnectionId::new_unchecked(1337), + // endpoint: &connected.clone(), + // handler: NotifsHandler::new(peer, connected, vec![]), + // remaining_established: 0usize, + // }, + // )); + // } + + // #[test] + // #[should_panic] + // #[cfg(debug_assertions)] + // fn inject_connection_closed_for_backoff_peer() { + // let (mut notif, _peerset) = development_notifs(); + // let set_id = sc_peerset::SetId::from(0); + // let peer = PeerId::random(); + // let conn = ConnectionId::new_unchecked(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + + // notif.on_swarm_event(FromSwarm::ConnectionEstablished( + // libp2p::swarm::behaviour::ConnectionEstablished { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected, + // failed_addresses: &[], + // other_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // // manually add backoff for the entry + // if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = + // notif.peers.get_mut(&(peer, set_id)) + // { + // *backoff_until = + // Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); + // } + + // notif.on_swarm_event(FromSwarm::ConnectionClosed( + // libp2p::swarm::behaviour::ConnectionClosed { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected.clone(), + // handler: NotifsHandler::new(peer, connected.clone(), vec![]), + // remaining_established: 0usize, + // }, + // )); + // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); + + // notif.on_swarm_event(FromSwarm::ConnectionClosed( + // libp2p::swarm::behaviour::ConnectionClosed { + // peer_id: peer, + // connection_id: conn, + // endpoint: &connected.clone(), + // handler: NotifsHandler::new(peer, connected, vec![]), + // remaining_established: 0usize, + // }, + // )); + // } + + // #[test] + // #[should_panic] + // #[cfg(debug_assertions)] + // fn open_result_ok_non_existent_peer() { + // let (mut notif, _peerset) = development_notifs(); + // let conn = ConnectionId::new_unchecked(0); + // let connected = ConnectedPoint::Listener { + // local_addr: Multiaddr::empty(), + // send_back_addr: Multiaddr::empty(), + // }; + // let mut conn_yielder = ConnectionYielder::new(); + + // notif.on_connection_handler_event( + // PeerId::random(), + // conn, + // conn_yielder.open_substream(PeerId::random(), 0, connected, vec![1, 2, 3, 4]), + // ); + // } } diff --git a/client/network/src/protocol/notifications/handler.rs b/client/network/src/protocol/notifications/handler.rs index 4d3f9faaf6fda..a74e4a561427a 100644 --- a/client/network/src/protocol/notifications/handler.rs +++ b/client/network/src/protocol/notifications/handler.rs @@ -69,12 +69,13 @@ use futures::{ prelude::*, }; use libp2p::{ - core::{ConnectedPoint, PeerId}, + core::ConnectedPoint, swarm::{ handler::ConnectionEvent, ConnectionHandler, ConnectionHandlerEvent, KeepAlive, NegotiatedSubstream, SubstreamProtocol, }, }; +use libp2p_identity::PeerId; use log::error; use parking_lot::{Mutex, RwLock}; use sc_network_common::protocol::ProtocolName; @@ -826,91 +827,88 @@ pub mod tests { Multiaddr, }; use multistream_select::{dialer_select_proto, listener_select_proto, Negotiated, Version}; - use std::{ - collections::HashMap, - io::{Error, IoSlice, IoSliceMut}, - }; + use std::io::{Error, IoSlice, IoSliceMut}; use tokio::sync::mpsc; use unsigned_varint::codec::UviBytes; - struct OpenSubstream { - notifications: stream::Peekable< - stream::Select< - stream::Fuse>, - stream::Fuse>, - >, - >, - _in_substream: MockSubstream, - _out_substream: MockSubstream, - } - - pub struct ConnectionYielder { - connections: HashMap<(PeerId, usize), OpenSubstream>, - } - - impl ConnectionYielder { - /// Create new [`ConnectionYielder`]. - pub fn new() -> Self { - Self { connections: HashMap::new() } - } - - /// Open a new substream for peer. - pub fn open_substream( - &mut self, - peer: PeerId, - protocol_index: usize, - endpoint: ConnectedPoint, - received_handshake: Vec, - ) -> NotifsHandlerOut { - let (async_tx, async_rx) = - futures::channel::mpsc::channel(ASYNC_NOTIFICATIONS_BUFFER_SIZE); - let (sync_tx, sync_rx) = - futures::channel::mpsc::channel(SYNC_NOTIFICATIONS_BUFFER_SIZE); - let notifications_sink = NotificationsSink { - inner: Arc::new(NotificationsSinkInner { - peer_id: peer, - async_channel: FuturesMutex::new(async_tx), - sync_channel: Mutex::new(Some(sync_tx)), - }), - }; - let (in_substream, out_substream) = MockSubstream::new(); - - self.connections.insert( - (peer, protocol_index), - OpenSubstream { - notifications: stream::select(async_rx.fuse(), sync_rx.fuse()).peekable(), - _in_substream: in_substream, - _out_substream: out_substream, - }, - ); - - NotifsHandlerOut::OpenResultOk { - protocol_index, - negotiated_fallback: None, - endpoint, - received_handshake, - notifications_sink, - } - } - - /// Attempt to get next pending event from one of the notification sinks. - pub async fn get_next_event(&mut self, peer: PeerId, set: usize) -> Option> { - let substream = if let Some(info) = self.connections.get_mut(&(peer, set)) { - info - } else { - return None - }; - - futures::future::poll_fn(|cx| match substream.notifications.poll_next_unpin(cx) { - Poll::Ready(Some(NotificationsSinkMessage::Notification { message })) => - Poll::Ready(Some(message)), - Poll::Pending => Poll::Ready(None), - Poll::Ready(Some(NotificationsSinkMessage::ForceClose)) | Poll::Ready(None) => - panic!("sink closed"), - }) - .await - } - } + // struct OpenSubstream { + // notifications: stream::Peekable< + // stream::Select< + // stream::Fuse>, + // stream::Fuse>, + // >, + // >, + // _in_substream: MockSubstream, + // _out_substream: MockSubstream, + // } + + // pub struct ConnectionYielder { + // connections: HashMap<(PeerId, usize), OpenSubstream>, + // } + + // impl ConnectionYielder { + // /// Create new [`ConnectionYielder`]. + // pub fn new() -> Self { + // Self { connections: HashMap::new() } + // } + + // /// Open a new substream for peer. + // pub fn open_substream( + // &mut self, + // peer: PeerId, + // protocol_index: usize, + // endpoint: ConnectedPoint, + // received_handshake: Vec, + // ) -> NotifsHandlerOut { + // let (async_tx, async_rx) = + // futures::channel::mpsc::channel(ASYNC_NOTIFICATIONS_BUFFER_SIZE); + // let (sync_tx, sync_rx) = + // futures::channel::mpsc::channel(SYNC_NOTIFICATIONS_BUFFER_SIZE); + // let notifications_sink = NotificationsSink { + // inner: Arc::new(NotificationsSinkInner { + // peer_id: peer, + // async_channel: FuturesMutex::new(async_tx), + // sync_channel: Mutex::new(Some(sync_tx)), + // }), + // }; + // let (in_substream, out_substream) = MockSubstream::new(); + + // self.connections.insert( + // (peer, protocol_index), + // OpenSubstream { + // notifications: stream::select(async_rx.fuse(), sync_rx.fuse()).peekable(), + // _in_substream: in_substream, + // _out_substream: out_substream, + // }, + // ); + + // NotifsHandlerOut::OpenResultOk { + // protocol_index, + // negotiated_fallback: None, + // endpoint, + // received_handshake, + // notifications_sink, + // } + // } + + // /// Attempt to get next pending event from one of the notification sinks. + // pub async fn get_next_event(&mut self, peer: PeerId, set: usize) -> Option> { + // let substream = if let Some(info) = self.connections.get_mut(&(peer, set)) { + // info + // } else { + // return None + // }; + + // futures::future::poll_fn(|cx| match substream.notifications.poll_next_unpin(cx) { + // Poll::Ready(Some(NotificationsSinkMessage::Notification { message })) => + // Poll::Ready(Some(message)), + // Poll::Pending => Poll::Ready(None), + // Poll::Ready(Some(NotificationsSinkMessage::ForceClose)) | Poll::Ready(None) => + // panic!("sink closed"), + // }) + // .await + // } + // } struct MockSubstream { pub rx: mpsc::Receiver>, diff --git a/client/network/src/request_responses.rs b/client/network/src/request_responses.rs index 9efa7f5c4f4ef..4359428171360 100644 --- a/client/network/src/request_responses.rs +++ b/client/network/src/request_responses.rs @@ -40,7 +40,7 @@ use futures::{ prelude::*, }; use libp2p::{ - core::{Endpoint, Multiaddr, PeerId}, + core::{Endpoint, Multiaddr}, request_response::{self, Behaviour, Codec, Config, Message, ProtocolSupport, ResponseChannel}, swarm::{ behaviour::{ConnectionClosed, FromSwarm}, @@ -49,6 +49,7 @@ use libp2p::{ THandler, THandlerInEvent, THandlerOutEvent, }, }; +use libp2p_identity::PeerId; use sc_network_common::{ protocol::ProtocolName, request_responses::{ diff --git a/client/network/src/service.rs b/client/network/src/service.rs index 4a420e19c8ccc..9876ca736f194 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -50,8 +50,9 @@ use libp2p::{ AddressScore, ConnectionError, ConnectionLimits, DialError, Executor, ListenError, NetworkBehaviour, Swarm, SwarmBuilder, SwarmEvent, THandlerErr, }, - Multiaddr, PeerId, + Multiaddr, }; +use libp2p_identity::PeerId; use log::{debug, error, info, trace, warn}; use metrics::{Histogram, HistogramVec, MetricSources, Metrics}; use parking_lot::Mutex; @@ -96,7 +97,7 @@ mod out_events; #[cfg(test)] mod tests; -pub use libp2p::identity::{error::DecodingError, Keypair, PublicKey}; +pub use libp2p_identity::{DecodingError, Keypair, PublicKey}; use sc_network_common::service::NetworkRequest; /// Substrate network service. Handles network IO and manages connectivity. @@ -266,7 +267,7 @@ where ); let discovery_config = { - let mut config = DiscoveryConfig::new(local_public.clone()); + let mut config = DiscoveryConfig::new(local_public.to_peer_id()); config.with_permanent_addresses(known_addresses); config.discovery_limit( u64::from(params.network_config.default_peers_set.out_peers) + 15, diff --git a/client/network/sync/Cargo.toml b/client/network/sync/Cargo.toml index 64c90fb996c6c..0729e2e6f0217 100644 --- a/client/network/sync/Cargo.toml +++ b/client/network/sync/Cargo.toml @@ -21,7 +21,7 @@ async-trait = "0.1.58" codec = { package = "parity-scale-codec", version = "3.2.2", features = ["derive"] } futures = "0.3.21" futures-timer = "3.0.2" -libp2p = "0.51.0" +libp2p = "0.51.1" log = "0.4.17" lru = "0.8.1" mockall = "0.11.3" diff --git a/client/network/test/Cargo.toml b/client/network/test/Cargo.toml index 6c0269a635e87..0d0286103acdc 100644 --- a/client/network/test/Cargo.toml +++ b/client/network/test/Cargo.toml @@ -17,7 +17,7 @@ tokio = "1.22.0" async-trait = "0.1.57" futures = "0.3.21" futures-timer = "3.0.1" -libp2p = "0.51.0" +libp2p = "0.51.1" log = "0.4.17" parking_lot = "0.12.1" rand = "0.8.5" diff --git a/client/network/transactions/Cargo.toml b/client/network/transactions/Cargo.toml index c33585dc49ccb..612d358e0372d 100644 --- a/client/network/transactions/Cargo.toml +++ b/client/network/transactions/Cargo.toml @@ -16,7 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"] array-bytes = "4.1" codec = { package = "parity-scale-codec", version = "3.2.2", features = ["derive"] } futures = "0.3.21" -libp2p = "0.51.0" +libp2p = "0.51.1" log = "0.4.17" pin-project = "1.0.12" prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.10.0-dev", path = "../../../utils/prometheus" } diff --git a/client/offchain/Cargo.toml b/client/offchain/Cargo.toml index 614b4d12a4f45..61f87a5ffd17d 100644 --- a/client/offchain/Cargo.toml +++ b/client/offchain/Cargo.toml @@ -21,7 +21,7 @@ futures = "0.3.21" futures-timer = "3.0.2" hyper = { version = "0.14.16", features = ["stream", "http2"] } hyper-rustls = { version = "0.23.0", features = ["http2"] } -libp2p = "0.51.0" +libp2p = "0.51.1" 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 45e4efd19da02..9490c261bb933 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 = "0.51.0" +libp2p = "0.51.1" 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 c1d10ae7bbee1..0ef5aec2b4ae6 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.51.0", features = ["dns", "tcp", "tokio", "wasm-ext", "websocket"] } +libp2p = { version = "0.51.1", features = ["dns", "tcp", "tokio", "wasm-ext", "websocket"] } log = "0.4.17" parking_lot = "0.12.1" pin-project = "1.0.12" From 38db38ccadb41e95f524053451afc0384919216a Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Thu, 23 Mar 2023 11:45:25 +0400 Subject: [PATCH 14/48] add TODO for behaviour tests --- client/cli/src/params/node_key_params.rs | 2 +- client/network/src/protocol/notifications/behaviour.rs | 4 ++++ client/network/src/protocol/notifications/handler.rs | 4 ++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/client/cli/src/params/node_key_params.rs b/client/cli/src/params/node_key_params.rs index 687f782ee2a95..cc0342fc8dbb0 100644 --- a/client/cli/src/params/node_key_params.rs +++ b/client/cli/src/params/node_key_params.rs @@ -123,7 +123,7 @@ fn parse_ed25519_secret(hex: &str) -> error::Result Date: Thu, 23 Mar 2023 11:53:30 +0400 Subject: [PATCH 15/48] return empty vec if peer_id is absent https://github.com/paritytech/substrate/pull/13587#discussion_r1141695167 fyi: I don't really know what the old behaviour was. --- client/network/src/discovery.rs | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/client/network/src/discovery.rs b/client/network/src/discovery.rs index e11d5fea14bd5..78df8ae1e3ea3 100644 --- a/client/network/src/discovery.rs +++ b/client/network/src/discovery.rs @@ -534,19 +534,19 @@ impl NetworkBehaviour for DiscoveryBehaviour { addresses: &[Multiaddr], effective_role: Endpoint, ) -> Result, ConnectionDenied> { + let Some(peer_id) = maybe_peer else { return Ok(Vec::new()); }; + let mut list = Vec::new(); - if let Some(peer_id) = maybe_peer { - list.extend( - self.permanent_addresses - .iter() - .filter_map(|(p, a)| if *p == peer_id { Some(a.clone()) } else { None }) - .collect::>(), - ); + list.extend( + self.permanent_addresses + .iter() + .filter_map(|(p, a)| if *p == peer_id { Some(a.clone()) } else { None }) + .collect::>(), + ); - if let Some(ephemeral_addresses) = self.ephemeral_addresses.get(&peer_id) { - list.extend(ephemeral_addresses.clone()); - } + if let Some(ephemeral_addresses) = self.ephemeral_addresses.get(&peer_id) { + list.extend(ephemeral_addresses.clone()); } { @@ -577,7 +577,7 @@ impl NetworkBehaviour for DiscoveryBehaviour { list.extend(list_to_filter); } - trace!(target: "sub-libp2p","Addresses of {:?} (connection ID: {:?}): {:?}", maybe_peer, connection_id, list); + trace!(target: "sub-libp2p","Addresses of {:?}: {:?}", peer_id, list); Ok(list) } From 7a981abd69308e9d522ec94905f181439a1b1dba Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Mon, 27 Mar 2023 22:25:22 +0400 Subject: [PATCH 16/48] update comment to reflect new defaults Closes #13338 --- client/authority-discovery/src/lib.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/authority-discovery/src/lib.rs b/client/authority-discovery/src/lib.rs index 24fef864c36ff..bafd9acfea19d 100644 --- a/client/authority-discovery/src/lib.rs +++ b/client/authority-discovery/src/lib.rs @@ -89,11 +89,11 @@ pub struct WorkerConfig { impl Default for WorkerConfig { fn default() -> Self { Self { - // Kademlia's default time-to-live for Dht records is 36h, republishing records every - // 24h through libp2p-kad. Given that a node could restart at any point in time, one can + // Kademlia's default time-to-live for Dht records is 48h, republishing records every + // 22h through libp2p-kad. Given that a node could restart at any point in time, one can // not depend on the republishing process, thus publishing own external addresses should // happen on an interval < 36h. - max_publish_interval: Duration::from_secs(1 * 60 * 60), + max_publish_interval: Duration::from_secs(1 * 60 * 60), // 1h keystore_refresh_interval: Duration::from_secs(60), // External addresses of remote authorities can change at any given point in time. The // interval on which to trigger new queries for the current and next authorities is a From 943c03149cc38e00911367f4152f86f81af2b968 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Tue, 28 Mar 2023 12:29:16 +0400 Subject: [PATCH 17/48] Revert "update comment to reflect new defaults" This reverts commit 7a981abd69308e9d522ec94905f181439a1b1dba. --- client/authority-discovery/src/lib.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/authority-discovery/src/lib.rs b/client/authority-discovery/src/lib.rs index bafd9acfea19d..24fef864c36ff 100644 --- a/client/authority-discovery/src/lib.rs +++ b/client/authority-discovery/src/lib.rs @@ -89,11 +89,11 @@ pub struct WorkerConfig { impl Default for WorkerConfig { fn default() -> Self { Self { - // Kademlia's default time-to-live for Dht records is 48h, republishing records every - // 22h through libp2p-kad. Given that a node could restart at any point in time, one can + // Kademlia's default time-to-live for Dht records is 36h, republishing records every + // 24h through libp2p-kad. Given that a node could restart at any point in time, one can // not depend on the republishing process, thus publishing own external addresses should // happen on an interval < 36h. - max_publish_interval: Duration::from_secs(1 * 60 * 60), // 1h + max_publish_interval: Duration::from_secs(1 * 60 * 60), keystore_refresh_interval: Duration::from_secs(60), // External addresses of remote authorities can change at any given point in time. The // interval on which to trigger new queries for the current and next authorities is a From 17365d19e8475a48ea72480e176cf2a6c1baea4a Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Wed, 29 Mar 2023 16:00:59 +0400 Subject: [PATCH 18/48] remove config.rs (from wrong merge) --- client/network/common/src/config.rs | 706 ---------------------------- 1 file changed, 706 deletions(-) delete mode 100644 client/network/common/src/config.rs diff --git a/client/network/common/src/config.rs b/client/network/common/src/config.rs deleted file mode 100644 index 0918d99c53fe8..0000000000000 --- a/client/network/common/src/config.rs +++ /dev/null @@ -1,706 +0,0 @@ -// This file is part of Substrate. - -// Copyright (C) Parity Technologies (UK) Ltd. -// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 - -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. - -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// You should have received a copy of the GNU General Public License -// along with this program. If not, see . - -//! Configuration of the networking layer. - -pub use crate::{ - protocol::{self, role::Role}, - request_responses::{ - IncomingRequest, OutgoingResponse, ProtocolConfig as RequestResponseConfig, - }, - sync::warp::WarpSyncProvider, - ExHashT, -}; -pub use libp2p::{build_multiaddr, identity}; -pub use libp2p_identity::PublicKey; - -use codec::Encode; -use libp2p::{multiaddr, Multiaddr}; -use libp2p_identity::{ed25519, Keypair, PeerId}; -use zeroize::Zeroize; - -use std::{ - error::Error, - fmt, fs, - io::{self, Write}, - iter, - net::Ipv4Addr, - path::{Path, PathBuf}, - str, - str::FromStr, -}; - -/// Protocol name prefix, transmitted on the wire for legacy protocol names. -/// I.e., `dot` in `/dot/sync/2`. Should be unique for each chain. Always UTF-8. -/// Deprecated in favour of genesis hash & fork ID based protocol names. -#[derive(Clone, PartialEq, Eq, Hash)] -pub struct ProtocolId(smallvec::SmallVec<[u8; 6]>); - -impl<'a> From<&'a str> for ProtocolId { - fn from(bytes: &'a str) -> ProtocolId { - Self(bytes.as_bytes().into()) - } -} - -impl AsRef for ProtocolId { - fn as_ref(&self) -> &str { - str::from_utf8(&self.0[..]) - .expect("the only way to build a ProtocolId is through a UTF-8 String; qed") - } -} - -impl fmt::Debug for ProtocolId { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - fmt::Debug::fmt(self.as_ref(), f) - } -} - -/// Parses a string address and splits it into Multiaddress and PeerId, if -/// valid. -/// -/// # Example -/// -/// ``` -/// # use libp2p::{Multiaddr, PeerId}; -/// # use sc_network_common::config::parse_str_addr; -/// let (peer_id, addr) = parse_str_addr( -/// "/ip4/198.51.100.19/tcp/30333/p2p/QmSk5HQbn6LhUwDiNMseVUjuRYhEtYj4aUZ6WfWoGURpdV" -/// ).unwrap(); -/// assert_eq!(peer_id, "QmSk5HQbn6LhUwDiNMseVUjuRYhEtYj4aUZ6WfWoGURpdV".parse::().unwrap()); -/// assert_eq!(addr, "/ip4/198.51.100.19/tcp/30333".parse::().unwrap()); -/// ``` -pub fn parse_str_addr(addr_str: &str) -> Result<(PeerId, Multiaddr), ParseErr> { - let addr: Multiaddr = addr_str.parse()?; - parse_addr(addr) -} - -/// Splits a Multiaddress into a Multiaddress and PeerId. -pub fn parse_addr(mut addr: Multiaddr) -> Result<(PeerId, Multiaddr), ParseErr> { - let who = match addr.pop() { - Some(multiaddr::Protocol::P2p(key)) => - PeerId::from_multihash(key).map_err(|_| ParseErr::InvalidPeerId)?, - _ => return Err(ParseErr::PeerIdMissing), - }; - - Ok((who, addr)) -} - -/// Address of a node, including its identity. -/// -/// This struct represents a decoded version of a multiaddress that ends with `/p2p/`. -/// -/// # Example -/// -/// ``` -/// # use libp2p::{Multiaddr, PeerId}; -/// # use sc_network_common::config::MultiaddrWithPeerId; -/// let addr: MultiaddrWithPeerId = -/// "/ip4/198.51.100.19/tcp/30333/p2p/QmSk5HQbn6LhUwDiNMseVUjuRYhEtYj4aUZ6WfWoGURpdV".parse().unwrap(); -/// assert_eq!(addr.peer_id.to_base58(), "QmSk5HQbn6LhUwDiNMseVUjuRYhEtYj4aUZ6WfWoGURpdV"); -/// assert_eq!(addr.multiaddr.to_string(), "/ip4/198.51.100.19/tcp/30333"); -/// ``` -#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, PartialEq)] -#[serde(try_from = "String", into = "String")] -pub struct MultiaddrWithPeerId { - /// Address of the node. - pub multiaddr: Multiaddr, - /// Its identity. - pub peer_id: PeerId, -} - -impl MultiaddrWithPeerId { - /// Concatenates the multiaddress and peer ID into one multiaddress containing both. - pub fn concat(&self) -> Multiaddr { - let proto = multiaddr::Protocol::P2p(From::from(self.peer_id)); - self.multiaddr.clone().with(proto) - } -} - -impl fmt::Display for MultiaddrWithPeerId { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - fmt::Display::fmt(&self.concat(), f) - } -} - -impl FromStr for MultiaddrWithPeerId { - type Err = ParseErr; - - fn from_str(s: &str) -> Result { - let (peer_id, multiaddr) = parse_str_addr(s)?; - Ok(Self { peer_id, multiaddr }) - } -} - -impl From for String { - fn from(ma: MultiaddrWithPeerId) -> String { - format!("{}", ma) - } -} - -impl TryFrom for MultiaddrWithPeerId { - type Error = ParseErr; - fn try_from(string: String) -> Result { - string.parse() - } -} - -/// Error that can be generated by `parse_str_addr`. -#[derive(Debug)] -pub enum ParseErr { - /// Error while parsing the multiaddress. - MultiaddrParse(multiaddr::Error), - /// Multihash of the peer ID is invalid. - InvalidPeerId, - /// The peer ID is missing from the address. - PeerIdMissing, -} - -impl fmt::Display for ParseErr { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - match self { - Self::MultiaddrParse(err) => write!(f, "{}", err), - Self::InvalidPeerId => write!(f, "Peer id at the end of the address is invalid"), - Self::PeerIdMissing => write!(f, "Peer id is missing from the address"), - } - } -} - -impl std::error::Error for ParseErr { - fn source(&self) -> Option<&(dyn std::error::Error + 'static)> { - match self { - Self::MultiaddrParse(err) => Some(err), - Self::InvalidPeerId => None, - Self::PeerIdMissing => None, - } - } -} - -impl From for ParseErr { - fn from(err: multiaddr::Error) -> ParseErr { - Self::MultiaddrParse(err) - } -} - -/// Configuration for a set of nodes. -#[derive(Clone, Debug)] -pub struct SetConfig { - /// Maximum allowed number of incoming substreams related to this set. - pub in_peers: u32, - /// Number of outgoing substreams related to this set that we're trying to maintain. - pub out_peers: u32, - /// List of reserved node addresses. - pub reserved_nodes: Vec, - /// Whether nodes that aren't in [`SetConfig::reserved_nodes`] are accepted or automatically - /// refused. - pub non_reserved_mode: NonReservedPeerMode, -} - -impl Default for SetConfig { - fn default() -> Self { - Self { - in_peers: 25, - out_peers: 75, - reserved_nodes: Vec::new(), - non_reserved_mode: NonReservedPeerMode::Accept, - } - } -} - -/// Custom handshake for the notification protocol -#[derive(Debug, Clone)] -pub struct NotificationHandshake(Vec); - -impl NotificationHandshake { - /// Create new `NotificationHandshake` from an object that implements `Encode` - pub fn new(handshake: H) -> Self { - Self(handshake.encode()) - } - - /// Create new `NotificationHandshake` from raw bytes - pub fn from_bytes(bytes: Vec) -> Self { - Self(bytes) - } -} - -impl std::ops::Deref for NotificationHandshake { - type Target = Vec; - - fn deref(&self) -> &Self::Target { - &self.0 - } -} - -/// Extension to [`SetConfig`] for sets that aren't the default set. -/// -/// > **Note**: As new fields might be added in the future, please consider using the `new` method -/// > and modifiers instead of creating this struct manually. -#[derive(Clone, Debug)] -pub struct NonDefaultSetConfig { - /// Name of the notifications protocols of this set. A substream on this set will be - /// considered established once this protocol is open. - /// - /// > **Note**: This field isn't present for the default set, as this is handled internally - /// > by the networking code. - pub notifications_protocol: protocol::ProtocolName, - /// If the remote reports that it doesn't support the protocol indicated in the - /// `notifications_protocol` field, then each of these fallback names will be tried one by - /// one. - /// - /// If a fallback is used, it will be reported in - /// `sc_network::protocol::event::Event::NotificationStreamOpened::negotiated_fallback` - pub fallback_names: Vec, - /// Handshake of the protocol - /// - /// NOTE: Currently custom handshakes are not fully supported. See issue #5685 for more - /// details. This field is temporarily used to allow moving the hardcoded block announcement - /// protocol out of `protocol.rs`. - pub handshake: Option, - /// Maximum allowed size of single notifications. - pub max_notification_size: u64, - /// Base configuration. - pub set_config: SetConfig, -} - -impl NonDefaultSetConfig { - /// Creates a new [`NonDefaultSetConfig`]. Zero slots and accepts only reserved nodes. - pub fn new(notifications_protocol: protocol::ProtocolName, max_notification_size: u64) -> Self { - Self { - notifications_protocol, - max_notification_size, - fallback_names: Vec::new(), - handshake: None, - set_config: SetConfig { - in_peers: 0, - out_peers: 0, - reserved_nodes: Vec::new(), - non_reserved_mode: NonReservedPeerMode::Deny, - }, - } - } - - /// Modifies the configuration to allow non-reserved nodes. - pub fn allow_non_reserved(&mut self, in_peers: u32, out_peers: u32) { - self.set_config.in_peers = in_peers; - self.set_config.out_peers = out_peers; - self.set_config.non_reserved_mode = NonReservedPeerMode::Accept; - } - - /// Add a node to the list of reserved nodes. - pub fn add_reserved(&mut self, peer: MultiaddrWithPeerId) { - self.set_config.reserved_nodes.push(peer); - } - - /// Add a list of protocol names used for backward compatibility. - /// - /// See the explanations in [`NonDefaultSetConfig::fallback_names`]. - pub fn add_fallback_names(&mut self, fallback_names: Vec) { - self.fallback_names.extend(fallback_names); - } -} - -/// Configuration for the transport layer. -#[derive(Clone, Debug)] -pub enum TransportConfig { - /// Normal transport mode. - Normal { - /// If true, the network will use mDNS to discover other libp2p nodes on the local network - /// and connect to them if they support the same chain. - enable_mdns: bool, - - /// If true, allow connecting to private IPv4/IPv6 addresses (as defined in - /// [RFC1918](https://tools.ietf.org/html/rfc1918)). Irrelevant for addresses that have - /// been passed in `::sc_network::config::NetworkConfiguration::boot_nodes`. - allow_private_ip: bool, - }, - - /// Only allow connections within the same process. - /// Only addresses of the form `/memory/...` will be supported. - MemoryOnly, -} - -/// The policy for connections to non-reserved peers. -#[derive(Clone, Debug, PartialEq, Eq)] -pub enum NonReservedPeerMode { - /// Accept them. This is the default. - Accept, - /// Deny them. - Deny, -} - -impl NonReservedPeerMode { - /// Attempt to parse the peer mode from a string. - pub fn parse(s: &str) -> Option { - match s { - "accept" => Some(Self::Accept), - "deny" => Some(Self::Deny), - _ => None, - } - } -} - -/// Sync operation mode. -#[derive(Copy, Clone, Debug, Eq, PartialEq)] -pub enum SyncMode { - /// Full block download and verification. - Full, - /// Download blocks and the latest state. - Fast { - /// Skip state proof download and verification. - skip_proofs: bool, - /// Download indexed transactions for recent blocks. - storage_chain_mode: bool, - }, - /// Warp sync - verify authority set transitions and the latest state. - Warp, -} - -impl SyncMode { - /// Returns if `self` is [`Self::Warp`]. - pub fn is_warp(&self) -> bool { - matches!(self, Self::Warp) - } - - /// Returns if `self` is [`Self::Fast`]. - pub fn is_fast(&self) -> bool { - matches!(self, Self::Fast { .. }) - } -} - -impl Default for SyncMode { - fn default() -> Self { - Self::Full - } -} - -/// Network service configuration. -#[derive(Clone, Debug)] -pub struct NetworkConfiguration { - /// Directory path to store network-specific configuration. None means nothing will be saved. - pub net_config_path: Option, - /// Multiaddresses to listen for incoming connections. - pub listen_addresses: Vec, - /// Multiaddresses to advertise. Detected automatically if empty. - pub public_addresses: Vec, - /// List of initial node addresses - pub boot_nodes: Vec, - /// The node key configuration, which determines the node's network identity keypair. - pub node_key: NodeKeyConfig, - /// List of request-response protocols that the node supports. - pub request_response_protocols: Vec, - /// Configuration for the default set of nodes used for block syncing and transactions. - pub default_peers_set: SetConfig, - /// Number of substreams to reserve for full nodes for block syncing and transactions. - /// Any other slot will be dedicated to light nodes. - /// - /// This value is implicitly capped to `default_set.out_peers + default_set.in_peers`. - pub default_peers_set_num_full: u32, - /// Configuration for extra sets of nodes. - pub extra_sets: Vec, - /// Client identifier. Sent over the wire for debugging purposes. - pub client_version: String, - /// Name of the node. Sent over the wire for debugging purposes. - pub node_name: String, - /// Configuration for the transport layer. - pub transport: TransportConfig, - /// Maximum number of peers to ask the same blocks in parallel. - pub max_parallel_downloads: u32, - /// Initial syncing mode. - pub sync_mode: SyncMode, - - /// True if Kademlia random discovery should be enabled. - /// - /// If true, the node will automatically randomly walk the DHT in order to find new peers. - pub enable_dht_random_walk: bool, - - /// Should we insert non-global addresses into the DHT? - pub allow_non_globals_in_dht: bool, - - /// Require iterative Kademlia DHT queries to use disjoint paths for increased resiliency in - /// the presence of potentially adversarial nodes. - pub kademlia_disjoint_query_paths: bool, - /// Enable serving block data over IPFS bitswap. - pub ipfs_server: bool, - - /// Size of Yamux receive window of all substreams. `None` for the default (256kiB). - /// Any value less than 256kiB is invalid. - /// - /// # Context - /// - /// By design, notifications substreams on top of Yamux connections only allow up to `N` bytes - /// to be transferred at a time, where `N` is the Yamux receive window size configurable here. - /// This means, in practice, that every `N` bytes must be acknowledged by the receiver before - /// the sender can send more data. The maximum bandwidth of each notifications substream is - /// therefore `N / round_trip_time`. - /// - /// It is recommended to leave this to `None`, and use a request-response protocol instead if - /// a large amount of data must be transferred. The reason why the value is configurable is - /// that some Substrate users mis-use notification protocols to send large amounts of data. - /// As such, this option isn't designed to stay and will likely get removed in the future. - /// - /// Note that configuring a value here isn't a modification of the Yamux protocol, but rather - /// a modification of the way the implementation works. Different nodes with different - /// configured values remain compatible with each other. - pub yamux_window_size: Option, -} - -impl NetworkConfiguration { - /// Create new default configuration - pub fn new, SV: Into>( - node_name: SN, - client_version: SV, - node_key: NodeKeyConfig, - net_config_path: Option, - ) -> Self { - let default_peers_set = SetConfig::default(); - Self { - net_config_path, - listen_addresses: Vec::new(), - public_addresses: Vec::new(), - boot_nodes: Vec::new(), - node_key, - request_response_protocols: Vec::new(), - default_peers_set_num_full: default_peers_set.in_peers + default_peers_set.out_peers, - default_peers_set, - extra_sets: Vec::new(), - client_version: client_version.into(), - node_name: node_name.into(), - transport: TransportConfig::Normal { enable_mdns: false, allow_private_ip: true }, - max_parallel_downloads: 5, - sync_mode: SyncMode::Full, - enable_dht_random_walk: true, - allow_non_globals_in_dht: false, - kademlia_disjoint_query_paths: false, - yamux_window_size: None, - ipfs_server: false, - } - } - - /// Create new default configuration for localhost-only connection with random port (useful for - /// testing) - pub fn new_local() -> NetworkConfiguration { - let mut config = - NetworkConfiguration::new("test-node", "test-client", Default::default(), None); - - config.listen_addresses = - vec![iter::once(multiaddr::Protocol::Ip4(Ipv4Addr::new(127, 0, 0, 1))) - .chain(iter::once(multiaddr::Protocol::Tcp(0))) - .collect()]; - - config.allow_non_globals_in_dht = true; - config - } - - /// Create new default configuration for localhost-only connection with random port (useful for - /// testing) - pub fn new_memory() -> NetworkConfiguration { - let mut config = - NetworkConfiguration::new("test-node", "test-client", Default::default(), None); - - config.listen_addresses = - vec![iter::once(multiaddr::Protocol::Ip4(Ipv4Addr::new(127, 0, 0, 1))) - .chain(iter::once(multiaddr::Protocol::Tcp(0))) - .collect()]; - - config.allow_non_globals_in_dht = true; - config - } -} - -/// The configuration of a node's secret key, describing the type of key -/// and how it is obtained. A node's identity keypair is the result of -/// the evaluation of the node key configuration. -#[derive(Clone, Debug)] -pub enum NodeKeyConfig { - /// A Ed25519 secret key configuration. - Ed25519(Secret), -} - -impl Default for NodeKeyConfig { - fn default() -> NodeKeyConfig { - Self::Ed25519(Secret::New) - } -} - -/// The options for obtaining a Ed25519 secret key. -pub type Ed25519Secret = Secret; - -/// The configuration options for obtaining a secret key `K`. -#[derive(Clone)] -pub enum Secret { - /// Use the given secret key `K`. - Input(K), - /// Read the secret key from a file. If the file does not exist, - /// it is created with a newly generated secret key `K`. The format - /// of the file is determined by `K`: - /// - /// * `ed25519::SecretKey`: An unencoded 32 bytes Ed25519 secret key. - File(PathBuf), - /// Always generate a new secret key `K`. - New, -} - -impl fmt::Debug for Secret { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { - Self::Input(_) => f.debug_tuple("Secret::Input").finish(), - Self::File(path) => f.debug_tuple("Secret::File").field(path).finish(), - Self::New => f.debug_tuple("Secret::New").finish(), - } - } -} - -impl NodeKeyConfig { - /// Evaluate a `NodeKeyConfig` to obtain an identity `Keypair`: - /// - /// * If the secret is configured as input, the corresponding keypair is returned. - /// - /// * If the secret is configured as a file, it is read from that file, if it exists. Otherwise - /// a new secret is generated and stored. In either case, the keypair obtained from the - /// secret is returned. - /// - /// * If the secret is configured to be new, it is generated and the corresponding keypair is - /// returned. - pub fn into_keypair(self) -> io::Result { - use NodeKeyConfig::*; - match self { - Ed25519(Secret::New) => Ok(Keypair::generate_ed25519()), - - Ed25519(Secret::Input(k)) => Ok(ed25519::Keypair::from(k).into()), - - Ed25519(Secret::File(f)) => get_secret( - f, - |mut b| match String::from_utf8(b.to_vec()).ok().and_then(|s| { - if s.len() == 64 { - array_bytes::hex2bytes(&s).ok() - } else { - None - } - }) { - Some(s) => ed25519::SecretKey::from_bytes(s), - _ => ed25519::SecretKey::from_bytes(&mut b), - }, - ed25519::SecretKey::generate, - |b| b.as_ref().to_vec(), - ) - .map(ed25519::Keypair::from) - .map(Keypair::from), - } - } -} - -/// Load a secret key from a file, if it exists, or generate a -/// new secret key and write it to that file. In either case, -/// the secret key is returned. -fn get_secret(file: P, parse: F, generate: G, serialize: W) -> io::Result -where - P: AsRef, - F: for<'r> FnOnce(&'r mut [u8]) -> Result, - G: FnOnce() -> K, - E: Error + Send + Sync + 'static, - W: Fn(&K) -> Vec, -{ - std::fs::read(&file) - .and_then(|mut sk_bytes| { - parse(&mut sk_bytes).map_err(|e| io::Error::new(io::ErrorKind::InvalidData, e)) - }) - .or_else(|e| { - if e.kind() == io::ErrorKind::NotFound { - file.as_ref().parent().map_or(Ok(()), fs::create_dir_all)?; - let sk = generate(); - let mut sk_vec = serialize(&sk); - write_secret_file(file, &sk_vec)?; - sk_vec.zeroize(); - Ok(sk) - } else { - Err(e) - } - }) -} - -/// Write secret bytes to a file. -fn write_secret_file

(path: P, sk_bytes: &[u8]) -> io::Result<()> -where - P: AsRef, -{ - let mut file = open_secret_file(&path)?; - file.write_all(sk_bytes) -} - -/// Opens a file containing a secret key in write mode. -#[cfg(unix)] -fn open_secret_file

(path: P) -> io::Result -where - P: AsRef, -{ - use std::os::unix::fs::OpenOptionsExt; - fs::OpenOptions::new().write(true).create_new(true).mode(0o600).open(path) -} - -/// Opens a file containing a secret key in write mode. -#[cfg(not(unix))] -fn open_secret_file

(path: P) -> Result -where - P: AsRef, -{ - fs::OpenOptions::new().write(true).create_new(true).open(path) -} - -#[cfg(test)] -mod tests { - use super::*; - use tempfile::TempDir; - - fn tempdir_with_prefix(prefix: &str) -> TempDir { - tempfile::Builder::new().prefix(prefix).tempdir().unwrap() - } - - fn secret_bytes(kp: Keypair) -> Vec { - kp.into_ed25519() - .expect("ed25519 keypair") - .secret() - .as_ref() - .iter() - .cloned() - .collect() - } - - #[test] - fn test_secret_file() { - let tmp = tempdir_with_prefix("x"); - std::fs::remove_dir(tmp.path()).unwrap(); // should be recreated - let file = tmp.path().join("x").to_path_buf(); - let kp1 = NodeKeyConfig::Ed25519(Secret::File(file.clone())).into_keypair().unwrap(); - let kp2 = NodeKeyConfig::Ed25519(Secret::File(file.clone())).into_keypair().unwrap(); - assert!(file.is_file() && secret_bytes(kp1) == secret_bytes(kp2)) - } - - #[test] - fn test_secret_input() { - let sk = ed25519::SecretKey::generate(); - let kp1 = NodeKeyConfig::Ed25519(Secret::Input(sk.clone())).into_keypair().unwrap(); - let kp2 = NodeKeyConfig::Ed25519(Secret::Input(sk)).into_keypair().unwrap(); - assert!(secret_bytes(kp1) == secret_bytes(kp2)); - } - - #[test] - fn test_secret_new() { - let kp1 = NodeKeyConfig::Ed25519(Secret::New).into_keypair().unwrap(); - let kp2 = NodeKeyConfig::Ed25519(Secret::New).into_keypair().unwrap(); - assert!(secret_bytes(kp1) != secret_bytes(kp2)); - } -} From 4fc9c9699da3680e17f5b98fb2b07d2b2ca99a5d Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Thu, 30 Mar 2023 17:41:42 +0400 Subject: [PATCH 19/48] upgrade to libp2p 0.51.2 --- client/authority-discovery/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/src/discovery.rs | 78 +- client/network/src/peer_info.rs | 53 +- client/network/src/protocol.rs | 33 +- .../src/protocol/notifications/behaviour.rs | 4538 ++++++++--------- .../src/protocol/notifications/handler.rs | 166 +- .../src/protocol/notifications/tests.rs | 11 +- client/network/src/request_responses.rs | 52 +- client/network/src/service.rs | 23 +- client/network/sync/Cargo.toml | 2 +- client/network/test/Cargo.toml | 2 +- client/network/transactions/Cargo.toml | 2 +- client/offchain/Cargo.toml | 2 +- client/peerset/Cargo.toml | 2 +- client/telemetry/Cargo.toml | 2 +- 20 files changed, 2473 insertions(+), 2505 deletions(-) diff --git a/client/authority-discovery/Cargo.toml b/client/authority-discovery/Cargo.toml index 500ec88c6fdd8..209f47b222fe4 100644 --- a/client/authority-discovery/Cargo.toml +++ b/client/authority-discovery/Cargo.toml @@ -21,7 +21,7 @@ codec = { package = "parity-scale-codec", version = "3.2.2", default-features = futures = "0.3.21" futures-timer = "3.0.1" ip_network = "0.4.1" -libp2p = { version = "0.51.1", features = ["kad"] } +libp2p = { version = "0.51.2", features = ["kad"] } libp2p-identity = { version = "0.1.0", features = ["peerid", "ed25519"] } log = "0.4.17" prost = "0.11" diff --git a/client/consensus/common/Cargo.toml b/client/consensus/common/Cargo.toml index 786b23d31ddb4..81ee9c1d926bc 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 = "0.51.1" +libp2p = "0.51.2" log = "0.4.17" mockall = "0.11.3" parking_lot = "0.12.1" diff --git a/client/network-gossip/Cargo.toml b/client/network-gossip/Cargo.toml index 15fb6e89a7483..88224542a325e 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.8.2" futures = "0.3.21" futures-timer = "3.0.1" -libp2p = "0.51.1" +libp2p = "0.51.2" log = "0.4.17" lru = "0.8.1" tracing = "0.1.29" diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index 904787e75abca..215d1ff9f9378 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -25,7 +25,7 @@ fnv = "1.0.6" futures = "0.3.21" futures-timer = "3.0.2" ip_network = "0.4.1" -libp2p = { version = "0.51.1", features = ["dns", "identify", "kad", "macros", "mdns", "mplex", "noise", "ping", "tcp", "tokio", "yamux", "websocket", "request-response"] } +libp2p = { version = "0.51.2", features = ["dns", "identify", "kad", "macros", "mdns", "mplex", "noise", "ping", "tcp", "tokio", "yamux", "websocket", "request-response"] } libp2p-identity = { version = "0.1.0", features = ["ed25519", "peerid"] } linked_hash_set = "0.1.3" log = "0.4.17" diff --git a/client/network/common/Cargo.toml b/client/network/common/Cargo.toml index cd50f213c44f9..8f4371602a37b 100644 --- a/client/network/common/Cargo.toml +++ b/client/network/common/Cargo.toml @@ -25,7 +25,7 @@ codec = { package = "parity-scale-codec", version = "3.2.2", features = [ ] } futures = "0.3.21" futures-timer = "3.0.2" -libp2p = { version = "0.51.1", features = ["request-response", "kad"] } +libp2p = { version = "0.51.2", features = ["request-response", "kad"] } libp2p-identity = { version = "0.1", features = ["ed25519", "peerid"] } prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.10.0-dev", path = "../../../utils/prometheus" } smallvec = "1.8.0" diff --git a/client/network/light/Cargo.toml b/client/network/light/Cargo.toml index 3375ba000cb84..23e2effe3556b 100644 --- a/client/network/light/Cargo.toml +++ b/client/network/light/Cargo.toml @@ -21,7 +21,7 @@ codec = { package = "parity-scale-codec", version = "3.2.2", features = [ "derive", ] } futures = "0.3.21" -libp2p = "0.51.1" +libp2p = "0.51.2" log = "0.4.16" prost = "0.11" sp-blockchain = { version = "4.0.0-dev", path = "../../../primitives/blockchain" } diff --git a/client/network/src/discovery.rs b/client/network/src/discovery.rs index 933ad933ac8ee..5e937d209e032 100644 --- a/client/network/src/discovery.rs +++ b/client/network/src/discovery.rs @@ -70,8 +70,8 @@ use libp2p::{ toggle::{Toggle, ToggleConnectionHandler}, DialFailure, FromSwarm, NewExternalAddr, }, - ConnectionDenied, ConnectionId, DialError, NetworkBehaviour, NetworkBehaviourAction, - PollParameters, THandler, THandlerInEvent, THandlerOutEvent, + ConnectionDenied, ConnectionId, DialError, NetworkBehaviour, PollParameters, THandler, + THandlerInEvent, THandlerOutEvent, ToSwarm, }, }; use libp2p_identity::PeerId; @@ -670,10 +670,10 @@ impl NetworkBehaviour for DiscoveryBehaviour { &mut self, cx: &mut Context, params: &mut impl PollParameters, - ) -> Poll>> { + ) -> Poll>> { // Immediately process the content of `discovered`. if let Some(ev) = self.pending_events.pop_front() { - return Poll::Ready(NetworkBehaviourAction::GenerateEvent(ev)) + return Poll::Ready(ToSwarm::GenerateEvent(ev)) } // Poll the stream that fires when we need to start a random Kademlia query. @@ -707,7 +707,7 @@ impl NetworkBehaviour for DiscoveryBehaviour { if actually_started { let ev = DiscoveryOut::RandomKademliaStarted; - return Poll::Ready(NetworkBehaviourAction::GenerateEvent(ev)) + return Poll::Ready(ToSwarm::GenerateEvent(ev)) } } } @@ -715,18 +715,18 @@ impl NetworkBehaviour for DiscoveryBehaviour { while let Poll::Ready(ev) = self.kademlia.poll(cx, params) { match ev { - NetworkBehaviourAction::GenerateEvent(ev) => match ev { + ToSwarm::GenerateEvent(ev) => match ev { KademliaEvent::RoutingUpdated { peer, .. } => { let ev = DiscoveryOut::Discovered(peer); - return Poll::Ready(NetworkBehaviourAction::GenerateEvent(ev)) + return Poll::Ready(ToSwarm::GenerateEvent(ev)) }, KademliaEvent::UnroutablePeer { peer, .. } => { let ev = DiscoveryOut::UnroutablePeer(peer); - return Poll::Ready(NetworkBehaviourAction::GenerateEvent(ev)) + return Poll::Ready(ToSwarm::GenerateEvent(ev)) }, KademliaEvent::RoutablePeer { peer, .. } => { let ev = DiscoveryOut::Discovered(peer); - return Poll::Ready(NetworkBehaviourAction::GenerateEvent(ev)) + return Poll::Ready(ToSwarm::GenerateEvent(ev)) }, KademliaEvent::PendingRoutablePeer { .. } | KademliaEvent::InboundRequest { .. } => { @@ -834,7 +834,7 @@ impl NetworkBehaviour for DiscoveryBehaviour { ) }, }; - return Poll::Ready(NetworkBehaviourAction::GenerateEvent(ev)) + return Poll::Ready(ToSwarm::GenerateEvent(ev)) }, KademliaEvent::OutboundQueryProgressed { result: QueryResult::PutRecord(res), @@ -856,7 +856,7 @@ impl NetworkBehaviour for DiscoveryBehaviour { ) }, }; - return Poll::Ready(NetworkBehaviourAction::GenerateEvent(ev)) + return Poll::Ready(ToSwarm::GenerateEvent(ev)) }, KademliaEvent::OutboundQueryProgressed { result: QueryResult::RepublishRecord(res), @@ -878,24 +878,13 @@ impl NetworkBehaviour for DiscoveryBehaviour { warn!(target: "sub-libp2p", "Libp2p => Unhandled Kademlia event: {:?}", e) }, }, - NetworkBehaviourAction::Dial { opts } => - return Poll::Ready(NetworkBehaviourAction::Dial { opts }), - NetworkBehaviourAction::NotifyHandler { peer_id, handler, event } => - return Poll::Ready(NetworkBehaviourAction::NotifyHandler { - peer_id, - handler, - event, - }), - NetworkBehaviourAction::ReportObservedAddr { address, score } => - return Poll::Ready(NetworkBehaviourAction::ReportObservedAddr { - address, - score, - }), - NetworkBehaviourAction::CloseConnection { peer_id, connection } => - return Poll::Ready(NetworkBehaviourAction::CloseConnection { - peer_id, - connection, - }), + ToSwarm::Dial { opts } => return Poll::Ready(ToSwarm::Dial { opts }), + ToSwarm::NotifyHandler { peer_id, handler, event } => + return Poll::Ready(ToSwarm::NotifyHandler { peer_id, handler, event }), + ToSwarm::ReportObservedAddr { address, score } => + return Poll::Ready(ToSwarm::ReportObservedAddr { address, score }), + ToSwarm::CloseConnection { peer_id, connection } => + return Poll::Ready(ToSwarm::CloseConnection { peer_id, connection }), } } @@ -903,7 +892,7 @@ impl NetworkBehaviour for DiscoveryBehaviour { if let Some(ref mut mdns) = self.mdns { while let Poll::Ready(ev) = mdns.poll(cx, params) { match ev { - NetworkBehaviourAction::GenerateEvent(event) => match event { + ToSwarm::GenerateEvent(event) => match event { mdns::Event::Discovered(list) => { if self.num_connections >= self.discovery_only_if_under_num { continue @@ -912,25 +901,21 @@ impl NetworkBehaviour for DiscoveryBehaviour { 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)) + return Poll::Ready(ToSwarm::GenerateEvent(ev)) } }, mdns::Event::Expired(_) => {}, }, - NetworkBehaviourAction::Dial { .. } => { + ToSwarm::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, - }), + ToSwarm::NotifyHandler { event, .. } => match event {}, /* `event` is an + * enum with no + * variant */ + ToSwarm::ReportObservedAddr { address, score } => + return Poll::Ready(ToSwarm::ReportObservedAddr { address, score }), + ToSwarm::CloseConnection { peer_id, connection } => + return Poll::Ready(ToSwarm::CloseConnection { peer_id, connection }), } } } @@ -971,7 +956,7 @@ mod tests { }, identity::Keypair, noise, - swarm::{Executor, Swarm, SwarmEvent}, + swarm::{Executor, Swarm, SwarmBuilder, SwarmEvent}, yamux, Multiaddr, }; use sp_core::hash::H256; @@ -1020,12 +1005,13 @@ mod tests { }; let runtime = tokio::runtime::Runtime::new().unwrap(); - let mut swarm = Swarm::with_executor( + let mut swarm = SwarmBuilder::with_executor( transport, behaviour, keypair.public().to_peer_id(), TokioExecutor(runtime), - ); + ) + .build(); let listen_addr: Multiaddr = format!("/memory/{}", rand::random::()).parse().unwrap(); diff --git a/client/network/src/peer_info.rs b/client/network/src/peer_info.rs index be43c025e4872..3989282290c58 100644 --- a/client/network/src/peer_info.rs +++ b/client/network/src/peer_info.rs @@ -34,8 +34,7 @@ use libp2p::{ ListenFailure, }, ConnectionDenied, ConnectionHandler, ConnectionId, IntoConnectionHandlerSelect, - NetworkBehaviour, NetworkBehaviourAction, PollParameters, THandler, THandlerInEvent, - THandlerOutEvent, + NetworkBehaviour, PollParameters, THandler, THandlerInEvent, THandlerOutEvent, ToSwarm, }, Multiaddr, }; @@ -406,44 +405,37 @@ impl NetworkBehaviour for PeerInfoBehaviour { &mut self, cx: &mut Context, params: &mut impl PollParameters, - ) -> Poll>> { + ) -> Poll>> { loop { match self.ping.poll(cx, params) { Poll::Pending => break, - Poll::Ready(NetworkBehaviourAction::GenerateEvent(ev)) => { + Poll::Ready(ToSwarm::GenerateEvent(ev)) => { if let PingEvent { peer, result: Ok(PingSuccess::Ping { rtt }) } = ev { self.handle_ping_report(&peer, rtt) } }, - Poll::Ready(NetworkBehaviourAction::Dial { opts }) => - return Poll::Ready(NetworkBehaviourAction::Dial { opts }), - Poll::Ready(NetworkBehaviourAction::NotifyHandler { peer_id, handler, event }) => - return Poll::Ready(NetworkBehaviourAction::NotifyHandler { + Poll::Ready(ToSwarm::Dial { opts }) => return Poll::Ready(ToSwarm::Dial { opts }), + Poll::Ready(ToSwarm::NotifyHandler { peer_id, handler, event }) => + return Poll::Ready(ToSwarm::NotifyHandler { peer_id, handler, event: Either::Left(event), }), - Poll::Ready(NetworkBehaviourAction::ReportObservedAddr { address, score }) => - return Poll::Ready(NetworkBehaviourAction::ReportObservedAddr { - address, - score, - }), - Poll::Ready(NetworkBehaviourAction::CloseConnection { peer_id, connection }) => - return Poll::Ready(NetworkBehaviourAction::CloseConnection { - peer_id, - connection, - }), + Poll::Ready(ToSwarm::ReportObservedAddr { address, score }) => + return Poll::Ready(ToSwarm::ReportObservedAddr { address, score }), + Poll::Ready(ToSwarm::CloseConnection { peer_id, connection }) => + return Poll::Ready(ToSwarm::CloseConnection { peer_id, connection }), } } loop { match self.identify.poll(cx, params) { Poll::Pending => break, - Poll::Ready(NetworkBehaviourAction::GenerateEvent(event)) => match event { + Poll::Ready(ToSwarm::GenerateEvent(event)) => match event { IdentifyEvent::Received { peer_id, info, .. } => { self.handle_identify_report(&peer_id, &info); let event = PeerInfoEvent::Identified { peer_id, info }; - return Poll::Ready(NetworkBehaviourAction::GenerateEvent(event)) + return Poll::Ready(ToSwarm::GenerateEvent(event)) }, IdentifyEvent::Error { peer_id, error } => { debug!(target: "sub-libp2p", "Identification with peer {:?} failed => {}", peer_id, error) @@ -451,24 +443,17 @@ impl NetworkBehaviour for PeerInfoBehaviour { IdentifyEvent::Pushed { .. } => {}, IdentifyEvent::Sent { .. } => {}, }, - Poll::Ready(NetworkBehaviourAction::Dial { opts }) => - return Poll::Ready(NetworkBehaviourAction::Dial { opts }), - Poll::Ready(NetworkBehaviourAction::NotifyHandler { peer_id, handler, event }) => - return Poll::Ready(NetworkBehaviourAction::NotifyHandler { + Poll::Ready(ToSwarm::Dial { opts }) => return Poll::Ready(ToSwarm::Dial { opts }), + Poll::Ready(ToSwarm::NotifyHandler { peer_id, handler, event }) => + return Poll::Ready(ToSwarm::NotifyHandler { peer_id, handler, event: Either::Right(event), }), - Poll::Ready(NetworkBehaviourAction::ReportObservedAddr { address, score }) => - return Poll::Ready(NetworkBehaviourAction::ReportObservedAddr { - address, - score, - }), - Poll::Ready(NetworkBehaviourAction::CloseConnection { peer_id, connection }) => - return Poll::Ready(NetworkBehaviourAction::CloseConnection { - peer_id, - connection, - }), + Poll::Ready(ToSwarm::ReportObservedAddr { address, score }) => + return Poll::Ready(ToSwarm::ReportObservedAddr { address, score }), + Poll::Ready(ToSwarm::CloseConnection { peer_id, connection }) => + return Poll::Ready(ToSwarm::CloseConnection { peer_id, connection }), } } diff --git a/client/network/src/protocol.rs b/client/network/src/protocol.rs index 240a39c26e087..7c9ca9de348d0 100644 --- a/client/network/src/protocol.rs +++ b/client/network/src/protocol.rs @@ -27,8 +27,8 @@ use codec::{DecodeAll, Encode}; use libp2p::{ core::Endpoint, swarm::{ - behaviour::FromSwarm, ConnectionDenied, ConnectionId, NetworkBehaviour, - NetworkBehaviourAction, PollParameters, THandler, THandlerInEvent, THandlerOutEvent, + behaviour::FromSwarm, ConnectionDenied, ConnectionId, NetworkBehaviour, PollParameters, + THandler, THandlerInEvent, THandlerOutEvent, ToSwarm, }, Multiaddr, PeerId, }; @@ -427,26 +427,21 @@ impl NetworkBehaviour for Protocol { &mut self, cx: &mut std::task::Context, params: &mut impl PollParameters, - ) -> Poll>> { + ) -> Poll>> { if let Some(message) = self.pending_messages.pop_front() { - return Poll::Ready(NetworkBehaviourAction::GenerateEvent(message)) + return Poll::Ready(ToSwarm::GenerateEvent(message)) } let event = match self.behaviour.poll(cx, params) { Poll::Pending => return Poll::Pending, - Poll::Ready(NetworkBehaviourAction::GenerateEvent(ev)) => ev, - Poll::Ready(NetworkBehaviourAction::Dial { opts }) => - return Poll::Ready(NetworkBehaviourAction::Dial { opts }), - Poll::Ready(NetworkBehaviourAction::NotifyHandler { peer_id, handler, event }) => - return Poll::Ready(NetworkBehaviourAction::NotifyHandler { - peer_id, - handler, - event, - }), - Poll::Ready(NetworkBehaviourAction::ReportObservedAddr { address, score }) => - return Poll::Ready(NetworkBehaviourAction::ReportObservedAddr { address, score }), - Poll::Ready(NetworkBehaviourAction::CloseConnection { peer_id, connection }) => - return Poll::Ready(NetworkBehaviourAction::CloseConnection { peer_id, connection }), + Poll::Ready(ToSwarm::GenerateEvent(ev)) => ev, + Poll::Ready(ToSwarm::Dial { opts }) => return Poll::Ready(ToSwarm::Dial { opts }), + Poll::Ready(ToSwarm::NotifyHandler { peer_id, handler, event }) => + return Poll::Ready(ToSwarm::NotifyHandler { peer_id, handler, event }), + Poll::Ready(ToSwarm::ReportObservedAddr { address, score }) => + return Poll::Ready(ToSwarm::ReportObservedAddr { address, score }), + Poll::Ready(ToSwarm::CloseConnection { peer_id, connection }) => + return Poll::Ready(ToSwarm::CloseConnection { peer_id, connection }), }; let outcome = match event { @@ -600,11 +595,11 @@ impl NetworkBehaviour for Protocol { }; if !matches!(outcome, CustomMessageOutcome::None) { - return Poll::Ready(NetworkBehaviourAction::GenerateEvent(outcome)) + return Poll::Ready(ToSwarm::GenerateEvent(outcome)) } if let Some(message) = self.pending_messages.pop_front() { - return Poll::Ready(NetworkBehaviourAction::GenerateEvent(message)) + return Poll::Ready(ToSwarm::GenerateEvent(message)) } // This block can only be reached if an event was pulled from the behaviour and that diff --git a/client/network/src/protocol/notifications/behaviour.rs b/client/network/src/protocol/notifications/behaviour.rs index cedab42f80ae7..e6edf621141c4 100644 --- a/client/network/src/protocol/notifications/behaviour.rs +++ b/client/network/src/protocol/notifications/behaviour.rs @@ -30,8 +30,8 @@ use libp2p::{ core::{ConnectedPoint, Endpoint, Multiaddr}, swarm::{ behaviour::{ConnectionClosed, ConnectionEstablished, DialFailure, FromSwarm}, - ConnectionDenied, ConnectionId, DialError, NetworkBehaviour, NetworkBehaviourAction, - NotifyHandler, PollParameters, THandler, THandlerInEvent, THandlerOutEvent, + ConnectionDenied, ConnectionId, DialError, NetworkBehaviour, NotifyHandler, PollParameters, + THandler, THandlerInEvent, THandlerOutEvent, ToSwarm, }, }; use libp2p_identity::PeerId; @@ -136,7 +136,7 @@ pub struct Notifications { next_incoming_index: sc_peerset::IncomingIndex, /// Events to produce from `poll()`. - events: VecDeque>, + events: VecDeque>, } /// Configuration for a notifications protocol. @@ -454,14 +454,14 @@ impl Notifications { trace!(target: "sub-libp2p", "External API <= Closed({}, {:?})", peer_id, set_id); let event = NotificationsOut::CustomProtocolClosed { peer_id: *peer_id, set_id }; - self.events.push_back(NetworkBehaviourAction::GenerateEvent(event)); + self.events.push_back(ToSwarm::GenerateEvent(event)); } for (connec_id, connec_state) in connections.iter_mut().filter(|(_, s)| matches!(s, ConnectionState::Open(_))) { trace!(target: "sub-libp2p", "Handler({:?}, {:?}) <= Close({:?})", peer_id, *connec_id, set_id); - self.events.push_back(NetworkBehaviourAction::NotifyHandler { + self.events.push_back(ToSwarm::NotifyHandler { peer_id: *peer_id, handler: NotifyHandler::One(*connec_id), event: NotifsHandlerIn::Close { protocol_index: set_id.into() }, @@ -473,7 +473,7 @@ impl Notifications { connections.iter_mut().filter(|(_, s)| matches!(s, ConnectionState::Opening)) { trace!(target: "sub-libp2p", "Handler({:?}, {:?}) <= Close({:?})", peer_id, *connec_id, set_id); - self.events.push_back(NetworkBehaviourAction::NotifyHandler { + self.events.push_back(ToSwarm::NotifyHandler { peer_id: *peer_id, handler: NotifyHandler::One(*connec_id), event: NotifsHandlerIn::Close { protocol_index: set_id.into() }, @@ -515,7 +515,7 @@ impl Notifications { .filter(|(_, s)| matches!(s, ConnectionState::OpenDesiredByRemote)) { trace!(target: "sub-libp2p", "Handler({:?}, {:?}) <= Close({:?})", peer_id, *connec_id, set_id); - self.events.push_back(NetworkBehaviourAction::NotifyHandler { + self.events.push_back(ToSwarm::NotifyHandler { peer_id: *peer_id, handler: NotifyHandler::One(*connec_id), event: NotifsHandlerIn::Close { protocol_index: set_id.into() }, @@ -559,8 +559,7 @@ impl Notifications { set_id, ); trace!(target: "sub-libp2p", "Libp2p <= Dial {}", entry.key().0); - self.events - .push_back(NetworkBehaviourAction::Dial { opts: entry.key().0.into() }); + self.events.push_back(ToSwarm::Dial { opts: entry.key().0.into() }); entry.insert(PeerState::Requested); return }, @@ -592,8 +591,7 @@ impl Notifications { set_id, ); trace!(target: "sub-libp2p", "Libp2p <= Dial {:?}", occ_entry.key()); - self.events - .push_back(NetworkBehaviourAction::Dial { opts: occ_entry.key().0.into() }); + self.events.push_back(ToSwarm::Dial { opts: occ_entry.key().0.into() }); *occ_entry.into_mut() = PeerState::Requested; }, @@ -641,7 +639,7 @@ impl Notifications { trace!(target: "sub-libp2p", "PSM => Connect({}, {:?}): Enabling connections.", occ_entry.key().0, set_id); trace!(target: "sub-libp2p", "Handler({:?}, {:?}) <= Open({:?})", peer_id, *connec_id, set_id); - self.events.push_back(NetworkBehaviourAction::NotifyHandler { + self.events.push_back(ToSwarm::NotifyHandler { peer_id, handler: NotifyHandler::One(*connec_id), event: NotifsHandlerIn::Open { protocol_index: set_id.into() }, @@ -715,7 +713,7 @@ impl Notifications { { trace!(target: "sub-libp2p", "Handler({:?}, {:?}) <= Open({:?})", occ_entry.key(), *connec_id, set_id); - self.events.push_back(NetworkBehaviourAction::NotifyHandler { + self.events.push_back(ToSwarm::NotifyHandler { peer_id: occ_entry.key().0, handler: NotifyHandler::One(*connec_id), event: NotifsHandlerIn::Open { protocol_index: set_id.into() }, @@ -798,7 +796,7 @@ impl Notifications { trace!(target: "sub-libp2p", "External API <= Closed({}, {:?})", entry.key().0, set_id); let event = NotificationsOut::CustomProtocolClosed { peer_id: entry.key().0, set_id }; - self.events.push_back(NetworkBehaviourAction::GenerateEvent(event)); + self.events.push_back(ToSwarm::GenerateEvent(event)); } for (connec_id, connec_state) in @@ -806,7 +804,7 @@ impl Notifications { { trace!(target: "sub-libp2p", "Handler({:?}, {:?}) <= Close({:?})", entry.key(), *connec_id, set_id); - self.events.push_back(NetworkBehaviourAction::NotifyHandler { + self.events.push_back(ToSwarm::NotifyHandler { peer_id: entry.key().0, handler: NotifyHandler::One(*connec_id), event: NotifsHandlerIn::Close { protocol_index: set_id.into() }, @@ -819,7 +817,7 @@ impl Notifications { { trace!(target: "sub-libp2p", "Handler({:?}, {:?}) <= Close({:?})", entry.key(), *connec_id, set_id); - self.events.push_back(NetworkBehaviourAction::NotifyHandler { + self.events.push_back(ToSwarm::NotifyHandler { peer_id: entry.key().0, handler: NotifyHandler::One(*connec_id), event: NotifsHandlerIn::Close { protocol_index: set_id.into() }, @@ -910,7 +908,7 @@ impl Notifications { { trace!(target: "sub-libp2p", "Handler({:?}, {:?}) <= Open({:?})", incoming.peer_id, *connec_id, incoming.set_id); - self.events.push_back(NetworkBehaviourAction::NotifyHandler { + self.events.push_back(ToSwarm::NotifyHandler { peer_id: incoming.peer_id, handler: NotifyHandler::One(*connec_id), event: NotifsHandlerIn::Open { protocol_index: incoming.set_id.into() }, @@ -970,7 +968,7 @@ impl Notifications { { trace!(target: "sub-libp2p", "Handler({:?}, {:?}) <= Close({:?})", incoming.peer_id, connec_id, incoming.set_id); - self.events.push_back(NetworkBehaviourAction::NotifyHandler { + self.events.push_back(ToSwarm::NotifyHandler { peer_id: incoming.peer_id, handler: NotifyHandler::One(*connec_id), event: NotifsHandlerIn::Close { protocol_index: incoming.set_id.into() }, @@ -1059,7 +1057,7 @@ impl NetworkBehaviour for Notifications { peer_id, set_id, endpoint ); trace!(target: "sub-libp2p", "Handler({:?}, {:?}) <= Open({:?})", peer_id, connection_id, set_id); - self.events.push_back(NetworkBehaviourAction::NotifyHandler { + self.events.push_back(ToSwarm::NotifyHandler { peer_id, handler: NotifyHandler::One(connection_id), event: NotifsHandlerIn::Open { protocol_index: set_id.into() }, @@ -1313,9 +1311,7 @@ impl NetworkBehaviour for Notifications { set_id, notifications_sink: replacement_sink, }; - self.events.push_back( - NetworkBehaviourAction::GenerateEvent(event), - ); + self.events.push_back(ToSwarm::GenerateEvent(event)); } } else { trace!( @@ -1326,9 +1322,7 @@ impl NetworkBehaviour for Notifications { peer_id, set_id, }; - self.events.push_back( - NetworkBehaviourAction::GenerateEvent(event), - ); + self.events.push_back(ToSwarm::GenerateEvent(event)); } } } else { @@ -1538,7 +1532,7 @@ impl NetworkBehaviour for Notifications { if let ConnectionState::Closed = *connec_state { trace!(target: "sub-libp2p", "Handler({:?}, {:?}) <= Open({:?})", peer_id, connection_id, set_id); - self.events.push_back(NetworkBehaviourAction::NotifyHandler { + self.events.push_back(ToSwarm::NotifyHandler { peer_id, handler: NotifyHandler::One(connection_id), event: NotifsHandlerIn::Open { protocol_index: set_id.into() }, @@ -1619,7 +1613,7 @@ impl NetworkBehaviour for Notifications { if let ConnectionState::Closed = *connec_state { trace!(target: "sub-libp2p", "Handler({:?}, {:?}) <= Open({:?})", peer_id, connection_id, set_id); - self.events.push_back(NetworkBehaviourAction::NotifyHandler { + self.events.push_back(ToSwarm::NotifyHandler { peer_id, handler: NotifyHandler::One(connection_id), event: NotifsHandlerIn::Open { protocol_index: set_id.into() }, @@ -1704,7 +1698,7 @@ impl NetworkBehaviour for Notifications { connections[pos].1 = ConnectionState::Closing; trace!(target: "sub-libp2p", "Handler({}, {:?}) <= Close({:?})", peer_id, connection_id, set_id); - self.events.push_back(NetworkBehaviourAction::NotifyHandler { + self.events.push_back(ToSwarm::NotifyHandler { peer_id, handler: NotifyHandler::One(connection_id), event: NotifsHandlerIn::Close { protocol_index: set_id.into() }, @@ -1722,7 +1716,7 @@ impl NetworkBehaviour for Notifications { set_id, notifications_sink: replacement_sink, }; - self.events.push_back(NetworkBehaviourAction::GenerateEvent(event)); + self.events.push_back(ToSwarm::GenerateEvent(event)); } *entry.into_mut() = PeerState::Enabled { connections }; @@ -1742,7 +1736,7 @@ impl NetworkBehaviour for Notifications { trace!(target: "sub-libp2p", "External API <= Closed({}, {:?})", peer_id, set_id); let event = NotificationsOut::CustomProtocolClosed { peer_id, set_id }; - self.events.push_back(NetworkBehaviourAction::GenerateEvent(event)); + self.events.push_back(ToSwarm::GenerateEvent(event)); } }, @@ -1826,7 +1820,7 @@ impl NetworkBehaviour for Notifications { received_handshake, notifications_sink: notifications_sink.clone(), }; - self.events.push_back(NetworkBehaviourAction::GenerateEvent(event)); + self.events.push_back(ToSwarm::GenerateEvent(event)); } *connec_state = ConnectionState::Open(notifications_sink); } else if let Some((_, connec_state)) = @@ -1973,7 +1967,7 @@ impl NetworkBehaviour for Notifications { ); let event = NotificationsOut::Notification { peer_id, set_id, message }; - self.events.push_back(NetworkBehaviourAction::GenerateEvent(event)); + self.events.push_back(ToSwarm::GenerateEvent(event)); } else { trace!( target: "sub-libp2p", @@ -1992,7 +1986,7 @@ impl NetworkBehaviour for Notifications { &mut self, cx: &mut Context, _params: &mut impl PollParameters, - ) -> Poll>> { + ) -> Poll>> { if let Some(event) = self.events.pop_front() { return Poll::Ready(event) } @@ -2039,7 +2033,7 @@ impl NetworkBehaviour for Notifications { PeerState::PendingRequest { timer, .. } if *timer == delay_id => { trace!(target: "sub-libp2p", "Libp2p <= Dial {:?} now that ban has expired", peer_id); - self.events.push_back(NetworkBehaviourAction::Dial { opts: peer_id.into() }); + self.events.push_back(ToSwarm::Dial { opts: peer_id.into() }); *peer_state = PeerState::Requested; }, @@ -2052,7 +2046,7 @@ impl NetworkBehaviour for Notifications { { trace!(target: "sub-libp2p", "Handler({}, {:?}) <= Open({:?}) (ban expired)", peer_id, *connec_id, set_id); - self.events.push_back(NetworkBehaviourAction::NotifyHandler { + self.events.push_back(ToSwarm::NotifyHandler { peer_id, handler: NotifyHandler::One(*connec_id), event: NotifsHandlerIn::Open { protocol_index: set_id.into() }, @@ -2091,7 +2085,7 @@ impl NetworkBehaviour for Notifications { #[allow(deprecated)] mod tests { use super::*; - // use crate::protocol::notifications::handler::tests::*; + use crate::protocol::notifications::handler::tests::*; use libp2p::swarm::AddressRecord; use std::{collections::HashSet, iter}; @@ -2250,2264 +2244,2260 @@ mod tests { )); } - ///////////////////////////////////////////////// - // TODO: uncomment when 0.51.2 libp2p is released - ///////////////////////////////////////////////// - - // #[test] - // fn remote_opens_connection_and_substream() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - - // if let Some(&PeerState::Disabled { ref connections, backoff_until: None }) = - // notif.peers.get(&(peer, 0.into())) - // { - // assert_eq!(connections[0], (conn, ConnectionState::Closed)); - // } else { - // panic!("invalid state"); - // } - - // // remote opens a substream, verify that peer state is updated to `Incoming` - // notif.on_connection_handler_event( - // peer, - // conn, - // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - // ); - - // if let Some(&PeerState::Incoming { ref connections, backoff_until: None }) = - // notif.peers.get(&(peer, 0.into())) - // { - // assert_eq!(connections.len(), 1); - // assert_eq!(connections[0], (conn, ConnectionState::OpenDesiredByRemote)); - // } else { - // panic!("invalid state"); - // } - - // assert!(std::matches!( - // notif.incoming.pop(), - // Some(IncomingPeer { alive: true, incoming_id: sc_peerset::IncomingIndex(0), .. }), - // )); - // } - - // #[tokio::test] - // async fn disconnect_remote_substream_before_handled_by_peerset() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // notif.on_connection_handler_event( - // peer, - // conn, - // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - // ); - // notif.disconnect_peer(&peer, 0.into()); - - // if let Some(&PeerState::Disabled { ref connections, backoff_until: None }) = - // notif.peers.get(&(peer, 0.into())) - // { - // assert_eq!(connections.len(), 1); - // assert_eq!(connections[0], (conn, ConnectionState::Closing)); - // } else { - // panic!("invalid state"); - // } - // } - - // #[test] - // fn peerset_report_connect_backoff() { - // let (mut notif, _peerset) = development_notifs(); - // let set_id = sc_peerset::SetId::from(0); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // // manually add backoff for the entry - // // - // // there is not straight-forward way of adding backoff to `PeerState::Disabled` - // // so manually adjust the value in order to progress on to the next stage. - // // This modification together with `ConnectionClosed` will conver the peer - // // state into `PeerState::Backoff`. - // if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = - // notif.peers.get_mut(&(peer, set_id)) - // { - // *backoff_until = - // Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); - // } - - // notif.on_swarm_event(FromSwarm::ConnectionClosed( - // libp2p::swarm::behaviour::ConnectionClosed { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected.clone(), - // handler: NotifsHandler::new(peer, connected, vec![]), - // remaining_established: 0usize, - // }, - // )); - - // let timer = if let Some(&PeerState::Backoff { timer_deadline, .. }) = - // notif.peers.get(&(peer, set_id)) - // { - // timer_deadline - // } else { - // panic!("invalid state"); - // }; - - // // attempt to connect the backed-off peer and verify that the request is pending - // notif.peerset_report_connect(peer, set_id); - - // if let Some(&PeerState::PendingRequest { timer_deadline, .. }) = - // notif.peers.get(&(peer, set_id)) - // { - // assert_eq!(timer, timer_deadline); - // } else { - // panic!("invalid state"); - // } - // } - - // #[test] - // fn peerset_connect_incoming() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let set_id = sc_peerset::SetId::from(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // // remote opens a substream, verify that peer state is updated to `Incoming` - // notif.on_connection_handler_event( - // peer, - // conn, - // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - // ); - - // // attempt to connect to the peer and verify that the peer state is `Enabled` - // notif.peerset_report_connect(peer, set_id); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); - // } - - // #[test] - // fn peerset_disconnect_disable_pending_enable() { - // let (mut notif, _peerset) = development_notifs(); - // let set_id = sc_peerset::SetId::from(0); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // // manually add backoff for the entry - // if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = - // notif.peers.get_mut(&(peer, set_id)) - // { - // *backoff_until = - // Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); - // } - - // // switch state to `DisabledPendingEnable` - // notif.peerset_report_connect(peer, set_id); - // assert!(std::matches!( - // notif.peers.get(&(peer, set_id)), - // Some(&PeerState::DisabledPendingEnable { .. }) - // )); - - // notif.peerset_report_disconnect(peer, set_id); - - // if let Some(PeerState::Disabled { backoff_until, .. }) = notif.peers.get(&(peer, set_id)) { - // assert!(backoff_until.is_some()); - // assert!(backoff_until.unwrap() > Instant::now()); - // } else { - // panic!("invalid state"); - // } - // } - - // #[test] - // fn peerset_disconnect_enabled() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let set_id = sc_peerset::SetId::from(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // // Set peer into `Enabled` state. - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // notif.on_connection_handler_event( - // peer, - // conn, - // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - // ); - // notif.peerset_report_connect(peer, set_id); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); - - // // disconnect peer and verify that the state is `Disabled` - // notif.peerset_report_disconnect(peer, set_id); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - // } - - // #[test] - // fn peerset_disconnect_requested() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let set_id = sc_peerset::SetId::from(0); - - // // Set peer into `Requested` state. - // notif.peerset_report_connect(peer, set_id); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Requested))); - - // // disconnect peer and verify that the state is `Disabled` - // notif.peerset_report_disconnect(peer, set_id); - // assert!(notif.peers.get(&(peer, set_id)).is_none()); - // } - - // #[test] - // fn peerset_disconnect_pending_request() { - // let (mut notif, _peerset) = development_notifs(); - // let set_id = sc_peerset::SetId::from(0); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // // manually add backoff for the entry - // if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = - // notif.peers.get_mut(&(peer, set_id)) - // { - // *backoff_until = - // Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); - // } - - // notif.on_swarm_event(FromSwarm::ConnectionClosed( - // libp2p::swarm::behaviour::ConnectionClosed { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected.clone(), - // handler: NotifsHandler::new(peer, connected, vec![]), - // remaining_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); - - // // attempt to connect the backed-off peer and verify that the request is pending - // notif.peerset_report_connect(peer, set_id); - // assert!(std::matches!( - // notif.peers.get(&(peer, set_id)), - // Some(&PeerState::PendingRequest { .. }) - // )); - - // // attempt to disconnect the backed-off peer and verify that the request is pending - // notif.peerset_report_disconnect(peer, set_id); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); - // } - - // #[test] - // fn peerset_accept_peer_not_alive() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let set_id = sc_peerset::SetId::from(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // // remote opens a substream, verify that peer state is updated to `Incoming` - // notif.on_connection_handler_event( - // peer, - // conn, - // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - // ); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - // assert!(std::matches!( - // notif.incoming[0], - // IncomingPeer { alive: true, incoming_id: sc_peerset::IncomingIndex(0), .. }, - // )); - - // notif.disconnect_peer(&peer, set_id); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - // assert!(std::matches!( - // notif.incoming[0], - // IncomingPeer { alive: false, incoming_id: sc_peerset::IncomingIndex(0), .. }, - // )); - - // notif.peerset_report_accept(sc_peerset::IncomingIndex(0)); - // assert_eq!(notif.incoming.len(), 0); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(PeerState::Disabled { .. }))); - // } - - // #[test] - // fn secondary_connection_peer_state_incoming() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let conn2 = ConnectionId::new_unchecked(1); - // let set_id = sc_peerset::SetId::from(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // notif.on_connection_handler_event( - // peer, - // conn, - // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - // ); - // if let Some(&PeerState::Incoming { ref connections, .. }) = notif.peers.get(&(peer, set_id)) - // { - // assert_eq!(connections.len(), 1); - // assert_eq!(connections[0], (conn, ConnectionState::OpenDesiredByRemote)); - // } else { - // panic!("invalid state"); - // } - - // // add another connection - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn2, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - - // if let Some(&PeerState::Incoming { ref connections, .. }) = notif.peers.get(&(peer, set_id)) - // { - // assert_eq!(connections.len(), 2); - // assert_eq!(connections[0], (conn, ConnectionState::OpenDesiredByRemote)); - // assert_eq!(connections[1], (conn2, ConnectionState::Closed)); - // } else { - // panic!("invalid state"); - // } - // } - - // #[test] - // fn close_connection_for_disabled_peer() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let set_id = sc_peerset::SetId::from(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // notif.on_swarm_event(FromSwarm::ConnectionClosed( - // libp2p::swarm::behaviour::ConnectionClosed { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected.clone(), - // handler: NotifsHandler::new(peer, connected, vec![]), - // remaining_established: 0usize, - // }, - // )); - // assert!(notif.peers.get(&(peer, set_id)).is_none()); - // } - - // #[test] - // fn close_connection_for_incoming_peer_one_connection() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let set_id = sc_peerset::SetId::from(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // notif.on_connection_handler_event( - // peer, - // conn, - // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - // ); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - // notif.on_swarm_event(FromSwarm::ConnectionClosed( - // libp2p::swarm::behaviour::ConnectionClosed { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected.clone(), - // handler: NotifsHandler::new(peer, connected, vec![]), - // remaining_established: 0usize, - // }, - // )); - // assert!(notif.peers.get(&(peer, set_id)).is_none()); - // assert!(std::matches!( - // notif.incoming[0], - // IncomingPeer { alive: false, incoming_id: sc_peerset::IncomingIndex(0), .. }, - // )); - // } - - // #[test] - // fn close_connection_for_incoming_peer_two_connections() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let conn1 = ConnectionId::new_unchecked(1); - // let set_id = sc_peerset::SetId::from(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - // let mut conns = SmallVec::< - // [(ConnectionId, ConnectionState); crate::MAX_CONNECTIONS_PER_PEER], - // >::from(vec![(conn, ConnectionState::Closed)]); - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // notif.on_connection_handler_event( - // peer, - // conn, - // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - // ); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn1, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // conns.push((conn1, ConnectionState::Closed)); - - // if let Some(PeerState::Incoming { ref connections, .. }) = notif.peers.get(&(peer, set_id)) - // { - // assert_eq!(connections.len(), 2); - // assert_eq!(connections[0], (conn, ConnectionState::OpenDesiredByRemote)); - // assert_eq!(connections[1], (conn1, ConnectionState::Closed)); - // } - - // notif.on_swarm_event(FromSwarm::ConnectionClosed( - // libp2p::swarm::behaviour::ConnectionClosed { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected.clone(), - // handler: NotifsHandler::new(peer, connected, vec![]), - // remaining_established: 0usize, - // }, - // )); - - // if let Some(&PeerState::Disabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) - // { - // assert_eq!(connections.len(), 1); - // assert_eq!(connections[0], (conn1, ConnectionState::Closed)); - // } else { - // panic!("invalid state"); - // } - // } - - // #[test] - // fn connection_and_substream_open() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let set_id = sc_peerset::SetId::from(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - // let mut conn_yielder = ConnectionYielder::new(); - - // // move the peer to `Enabled` state - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // notif.on_connection_handler_event( - // peer, - // conn, - // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - // ); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - // notif.peerset_report_connect(peer, set_id); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); - - // // open new substream - // let event = conn_yielder.open_substream(peer, 0, connected, vec![1, 2, 3, 4]); - - // notif.on_connection_handler_event(peer, conn, event); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); - - // if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { - // assert_eq!(connections.len(), 1); - // assert_eq!(connections[0].0, conn); - // assert!(std::matches!(connections[0].1, ConnectionState::Open(_))); - // } - - // assert!(std::matches!( - // notif.events[notif.events.len() - 1], - // NetworkBehaviourAction::GenerateEvent(NotificationsOut::CustomProtocolOpen { .. }) - // )); - // } - - // #[test] - // fn connection_closed_sink_replaced() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let conn1 = ConnectionId::new_unchecked(0); - // let conn2 = ConnectionId::new_unchecked(1); - // let set_id = sc_peerset::SetId::from(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - // let mut conn_yielder = ConnectionYielder::new(); - - // // open two connections - // for conn_id in vec![conn1, conn2] { - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn_id, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // } - - // if let Some(&PeerState::Disabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) - // { - // assert_eq!(connections[0], (conn1, ConnectionState::Closed)); - // assert_eq!(connections[1], (conn2, ConnectionState::Closed)); - // } else { - // panic!("invalid state"); - // } - - // // open substreams on both active connections - // notif.peerset_report_connect(peer, set_id); - // notif.on_connection_handler_event( - // peer, - // conn2, - // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - // ); - - // if let Some(&PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) - // { - // assert_eq!(connections[0], (conn1, ConnectionState::Opening)); - // assert_eq!(connections[1], (conn2, ConnectionState::Opening)); - // } else { - // panic!("invalid state"); - // } - - // // add two new substreams, one for each connection and verify that both are in open state - // for conn in vec![conn1, conn2].iter() { - // notif.on_connection_handler_event( - // peer, - // *conn, - // conn_yielder.open_substream(peer, 0, connected.clone(), vec![1, 2, 3, 4]), - // ); - // } - - // if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { - // assert_eq!(connections[0].0, conn1); - // assert!(std::matches!(connections[0].1, ConnectionState::Open(_))); - // assert_eq!(connections[1].0, conn2); - // assert!(std::matches!(connections[1].1, ConnectionState::Open(_))); - // } else { - // panic!("invalid state"); - // } - - // // check peer information - // assert_eq!(notif.open_peers().collect::>(), vec![&peer],); - // assert_eq!(notif.reserved_peers(set_id).collect::>(), Vec::<&PeerId>::new(),); - // assert_eq!(notif.num_discovered_peers(), 0usize); - - // // close the other connection and verify that notification replacement event is emitted - // notif.on_swarm_event(FromSwarm::ConnectionClosed( - // libp2p::swarm::behaviour::ConnectionClosed { - // peer_id: peer, - // connection_id: conn1, - // endpoint: &connected.clone(), - // handler: NotifsHandler::new(peer, connected, vec![]), - // remaining_established: 0usize, - // }, - // )); - - // if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { - // assert_eq!(connections.len(), 1); - // assert_eq!(connections[0].0, conn2); - // assert!(std::matches!(connections[0].1, ConnectionState::Open(_))); - // } else { - // panic!("invalid state"); - // } - - // assert!(std::matches!( - // notif.events[notif.events.len() - 1], - // NetworkBehaviourAction::GenerateEvent(NotificationsOut::CustomProtocolReplaced { .. }) - // )); - // } - - // #[test] - // fn dial_failure_for_requested_peer() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let set_id = sc_peerset::SetId::from(0); - - // // Set peer into `Requested` state. - // notif.peerset_report_connect(peer, set_id); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Requested))); - - // notif.on_swarm_event(FromSwarm::DialFailure(libp2p::swarm::behaviour::DialFailure { - // peer_id: Some(peer), - // error: &libp2p::swarm::DialError::Banned, - // connection_id: ConnectionId::new_unchecked(1337), - // })); - - // if let Some(PeerState::Backoff { timer_deadline, .. }) = notif.peers.get(&(peer, set_id)) { - // assert!(timer_deadline > &Instant::now()); - // } else { - // panic!("invalid state"); - // } - // } - - // #[tokio::test] - // async fn write_notification() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let set_id = sc_peerset::SetId::from(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - // let mut conn_yielder = ConnectionYielder::new(); - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // notif.peerset_report_connect(peer, set_id); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); - - // notif.on_connection_handler_event( - // peer, - // conn, - // conn_yielder.open_substream(peer, 0, connected, vec![1, 2, 3, 4]), - // ); - - // if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { - // assert_eq!(connections[0].0, conn); - // assert!(std::matches!(connections[0].1, ConnectionState::Open(_))); - // } else { - // panic!("invalid state"); - // } - - // notif - // .peers - // .get(&(peer, set_id)) - // .unwrap() - // .get_open() - // .unwrap() - // .send_sync_notification(vec![1, 3, 3, 7]); - // assert_eq!(conn_yielder.get_next_event(peer, set_id.into()).await, Some(vec![1, 3, 3, 7])); - // } - - // #[test] - // fn peerset_report_connect_backoff_expired() { - // let (mut notif, _peerset) = development_notifs(); - // let set_id = sc_peerset::SetId::from(0); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - // let backoff_duration = Duration::from_millis(100); - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // // manually add backoff for the entry - // if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = - // notif.peers.get_mut(&(peer, set_id)) - // { - // *backoff_until = Some(Instant::now().checked_add(backoff_duration).unwrap()); - // } - - // notif.on_swarm_event(FromSwarm::ConnectionClosed( - // libp2p::swarm::behaviour::ConnectionClosed { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected.clone(), - // handler: NotifsHandler::new(peer, connected, vec![]), - // remaining_established: 0usize, - // }, - // )); - - // // wait until the backoff time has passed - // std::thread::sleep(backoff_duration * 2); - - // // attempt to connect the backed-off peer and verify that the request is pending - // notif.peerset_report_connect(peer, set_id); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Requested { .. }))) - // } - - // #[test] - // fn peerset_report_disconnect_disabled() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let set_id = sc_peerset::SetId::from(0); - // let conn = ConnectionId::new_unchecked(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // notif.peerset_report_disconnect(peer, set_id); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - // } - - // #[test] - // fn peerset_report_disconnect_backoff() { - // let (mut notif, _peerset) = development_notifs(); - // let set_id = sc_peerset::SetId::from(0); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - // let backoff_duration = Duration::from_secs(2); - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // // manually add backoff for the entry - // if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = - // notif.peers.get_mut(&(peer, set_id)) - // { - // *backoff_until = Some(Instant::now().checked_add(backoff_duration).unwrap()); - // } - - // notif.on_swarm_event(FromSwarm::ConnectionClosed( - // libp2p::swarm::behaviour::ConnectionClosed { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected.clone(), - // handler: NotifsHandler::new(peer, connected, vec![]), - // remaining_established: 0usize, - // }, - // )); - - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); - - // notif.peerset_report_disconnect(peer, set_id); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); - // } - - // #[test] - // fn peer_is_backed_off_if_both_connections_get_closed_while_peer_is_disabled_with_back_off() { - // let (mut notif, _peerset) = development_notifs(); - // let set_id = sc_peerset::SetId::from(0); - // let peer = PeerId::random(); - // let conn1 = ConnectionId::new_unchecked(0); - // let conn2 = ConnectionId::new_unchecked(1); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn1, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn2, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // // manually add backoff for the entry - // if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = - // notif.peers.get_mut(&(peer, set_id)) - // { - // *backoff_until = - // Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); - // } - - // // switch state to `DisabledPendingEnable` - // notif.peerset_report_connect(peer, set_id); - // assert!(std::matches!( - // notif.peers.get(&(peer, set_id)), - // Some(&PeerState::DisabledPendingEnable { .. }) - // )); - - // notif.on_swarm_event(FromSwarm::ConnectionClosed( - // libp2p::swarm::behaviour::ConnectionClosed { - // peer_id: peer, - // connection_id: conn1, - // endpoint: &connected.clone(), - // handler: NotifsHandler::new(peer, connected.clone(), vec![]), - // remaining_established: 0usize, - // }, - // )); - // assert!(std::matches!( - // notif.peers.get(&(peer, set_id)), - // Some(&PeerState::DisabledPendingEnable { .. }) - // )); - - // notif.on_swarm_event(FromSwarm::ConnectionClosed( - // libp2p::swarm::behaviour::ConnectionClosed { - // peer_id: peer, - // connection_id: conn2, - // endpoint: &connected.clone(), - // handler: NotifsHandler::new(peer, connected, vec![]), - // remaining_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); - // } - - // #[test] - // fn inject_connection_closed_incoming_with_backoff() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let set_id = sc_peerset::SetId::from(0); - // let conn = ConnectionId::new_unchecked(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // // remote opens a substream, verify that peer state is updated to `Incoming` - // notif.on_connection_handler_event( - // peer, - // conn, - // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - // ); - - // // manually add backoff for the entry - // if let Some(&mut PeerState::Incoming { ref mut backoff_until, .. }) = - // notif.peers.get_mut(&(peer, 0.into())) - // { - // *backoff_until = - // Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); - // } else { - // panic!("invalid state"); - // } - - // notif.on_swarm_event(FromSwarm::ConnectionClosed( - // libp2p::swarm::behaviour::ConnectionClosed { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected.clone(), - // handler: NotifsHandler::new(peer, connected, vec![]), - // remaining_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); - // } - - // #[test] - // fn two_connections_inactive_connection_gets_closed_peer_state_is_still_incoming() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let conn1 = ConnectionId::new_unchecked(0); - // let conn2 = ConnectionId::new_unchecked(1); - // let set_id = sc_peerset::SetId::from(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // // open two connections - // for conn_id in vec![conn1, conn2] { - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn_id, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // } - - // if let Some(&PeerState::Disabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) - // { - // assert_eq!(connections[0], (conn1, ConnectionState::Closed)); - // assert_eq!(connections[1], (conn2, ConnectionState::Closed)); - // } else { - // panic!("invalid state"); - // } - - // // remote opens a substream, verify that peer state is updated to `Incoming` - // notif.on_connection_handler_event( - // peer, - // conn1, - // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - // ); - // assert!(std::matches!( - // notif.peers.get_mut(&(peer, 0.into())), - // Some(&mut PeerState::Incoming { .. }) - // )); - - // notif.on_swarm_event(FromSwarm::ConnectionClosed( - // libp2p::swarm::behaviour::ConnectionClosed { - // peer_id: peer, - // connection_id: conn2, - // endpoint: &connected.clone(), - // handler: NotifsHandler::new(peer, connected, vec![]), - // remaining_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - // } - - // #[test] - // fn two_connections_active_connection_gets_closed_peer_state_is_disabled() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let conn1 = ConnectionId::new_unchecked(0); - // let conn2 = ConnectionId::new_unchecked(1); - // let set_id = sc_peerset::SetId::from(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // // open two connections - // for conn_id in vec![conn1, conn2] { - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn_id, - // endpoint: &ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // } - - // if let Some(&PeerState::Disabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) - // { - // assert_eq!(connections[0], (conn1, ConnectionState::Closed)); - // assert_eq!(connections[1], (conn2, ConnectionState::Closed)); - // } else { - // panic!("invalid state"); - // } - - // // remote opens a substream, verify that peer state is updated to `Incoming` - // notif.on_connection_handler_event( - // peer, - // conn1, - // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - // ); - // assert!(std::matches!( - // notif.peers.get_mut(&(peer, 0.into())), - // Some(PeerState::Incoming { .. }) - // )); - - // notif.on_swarm_event(FromSwarm::ConnectionClosed( - // libp2p::swarm::behaviour::ConnectionClosed { - // peer_id: peer, - // connection_id: conn1, - // endpoint: &connected.clone(), - // handler: NotifsHandler::new(peer, connected, vec![]), - // remaining_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - // } - - // #[test] - // fn inject_connection_closed_for_active_connection() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let conn1 = ConnectionId::new_unchecked(0); - // let conn2 = ConnectionId::new_unchecked(1); - // let set_id = sc_peerset::SetId::from(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - // let mut conn_yielder = ConnectionYielder::new(); - - // // open two connections - // for conn_id in vec![conn1, conn2] { - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn_id, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // } - - // if let Some(&PeerState::Disabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) - // { - // assert_eq!(connections[0], (conn1, ConnectionState::Closed)); - // assert_eq!(connections[1], (conn2, ConnectionState::Closed)); - // } else { - // panic!("invalid state"); - // } - - // // open substreams on both active connections - // notif.peerset_report_connect(peer, set_id); - - // if let Some(&PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) - // { - // assert_eq!(connections[0], (conn1, ConnectionState::Opening)); - // assert_eq!(connections[1], (conn2, ConnectionState::Closed)); - // } else { - // panic!("invalid state"); - // } - - // notif.on_connection_handler_event( - // peer, - // conn1, - // conn_yielder.open_substream(peer, 0, connected.clone(), vec![1, 2, 3, 4]), - // ); - - // if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { - // assert!(std::matches!(connections[0].1, ConnectionState::Open(_))); - // assert_eq!(connections[0].0, conn1); - // assert_eq!(connections[1], (conn2, ConnectionState::Closed)); - // } else { - // panic!("invalid state"); - // } - - // notif.on_swarm_event(FromSwarm::ConnectionClosed( - // libp2p::swarm::behaviour::ConnectionClosed { - // peer_id: peer, - // connection_id: conn1, - // endpoint: &connected.clone(), - // handler: NotifsHandler::new(peer, connected, vec![]), - // remaining_established: 0usize, - // }, - // )); - // } - - // #[test] - // fn inject_dial_failure_for_pending_request() { - // let (mut notif, _peerset) = development_notifs(); - // let set_id = sc_peerset::SetId::from(0); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // // manually add backoff for the entry - // if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = - // notif.peers.get_mut(&(peer, set_id)) - // { - // *backoff_until = - // Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); - // } - - // notif.on_swarm_event(FromSwarm::ConnectionClosed( - // libp2p::swarm::behaviour::ConnectionClosed { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected.clone(), - // handler: NotifsHandler::new(peer, connected, vec![]), - // remaining_established: 0usize, - // }, - // )); - - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); - - // // attempt to connect the backed-off peer and verify that the request is pending - // notif.peerset_report_connect(peer, set_id); - // assert!(std::matches!( - // notif.peers.get(&(peer, set_id)), - // Some(&PeerState::PendingRequest { .. }) - // )); - - // let now = Instant::now(); - // notif.on_swarm_event(FromSwarm::DialFailure(libp2p::swarm::behaviour::DialFailure { - // peer_id: Some(peer), - // error: &libp2p::swarm::DialError::Banned, - // connection_id: ConnectionId::new_unchecked(0), - // })); - - // if let Some(PeerState::PendingRequest { ref timer_deadline, .. }) = - // notif.peers.get(&(peer, set_id)) - // { - // assert!(timer_deadline > &(now + std::time::Duration::from_secs(5))); - // } - // } - - // #[test] - // fn peerstate_incoming_open_desired_by_remote() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let set_id = sc_peerset::SetId::from(0); - // let conn1 = ConnectionId::new_unchecked(0); - // let conn2 = ConnectionId::new_unchecked(1); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn1, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn2, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // // remote opens a substream, verify that peer state is updated to `Incoming` - // notif.on_connection_handler_event( - // peer, - // conn1, - // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - // ); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - // // add another open event from remote - // notif.on_connection_handler_event( - // peer, - // conn2, - // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - // ); - - // if let Some(PeerState::Incoming { ref connections, .. }) = notif.peers.get(&(peer, set_id)) - // { - // assert_eq!(connections[0], (conn1, ConnectionState::OpenDesiredByRemote)); - // assert_eq!(connections[1], (conn2, ConnectionState::OpenDesiredByRemote)); - // } - // } - - // #[tokio::test] - // async fn remove_backoff_peer_after_timeout() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let set_id = sc_peerset::SetId::from(0); - // let conn = ConnectionId::new_unchecked(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - - // if let Some(&mut PeerState::Disabled { ref mut backoff_until, .. }) = - // notif.peers.get_mut(&(peer, 0.into())) - // { - // *backoff_until = - // Some(Instant::now().checked_add(std::time::Duration::from_millis(100)).unwrap()); - // } else { - // panic!("invalid state"); - // } - - // notif.on_swarm_event(FromSwarm::ConnectionClosed( - // libp2p::swarm::behaviour::ConnectionClosed { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected.clone(), - // handler: NotifsHandler::new(peer, connected, vec![]), - // remaining_established: 0usize, - // }, - // )); - - // let until = if let Some(&PeerState::Backoff { timer_deadline, .. }) = - // notif.peers.get(&(peer, set_id)) - // { - // timer_deadline - // } else { - // panic!("invalid state"); - // }; - - // if until > Instant::now() { - // std::thread::sleep(until - Instant::now()); - // } - - // assert!(notif.peers.get(&(peer, set_id)).is_some()); - - // if tokio::time::timeout(Duration::from_secs(5), async { - // let mut params = MockPollParams { peer_id: PeerId::random(), addr: Multiaddr::empty() }; - - // loop { - // futures::future::poll_fn(|cx| { - // let _ = notif.poll(cx, &mut params); - // Poll::Ready(()) - // }) - // .await; - - // if notif.peers.get(&(peer, set_id)).is_none() { - // break - // } - // } - // }) - // .await - // .is_err() - // { - // panic!("backoff peer was not removed in time"); - // } - - // assert!(notif.peers.get(&(peer, set_id)).is_none()); - // } - - // #[tokio::test] - // async fn reschedule_disabled_pending_enable_when_connection_not_closed() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let set_id = sc_peerset::SetId::from(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - // let mut conn_yielder = ConnectionYielder::new(); - - // // move the peer to `Enabled` state - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // // open substream - // notif.on_connection_handler_event( - // peer, - // conn, - // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - // ); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - // notif.peerset_report_connect(peer, set_id); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); - - // let event = conn_yielder.open_substream(peer, 0, connected, vec![1, 2, 3, 4]); - - // notif.on_connection_handler_event(peer, conn, event); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); - - // if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { - // assert!(std::matches!(connections[0], (_, ConnectionState::Open(_)))); - // assert_eq!(connections[0].0, conn); - // } else { - // panic!("invalid state"); - // } - - // notif.peerset_report_disconnect(peer, set_id); - - // if let Some(PeerState::Disabled { ref connections, ref mut backoff_until }) = - // notif.peers.get_mut(&(peer, set_id)) - // { - // assert!(std::matches!(connections[0], (_, ConnectionState::Closing))); - // assert_eq!(connections[0].0, conn); - - // *backoff_until = - // Some(Instant::now().checked_add(std::time::Duration::from_secs(2)).unwrap()); - // } else { - // panic!("invalid state"); - // } - - // notif.peerset_report_connect(peer, set_id); - - // let prev_instant = - // if let Some(PeerState::DisabledPendingEnable { - // ref connections, timer_deadline, .. - // }) = notif.peers.get(&(peer, set_id)) - // { - // assert!(std::matches!(connections[0], (_, ConnectionState::Closing))); - // assert_eq!(connections[0].0, conn); - - // *timer_deadline - // } else { - // panic!("invalid state"); - // }; - - // // one of the peers has an active backoff timer so poll the notifications code until - // // the timer has expired. Because the connection is still in the state of `Closing`, - // // verify that the code continues to keep the peer disabled by resetting the timer - // // after the first one expired. - // if tokio::time::timeout(Duration::from_secs(5), async { - // let mut params = MockPollParams { peer_id: PeerId::random(), addr: Multiaddr::empty() }; - - // loop { - // futures::future::poll_fn(|cx| { - // let _ = notif.poll(cx, &mut params); - // Poll::Ready(()) - // }) - // .await; - - // if let Some(PeerState::DisabledPendingEnable { - // timer_deadline, connections, .. - // }) = notif.peers.get(&(peer, set_id)) - // { - // assert!(std::matches!(connections[0], (_, ConnectionState::Closing))); - - // if timer_deadline != &prev_instant { - // break - // } - // } else { - // panic!("invalid state"); - // } - // } - // }) - // .await - // .is_err() - // { - // panic!("backoff peer was not removed in time"); - // } - // } - - // #[test] - // #[should_panic] - // #[cfg(debug_assertions)] - // fn peerset_report_connect_with_enabled_peer() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let set_id = sc_peerset::SetId::from(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - // let mut conn_yielder = ConnectionYielder::new(); - - // // move the peer to `Enabled` state - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // notif.on_connection_handler_event( - // peer, - // conn, - // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - // ); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - // notif.peerset_report_connect(peer, set_id); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); - - // let event = conn_yielder.open_substream(peer, 0, connected, vec![1, 2, 3, 4]); - - // notif.on_connection_handler_event(peer, conn, event); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); - - // if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { - // assert!(std::matches!(connections[0], (_, ConnectionState::Open(_)))); - // assert_eq!(connections[0].0, conn); - // } else { - // panic!("invalid state"); - // } - - // notif.peerset_report_connect(peer, set_id); - // } - - // #[test] - // #[should_panic] - // #[cfg(debug_assertions)] - // fn peerset_report_connect_with_disabled_pending_enable_peer() { - // let (mut notif, _peerset) = development_notifs(); - // let set_id = sc_peerset::SetId::from(0); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // // manually add backoff for the entry - // if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = - // notif.peers.get_mut(&(peer, set_id)) - // { - // *backoff_until = - // Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); - // } - - // // switch state to `DisabledPendingEnable` - // notif.peerset_report_connect(peer, set_id); - // assert!(std::matches!( - // notif.peers.get(&(peer, set_id)), - // Some(&PeerState::DisabledPendingEnable { .. }) - // )); - - // notif.peerset_report_connect(peer, set_id); - // } - - // #[test] - // #[should_panic] - // #[cfg(debug_assertions)] - // fn peerset_report_connect_with_requested_peer() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let set_id = sc_peerset::SetId::from(0); - - // // Set peer into `Requested` state. - // notif.peerset_report_connect(peer, set_id); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Requested))); - - // notif.peerset_report_connect(peer, set_id); - // } - - // #[test] - // #[should_panic] - // #[cfg(debug_assertions)] - // fn peerset_report_connect_with_pending_requested() { - // let (mut notif, _peerset) = development_notifs(); - // let set_id = sc_peerset::SetId::from(0); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // // manually add backoff for the entry - // if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = - // notif.peers.get_mut(&(peer, set_id)) - // { - // *backoff_until = - // Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); - // } - - // notif.on_swarm_event(FromSwarm::ConnectionClosed( - // libp2p::swarm::behaviour::ConnectionClosed { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected.clone(), - // handler: NotifsHandler::new(peer, connected, vec![]), - // remaining_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); - - // // attempt to connect the backed-off peer and verify that the request is pending - // notif.peerset_report_connect(peer, set_id); - // assert!(std::matches!( - // notif.peers.get(&(peer, set_id)), - // Some(&PeerState::PendingRequest { .. }) - // )); - - // notif.peerset_report_connect(peer, set_id); - // } - - // #[test] - // #[should_panic] - // #[cfg(debug_assertions)] - // fn peerset_report_disconnect_with_incoming_peer() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let set_id = sc_peerset::SetId::from(0); - // let conn = ConnectionId::new_unchecked(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // // remote opens a substream, verify that peer state is updated to `Incoming` - // notif.on_connection_handler_event( - // peer, - // conn, - // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - // ); - - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - // notif.peerset_report_disconnect(peer, set_id); - // } - - // #[test] - // #[should_panic] - // #[cfg(debug_assertions)] - // fn peerset_report_accept_incoming_peer() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let set_id = sc_peerset::SetId::from(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // // remote opens a substream, verify that peer state is updated to `Incoming` - // notif.on_connection_handler_event( - // peer, - // conn, - // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - // ); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - // assert!(std::matches!( - // notif.incoming[0], - // IncomingPeer { alive: true, incoming_id: sc_peerset::IncomingIndex(0), .. }, - // )); - - // notif.peers.remove(&(peer, set_id)); - // notif.peerset_report_accept(sc_peerset::IncomingIndex(0)); - // } - - // #[test] - // #[should_panic] - // #[cfg(debug_assertions)] - // fn peerset_report_accept_not_incoming_peer() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let set_id = sc_peerset::SetId::from(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - // let mut conn_yielder = ConnectionYielder::new(); - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // // remote opens a substream, verify that peer state is updated to `Incoming` - // notif.on_connection_handler_event( - // peer, - // conn, - // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - // ); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - // assert!(std::matches!( - // notif.incoming[0], - // IncomingPeer { alive: true, incoming_id: sc_peerset::IncomingIndex(0), .. }, - // )); - - // notif.peerset_report_connect(peer, set_id); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); - - // let event = conn_yielder.open_substream(peer, 0, connected, vec![1, 2, 3, 4]); - // notif.on_connection_handler_event(peer, conn, event); - - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); - // notif.incoming[0].alive = true; - // notif.peerset_report_accept(sc_peerset::IncomingIndex(0)); - // } - - // #[test] - // #[should_panic] - // #[cfg(debug_assertions)] - // fn inject_connection_closed_non_existent_peer() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let endpoint = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionClosed( - // libp2p::swarm::behaviour::ConnectionClosed { - // peer_id: peer, - // connection_id: ConnectionId::new_unchecked(0), - // endpoint: &endpoint.clone(), - // handler: NotifsHandler::new(peer, endpoint, vec![]), - // remaining_established: 0usize, - // }, - // )); - // } + #[test] + fn remote_opens_connection_and_substream() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + + if let Some(&PeerState::Disabled { ref connections, backoff_until: None }) = + notif.peers.get(&(peer, 0.into())) + { + assert_eq!(connections[0], (conn, ConnectionState::Closed)); + } else { + panic!("invalid state"); + } + + // remote opens a substream, verify that peer state is updated to `Incoming` + notif.on_connection_handler_event( + peer, + conn, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + ); + + if let Some(&PeerState::Incoming { ref connections, backoff_until: None }) = + notif.peers.get(&(peer, 0.into())) + { + assert_eq!(connections.len(), 1); + assert_eq!(connections[0], (conn, ConnectionState::OpenDesiredByRemote)); + } else { + panic!("invalid state"); + } + + assert!(std::matches!( + notif.incoming.pop(), + Some(IncomingPeer { alive: true, incoming_id: sc_peerset::IncomingIndex(0), .. }), + )); + } + + #[tokio::test] + async fn disconnect_remote_substream_before_handled_by_peerset() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + notif.on_connection_handler_event( + peer, + conn, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + ); + notif.disconnect_peer(&peer, 0.into()); + + if let Some(&PeerState::Disabled { ref connections, backoff_until: None }) = + notif.peers.get(&(peer, 0.into())) + { + assert_eq!(connections.len(), 1); + assert_eq!(connections[0], (conn, ConnectionState::Closing)); + } else { + panic!("invalid state"); + } + } + + #[test] + fn peerset_report_connect_backoff() { + let (mut notif, _peerset) = development_notifs(); + let set_id = sc_peerset::SetId::from(0); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // manually add backoff for the entry + // + // there is not straight-forward way of adding backoff to `PeerState::Disabled` + // so manually adjust the value in order to progress on to the next stage. + // This modification together with `ConnectionClosed` will conver the peer + // state into `PeerState::Backoff`. + if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = + notif.peers.get_mut(&(peer, set_id)) + { + *backoff_until = + Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); + } + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: conn, + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected, vec![]), + remaining_established: 0usize, + }, + )); + + let timer = if let Some(&PeerState::Backoff { timer_deadline, .. }) = + notif.peers.get(&(peer, set_id)) + { + timer_deadline + } else { + panic!("invalid state"); + }; + + // attempt to connect the backed-off peer and verify that the request is pending + notif.peerset_report_connect(peer, set_id); + + if let Some(&PeerState::PendingRequest { timer_deadline, .. }) = + notif.peers.get(&(peer, set_id)) + { + assert_eq!(timer, timer_deadline); + } else { + panic!("invalid state"); + } + } #[test] - fn disconnect_non_existent_peer() { + fn peerset_connect_incoming() { let (mut notif, _peerset) = development_notifs(); let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); let set_id = sc_peerset::SetId::from(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // remote opens a substream, verify that peer state is updated to `Incoming` + notif.on_connection_handler_event( + peer, + conn, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + ); + + // attempt to connect to the peer and verify that the peer state is `Enabled` + notif.peerset_report_connect(peer, set_id); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); + } + + #[test] + fn peerset_disconnect_disable_pending_enable() { + let (mut notif, _peerset) = development_notifs(); + let set_id = sc_peerset::SetId::from(0); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // manually add backoff for the entry + if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = + notif.peers.get_mut(&(peer, set_id)) + { + *backoff_until = + Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); + } + + // switch state to `DisabledPendingEnable` + notif.peerset_report_connect(peer, set_id); + assert!(std::matches!( + notif.peers.get(&(peer, set_id)), + Some(&PeerState::DisabledPendingEnable { .. }) + )); notif.peerset_report_disconnect(peer, set_id); - assert!(notif.peers.is_empty()); - assert!(notif.incoming.is_empty()); + if let Some(PeerState::Disabled { backoff_until, .. }) = notif.peers.get(&(peer, set_id)) { + assert!(backoff_until.is_some()); + assert!(backoff_until.unwrap() > Instant::now()); + } else { + panic!("invalid state"); + } } #[test] - fn accept_non_existent_connection() { + fn peerset_disconnect_enabled() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let set_id = sc_peerset::SetId::from(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + // Set peer into `Enabled` state. + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + notif.on_connection_handler_event( + peer, + conn, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + ); + notif.peerset_report_connect(peer, set_id); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); + + // disconnect peer and verify that the state is `Disabled` + notif.peerset_report_disconnect(peer, set_id); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + } + + #[test] + fn peerset_disconnect_requested() { let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let set_id = sc_peerset::SetId::from(0); - notif.peerset_report_accept(0.into()); + // Set peer into `Requested` state. + notif.peerset_report_connect(peer, set_id); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Requested))); - assert!(notif.peers.is_empty()); - assert!(notif.incoming.is_empty()); + // disconnect peer and verify that the state is `Disabled` + notif.peerset_report_disconnect(peer, set_id); + assert!(notif.peers.get(&(peer, set_id)).is_none()); } #[test] - fn reject_non_existent_connection() { + fn peerset_disconnect_pending_request() { let (mut notif, _peerset) = development_notifs(); + let set_id = sc_peerset::SetId::from(0); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; - notif.peerset_report_reject(0.into()); + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - assert!(notif.peers.is_empty()); - assert!(notif.incoming.is_empty()); + // manually add backoff for the entry + if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = + notif.peers.get_mut(&(peer, set_id)) + { + *backoff_until = + Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); + } + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: conn, + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected, vec![]), + remaining_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); + + // attempt to connect the backed-off peer and verify that the request is pending + notif.peerset_report_connect(peer, set_id); + assert!(std::matches!( + notif.peers.get(&(peer, set_id)), + Some(&PeerState::PendingRequest { .. }) + )); + + // attempt to disconnect the backed-off peer and verify that the request is pending + notif.peerset_report_disconnect(peer, set_id); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); + } + + #[test] + fn peerset_accept_peer_not_alive() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let set_id = sc_peerset::SetId::from(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // remote opens a substream, verify that peer state is updated to `Incoming` + notif.on_connection_handler_event( + peer, + conn, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + ); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + assert!(std::matches!( + notif.incoming[0], + IncomingPeer { alive: true, incoming_id: sc_peerset::IncomingIndex(0), .. }, + )); + + notif.disconnect_peer(&peer, set_id); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + assert!(std::matches!( + notif.incoming[0], + IncomingPeer { alive: false, incoming_id: sc_peerset::IncomingIndex(0), .. }, + )); + + notif.peerset_report_accept(sc_peerset::IncomingIndex(0)); + assert_eq!(notif.incoming.len(), 0); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(PeerState::Disabled { .. }))); + } + + #[test] + fn secondary_connection_peer_state_incoming() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let conn2 = ConnectionId::new_unchecked(1); + let set_id = sc_peerset::SetId::from(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + notif.on_connection_handler_event( + peer, + conn, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + ); + if let Some(&PeerState::Incoming { ref connections, .. }) = notif.peers.get(&(peer, set_id)) + { + assert_eq!(connections.len(), 1); + assert_eq!(connections[0], (conn, ConnectionState::OpenDesiredByRemote)); + } else { + panic!("invalid state"); + } + + // add another connection + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn2, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + + if let Some(&PeerState::Incoming { ref connections, .. }) = notif.peers.get(&(peer, set_id)) + { + assert_eq!(connections.len(), 2); + assert_eq!(connections[0], (conn, ConnectionState::OpenDesiredByRemote)); + assert_eq!(connections[1], (conn2, ConnectionState::Closed)); + } else { + panic!("invalid state"); + } + } + + #[test] + fn close_connection_for_disabled_peer() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let set_id = sc_peerset::SetId::from(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: conn, + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected, vec![]), + remaining_established: 0usize, + }, + )); + assert!(notif.peers.get(&(peer, set_id)).is_none()); + } + + #[test] + fn close_connection_for_incoming_peer_one_connection() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let set_id = sc_peerset::SetId::from(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + notif.on_connection_handler_event( + peer, + conn, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + ); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: conn, + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected, vec![]), + remaining_established: 0usize, + }, + )); + assert!(notif.peers.get(&(peer, set_id)).is_none()); + assert!(std::matches!( + notif.incoming[0], + IncomingPeer { alive: false, incoming_id: sc_peerset::IncomingIndex(0), .. }, + )); + } + + #[test] + fn close_connection_for_incoming_peer_two_connections() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let conn1 = ConnectionId::new_unchecked(1); + let set_id = sc_peerset::SetId::from(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + let mut conns = SmallVec::< + [(ConnectionId, ConnectionState); crate::MAX_CONNECTIONS_PER_PEER], + >::from(vec![(conn, ConnectionState::Closed)]); + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + notif.on_connection_handler_event( + peer, + conn, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + ); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn1, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + conns.push((conn1, ConnectionState::Closed)); + + if let Some(PeerState::Incoming { ref connections, .. }) = notif.peers.get(&(peer, set_id)) + { + assert_eq!(connections.len(), 2); + assert_eq!(connections[0], (conn, ConnectionState::OpenDesiredByRemote)); + assert_eq!(connections[1], (conn1, ConnectionState::Closed)); + } + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: conn, + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected, vec![]), + remaining_established: 0usize, + }, + )); + + if let Some(&PeerState::Disabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) + { + assert_eq!(connections.len(), 1); + assert_eq!(connections[0], (conn1, ConnectionState::Closed)); + } else { + panic!("invalid state"); + } + } + + #[test] + fn connection_and_substream_open() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let set_id = sc_peerset::SetId::from(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + let mut conn_yielder = ConnectionYielder::new(); + + // move the peer to `Enabled` state + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + notif.on_connection_handler_event( + peer, + conn, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + ); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + notif.peerset_report_connect(peer, set_id); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); + + // open new substream + let event = conn_yielder.open_substream(peer, 0, connected, vec![1, 2, 3, 4]); + + notif.on_connection_handler_event(peer, conn, event); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); + + if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { + assert_eq!(connections.len(), 1); + assert_eq!(connections[0].0, conn); + assert!(std::matches!(connections[0].1, ConnectionState::Open(_))); + } + + assert!(std::matches!( + notif.events[notif.events.len() - 1], + ToSwarm::GenerateEvent(NotificationsOut::CustomProtocolOpen { .. }) + )); } - // #[test] - // fn reject_non_active_connection() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let set_id = sc_peerset::SetId::from(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // // remote opens a substream, verify that peer state is updated to `Incoming` - // notif.on_connection_handler_event( - // peer, - // conn, - // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - // ); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - // notif.incoming[0].alive = false; - // notif.peerset_report_reject(0.into()); - - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - // } - - // #[test] - // #[should_panic] - // #[cfg(debug_assertions)] - // fn reject_non_existent_peer_but_alive_connection() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let set_id = sc_peerset::SetId::from(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // // remote opens a substream, verify that peer state is updated to `Incoming` - // notif.on_connection_handler_event( - // peer, - // conn, - // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - // ); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - // assert!(std::matches!( - // notif.incoming[0], - // IncomingPeer { alive: true, incoming_id: sc_peerset::IncomingIndex(0), .. }, - // )); - - // notif.peers.remove(&(peer, set_id)); - // notif.peerset_report_reject(0.into()); - // } - - // #[test] - // #[should_panic] - // #[cfg(debug_assertions)] - // fn inject_non_existent_connection_closed_for_incoming_peer() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let set_id = sc_peerset::SetId::from(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // // remote opens a substream, verify that peer state is updated to `Incoming` - // notif.on_connection_handler_event( - // peer, - // conn, - // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - // ); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - // notif.on_swarm_event(FromSwarm::ConnectionClosed( - // libp2p::swarm::behaviour::ConnectionClosed { - // peer_id: peer, - // connection_id: ConnectionId::new_unchecked(1337), - // endpoint: &connected.clone(), - // handler: NotifsHandler::new(peer, connected, vec![]), - // remaining_established: 0usize, - // }, - // )); - // } - - // #[test] - // #[should_panic] - // #[cfg(debug_assertions)] - // fn inject_non_existent_connection_closed_for_disabled_peer() { - // let (mut notif, _peerset) = development_notifs(); - // let set_id = sc_peerset::SetId::from(0); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // notif.on_swarm_event(FromSwarm::ConnectionClosed( - // libp2p::swarm::behaviour::ConnectionClosed { - // peer_id: peer, - // connection_id: ConnectionId::new_unchecked(1337), - // endpoint: &connected.clone(), - // handler: NotifsHandler::new(peer, connected, vec![]), - // remaining_established: 0usize, - // }, - // )); - // } - - // #[test] - // #[should_panic] - // #[cfg(debug_assertions)] - // fn inject_non_existent_connection_closed_for_disabled_pending_enable() { - // let (mut notif, _peerset) = development_notifs(); - // let set_id = sc_peerset::SetId::from(0); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // // manually add backoff for the entry - // if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = - // notif.peers.get_mut(&(peer, set_id)) - // { - // *backoff_until = - // Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); - // } - - // // switch state to `DisabledPendingEnable` - // notif.peerset_report_connect(peer, set_id); - - // assert!(std::matches!( - // notif.peers.get(&(peer, set_id)), - // Some(&PeerState::DisabledPendingEnable { .. }) - // )); - - // notif.on_swarm_event(FromSwarm::ConnectionClosed( - // libp2p::swarm::behaviour::ConnectionClosed { - // peer_id: peer, - // connection_id: ConnectionId::new_unchecked(1337), - // endpoint: &connected.clone(), - // handler: NotifsHandler::new(peer, connected, vec![]), - // remaining_established: 0usize, - // }, - // )); - // } - - // #[test] - // #[should_panic] - // #[cfg(debug_assertions)] - // fn inject_connection_closed_for_incoming_peer_state_mismatch() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let set_id = sc_peerset::SetId::from(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // // remote opens a substream, verify that peer state is updated to `Incoming` - // notif.on_connection_handler_event( - // peer, - // conn, - // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - // ); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - // notif.incoming[0].alive = false; - - // notif.on_swarm_event(FromSwarm::ConnectionClosed( - // libp2p::swarm::behaviour::ConnectionClosed { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected.clone(), - // handler: NotifsHandler::new(peer, connected, vec![]), - // remaining_established: 0usize, - // }, - // )); - // } - - // #[test] - // #[should_panic] - // #[cfg(debug_assertions)] - // fn inject_connection_closed_for_enabled_state_mismatch() { - // let (mut notif, _peerset) = development_notifs(); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let set_id = sc_peerset::SetId::from(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // // remote opens a substream, verify that peer state is updated to `Incoming` - // notif.on_connection_handler_event( - // peer, - // conn, - // NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, - // ); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); - - // // attempt to connect to the peer and verify that the peer state is `Enabled` - // notif.peerset_report_connect(peer, set_id); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); - - // notif.on_swarm_event(FromSwarm::ConnectionClosed( - // libp2p::swarm::behaviour::ConnectionClosed { - // peer_id: peer, - // connection_id: ConnectionId::new_unchecked(1337), - // endpoint: &connected.clone(), - // handler: NotifsHandler::new(peer, connected, vec![]), - // remaining_established: 0usize, - // }, - // )); - // } - - // #[test] - // #[should_panic] - // #[cfg(debug_assertions)] - // fn inject_connection_closed_for_backoff_peer() { - // let (mut notif, _peerset) = development_notifs(); - // let set_id = sc_peerset::SetId::from(0); - // let peer = PeerId::random(); - // let conn = ConnectionId::new_unchecked(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - - // notif.on_swarm_event(FromSwarm::ConnectionEstablished( - // libp2p::swarm::behaviour::ConnectionEstablished { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected, - // failed_addresses: &[], - // other_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); - - // // manually add backoff for the entry - // if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = - // notif.peers.get_mut(&(peer, set_id)) - // { - // *backoff_until = - // Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); - // } - - // notif.on_swarm_event(FromSwarm::ConnectionClosed( - // libp2p::swarm::behaviour::ConnectionClosed { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected.clone(), - // handler: NotifsHandler::new(peer, connected.clone(), vec![]), - // remaining_established: 0usize, - // }, - // )); - // assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); - - // notif.on_swarm_event(FromSwarm::ConnectionClosed( - // libp2p::swarm::behaviour::ConnectionClosed { - // peer_id: peer, - // connection_id: conn, - // endpoint: &connected.clone(), - // handler: NotifsHandler::new(peer, connected, vec![]), - // remaining_established: 0usize, - // }, - // )); - // } - - // #[test] - // #[should_panic] - // #[cfg(debug_assertions)] - // fn open_result_ok_non_existent_peer() { - // let (mut notif, _peerset) = development_notifs(); - // let conn = ConnectionId::new_unchecked(0); - // let connected = ConnectedPoint::Listener { - // local_addr: Multiaddr::empty(), - // send_back_addr: Multiaddr::empty(), - // }; - // let mut conn_yielder = ConnectionYielder::new(); - - // notif.on_connection_handler_event( - // PeerId::random(), - // conn, - // conn_yielder.open_substream(PeerId::random(), 0, connected, vec![1, 2, 3, 4]), - // ); - // } + #[test] + fn connection_closed_sink_replaced() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let conn1 = ConnectionId::new_unchecked(0); + let conn2 = ConnectionId::new_unchecked(1); + let set_id = sc_peerset::SetId::from(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + let mut conn_yielder = ConnectionYielder::new(); + + // open two connections + for conn_id in vec![conn1, conn2] { + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn_id, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + } + + if let Some(&PeerState::Disabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) + { + assert_eq!(connections[0], (conn1, ConnectionState::Closed)); + assert_eq!(connections[1], (conn2, ConnectionState::Closed)); + } else { + panic!("invalid state"); + } + + // open substreams on both active connections + notif.peerset_report_connect(peer, set_id); + notif.on_connection_handler_event( + peer, + conn2, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + ); + + if let Some(&PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) + { + assert_eq!(connections[0], (conn1, ConnectionState::Opening)); + assert_eq!(connections[1], (conn2, ConnectionState::Opening)); + } else { + panic!("invalid state"); + } + + // add two new substreams, one for each connection and verify that both are in open state + for conn in vec![conn1, conn2].iter() { + notif.on_connection_handler_event( + peer, + *conn, + conn_yielder.open_substream(peer, 0, connected.clone(), vec![1, 2, 3, 4]), + ); + } + + if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { + assert_eq!(connections[0].0, conn1); + assert!(std::matches!(connections[0].1, ConnectionState::Open(_))); + assert_eq!(connections[1].0, conn2); + assert!(std::matches!(connections[1].1, ConnectionState::Open(_))); + } else { + panic!("invalid state"); + } + + // check peer information + assert_eq!(notif.open_peers().collect::>(), vec![&peer],); + assert_eq!(notif.reserved_peers(set_id).collect::>(), Vec::<&PeerId>::new(),); + assert_eq!(notif.num_discovered_peers(), 0usize); + + // close the other connection and verify that notification replacement event is emitted + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: conn1, + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected, vec![]), + remaining_established: 0usize, + }, + )); + + if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { + assert_eq!(connections.len(), 1); + assert_eq!(connections[0].0, conn2); + assert!(std::matches!(connections[0].1, ConnectionState::Open(_))); + } else { + panic!("invalid state"); + } + + assert!(std::matches!( + notif.events[notif.events.len() - 1], + ToSwarm::GenerateEvent(NotificationsOut::CustomProtocolReplaced { .. }) + )); + } + + #[test] + fn dial_failure_for_requested_peer() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let set_id = sc_peerset::SetId::from(0); + + // Set peer into `Requested` state. + notif.peerset_report_connect(peer, set_id); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Requested))); + + notif.on_swarm_event(FromSwarm::DialFailure(libp2p::swarm::behaviour::DialFailure { + peer_id: Some(peer), + error: &libp2p::swarm::DialError::Banned, + connection_id: ConnectionId::new_unchecked(1337), + })); + + if let Some(PeerState::Backoff { timer_deadline, .. }) = notif.peers.get(&(peer, set_id)) { + assert!(timer_deadline > &Instant::now()); + } else { + panic!("invalid state"); + } + } + + #[tokio::test] + async fn write_notification() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let set_id = sc_peerset::SetId::from(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + let mut conn_yielder = ConnectionYielder::new(); + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + notif.peerset_report_connect(peer, set_id); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); + + notif.on_connection_handler_event( + peer, + conn, + conn_yielder.open_substream(peer, 0, connected, vec![1, 2, 3, 4]), + ); + + if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { + assert_eq!(connections[0].0, conn); + assert!(std::matches!(connections[0].1, ConnectionState::Open(_))); + } else { + panic!("invalid state"); + } + + notif + .peers + .get(&(peer, set_id)) + .unwrap() + .get_open() + .unwrap() + .send_sync_notification(vec![1, 3, 3, 7]); + assert_eq!(conn_yielder.get_next_event(peer, set_id.into()).await, Some(vec![1, 3, 3, 7])); + } + + #[test] + fn peerset_report_connect_backoff_expired() { + let (mut notif, _peerset) = development_notifs(); + let set_id = sc_peerset::SetId::from(0); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + let backoff_duration = Duration::from_millis(100); + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // manually add backoff for the entry + if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = + notif.peers.get_mut(&(peer, set_id)) + { + *backoff_until = Some(Instant::now().checked_add(backoff_duration).unwrap()); + } + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: conn, + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected, vec![]), + remaining_established: 0usize, + }, + )); + + // wait until the backoff time has passed + std::thread::sleep(backoff_duration * 2); + + // attempt to connect the backed-off peer and verify that the request is pending + notif.peerset_report_connect(peer, set_id); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Requested { .. }))) + } + + #[test] + fn peerset_report_disconnect_disabled() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let set_id = sc_peerset::SetId::from(0); + let conn = ConnectionId::new_unchecked(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + notif.peerset_report_disconnect(peer, set_id); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + } + + #[test] + fn peerset_report_disconnect_backoff() { + let (mut notif, _peerset) = development_notifs(); + let set_id = sc_peerset::SetId::from(0); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + let backoff_duration = Duration::from_secs(2); + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // manually add backoff for the entry + if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = + notif.peers.get_mut(&(peer, set_id)) + { + *backoff_until = Some(Instant::now().checked_add(backoff_duration).unwrap()); + } + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: conn, + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected, vec![]), + remaining_established: 0usize, + }, + )); + + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); + + notif.peerset_report_disconnect(peer, set_id); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); + } + + #[test] + fn peer_is_backed_off_if_both_connections_get_closed_while_peer_is_disabled_with_back_off() { + let (mut notif, _peerset) = development_notifs(); + let set_id = sc_peerset::SetId::from(0); + let peer = PeerId::random(); + let conn1 = ConnectionId::new_unchecked(0); + let conn2 = ConnectionId::new_unchecked(1); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn1, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn2, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // manually add backoff for the entry + if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = + notif.peers.get_mut(&(peer, set_id)) + { + *backoff_until = + Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); + } + + // switch state to `DisabledPendingEnable` + notif.peerset_report_connect(peer, set_id); + assert!(std::matches!( + notif.peers.get(&(peer, set_id)), + Some(&PeerState::DisabledPendingEnable { .. }) + )); + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: conn1, + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected.clone(), vec![]), + remaining_established: 0usize, + }, + )); + assert!(std::matches!( + notif.peers.get(&(peer, set_id)), + Some(&PeerState::DisabledPendingEnable { .. }) + )); + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: conn2, + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected, vec![]), + remaining_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); + } + + #[test] + fn inject_connection_closed_incoming_with_backoff() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let set_id = sc_peerset::SetId::from(0); + let conn = ConnectionId::new_unchecked(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // remote opens a substream, verify that peer state is updated to `Incoming` + notif.on_connection_handler_event( + peer, + conn, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + ); + + // manually add backoff for the entry + if let Some(&mut PeerState::Incoming { ref mut backoff_until, .. }) = + notif.peers.get_mut(&(peer, 0.into())) + { + *backoff_until = + Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); + } else { + panic!("invalid state"); + } + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: conn, + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected, vec![]), + remaining_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); + } + + #[test] + fn two_connections_inactive_connection_gets_closed_peer_state_is_still_incoming() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let conn1 = ConnectionId::new_unchecked(0); + let conn2 = ConnectionId::new_unchecked(1); + let set_id = sc_peerset::SetId::from(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + // open two connections + for conn_id in vec![conn1, conn2] { + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn_id, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + } + + if let Some(&PeerState::Disabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) + { + assert_eq!(connections[0], (conn1, ConnectionState::Closed)); + assert_eq!(connections[1], (conn2, ConnectionState::Closed)); + } else { + panic!("invalid state"); + } + + // remote opens a substream, verify that peer state is updated to `Incoming` + notif.on_connection_handler_event( + peer, + conn1, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + ); + assert!(std::matches!( + notif.peers.get_mut(&(peer, 0.into())), + Some(&mut PeerState::Incoming { .. }) + )); + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: conn2, + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected, vec![]), + remaining_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + } + + #[test] + fn two_connections_active_connection_gets_closed_peer_state_is_disabled() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let conn1 = ConnectionId::new_unchecked(0); + let conn2 = ConnectionId::new_unchecked(1); + let set_id = sc_peerset::SetId::from(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + // open two connections + for conn_id in vec![conn1, conn2] { + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn_id, + endpoint: &ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }, + failed_addresses: &[], + other_established: 0usize, + }, + )); + } + + if let Some(&PeerState::Disabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) + { + assert_eq!(connections[0], (conn1, ConnectionState::Closed)); + assert_eq!(connections[1], (conn2, ConnectionState::Closed)); + } else { + panic!("invalid state"); + } + + // remote opens a substream, verify that peer state is updated to `Incoming` + notif.on_connection_handler_event( + peer, + conn1, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + ); + assert!(std::matches!( + notif.peers.get_mut(&(peer, 0.into())), + Some(PeerState::Incoming { .. }) + )); + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: conn1, + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected, vec![]), + remaining_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + } + + #[test] + fn inject_connection_closed_for_active_connection() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let conn1 = ConnectionId::new_unchecked(0); + let conn2 = ConnectionId::new_unchecked(1); + let set_id = sc_peerset::SetId::from(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + let mut conn_yielder = ConnectionYielder::new(); + + // open two connections + for conn_id in vec![conn1, conn2] { + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn_id, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + } + + if let Some(&PeerState::Disabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) + { + assert_eq!(connections[0], (conn1, ConnectionState::Closed)); + assert_eq!(connections[1], (conn2, ConnectionState::Closed)); + } else { + panic!("invalid state"); + } + + // open substreams on both active connections + notif.peerset_report_connect(peer, set_id); + + if let Some(&PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) + { + assert_eq!(connections[0], (conn1, ConnectionState::Opening)); + assert_eq!(connections[1], (conn2, ConnectionState::Closed)); + } else { + panic!("invalid state"); + } + + notif.on_connection_handler_event( + peer, + conn1, + conn_yielder.open_substream(peer, 0, connected.clone(), vec![1, 2, 3, 4]), + ); + + if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { + assert!(std::matches!(connections[0].1, ConnectionState::Open(_))); + assert_eq!(connections[0].0, conn1); + assert_eq!(connections[1], (conn2, ConnectionState::Closed)); + } else { + panic!("invalid state"); + } + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: conn1, + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected, vec![]), + remaining_established: 0usize, + }, + )); + } + + #[test] + fn inject_dial_failure_for_pending_request() { + let (mut notif, _peerset) = development_notifs(); + let set_id = sc_peerset::SetId::from(0); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // manually add backoff for the entry + if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = + notif.peers.get_mut(&(peer, set_id)) + { + *backoff_until = + Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); + } + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: conn, + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected, vec![]), + remaining_established: 0usize, + }, + )); + + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); + + // attempt to connect the backed-off peer and verify that the request is pending + notif.peerset_report_connect(peer, set_id); + assert!(std::matches!( + notif.peers.get(&(peer, set_id)), + Some(&PeerState::PendingRequest { .. }) + )); + + let now = Instant::now(); + notif.on_swarm_event(FromSwarm::DialFailure(libp2p::swarm::behaviour::DialFailure { + peer_id: Some(peer), + error: &libp2p::swarm::DialError::Banned, + connection_id: ConnectionId::new_unchecked(0), + })); + + if let Some(PeerState::PendingRequest { ref timer_deadline, .. }) = + notif.peers.get(&(peer, set_id)) + { + assert!(timer_deadline > &(now + std::time::Duration::from_secs(5))); + } + } + + #[test] + fn peerstate_incoming_open_desired_by_remote() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let set_id = sc_peerset::SetId::from(0); + let conn1 = ConnectionId::new_unchecked(0); + let conn2 = ConnectionId::new_unchecked(1); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn1, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn2, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // remote opens a substream, verify that peer state is updated to `Incoming` + notif.on_connection_handler_event( + peer, + conn1, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + ); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + // add another open event from remote + notif.on_connection_handler_event( + peer, + conn2, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + ); + + if let Some(PeerState::Incoming { ref connections, .. }) = notif.peers.get(&(peer, set_id)) + { + assert_eq!(connections[0], (conn1, ConnectionState::OpenDesiredByRemote)); + assert_eq!(connections[1], (conn2, ConnectionState::OpenDesiredByRemote)); + } + } + + #[tokio::test] + async fn remove_backoff_peer_after_timeout() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let set_id = sc_peerset::SetId::from(0); + let conn = ConnectionId::new_unchecked(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + + if let Some(&mut PeerState::Disabled { ref mut backoff_until, .. }) = + notif.peers.get_mut(&(peer, 0.into())) + { + *backoff_until = + Some(Instant::now().checked_add(std::time::Duration::from_millis(100)).unwrap()); + } else { + panic!("invalid state"); + } + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: conn, + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected, vec![]), + remaining_established: 0usize, + }, + )); + + let until = if let Some(&PeerState::Backoff { timer_deadline, .. }) = + notif.peers.get(&(peer, set_id)) + { + timer_deadline + } else { + panic!("invalid state"); + }; + + if until > Instant::now() { + std::thread::sleep(until - Instant::now()); + } + + assert!(notif.peers.get(&(peer, set_id)).is_some()); + + if tokio::time::timeout(Duration::from_secs(5), async { + let mut params = MockPollParams { peer_id: PeerId::random(), addr: Multiaddr::empty() }; + + loop { + futures::future::poll_fn(|cx| { + let _ = notif.poll(cx, &mut params); + Poll::Ready(()) + }) + .await; + + if notif.peers.get(&(peer, set_id)).is_none() { + break + } + } + }) + .await + .is_err() + { + panic!("backoff peer was not removed in time"); + } + + assert!(notif.peers.get(&(peer, set_id)).is_none()); + } + + #[tokio::test] + async fn reschedule_disabled_pending_enable_when_connection_not_closed() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let set_id = sc_peerset::SetId::from(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + let mut conn_yielder = ConnectionYielder::new(); + + // move the peer to `Enabled` state + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // open substream + notif.on_connection_handler_event( + peer, + conn, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + ); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + notif.peerset_report_connect(peer, set_id); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); + + let event = conn_yielder.open_substream(peer, 0, connected, vec![1, 2, 3, 4]); + + notif.on_connection_handler_event(peer, conn, event); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); + + if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { + assert!(std::matches!(connections[0], (_, ConnectionState::Open(_)))); + assert_eq!(connections[0].0, conn); + } else { + panic!("invalid state"); + } + + notif.peerset_report_disconnect(peer, set_id); + + if let Some(PeerState::Disabled { ref connections, ref mut backoff_until }) = + notif.peers.get_mut(&(peer, set_id)) + { + assert!(std::matches!(connections[0], (_, ConnectionState::Closing))); + assert_eq!(connections[0].0, conn); + + *backoff_until = + Some(Instant::now().checked_add(std::time::Duration::from_secs(2)).unwrap()); + } else { + panic!("invalid state"); + } + + notif.peerset_report_connect(peer, set_id); + + let prev_instant = + if let Some(PeerState::DisabledPendingEnable { + ref connections, timer_deadline, .. + }) = notif.peers.get(&(peer, set_id)) + { + assert!(std::matches!(connections[0], (_, ConnectionState::Closing))); + assert_eq!(connections[0].0, conn); + + *timer_deadline + } else { + panic!("invalid state"); + }; + + // one of the peers has an active backoff timer so poll the notifications code until + // the timer has expired. Because the connection is still in the state of `Closing`, + // verify that the code continues to keep the peer disabled by resetting the timer + // after the first one expired. + if tokio::time::timeout(Duration::from_secs(5), async { + let mut params = MockPollParams { peer_id: PeerId::random(), addr: Multiaddr::empty() }; + + loop { + futures::future::poll_fn(|cx| { + let _ = notif.poll(cx, &mut params); + Poll::Ready(()) + }) + .await; + + if let Some(PeerState::DisabledPendingEnable { + timer_deadline, connections, .. + }) = notif.peers.get(&(peer, set_id)) + { + assert!(std::matches!(connections[0], (_, ConnectionState::Closing))); + + if timer_deadline != &prev_instant { + break + } + } else { + panic!("invalid state"); + } + } + }) + .await + .is_err() + { + panic!("backoff peer was not removed in time"); + } + } + + #[test] + #[should_panic] + #[cfg(debug_assertions)] + fn peerset_report_connect_with_enabled_peer() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let set_id = sc_peerset::SetId::from(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + let mut conn_yielder = ConnectionYielder::new(); + + // move the peer to `Enabled` state + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + notif.on_connection_handler_event( + peer, + conn, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + ); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + notif.peerset_report_connect(peer, set_id); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); + + let event = conn_yielder.open_substream(peer, 0, connected, vec![1, 2, 3, 4]); + + notif.on_connection_handler_event(peer, conn, event); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); + + if let Some(PeerState::Enabled { ref connections, .. }) = notif.peers.get(&(peer, set_id)) { + assert!(std::matches!(connections[0], (_, ConnectionState::Open(_)))); + assert_eq!(connections[0].0, conn); + } else { + panic!("invalid state"); + } + + notif.peerset_report_connect(peer, set_id); + } + + #[test] + #[should_panic] + #[cfg(debug_assertions)] + fn peerset_report_connect_with_disabled_pending_enable_peer() { + let (mut notif, _peerset) = development_notifs(); + let set_id = sc_peerset::SetId::from(0); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // manually add backoff for the entry + if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = + notif.peers.get_mut(&(peer, set_id)) + { + *backoff_until = + Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); + } + + // switch state to `DisabledPendingEnable` + notif.peerset_report_connect(peer, set_id); + assert!(std::matches!( + notif.peers.get(&(peer, set_id)), + Some(&PeerState::DisabledPendingEnable { .. }) + )); + + notif.peerset_report_connect(peer, set_id); + } + + #[test] + #[should_panic] + #[cfg(debug_assertions)] + fn peerset_report_connect_with_requested_peer() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let set_id = sc_peerset::SetId::from(0); + + // Set peer into `Requested` state. + notif.peerset_report_connect(peer, set_id); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Requested))); + + notif.peerset_report_connect(peer, set_id); + } + + #[test] + #[should_panic] + #[cfg(debug_assertions)] + fn peerset_report_connect_with_pending_requested() { + let (mut notif, _peerset) = development_notifs(); + let set_id = sc_peerset::SetId::from(0); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // manually add backoff for the entry + if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = + notif.peers.get_mut(&(peer, set_id)) + { + *backoff_until = + Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); + } + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: conn, + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected, vec![]), + remaining_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); + + // attempt to connect the backed-off peer and verify that the request is pending + notif.peerset_report_connect(peer, set_id); + assert!(std::matches!( + notif.peers.get(&(peer, set_id)), + Some(&PeerState::PendingRequest { .. }) + )); + + notif.peerset_report_connect(peer, set_id); + } + + #[test] + #[should_panic] + #[cfg(debug_assertions)] + fn peerset_report_disconnect_with_incoming_peer() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let set_id = sc_peerset::SetId::from(0); + let conn = ConnectionId::new_unchecked(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // remote opens a substream, verify that peer state is updated to `Incoming` + notif.on_connection_handler_event( + peer, + conn, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + ); + + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + notif.peerset_report_disconnect(peer, set_id); + } + + #[test] + #[should_panic] + #[cfg(debug_assertions)] + fn peerset_report_accept_incoming_peer() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let set_id = sc_peerset::SetId::from(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // remote opens a substream, verify that peer state is updated to `Incoming` + notif.on_connection_handler_event( + peer, + conn, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + ); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + assert!(std::matches!( + notif.incoming[0], + IncomingPeer { alive: true, incoming_id: sc_peerset::IncomingIndex(0), .. }, + )); + + notif.peers.remove(&(peer, set_id)); + notif.peerset_report_accept(sc_peerset::IncomingIndex(0)); + } + + #[test] + #[should_panic] + #[cfg(debug_assertions)] + fn peerset_report_accept_not_incoming_peer() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let set_id = sc_peerset::SetId::from(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + let mut conn_yielder = ConnectionYielder::new(); + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // remote opens a substream, verify that peer state is updated to `Incoming` + notif.on_connection_handler_event( + peer, + conn, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + ); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + assert!(std::matches!( + notif.incoming[0], + IncomingPeer { alive: true, incoming_id: sc_peerset::IncomingIndex(0), .. }, + )); + + notif.peerset_report_connect(peer, set_id); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); + + let event = conn_yielder.open_substream(peer, 0, connected, vec![1, 2, 3, 4]); + notif.on_connection_handler_event(peer, conn, event); + + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); + notif.incoming[0].alive = true; + notif.peerset_report_accept(sc_peerset::IncomingIndex(0)); + } + + #[test] + #[should_panic] + #[cfg(debug_assertions)] + fn inject_connection_closed_non_existent_peer() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let endpoint = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: ConnectionId::new_unchecked(0), + endpoint: &endpoint.clone(), + handler: NotifsHandler::new(peer, endpoint, vec![]), + remaining_established: 0usize, + }, + )); + } + + #[test] + fn disconnect_non_existent_peer() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let set_id = sc_peerset::SetId::from(0); + + notif.peerset_report_disconnect(peer, set_id); + + assert!(notif.peers.is_empty()); + assert!(notif.incoming.is_empty()); + } + + #[test] + fn accept_non_existent_connection() { + let (mut notif, _peerset) = development_notifs(); + + notif.peerset_report_accept(0.into()); + + assert!(notif.peers.is_empty()); + assert!(notif.incoming.is_empty()); + } + + #[test] + fn reject_non_existent_connection() { + let (mut notif, _peerset) = development_notifs(); + + notif.peerset_report_reject(0.into()); + + assert!(notif.peers.is_empty()); + assert!(notif.incoming.is_empty()); + } + + #[test] + fn reject_non_active_connection() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let set_id = sc_peerset::SetId::from(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // remote opens a substream, verify that peer state is updated to `Incoming` + notif.on_connection_handler_event( + peer, + conn, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + ); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + notif.incoming[0].alive = false; + notif.peerset_report_reject(0.into()); + + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + } + + #[test] + #[should_panic] + #[cfg(debug_assertions)] + fn reject_non_existent_peer_but_alive_connection() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let set_id = sc_peerset::SetId::from(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // remote opens a substream, verify that peer state is updated to `Incoming` + notif.on_connection_handler_event( + peer, + conn, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + ); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + assert!(std::matches!( + notif.incoming[0], + IncomingPeer { alive: true, incoming_id: sc_peerset::IncomingIndex(0), .. }, + )); + + notif.peers.remove(&(peer, set_id)); + notif.peerset_report_reject(0.into()); + } + + #[test] + #[should_panic] + #[cfg(debug_assertions)] + fn inject_non_existent_connection_closed_for_incoming_peer() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let set_id = sc_peerset::SetId::from(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // remote opens a substream, verify that peer state is updated to `Incoming` + notif.on_connection_handler_event( + peer, + conn, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + ); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: ConnectionId::new_unchecked(1337), + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected, vec![]), + remaining_established: 0usize, + }, + )); + } + + #[test] + #[should_panic] + #[cfg(debug_assertions)] + fn inject_non_existent_connection_closed_for_disabled_peer() { + let (mut notif, _peerset) = development_notifs(); + let set_id = sc_peerset::SetId::from(0); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: ConnectionId::new_unchecked(1337), + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected, vec![]), + remaining_established: 0usize, + }, + )); + } + + #[test] + #[should_panic] + #[cfg(debug_assertions)] + fn inject_non_existent_connection_closed_for_disabled_pending_enable() { + let (mut notif, _peerset) = development_notifs(); + let set_id = sc_peerset::SetId::from(0); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // manually add backoff for the entry + if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = + notif.peers.get_mut(&(peer, set_id)) + { + *backoff_until = + Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); + } + + // switch state to `DisabledPendingEnable` + notif.peerset_report_connect(peer, set_id); + + assert!(std::matches!( + notif.peers.get(&(peer, set_id)), + Some(&PeerState::DisabledPendingEnable { .. }) + )); + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: ConnectionId::new_unchecked(1337), + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected, vec![]), + remaining_established: 0usize, + }, + )); + } + + #[test] + #[should_panic] + #[cfg(debug_assertions)] + fn inject_connection_closed_for_incoming_peer_state_mismatch() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let set_id = sc_peerset::SetId::from(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // remote opens a substream, verify that peer state is updated to `Incoming` + notif.on_connection_handler_event( + peer, + conn, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + ); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + notif.incoming[0].alive = false; + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: conn, + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected, vec![]), + remaining_established: 0usize, + }, + )); + } + + #[test] + #[should_panic] + #[cfg(debug_assertions)] + fn inject_connection_closed_for_enabled_state_mismatch() { + let (mut notif, _peerset) = development_notifs(); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let set_id = sc_peerset::SetId::from(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // remote opens a substream, verify that peer state is updated to `Incoming` + notif.on_connection_handler_event( + peer, + conn, + NotifsHandlerOut::OpenDesiredByRemote { protocol_index: 0 }, + ); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Incoming { .. }))); + + // attempt to connect to the peer and verify that the peer state is `Enabled` + notif.peerset_report_connect(peer, set_id); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Enabled { .. }))); + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: ConnectionId::new_unchecked(1337), + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected, vec![]), + remaining_established: 0usize, + }, + )); + } + + #[test] + #[should_panic] + #[cfg(debug_assertions)] + fn inject_connection_closed_for_backoff_peer() { + let (mut notif, _peerset) = development_notifs(); + let set_id = sc_peerset::SetId::from(0); + let peer = PeerId::random(); + let conn = ConnectionId::new_unchecked(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + + notif.on_swarm_event(FromSwarm::ConnectionEstablished( + libp2p::swarm::behaviour::ConnectionEstablished { + peer_id: peer, + connection_id: conn, + endpoint: &connected, + failed_addresses: &[], + other_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Disabled { .. }))); + + // manually add backoff for the entry + if let Some(PeerState::Disabled { ref mut backoff_until, .. }) = + notif.peers.get_mut(&(peer, set_id)) + { + *backoff_until = + Some(Instant::now().checked_add(std::time::Duration::from_secs(5)).unwrap()); + } + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: conn, + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected.clone(), vec![]), + remaining_established: 0usize, + }, + )); + assert!(std::matches!(notif.peers.get(&(peer, set_id)), Some(&PeerState::Backoff { .. }))); + + notif.on_swarm_event(FromSwarm::ConnectionClosed( + libp2p::swarm::behaviour::ConnectionClosed { + peer_id: peer, + connection_id: conn, + endpoint: &connected.clone(), + handler: NotifsHandler::new(peer, connected, vec![]), + remaining_established: 0usize, + }, + )); + } + + #[test] + #[should_panic] + #[cfg(debug_assertions)] + fn open_result_ok_non_existent_peer() { + let (mut notif, _peerset) = development_notifs(); + let conn = ConnectionId::new_unchecked(0); + let connected = ConnectedPoint::Listener { + local_addr: Multiaddr::empty(), + send_back_addr: Multiaddr::empty(), + }; + let mut conn_yielder = ConnectionYielder::new(); + + notif.on_connection_handler_event( + PeerId::random(), + conn, + conn_yielder.open_substream(PeerId::random(), 0, connected, vec![1, 2, 3, 4]), + ); + } } diff --git a/client/network/src/protocol/notifications/handler.rs b/client/network/src/protocol/notifications/handler.rs index 9f4909c2f4fd8..ebff6331271b1 100644 --- a/client/network/src/protocol/notifications/handler.rs +++ b/client/network/src/protocol/notifications/handler.rs @@ -829,94 +829,92 @@ pub mod tests { Multiaddr, }; use multistream_select::{dialer_select_proto, listener_select_proto, Negotiated, Version}; - use std::io::{Error, IoSlice, IoSliceMut}; + use std::{ + collections::HashMap, + io::{Error, IoSlice, IoSliceMut}, + }; use tokio::sync::mpsc; use unsigned_varint::codec::UviBytes; - ///////////////////////////////////////////////// - // TODO: uncomment when 0.51.2 libp2p is released - ///////////////////////////////////////////////// - - // struct OpenSubstream { - // notifications: stream::Peekable< - // stream::Select< - // stream::Fuse>, - // stream::Fuse>, - // >, - // >, - // _in_substream: MockSubstream, - // _out_substream: MockSubstream, - // } - - // pub struct ConnectionYielder { - // connections: HashMap<(PeerId, usize), OpenSubstream>, - // } - - // impl ConnectionYielder { - // /// Create new [`ConnectionYielder`]. - // pub fn new() -> Self { - // Self { connections: HashMap::new() } - // } - - // /// Open a new substream for peer. - // pub fn open_substream( - // &mut self, - // peer: PeerId, - // protocol_index: usize, - // endpoint: ConnectedPoint, - // received_handshake: Vec, - // ) -> NotifsHandlerOut { - // let (async_tx, async_rx) = - // futures::channel::mpsc::channel(ASYNC_NOTIFICATIONS_BUFFER_SIZE); - // let (sync_tx, sync_rx) = - // futures::channel::mpsc::channel(SYNC_NOTIFICATIONS_BUFFER_SIZE); - // let notifications_sink = NotificationsSink { - // inner: Arc::new(NotificationsSinkInner { - // peer_id: peer, - // async_channel: FuturesMutex::new(async_tx), - // sync_channel: Mutex::new(Some(sync_tx)), - // }), - // }; - // let (in_substream, out_substream) = MockSubstream::new(); - - // self.connections.insert( - // (peer, protocol_index), - // OpenSubstream { - // notifications: stream::select(async_rx.fuse(), sync_rx.fuse()).peekable(), - // _in_substream: in_substream, - // _out_substream: out_substream, - // }, - // ); - - // NotifsHandlerOut::OpenResultOk { - // protocol_index, - // negotiated_fallback: None, - // endpoint, - // received_handshake, - // notifications_sink, - // } - // } - - // /// Attempt to get next pending event from one of the notification sinks. - // pub async fn get_next_event(&mut self, peer: PeerId, set: usize) -> Option> { - // let substream = if let Some(info) = self.connections.get_mut(&(peer, set)) { - // info - // } else { - // return None - // }; - // - // futures::future::poll_fn(|cx| match substream.notifications.poll_next_unpin(cx) { - // Poll::Ready(Some(NotificationsSinkMessage::Notification { message })) => - // Poll::Ready(Some(message)), - // Poll::Pending => Poll::Ready(None), - // Poll::Ready(Some(NotificationsSinkMessage::ForceClose)) | Poll::Ready(None) => { - // panic!("sink closed") - // }, - // }) - // .await - // } - // } + struct OpenSubstream { + notifications: stream::Peekable< + stream::Select< + stream::Fuse>, + stream::Fuse>, + >, + >, + _in_substream: MockSubstream, + _out_substream: MockSubstream, + } + + pub struct ConnectionYielder { + connections: HashMap<(PeerId, usize), OpenSubstream>, + } + impl ConnectionYielder { + /// Create new [`ConnectionYielder`]. + pub fn new() -> Self { + Self { connections: HashMap::new() } + } + + /// Open a new substream for peer. + pub fn open_substream( + &mut self, + peer: PeerId, + protocol_index: usize, + endpoint: ConnectedPoint, + received_handshake: Vec, + ) -> NotifsHandlerOut { + let (async_tx, async_rx) = + futures::channel::mpsc::channel(ASYNC_NOTIFICATIONS_BUFFER_SIZE); + let (sync_tx, sync_rx) = + futures::channel::mpsc::channel(SYNC_NOTIFICATIONS_BUFFER_SIZE); + let notifications_sink = NotificationsSink { + inner: Arc::new(NotificationsSinkInner { + peer_id: peer, + async_channel: FuturesMutex::new(async_tx), + sync_channel: Mutex::new(Some(sync_tx)), + }), + }; + let (in_substream, out_substream) = MockSubstream::new(); + + self.connections.insert( + (peer, protocol_index), + OpenSubstream { + notifications: stream::select(async_rx.fuse(), sync_rx.fuse()).peekable(), + _in_substream: in_substream, + _out_substream: out_substream, + }, + ); + + NotifsHandlerOut::OpenResultOk { + protocol_index, + negotiated_fallback: None, + endpoint, + received_handshake, + notifications_sink, + } + } + + /// Attempt to get next pending event from one of the notification sinks. + pub async fn get_next_event(&mut self, peer: PeerId, set: usize) -> Option> { + let substream = if let Some(info) = self.connections.get_mut(&(peer, set)) { + info + } else { + return None + }; + + futures::future::poll_fn(|cx| match substream.notifications.poll_next_unpin(cx) { + Poll::Ready(Some(NotificationsSinkMessage::Notification { message })) => + Poll::Ready(Some(message)), + Poll::Pending => Poll::Ready(None), + Poll::Ready(Some(NotificationsSinkMessage::ForceClose)) | Poll::Ready(None) => { + panic!("sink closed") + }, + }) + .await + } + } struct MockSubstream { pub rx: mpsc::Receiver>, pub tx: mpsc::Sender>, diff --git a/client/network/src/protocol/notifications/tests.rs b/client/network/src/protocol/notifications/tests.rs index 4f5f397d81648..32c7f41f62cdc 100644 --- a/client/network/src/protocol/notifications/tests.rs +++ b/client/network/src/protocol/notifications/tests.rs @@ -26,8 +26,8 @@ use libp2p::{ identity, noise, swarm::{ behaviour::FromSwarm, ConnectionDenied, ConnectionId, Executor, NetworkBehaviour, - NetworkBehaviourAction, PollParameters, Swarm, SwarmEvent, THandler, THandlerInEvent, - THandlerOutEvent, + PollParameters, Swarm, SwarmBuilder, SwarmEvent, THandler, THandlerInEvent, + THandlerOutEvent, ToSwarm, }, yamux, Multiaddr, PeerId, Transport, }; @@ -106,12 +106,13 @@ fn build_nodes() -> (Swarm, Swarm) { }; let runtime = tokio::runtime::Runtime::new().unwrap(); - let mut swarm = Swarm::with_executor( + let mut swarm = SwarmBuilder::with_executor( transport, behaviour, keypairs[index].public().to_peer_id(), TokioExecutor(runtime), - ); + ) + .build(); swarm.listen_on(addrs[index].clone()).unwrap(); out.push(swarm); } @@ -223,7 +224,7 @@ impl NetworkBehaviour for CustomProtoWithAddr { &mut self, cx: &mut Context, params: &mut impl PollParameters, - ) -> Poll>> { + ) -> Poll>> { self.inner.poll(cx, params) } } diff --git a/client/network/src/request_responses.rs b/client/network/src/request_responses.rs index a301ef69bc866..8d4846b9e4de3 100644 --- a/client/network/src/request_responses.rs +++ b/client/network/src/request_responses.rs @@ -46,8 +46,8 @@ use libp2p::{ swarm::{ behaviour::{ConnectionClosed, FromSwarm}, handler::multi::MultiHandler, - ConnectionDenied, ConnectionId, NetworkBehaviour, NetworkBehaviourAction, PollParameters, - THandler, THandlerInEvent, THandlerOutEvent, + ConnectionDenied, ConnectionId, NetworkBehaviour, PollParameters, THandler, + THandlerInEvent, THandlerOutEvent, ToSwarm, }, }; use libp2p_identity::PeerId; @@ -566,7 +566,7 @@ impl NetworkBehaviour for RequestResponsesBehaviour { &mut self, cx: &mut Context, params: &mut impl PollParameters, - ) -> Poll>> { + ) -> Poll>> { 'poll_all: loop { if let Some(message_request) = self.message_request.take() { // Now we can can poll `MessageRequest` until we get the reputation @@ -689,9 +689,10 @@ impl NetworkBehaviour for RequestResponsesBehaviour { } if !reputation_changes.is_empty() { - return Poll::Ready(NetworkBehaviourAction::GenerateEvent( - Event::ReputationChanges { peer, changes: reputation_changes }, - )) + return Poll::Ready(ToSwarm::GenerateEvent(Event::ReputationChanges { + peer, + changes: reputation_changes, + })) } } @@ -700,34 +701,28 @@ impl NetworkBehaviour for RequestResponsesBehaviour { while let Poll::Ready(ev) = behaviour.poll(cx, params) { let ev = match ev { // Main events we are interested in. - NetworkBehaviourAction::GenerateEvent(ev) => ev, + ToSwarm::GenerateEvent(ev) => ev, // Other events generated by the underlying behaviour are transparently // passed through. - NetworkBehaviourAction::Dial { opts } => { + ToSwarm::Dial { opts } => { if opts.get_peer_id().is_none() { log::error!( "The request-response isn't supposed to start dialing addresses" ); } - return Poll::Ready(NetworkBehaviourAction::Dial { opts }) + return Poll::Ready(ToSwarm::Dial { opts }) }, - NetworkBehaviourAction::NotifyHandler { peer_id, handler, event } => - return Poll::Ready(NetworkBehaviourAction::NotifyHandler { + ToSwarm::NotifyHandler { peer_id, handler, event } => + return Poll::Ready(ToSwarm::NotifyHandler { peer_id, handler, event: ((*protocol).to_string(), event), }), - NetworkBehaviourAction::ReportObservedAddr { address, score } => - return Poll::Ready(NetworkBehaviourAction::ReportObservedAddr { - address, - score, - }), - NetworkBehaviourAction::CloseConnection { peer_id, connection } => - return Poll::Ready(NetworkBehaviourAction::CloseConnection { - peer_id, - connection, - }), + ToSwarm::ReportObservedAddr { address, score } => + return Poll::Ready(ToSwarm::ReportObservedAddr { address, score }), + ToSwarm::CloseConnection { peer_id, connection } => + return Poll::Ready(ToSwarm::CloseConnection { peer_id, connection }), }; match ev { @@ -794,7 +789,7 @@ impl NetworkBehaviour for RequestResponsesBehaviour { result: delivered, }; - return Poll::Ready(NetworkBehaviourAction::GenerateEvent(out)) + return Poll::Ready(ToSwarm::GenerateEvent(out)) }, // One of our requests has failed. @@ -840,7 +835,7 @@ impl NetworkBehaviour for RequestResponsesBehaviour { result: Err(RequestFailure::Network(error)), }; - return Poll::Ready(NetworkBehaviourAction::GenerateEvent(out)) + return Poll::Ready(ToSwarm::GenerateEvent(out)) }, // An inbound request failed, either while reading the request or due to @@ -856,7 +851,7 @@ impl NetworkBehaviour for RequestResponsesBehaviour { protocol: protocol.clone(), result: Err(ResponseFailure::Network(error)), }; - return Poll::Ready(NetworkBehaviourAction::GenerateEvent(out)) + return Poll::Ready(ToSwarm::GenerateEvent(out)) }, // A response to an inbound request has been sent. @@ -885,7 +880,7 @@ impl NetworkBehaviour for RequestResponsesBehaviour { result: Ok(arrival_time), }; - return Poll::Ready(NetworkBehaviourAction::GenerateEvent(out)) + return Poll::Ready(ToSwarm::GenerateEvent(out)) }, }; } @@ -1053,7 +1048,7 @@ mod tests { }, identity::Keypair, noise, - swarm::{Executor, Swarm, SwarmEvent}, + swarm::{Executor, Swarm, SwarmBuilder, SwarmEvent}, Multiaddr, }; use sc_peerset::{Peerset, PeersetConfig, SetConfig}; @@ -1095,12 +1090,13 @@ mod tests { let behaviour = RequestResponsesBehaviour::new(list, handle).unwrap(); let runtime = tokio::runtime::Runtime::new().unwrap(); - let mut swarm = Swarm::with_executor( + let mut swarm = SwarmBuilder::with_executor( transport, behaviour, keypair.public().to_peer_id(), TokioExecutor(runtime), - ); + ) + .build(); let listen_addr: Multiaddr = format!("/memory/{}", rand::random::()).parse().unwrap(); swarm.listen_on(listen_addr.clone()).unwrap(); diff --git a/client/network/src/service.rs b/client/network/src/service.rs index 8179eda7fb6fc..52d3ff2ed3554 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -54,7 +54,9 @@ use crate::{ use either::Either; use futures::{channel::oneshot, prelude::*}; +#[allow(deprecated)] use libp2p::{ + connection_limits::Exceeded, core::{upgrade, ConnectedPoint}, identify::Info as IdentifyInfo, kad::record::Key as KademliaKey, @@ -380,6 +382,7 @@ where SpawnImpl(params.executor), ) }; + #[allow(deprecated)] let builder = builder .connection_limits( ConnectionLimits::default() @@ -1663,7 +1666,14 @@ where } if let Some(metrics) = self.metrics.as_ref() { + #[allow(deprecated)] let reason = match error { + DialError::Denied { cause } => + if cause.downcast::().is_ok() { + Some("limit-reached") + } else { + None + }, DialError::ConnectionLimit(_) => Some("limit-reached"), DialError::InvalidPeerId(_) | DialError::WrongPeerId { .. } | @@ -1672,8 +1682,7 @@ where DialError::Banned | DialError::NoAddresses | DialError::DialPeerConditionFalse(_) | - DialError::Aborted | - DialError::Denied { .. } => None, // ignore them + DialError::Aborted => None, // ignore them }; if let Some(reason) = reason { metrics.pending_connections_errors_total.with_label_values(&[reason]).inc(); @@ -1697,12 +1706,19 @@ where local_addr, send_back_addr, error, ); if let Some(metrics) = self.metrics.as_ref() { + #[allow(deprecated)] let reason = match error { + ListenError::Denied { cause } => + if cause.downcast::().is_ok() { + Some("limit-reached") + } else { + None + }, ListenError::ConnectionLimit(_) => Some("limit-reached"), ListenError::WrongPeerId { .. } | ListenError::LocalPeerId { .. } => Some("invalid-peer-id"), ListenError::Transport(_) => Some("transport-error"), - ListenError::Aborted | ListenError::Denied { .. } => None, // ignore it + ListenError::Aborted => None, // ignore it }; if let Some(reason) = reason { @@ -1713,6 +1729,7 @@ where } } }, + #[allow(deprecated)] SwarmEvent::BannedPeer { peer_id, endpoint } => { debug!( target: "sub-libp2p", diff --git a/client/network/sync/Cargo.toml b/client/network/sync/Cargo.toml index eb7cf14f93633..ab748f5d56652 100644 --- a/client/network/sync/Cargo.toml +++ b/client/network/sync/Cargo.toml @@ -21,7 +21,7 @@ async-trait = "0.1.58" codec = { package = "parity-scale-codec", version = "3.2.2", features = ["derive"] } futures = "0.3.21" futures-timer = "3.0.2" -libp2p = "0.51.1" +libp2p = "0.51.2" log = "0.4.17" lru = "0.8.1" mockall = "0.11.3" diff --git a/client/network/test/Cargo.toml b/client/network/test/Cargo.toml index 0d0286103acdc..3df76be06ed5a 100644 --- a/client/network/test/Cargo.toml +++ b/client/network/test/Cargo.toml @@ -17,7 +17,7 @@ tokio = "1.22.0" async-trait = "0.1.57" futures = "0.3.21" futures-timer = "3.0.1" -libp2p = "0.51.1" +libp2p = "0.51.2" log = "0.4.17" parking_lot = "0.12.1" rand = "0.8.5" diff --git a/client/network/transactions/Cargo.toml b/client/network/transactions/Cargo.toml index 785c9876f3f65..d6723a741df0f 100644 --- a/client/network/transactions/Cargo.toml +++ b/client/network/transactions/Cargo.toml @@ -16,7 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"] array-bytes = "4.1" codec = { package = "parity-scale-codec", version = "3.2.2", features = ["derive"] } futures = "0.3.21" -libp2p = "0.51.1" +libp2p = "0.51.2" log = "0.4.17" pin-project = "1.0.12" prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.10.0-dev", path = "../../../utils/prometheus" } diff --git a/client/offchain/Cargo.toml b/client/offchain/Cargo.toml index 290d749d811d8..acb8957d46395 100644 --- a/client/offchain/Cargo.toml +++ b/client/offchain/Cargo.toml @@ -21,7 +21,7 @@ futures = "0.3.21" futures-timer = "3.0.2" hyper = { version = "0.14.16", features = ["stream", "http2"] } hyper-rustls = { version = "0.23.0", features = ["http2"] } -libp2p = "0.51.1" +libp2p = "0.51.2" 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 9490c261bb933..b733cffe42d4f 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 = "0.51.1" +libp2p = "0.51.2" 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 0ef5aec2b4ae6..6862b1ce8d56c 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.51.1", features = ["dns", "tcp", "tokio", "wasm-ext", "websocket"] } +libp2p = { version = "0.51.2", features = ["dns", "tcp", "tokio", "wasm-ext", "websocket"] } log = "0.4.17" parking_lot = "0.12.1" pin-project = "1.0.12" From 890ce966d3df8a30ae44286ae7b7c409147d8aa4 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Fri, 31 Mar 2023 17:14:23 +0400 Subject: [PATCH 20/48] fix formatting --- client/authority-discovery/src/worker.rs | 8 +++---- .../src/worker/schema/tests.rs | 4 ++-- client/network/src/discovery.rs | 21 ++++++++----------- client/network/src/protocol.rs | 4 ++-- 4 files changed, 16 insertions(+), 21 deletions(-) diff --git a/client/authority-discovery/src/worker.rs b/client/authority-discovery/src/worker.rs index c70291f9256e0..d408100f54194 100644 --- a/client/authority-discovery/src/worker.rs +++ b/client/authority-discovery/src/worker.rs @@ -39,7 +39,7 @@ use libp2p::{ multihash::{Multihash, MultihashDigest}, Multiaddr, }; -use libp2p_identity::PeerId; +use libp2p_identity::{PeerId, PublicKey}; use log::{debug, error, log_enabled}; use prometheus_endpoint::{register, Counter, CounterVec, Gauge, Opts, U64}; @@ -553,10 +553,8 @@ where // properly signed by the owner of the PeerId if let Some(peer_signature) = peer_signature { - let public_key = libp2p_identity::PublicKey::from_protobuf_encoding( - &peer_signature.public_key, - ) - .map_err(Error::ParsingLibp2pIdentity)?; + let public_key = PublicKey::from_protobuf_encoding(&peer_signature.public_key) + .map_err(Error::ParsingLibp2pIdentity)?; let signature = Signature { public_key, bytes: peer_signature.signature }; if !signature.verify(record, &remote_peer_id) { diff --git a/client/authority-discovery/src/worker/schema/tests.rs b/client/authority-discovery/src/worker/schema/tests.rs index 33275204eca69..d39a497dc3173 100644 --- a/client/authority-discovery/src/worker/schema/tests.rs +++ b/client/authority-discovery/src/worker/schema/tests.rs @@ -22,7 +22,7 @@ mod schema_v1 { use super::*; use libp2p::multiaddr::Multiaddr; -use libp2p_identity::PeerId; +use libp2p_identity::{Keypair, PeerId}; use prost::Message; #[test] @@ -56,7 +56,7 @@ fn v2_decodes_v1() { #[test] fn v1_decodes_v2() { - let peer_secret = libp2p_identity::Keypair::generate_ed25519(); + let peer_secret = Keypair::generate_ed25519(); let peer_public = peer_secret.public(); let peer_id = peer_public.to_peer_id(); let multiaddress: Multiaddr = diff --git a/client/network/src/discovery.rs b/client/network/src/discovery.rs index 5e937d209e032..ccaf5e1b985ce 100644 --- a/client/network/src/discovery.rs +++ b/client/network/src/discovery.rs @@ -537,14 +537,11 @@ impl NetworkBehaviour for DiscoveryBehaviour { ) -> Result, ConnectionDenied> { let Some(peer_id) = maybe_peer else { return Ok(Vec::new()); }; - let mut list = Vec::new(); - - list.extend( - self.permanent_addresses - .iter() - .filter_map(|(p, a)| if *p == peer_id { Some(a.clone()) } else { None }) - .collect::>(), - ); + let mut list = self + .permanent_addresses + .iter() + .filter_map(|(p, a)| if *p == peer_id { Some(a.clone()) } else { None }) + .collect::>(); if let Some(ephemeral_addresses) = self.ephemeral_addresses.get(&peer_id) { list.extend(ephemeral_addresses.clone()); @@ -578,7 +575,7 @@ impl NetworkBehaviour for DiscoveryBehaviour { list.extend(list_to_filter); } - trace!(target: "sub-libp2p","Addresses of {:?}: {:?}", peer_id, list); + trace!(target: "sub-libp2p", "Addresses of {:?}: {:?}", peer_id, list); Ok(list) } @@ -909,9 +906,9 @@ impl NetworkBehaviour for DiscoveryBehaviour { ToSwarm::Dial { .. } => { unreachable!("mDNS never dials!"); }, - ToSwarm::NotifyHandler { event, .. } => match event {}, /* `event` is an - * enum with no - * variant */ + ToSwarm::NotifyHandler { event, .. } => match event {}, /* `event` is an */ + // enum with no + // variant ToSwarm::ReportObservedAddr { address, score } => return Poll::Ready(ToSwarm::ReportObservedAddr { address, score }), ToSwarm::CloseConnection { peer_id, connection } => diff --git a/client/network/src/protocol.rs b/client/network/src/protocol.rs index 45b1891d0b10c..7a175255b1f40 100644 --- a/client/network/src/protocol.rs +++ b/client/network/src/protocol.rs @@ -417,8 +417,8 @@ impl NetworkBehaviour for Protocol { _addresses: &[Multiaddr], _effective_role: Endpoint, ) -> Result, ConnectionDenied> { - // Only `Discovery::addresses_of_peer` must be returning addresses to ensure that we - // don't return unwanted addresses. + // Only `Discovery::handle_pending_outbound_connection` must be returning addresses to + // ensure that we don't return unwanted addresses. Ok(Vec::new()) } From 31f56539474dc3ce5fcb30756bdfec3d2085f83b Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Mon, 3 Apr 2023 12:25:17 +0400 Subject: [PATCH 21/48] use handle_pending_outbound_connection in networt_state RPC --- client/network/src/service.rs | 34 +++++++++++++++++++--------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/client/network/src/service.rs b/client/network/src/service.rs index 73044582935ab..e8187ad3e83ee 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -57,14 +57,14 @@ use futures::{channel::oneshot, prelude::*}; #[allow(deprecated)] use libp2p::{ connection_limits::Exceeded, - core::{upgrade, ConnectedPoint}, + core::{upgrade, ConnectedPoint, Endpoint}, identify::Info as IdentifyInfo, kad::record::Key as KademliaKey, multiaddr, ping::Failure as PingFailure, swarm::{ - AddressScore, ConnectionError, ConnectionLimits, DialError, Executor, ListenError, - NetworkBehaviour, Swarm, SwarmBuilder, SwarmEvent, THandlerErr, + AddressScore, ConnectionError, ConnectionId, ConnectionLimits, DialError, Executor, + ListenError, NetworkBehaviour, Swarm, SwarmBuilder, SwarmEvent, THandlerErr, }, Multiaddr, }; @@ -525,12 +525,16 @@ where let swarm = &mut *swarm; open.iter() .filter_map(move |peer_id| { - // TODO: either use `NetworkBehaviour::handle_pending_outbound_connection`, - // which requires `ConnectionId` OR store this info somewhere. - #[allow(deprecated)] - let known_addresses = NetworkBehaviour::addresses_of_peer(swarm.behaviour_mut(), peer_id) - .into_iter() - .collect(); + let known_addresses = NetworkBehaviour::handle_pending_outbound_connection( + swarm.behaviour_mut(), + ConnectionId::new_unchecked(0), // dummy value + Some(*peer_id), + &vec![], + Endpoint::Listener, + ) + .expect("network_state request to not be denied") + .into_iter() + .collect(); let endpoint = if let Some(e) = swarm.behaviour_mut().node(peer_id).and_then(|i| i.endpoint()) @@ -563,7 +567,6 @@ where let not_connected_peers = { let swarm = &mut *swarm; - #[allow(deprecated)] swarm .behaviour_mut() .known_peers() @@ -581,13 +584,14 @@ where .behaviour_mut() .node(&peer_id) .and_then(|i| i.latest_ping()), - // TODO: either use - // `NetworkBehaviour::handle_pending_outbound_connection`, which - // requires `ConnectionId` OR store this info somewhere. - known_addresses: NetworkBehaviour::addresses_of_peer( + known_addresses: NetworkBehaviour::handle_pending_outbound_connection( swarm.behaviour_mut(), - &peer_id, + ConnectionId::new_unchecked(0), // dummy value + Some(peer_id), + &vec![], + Endpoint::Listener, ) + .expect("networt_state request to not be denied") .into_iter() .collect(), }, From ae2c0c448dfad854251c445aa130fcfb9b26911c Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Mon, 3 Apr 2023 12:44:35 +0400 Subject: [PATCH 22/48] update deps --- Cargo.lock | 132 ++++++++++++++++++++++++++--------------------------- 1 file changed, 66 insertions(+), 66 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4fbc5a8c0d074..1ab83638919af 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -57,9 +57,9 @@ dependencies = [ [[package]] name = "aead" -version = "0.5.1" +version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c192eb8f11fc081b0fe4259ba5af04217d4e0faddd02417310a927911abd7c8" +checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" dependencies = [ "crypto-common", "generic-array 0.14.7", @@ -119,7 +119,7 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82e1366e0c69c9f927b1fa5ce2c7bf9eafc8f9268c0b9800729e8b267612447c" dependencies = [ - "aead 0.5.1", + "aead 0.5.2", "aes 0.8.2", "cipher 0.4.4", "ctr 0.9.2", @@ -407,7 +407,7 @@ dependencies = [ "log", "parking", "polling", - "rustix 0.37.5", + "rustix 0.37.6", "slab", "socket2", "waker-fn", @@ -452,7 +452,7 @@ checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" dependencies = [ "proc-macro2", "quote", - "syn 2.0.11", + "syn 2.0.13", ] [[package]] @@ -1088,7 +1088,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.11", + "syn 2.0.13", ] [[package]] @@ -1175,9 +1175,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.3" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" +checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" [[package]] name = "core2" @@ -1563,7 +1563,7 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.11", + "syn 2.0.13", ] [[package]] @@ -1580,7 +1580,7 @@ checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.11", + "syn 2.0.13", ] [[package]] @@ -2018,22 +2018,22 @@ dependencies = [ [[package]] name = "enumflags2" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e75d4cd21b95383444831539909fbb14b9dc3fdceb2a6f5d36577329a1f55ccb" +checksum = "0044ebdf7fbb2a772e0c0233a9d3173c5cd8af8ae7078d4c5188af44ffffaa4b" dependencies = [ "enumflags2_derive", ] [[package]] name = "enumflags2_derive" -version = "0.7.4" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" +checksum = "9d2c772ccdbdfd1967b4f5d79d17c98ebf92009fdcc838db7aa434462f600c26" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.13", ] [[package]] @@ -2180,9 +2180,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93ace6ec7cc19c8ed33a32eaa9ea692d7faea05006b5356b9e2b668ec4bc3955" +checksum = "e825f6987101665dea6ec934c09ec6d721de7bc1bf92248e1d5810c8cd636b77" [[package]] name = "file-per-thread-logger" @@ -2460,9 +2460,9 @@ dependencies = [ [[package]] name = "frame-metadata" -version = "15.0.0" +version = "15.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df6bb8542ef006ef0de09a5c4420787d79823c0ed7924225822362fd2bf2ff2d" +checksum = "878babb0b136e731cc77ec2fd883ff02745ff21e6fb662729953d44923df009c" dependencies = [ "cfg-if", "parity-scale-codec", @@ -2699,9 +2699,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "531ac96c6ff5fd7c62263c5e3c67a603af4fcaee2e1a0ae5565ba3a11e69e549" +checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" dependencies = [ "futures-channel", "futures-core", @@ -2714,9 +2714,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "164713a5a0dcc3e7b4b1ed7d3b433cabc18025386f9339346e8daf15963cf7ac" +checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" dependencies = [ "futures-core", "futures-sink", @@ -2724,15 +2724,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86d7a0c1aa76363dac491de0ee99faf6941128376f1cf96f07db7603b7de69dd" +checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" [[package]] name = "futures-executor" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1997dd9df74cdac935c76252744c1ed5794fac083242ea4fe77ef3ed60ba0f83" +checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" dependencies = [ "futures-core", "futures-task", @@ -2742,9 +2742,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89d422fa3cbe3b40dca574ab087abb5bc98258ea57eea3fd6f1fa7162c778b91" +checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" [[package]] name = "futures-lite" @@ -2763,13 +2763,13 @@ dependencies = [ [[package]] name = "futures-macro" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3eb14ed937631bd8b8b8977f2c198443447a8355b6e3ca599f38c975e5a963b6" +checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.13", ] [[package]] @@ -2785,15 +2785,15 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec93083a4aecafb2a80a885c9de1f0ccae9dbd32c2bb54b0c3a65690e0b8d2f2" +checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" [[package]] name = "futures-task" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd65540d33b37b16542a0438c12e6aeead10d4ac5d05bd3f805b8f35ab592879" +checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" [[package]] name = "futures-timer" @@ -2803,9 +2803,9 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c" [[package]] name = "futures-util" -version = "0.3.27" +version = "0.3.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ef6b17e481503ec85211fed8f39d1970f128935ca1f814cd32ac4a6842e84ab" +checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" dependencies = [ "futures-channel", "futures-core", @@ -3470,7 +3470,7 @@ checksum = "256017f749ab3117e93acb91063009e1f1bb56d03965b14c2c8df4eb02c524d8" dependencies = [ "hermit-abi 0.3.1", "io-lifetimes 1.0.9", - "rustix 0.37.5", + "rustix 0.37.6", "windows-sys 0.45.0", ] @@ -4426,9 +4426,9 @@ checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" [[package]] name = "linux-raw-sys" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd550e73688e6d578f0ac2119e32b797a327631a42f9433e59d02e139c8df60d" +checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" [[package]] name = "lite-json" @@ -4583,7 +4583,7 @@ version = "0.6.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ffc89ccdc6e10d6907450f753537ebc5c5d3460d2e4e62ea74bd571db62c0f9e" dependencies = [ - "rustix 0.37.5", + "rustix 0.37.6", ] [[package]] @@ -7249,9 +7249,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.5.6" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cbd939b234e95d72bc393d51788aec68aeeb5d51e748ca08ff3aad58cb722f7" +checksum = "7b1403e8401ad5dedea73c626b99758535b342502f8d1e361f4a2dd952749122" dependencies = [ "thiserror", "ucd-trie", @@ -7259,9 +7259,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.5.6" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a81186863f3d0a27340815be8f2078dd8050b14cd71913db9fbda795e5f707d7" +checksum = "be99c4c1d2fc2769b1d00239431d711d08f6efedcecb8b6e30707160aee99c15" dependencies = [ "pest", "pest_generator", @@ -7269,22 +7269,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.6" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75a1ef20bf3193c15ac345acb32e26b3dc3223aff4d77ae4fc5359567683796b" +checksum = "e56094789873daa36164de2e822b3888c6ae4b4f9da555a1103587658c805b1e" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.13", ] [[package]] name = "pest_meta" -version = "2.5.6" +version = "2.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e3b284b1f13a20dc5ebc90aff59a51b8d7137c221131b52a7260c08cbc1cc80" +checksum = "6733073c7cff3d8459fda0e42f13a047870242aed8b509fe98000928975f359e" dependencies = [ "once_cell", "pest", @@ -7575,9 +7575,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.54" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e472a104799c74b514a57226160104aa483546de37e839ec50e3c2e41dd87534" +checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" dependencies = [ "unicode-ident", ] @@ -7952,7 +7952,7 @@ checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.11", + "syn 2.0.13", ] [[package]] @@ -8197,15 +8197,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.5" +version = "0.37.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e78cc525325c06b4a7ff02db283472f3c042b7ff0c391f96c6d5ac6f4f91b75" +checksum = "d097081ed288dfe45699b72f5b5d648e5f15d64d900c7080273baa20c16a6849" dependencies = [ "bitflags", "errno 0.3.0", "io-lifetimes 1.0.9", "libc", - "linux-raw-sys 0.3.0", + "linux-raw-sys 0.3.1", "windows-sys 0.45.0", ] @@ -9955,7 +9955,7 @@ checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585" dependencies = [ "proc-macro2", "quote", - "syn 2.0.11", + "syn 2.0.13", ] [[package]] @@ -11439,9 +11439,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.11" +version = "2.0.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21e3787bb71465627110e7d87ed4faaa36c1f61042ee67badb9e2ef173accc40" +checksum = "4c9da457c5285ac1f936ebd076af6dac17a61cfe7826f2076b4d015cf47bc8ec" dependencies = [ "proc-macro2", "quote", @@ -11502,7 +11502,7 @@ dependencies = [ "cfg-if", "fastrand", "redox_syscall 0.3.5", - "rustix 0.37.5", + "rustix 0.37.6", "windows-sys 0.45.0", ] @@ -11544,7 +11544,7 @@ checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.11", + "syn 2.0.13", ] [[package]] @@ -11700,7 +11700,7 @@ checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce" dependencies = [ "proc-macro2", "quote", - "syn 2.0.11", + "syn 2.0.13", ] [[package]] @@ -13298,13 +13298,13 @@ dependencies = [ [[package]] name = "zeroize_derive" -version = "1.4.1" +version = "1.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25588073e5216b50bca71d61cb8595cdb9745e87032a58c199730def2862c934" +checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.11", + "syn 2.0.13", ] [[package]] From 3f0ca7e70f0dd67b3d16b83eff1b92f5d520af27 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Mon, 3 Apr 2023 16:19:04 +0400 Subject: [PATCH 23/48] use re-exports when we use other libp2p packages --- Cargo.lock | 2 -- client/authority-discovery/Cargo.toml | 3 +-- client/authority-discovery/src/error.rs | 2 +- client/authority-discovery/src/lib.rs | 3 +-- client/authority-discovery/src/service.rs | 3 +-- client/authority-discovery/src/tests.rs | 7 +++++-- client/authority-discovery/src/worker.rs | 4 ++-- client/authority-discovery/src/worker/addr_cache.rs | 6 ++++-- client/authority-discovery/src/worker/schema/tests.rs | 3 +-- client/authority-discovery/src/worker/tests.rs | 8 ++++++-- client/network/Cargo.toml | 1 - client/network/src/behaviour.rs | 4 ++-- client/network/src/config.rs | 3 +-- client/network/src/discovery.rs | 2 +- client/network/src/event.rs | 3 +-- client/network/src/lib.rs | 3 +-- client/network/src/peer_info.rs | 4 ++-- client/network/src/protocol/notifications/behaviour.rs | 2 +- client/network/src/protocol/notifications/handler.rs | 2 +- client/network/src/request_responses.rs | 2 +- client/network/src/service.rs | 5 ++--- client/network/src/service/signature.rs | 7 +++++-- client/network/src/service/traits.rs | 3 +-- 23 files changed, 41 insertions(+), 41 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 1ab83638919af..2e7c6ff28c336 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8335,7 +8335,6 @@ dependencies = [ "futures-timer", "ip_network", "libp2p", - "libp2p-identity", "log", "parity-scale-codec", "prost", @@ -9030,7 +9029,6 @@ dependencies = [ "futures-timer", "ip_network", "libp2p", - "libp2p-identity", "linked_hash_set", "log", "lru 0.8.1", diff --git a/client/authority-discovery/Cargo.toml b/client/authority-discovery/Cargo.toml index 209f47b222fe4..8d8e09772e464 100644 --- a/client/authority-discovery/Cargo.toml +++ b/client/authority-discovery/Cargo.toml @@ -21,8 +21,7 @@ codec = { package = "parity-scale-codec", version = "3.2.2", default-features = futures = "0.3.21" futures-timer = "3.0.1" ip_network = "0.4.1" -libp2p = { version = "0.51.2", features = ["kad"] } -libp2p-identity = { version = "0.1.0", features = ["peerid", "ed25519"] } +libp2p = { version = "0.51.2", features = ["kad", "ed25519"] } log = "0.4.17" prost = "0.11" rand = "0.8.5" diff --git a/client/authority-discovery/src/error.rs b/client/authority-discovery/src/error.rs index bb1b4bc0ca103..ca685115d4975 100644 --- a/client/authority-discovery/src/error.rs +++ b/client/authority-discovery/src/error.rs @@ -56,7 +56,7 @@ pub enum Error { ParsingMultiaddress(#[from] libp2p::core::multiaddr::Error), #[error("Failed to parse a libp2p key.")] - ParsingLibp2pIdentity(#[from] libp2p_identity::DecodingError), + ParsingLibp2pIdentity(#[from] libp2p::identity::DecodingError), #[error("Failed to sign: {0}.")] CannotSign(String), diff --git a/client/authority-discovery/src/lib.rs b/client/authority-discovery/src/lib.rs index abc9f03237637..6bb12804cada3 100644 --- a/client/authority-discovery/src/lib.rs +++ b/client/authority-discovery/src/lib.rs @@ -40,8 +40,7 @@ use futures::{ Stream, }; -use libp2p::Multiaddr; -use libp2p_identity::PeerId; +use libp2p::{Multiaddr, PeerId}; use sc_network::event::DhtEvent; use sp_authority_discovery::AuthorityId; use sp_blockchain::HeaderBackend; diff --git a/client/authority-discovery/src/service.rs b/client/authority-discovery/src/service.rs index bbb0f3568a4ca..89ae058d17f7a 100644 --- a/client/authority-discovery/src/service.rs +++ b/client/authority-discovery/src/service.rs @@ -25,8 +25,7 @@ use futures::{ SinkExt, }; -use libp2p::Multiaddr; -use libp2p_identity::PeerId; +use libp2p::{Multiaddr, PeerId}; use sp_authority_discovery::AuthorityId; /// Service to interact with the [`crate::Worker`]. diff --git a/client/authority-discovery/src/tests.rs b/client/authority-discovery/src/tests.rs index 50a3e5454625d..4fbc196c5ecd1 100644 --- a/client/authority-discovery/src/tests.rs +++ b/client/authority-discovery/src/tests.rs @@ -25,8 +25,11 @@ use crate::{ }; use futures::{channel::mpsc::channel, executor::LocalPool, task::LocalSpawn}; -use libp2p::core::multiaddr::{Multiaddr, Protocol}; -use libp2p_identity::{ed25519, PeerId}; +use libp2p::{ + core::multiaddr::{Multiaddr, Protocol}, + identity::ed25519, + PeerId, +}; use std::{collections::HashSet, sync::Arc}; use sp_authority_discovery::AuthorityId; diff --git a/client/authority-discovery/src/worker.rs b/client/authority-discovery/src/worker.rs index d408100f54194..11369f711f0d1 100644 --- a/client/authority-discovery/src/worker.rs +++ b/client/authority-discovery/src/worker.rs @@ -36,10 +36,10 @@ use codec::{Decode, Encode}; use ip_network::IpNetwork; use libp2p::{ core::multiaddr, + identity::PublicKey, multihash::{Multihash, MultihashDigest}, - Multiaddr, + Multiaddr, PeerId, }; -use libp2p_identity::{PeerId, PublicKey}; use log::{debug, error, log_enabled}; use prometheus_endpoint::{register, Counter, CounterVec, Gauge, Opts, U64}; diff --git a/client/authority-discovery/src/worker/addr_cache.rs b/client/authority-discovery/src/worker/addr_cache.rs index 06419d38d33f4..8084b7f0a6dff 100644 --- a/client/authority-discovery/src/worker/addr_cache.rs +++ b/client/authority-discovery/src/worker/addr_cache.rs @@ -16,8 +16,10 @@ // You should have received a copy of the GNU General Public License // along with this program. If not, see . -use libp2p::core::multiaddr::{Multiaddr, Protocol}; -use libp2p_identity::PeerId; +use libp2p::{ + core::multiaddr::{Multiaddr, Protocol}, + PeerId, +}; use sp_authority_discovery::AuthorityId; use std::collections::{hash_map::Entry, HashMap, HashSet}; diff --git a/client/authority-discovery/src/worker/schema/tests.rs b/client/authority-discovery/src/worker/schema/tests.rs index d39a497dc3173..7d04ea4edf556 100644 --- a/client/authority-discovery/src/worker/schema/tests.rs +++ b/client/authority-discovery/src/worker/schema/tests.rs @@ -21,8 +21,7 @@ mod schema_v1 { } use super::*; -use libp2p::multiaddr::Multiaddr; -use libp2p_identity::{Keypair, PeerId}; +use libp2p::{identity::Keypair, multiaddr::Multiaddr, PeerId}; use prost::Message; #[test] diff --git a/client/authority-discovery/src/worker/tests.rs b/client/authority-discovery/src/worker/tests.rs index 87ae2f5674d75..c29120881940c 100644 --- a/client/authority-discovery/src/worker/tests.rs +++ b/client/authority-discovery/src/worker/tests.rs @@ -29,8 +29,12 @@ use futures::{ sink::SinkExt, task::LocalSpawn, }; -use libp2p::{core::multiaddr, kad::record::Key as KademliaKey}; -use libp2p_identity::{Keypair, PeerId, SigningError}; +use libp2p::{ + core::multiaddr, + identity::{Keypair, SigningError}, + kad::record::Key as KademliaKey, + PeerId, +}; use prometheus_endpoint::prometheus::default_registry; use sc_client_api::HeaderBackend; diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index 215d1ff9f9378..28daeb6d43fc7 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -26,7 +26,6 @@ futures = "0.3.21" futures-timer = "3.0.2" ip_network = "0.4.1" libp2p = { version = "0.51.2", features = ["dns", "identify", "kad", "macros", "mdns", "mplex", "noise", "ping", "tcp", "tokio", "yamux", "websocket", "request-response"] } -libp2p-identity = { version = "0.1.0", features = ["ed25519", "peerid"] } linked_hash_set = "0.1.3" log = "0.4.17" lru = "0.8.1" diff --git a/client/network/src/behaviour.rs b/client/network/src/behaviour.rs index a91d2e87fec7c..aae7992f3693e 100644 --- a/client/network/src/behaviour.rs +++ b/client/network/src/behaviour.rs @@ -28,9 +28,9 @@ use crate::{ use bytes::Bytes; use futures::channel::oneshot; use libp2p::{ - core::Multiaddr, identify::Info as IdentifyInfo, kad::record, swarm::NetworkBehaviour, + core::Multiaddr, identify::Info as IdentifyInfo, identity::PublicKey, kad::record, + swarm::NetworkBehaviour, PeerId, }; -use libp2p_identity::{PeerId, PublicKey}; use sc_network_common::role::{ObservedRole, Roles}; use sc_peerset::{PeersetHandle, ReputationChange}; diff --git a/client/network/src/config.rs b/client/network/src/config.rs index 0d10c73b971fb..9e8d54463d08c 100644 --- a/client/network/src/config.rs +++ b/client/network/src/config.rs @@ -29,8 +29,7 @@ pub use crate::{ types::ProtocolName, }; -pub use libp2p::{multiaddr, Multiaddr}; -pub use libp2p_identity::{Keypair, PeerId}; +pub use libp2p::{identity::Keypair, multiaddr, Multiaddr, PeerId}; use codec::Encode; use prometheus_endpoint::Registry; diff --git a/client/network/src/discovery.rs b/client/network/src/discovery.rs index ccaf5e1b985ce..d432a2096c3bd 100644 --- a/client/network/src/discovery.rs +++ b/client/network/src/discovery.rs @@ -73,8 +73,8 @@ use libp2p::{ ConnectionDenied, ConnectionId, DialError, NetworkBehaviour, PollParameters, THandler, THandlerInEvent, THandlerOutEvent, ToSwarm, }, + PeerId, }; -use libp2p_identity::PeerId; use log::{debug, info, trace, warn}; use sp_core::hexdisplay::HexDisplay; use std::{ diff --git a/client/network/src/event.rs b/client/network/src/event.rs index af1af63c735f0..9c1034ea3dc61 100644 --- a/client/network/src/event.rs +++ b/client/network/src/event.rs @@ -23,8 +23,7 @@ use crate::{types::ProtocolName, NotificationsSink}; use bytes::Bytes; use futures::channel::oneshot; -use libp2p::kad::record::Key; -use libp2p_identity::PeerId; +use libp2p::{kad::record::Key, PeerId}; use sc_network_common::{role::ObservedRole, sync::message::BlockAnnouncesHandshake}; use sp_runtime::traits::Block as BlockT; diff --git a/client/network/src/lib.rs b/client/network/src/lib.rs index d14afabb9cf2b..f29eb69ade64e 100644 --- a/client/network/src/lib.rs +++ b/client/network/src/lib.rs @@ -261,8 +261,7 @@ pub mod utils; pub use event::{DhtEvent, Event, SyncEvent}; #[doc(inline)] -pub use libp2p::{multiaddr, Multiaddr}; -pub use libp2p_identity::PeerId; +pub use libp2p::{multiaddr, Multiaddr, PeerId}; pub use request_responses::{Config, IfDisconnected, RequestFailure}; pub use sc_network_common::{ role::ObservedRole, diff --git a/client/network/src/peer_info.rs b/client/network/src/peer_info.rs index 3989282290c58..727e729462dee 100644 --- a/client/network/src/peer_info.rs +++ b/client/network/src/peer_info.rs @@ -27,6 +27,7 @@ use libp2p::{ Behaviour as Identify, Config as IdentifyConfig, Event as IdentifyEvent, Info as IdentifyInfo, }, + identity::PublicKey, ping::{Behaviour as Ping, Config as PingConfig, Event as PingEvent, Success as PingSuccess}, swarm::{ behaviour::{ @@ -36,9 +37,8 @@ use libp2p::{ ConnectionDenied, ConnectionHandler, ConnectionId, IntoConnectionHandlerSelect, NetworkBehaviour, PollParameters, THandler, THandlerInEvent, THandlerOutEvent, ToSwarm, }, - Multiaddr, + Multiaddr, PeerId, }; -use libp2p_identity::{PeerId, PublicKey}; use log::{debug, error, trace}; use smallvec::SmallVec; diff --git a/client/network/src/protocol/notifications/behaviour.rs b/client/network/src/protocol/notifications/behaviour.rs index e6edf621141c4..03666a9cc41bc 100644 --- a/client/network/src/protocol/notifications/behaviour.rs +++ b/client/network/src/protocol/notifications/behaviour.rs @@ -33,8 +33,8 @@ use libp2p::{ ConnectionDenied, ConnectionId, DialError, NetworkBehaviour, NotifyHandler, PollParameters, THandler, THandlerInEvent, THandlerOutEvent, ToSwarm, }, + PeerId, }; -use libp2p_identity::PeerId; use log::{error, trace, warn}; use parking_lot::RwLock; use rand::distributions::{Distribution as _, Uniform}; diff --git a/client/network/src/protocol/notifications/handler.rs b/client/network/src/protocol/notifications/handler.rs index ebff6331271b1..665b646ecdcfa 100644 --- a/client/network/src/protocol/notifications/handler.rs +++ b/client/network/src/protocol/notifications/handler.rs @@ -77,8 +77,8 @@ use libp2p::{ handler::ConnectionEvent, ConnectionHandler, ConnectionHandlerEvent, KeepAlive, NegotiatedSubstream, SubstreamProtocol, }, + PeerId, }; -use libp2p_identity::PeerId; use log::error; use parking_lot::{Mutex, RwLock}; use std::{ diff --git a/client/network/src/request_responses.rs b/client/network/src/request_responses.rs index 8d4846b9e4de3..c80ea1f7e2988 100644 --- a/client/network/src/request_responses.rs +++ b/client/network/src/request_responses.rs @@ -49,8 +49,8 @@ use libp2p::{ ConnectionDenied, ConnectionId, NetworkBehaviour, PollParameters, THandler, THandlerInEvent, THandlerOutEvent, ToSwarm, }, + PeerId, }; -use libp2p_identity::PeerId; use sc_peerset::{PeersetHandle, BANNED_THRESHOLD}; diff --git a/client/network/src/service.rs b/client/network/src/service.rs index e8187ad3e83ee..2e6dcac6bb42f 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -66,9 +66,8 @@ use libp2p::{ AddressScore, ConnectionError, ConnectionId, ConnectionLimits, DialError, Executor, ListenError, NetworkBehaviour, Swarm, SwarmBuilder, SwarmEvent, THandlerErr, }, - Multiaddr, + Multiaddr, PeerId, }; -use libp2p_identity::PeerId; use log::{debug, error, info, trace, warn}; use metrics::{Histogram, HistogramVec, MetricSources, Metrics}; use parking_lot::Mutex; @@ -93,7 +92,7 @@ use std::{ }; pub use behaviour::{InboundFailure, OutboundFailure, ResponseFailure}; -pub use libp2p_identity::{DecodingError, Keypair, PublicKey}; +pub use libp2p::identity::{DecodingError, Keypair, PublicKey}; pub use protocol::NotificationsSink; mod metrics; diff --git a/client/network/src/service/signature.rs b/client/network/src/service/signature.rs index 56e1f07995b19..024f60e4c466b 100644 --- a/client/network/src/service/signature.rs +++ b/client/network/src/service/signature.rs @@ -18,9 +18,12 @@ // // If you read this, you are very thorough, congratulations. -use libp2p_identity::{Keypair, PeerId, PublicKey}; +use libp2p::{ + identity::{Keypair, PublicKey}, + PeerId, +}; -pub use libp2p_identity::SigningError; +pub use libp2p::identity::SigningError; /// A result of signing a message with a network identity. Since `PeerId` is potentially a hash of a /// `PublicKey`, you need to reveal the `PublicKey` next to the signature, so the verifier can check diff --git a/client/network/src/service/traits.rs b/client/network/src/service/traits.rs index 35ec389bf15f0..787ef4b5ae445 100644 --- a/client/network/src/service/traits.rs +++ b/client/network/src/service/traits.rs @@ -33,8 +33,7 @@ use sc_peerset::ReputationChange; use std::{collections::HashSet, future::Future, pin::Pin, sync::Arc}; -pub use libp2p::kad::record::Key as KademliaKey; -pub use libp2p_identity::SigningError; +pub use libp2p::{identity::SigningError, kad::record::Key as KademliaKey}; /// Signer with network identity pub trait NetworkSigner { From 83f5373ca30ee616fbb0e0e9ac3ab1e5f519b0bd Mon Sep 17 00:00:00 2001 From: Anton Date: Mon, 3 Apr 2023 16:54:16 +0400 Subject: [PATCH 24/48] Apply suggestions from code review Co-authored-by: Dmitry Markin --- client/network/src/discovery.rs | 4 +--- client/network/src/peer_info.rs | 8 ++++---- client/network/src/request_responses.rs | 8 ++++---- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/client/network/src/discovery.rs b/client/network/src/discovery.rs index d432a2096c3bd..bf457de400e79 100644 --- a/client/network/src/discovery.rs +++ b/client/network/src/discovery.rs @@ -906,9 +906,7 @@ impl NetworkBehaviour for DiscoveryBehaviour { ToSwarm::Dial { .. } => { unreachable!("mDNS never dials!"); }, - ToSwarm::NotifyHandler { event, .. } => match event {}, /* `event` is an */ - // enum with no - // variant + ToSwarm::NotifyHandler { event, .. } => match event {}, // `event` is an enum with no variant ToSwarm::ReportObservedAddr { address, score } => return Poll::Ready(ToSwarm::ReportObservedAddr { address, score }), ToSwarm::CloseConnection { peer_id, connection } => diff --git a/client/network/src/peer_info.rs b/client/network/src/peer_info.rs index 727e729462dee..e4a5c5753a00c 100644 --- a/client/network/src/peer_info.rs +++ b/client/network/src/peer_info.rs @@ -221,13 +221,13 @@ impl NetworkBehaviour for PeerInfoBehaviour { local_addr, remote_addr, )?; - let identity_handler = self.identify.handle_established_inbound_connection( + let identify_handler = self.identify.handle_established_inbound_connection( connection_id, peer, local_addr, remote_addr, )?; - Ok(ping_handler.select(identity_handler)) + Ok(ping_handler.select(identify_handler)) } fn handle_established_outbound_connection( @@ -243,13 +243,13 @@ impl NetworkBehaviour for PeerInfoBehaviour { addr, role_override, )?; - let identity_handler = self.identify.handle_established_outbound_connection( + let identify_handler = self.identify.handle_established_outbound_connection( connection_id, peer, addr, role_override, )?; - Ok(ping_handler.select(identity_handler)) + Ok(ping_handler.select(identify_handler)) } fn on_swarm_event(&mut self, event: FromSwarm) { diff --git a/client/network/src/request_responses.rs b/client/network/src/request_responses.rs index c80ea1f7e2988..fc54e0a53e4a9 100644 --- a/client/network/src/request_responses.rs +++ b/client/network/src/request_responses.rs @@ -257,12 +257,12 @@ impl From<(ProtocolName, RequestId)> for ProtocolRequestId { pub struct RequestResponsesBehaviour { /// The multiple sub-protocols, by name. /// - /// Contains the underlying libp2p [`Behaviour`] behaviour, plus an optional + /// Contains the underlying libp2p request-response [`Behaviour`], plus an optional /// "response builder" used to build responses for incoming requests. protocols: HashMap, Option>)>, - /// Pending requests, passed down to a [`Behaviour`] behaviour, awaiting a reply. + /// Pending requests, passed down to a request-response [`Behaviour`], awaiting a reply. pending_requests: HashMap, RequestFailure>>)>, @@ -620,7 +620,7 @@ impl NetworkBehaviour for RequestResponsesBehaviour { // initialization. if let Some(mut resp_builder) = resp_builder { // If the response builder is too busy, silently drop `tx`. This - // will be reported by the corresponding [`Behaviour`] through + // will be reported by the corresponding request-response [`Behaviour`] through // an `InboundFailure::Omission` event. let _ = resp_builder.try_send(IncomingRequest { peer, @@ -673,7 +673,7 @@ impl NetworkBehaviour for RequestResponsesBehaviour { if let Some((protocol, _)) = self.protocols.get_mut(&*protocol_name) { if protocol.send_response(inner_channel, Ok(payload)).is_err() { // Note: Failure is handled further below when receiving - // `InboundFailure` event from [`Behaviour`] behaviour. + // `InboundFailure` event from request-response [`Behaviour`]. log::debug!( target: "sub-libp2p", "Failed to send response for {:?} on protocol {:?} due to a \ From 854509b3427db4617a0ca056baf6243dc0a05562 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Mon, 3 Apr 2023 16:56:08 +0400 Subject: [PATCH 25/48] format code --- client/network/src/discovery.rs | 4 +++- client/network/src/request_responses.rs | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/client/network/src/discovery.rs b/client/network/src/discovery.rs index bf457de400e79..5e57d3d0fb492 100644 --- a/client/network/src/discovery.rs +++ b/client/network/src/discovery.rs @@ -906,7 +906,9 @@ impl NetworkBehaviour for DiscoveryBehaviour { ToSwarm::Dial { .. } => { unreachable!("mDNS never dials!"); }, - ToSwarm::NotifyHandler { event, .. } => match event {}, // `event` is an enum with no variant + ToSwarm::NotifyHandler { event, .. } => match event {}, /* `event` is an + * enum with no + * variant */ ToSwarm::ReportObservedAddr { address, score } => return Poll::Ready(ToSwarm::ReportObservedAddr { address, score }), ToSwarm::CloseConnection { peer_id, connection } => diff --git a/client/network/src/request_responses.rs b/client/network/src/request_responses.rs index fc54e0a53e4a9..b062beac2b542 100644 --- a/client/network/src/request_responses.rs +++ b/client/network/src/request_responses.rs @@ -620,8 +620,8 @@ impl NetworkBehaviour for RequestResponsesBehaviour { // initialization. if let Some(mut resp_builder) = resp_builder { // If the response builder is too busy, silently drop `tx`. This - // will be reported by the corresponding request-response [`Behaviour`] through - // an `InboundFailure::Omission` event. + // will be reported by the corresponding request-response [`Behaviour`] + // through an `InboundFailure::Omission` event. let _ = resp_builder.try_send(IncomingRequest { peer, payload: request, From 3a865c5e9112a65befec9bcad78d8502c594054d Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Mon, 3 Apr 2023 17:26:30 +0400 Subject: [PATCH 26/48] handle potential errors in network_state RPC --- client/network/src/service.rs | 49 ++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/client/network/src/service.rs b/client/network/src/service.rs index 2e6dcac6bb42f..7d4746e64a851 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -519,21 +519,23 @@ where pub fn network_state(&mut self) -> NetworkState { let swarm = &mut self.network_service; let open = swarm.behaviour_mut().user_protocol().open_peers().cloned().collect::>(); - let connected_peers = { let swarm = &mut *swarm; open.iter() .filter_map(move |peer_id| { - let known_addresses = NetworkBehaviour::handle_pending_outbound_connection( - swarm.behaviour_mut(), - ConnectionId::new_unchecked(0), // dummy value - Some(*peer_id), - &vec![], - Endpoint::Listener, - ) - .expect("network_state request to not be denied") - .into_iter() - .collect(); + let known_addresses = if let Ok(addrs) = + NetworkBehaviour::handle_pending_outbound_connection( + swarm.behaviour_mut(), + ConnectionId::new_unchecked(0), // dummy value + Some(*peer_id), + &vec![], + Endpoint::Listener, + ) { + addrs.into_iter().collect() + } else { + error!(target: "sub-libp2p", "Was not able to get known addresses for {:?}", peer_id); + return None + }; let endpoint = if let Some(e) = swarm.behaviour_mut().node(peer_id).and_then(|i| i.endpoint()) @@ -572,6 +574,20 @@ where .into_iter() .filter(|p| open.iter().all(|n| n != p)) .map(move |peer_id| { + let known_addresses = if let Ok(addrs) = + NetworkBehaviour::handle_pending_outbound_connection( + swarm.behaviour_mut(), + ConnectionId::new_unchecked(0), // dummy value + Some(peer_id), + &vec![], + Endpoint::Listener, + ) { + addrs.into_iter().collect() + } else { + error!(target: "sub-libp2p", "Was not able to get known addresses for {:?}", peer_id); + Default::default() + }; + ( peer_id.to_base58(), NetworkStateNotConnectedPeer { @@ -583,16 +599,7 @@ where .behaviour_mut() .node(&peer_id) .and_then(|i| i.latest_ping()), - known_addresses: NetworkBehaviour::handle_pending_outbound_connection( - swarm.behaviour_mut(), - ConnectionId::new_unchecked(0), // dummy value - Some(peer_id), - &vec![], - Endpoint::Listener, - ) - .expect("networt_state request to not be denied") - .into_iter() - .collect(), + known_addresses, }, ) }) From 9a8861f1eb763561de8b3220939dd227e4502bf5 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Mon, 3 Apr 2023 18:47:00 +0400 Subject: [PATCH 27/48] only update libp2p crate --- Cargo.lock | 785 +++++++++++++++++++++++------------------------------ 1 file changed, 339 insertions(+), 446 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 79e07b9372a1f..4ae7b63a27c73 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -42,7 +42,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] @@ -51,18 +51,18 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", "rand_core 0.6.4", ] [[package]] name = "aead" -version = "0.5.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +checksum = "5c192eb8f11fc081b0fe4259ba5af04217d4e0faddd02417310a927911abd7c8" dependencies = [ "crypto-common", - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] @@ -95,7 +95,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241" dependencies = [ "cfg-if", - "cipher 0.4.4", + "cipher 0.4.3", "cpufeatures", ] @@ -119,9 +119,9 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82e1366e0c69c9f927b1fa5ce2c7bf9eafc8f9268c0b9800729e8b267612447c" dependencies = [ - "aead 0.5.2", + "aead 0.5.1", "aes 0.8.2", - "cipher 0.4.4", + "cipher 0.4.3", "ctr 0.9.2", "ghash 0.5.0", "subtle", @@ -203,51 +203,11 @@ dependencies = [ "winapi", ] -[[package]] -name = "anstream" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "342258dd14006105c2b75ab1bd7543a03bdf0cfc94383303ac212a04939dff6f" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-wincon", - "concolor-override", - "concolor-query", - "is-terminal", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" - -[[package]] -name = "anstyle-parse" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7d1bb534e9efed14f3e5f44e7dd1a4f709384023a4165199a4241e18dff0116" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-wincon" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3127af6145b149f3287bb9a0d10ad9c5692dba8c53ad48285e5bec4063834fa" -dependencies = [ - "anstyle", - "windows-sys 0.45.0", -] - [[package]] name = "anyhow" -version = "1.0.70" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" +checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" [[package]] name = "approx" @@ -278,9 +238,9 @@ checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" [[package]] name = "arrayref" -version = "0.3.7" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" +checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" [[package]] name = "arrayvec" @@ -312,9 +272,9 @@ dependencies = [ [[package]] name = "asn1-rs" -version = "0.5.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" +checksum = "cf6690c370453db30743b373a60ba498fc0d6d83b11f4abfd87a84a075db5dd4" dependencies = [ "asn1-rs-derive 0.4.0", "asn1-rs-impl", @@ -361,16 +321,21 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "asn1_der" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21" + [[package]] name = "assert_cmd" -version = "2.0.10" +version = "2.0.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec0b2340f55d9661d76793b2bfc2eb0e62689bd79d067a95707ea762afd5e9dd" +checksum = "9834fcc22e0874394a010230586367d4a3e9f11b560f469262678547e1d2575e" dependencies = [ - "anstyle", "bstr", "doc-comment", - "predicates 3.0.2", + "predicates", "predicates-core", "predicates-tree", "wait-timeout", @@ -395,31 +360,32 @@ dependencies = [ [[package]] name = "async-io" -version = "1.13.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +checksum = "8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794" dependencies = [ "async-lock", "autocfg", - "cfg-if", "concurrent-queue", "futures-lite", + "libc", "log", "parking", "polling", - "rustix 0.37.6", "slab", "socket2", "waker-fn", + "windows-sys 0.42.0", ] [[package]] name = "async-lock" -version = "2.7.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" +checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685" dependencies = [ "event-listener", + "futures-lite", ] [[package]] @@ -446,13 +412,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.68" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" +checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 1.0.109", ] [[package]] @@ -544,9 +510,9 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "basic-toml" -version = "0.1.2" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c0de75129aa8d0cceaf750b89013f0e08804d6ec61416da787b35ad0d7cddf1" +checksum = "2e819b667739967cd44d308b8c7b71305d8bb0729ac44a248aa08f33d01950b4" dependencies = [ "serde", ] @@ -681,7 +647,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] @@ -690,7 +656,7 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] @@ -738,9 +704,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "1.4.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" +checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1" dependencies = [ "memchr", "once_cell", @@ -777,9 +743,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "bytemuck" -version = "1.13.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" +checksum = "c041d3eab048880cb0b86b256447da3f18859a163c3b8d8893f4e6368abe6393" [[package]] name = "byteorder" @@ -806,9 +772,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.4" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2" +checksum = "6031a462f977dd38968b6f23378356512feeace69cef817e1a4475108093cec3" dependencies = [ "serde", ] @@ -830,7 +796,7 @@ checksum = "08a1ec454bc3eead8719cb56e15dbbfecdbc14e4b3a3ae4936cc6e31f5fc0d07" dependencies = [ "camino", "cargo-platform", - "semver 1.0.17", + "semver 1.0.16", "serde", "serde_json", "thiserror", @@ -922,7 +888,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.2.1", + "clap 4.1.8", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -933,9 +899,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.24" +version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" +checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" dependencies = [ "iana-time-zone", "js-sys", @@ -992,7 +958,7 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] @@ -1001,14 +967,14 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] name = "cipher" -version = "0.4.4" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +checksum = "d1873270f8f7942c191139cb8a40fd228da6c3fd2fc376d7e92d47aa14aeb59e" dependencies = [ "crypto-common", "inout", @@ -1025,9 +991,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.6.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" +checksum = "77ed9a53e5d4d9c573ae844bfac6872b159cb1d1585a83b29e7a64b7eef7332a" dependencies = [ "glob", "libc", @@ -1048,47 +1014,39 @@ dependencies = [ [[package]] name = "clap" -version = "4.2.1" +version = "4.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046ae530c528f252094e4a77886ee1374437744b2bff1497aa898bbddbbb29b3" +checksum = "c3d7ae14b20b94cb02149ed21a86c423859cbe18dc7ed69845cace50e52b40a5" dependencies = [ - "clap_builder", + "bitflags", "clap_derive", + "clap_lex 0.3.2", + "is-terminal", "once_cell", -] - -[[package]] -name = "clap_builder" -version = "4.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "223163f58c9a40c3b0a43e1c4b50a9ce09f007ea2cb1ec258a687945b4b7929f" -dependencies = [ - "anstream", - "anstyle", - "bitflags", - "clap_lex 0.4.1", "strsim", + "termcolor", ] [[package]] name = "clap_complete" -version = "4.2.0" +version = "4.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01c22dcfb410883764b29953103d9ef7bb8fe21b3fa1158bc99986c2067294bd" +checksum = "501ff0a401473ea1d4c3b125ff95506b62c5bc5768d818634195fbb7c4ad5ff4" dependencies = [ - "clap 4.2.1", + "clap 4.1.8", ] [[package]] name = "clap_derive" -version = "4.2.0" +version = "4.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" +checksum = "44bec8e5c9d09e439c4335b1af0abaab56dcf3b94999a936e1bb47b9134288f0" dependencies = [ "heck", + "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.13", + "syn 1.0.109", ] [[package]] @@ -1102,9 +1060,12 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.4.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" +checksum = "350b9cf31731f9957399229e9b2adc51eeabdfbe9d71d9a0552275fd12710d09" +dependencies = [ + "os_str_bytes", +] [[package]] name = "codespan-reporting" @@ -1127,21 +1088,6 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "concolor-override" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a855d4a1978dc52fb0536a04d384c2c0c1aa273597f08b77c8c4d3b2eec6037f" - -[[package]] -name = "concolor-query" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d11d52c3d7ca2e6d0040212be9e4dbbcd78b6447f535b6b561f449427944cf" -dependencies = [ - "windows-sys 0.45.0", -] - [[package]] name = "concurrent-queue" version = "2.1.0" @@ -1159,9 +1105,9 @@ checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" [[package]] name = "constant_time_eq" -version = "0.2.5" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13418e745008f7349ec7e449155f419a61b92b58a99cc3616942b926825ec76b" +checksum = "f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279" [[package]] name = "core-foundation" @@ -1175,9 +1121,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "core2" @@ -1199,9 +1145,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.6" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" dependencies = [ "libc", ] @@ -1422,7 +1368,7 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", "rand_core 0.6.4", "subtle", "zeroize", @@ -1434,7 +1380,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c2538c4e68e52548bacb3e83ac549f903d44f011ac9d5abb5e132e67d0808f7" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", "rand_core 0.6.4", "subtle", "zeroize", @@ -1446,7 +1392,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", "rand_core 0.6.4", "typenum", ] @@ -1457,7 +1403,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", "subtle", ] @@ -1467,7 +1413,7 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", "subtle", ] @@ -1496,7 +1442,7 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ - "cipher 0.4.4", + "cipher 0.4.3", ] [[package]] @@ -1541,9 +1487,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.94" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" +checksum = "86d3488e7665a7a483b57e25bdd90d0aeb2bc7608c8d0346acf2ad3f1caf1d62" dependencies = [ "cc", "cxxbridge-flags", @@ -1553,9 +1499,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.94" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" +checksum = "48fcaf066a053a41a81dfb14d57d99738b767febb8b735c3016e469fac5da690" dependencies = [ "cc", "codespan-reporting", @@ -1563,31 +1509,31 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.13", + "syn 1.0.109", ] [[package]] name = "cxxbridge-flags" -version = "1.0.94" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" +checksum = "a2ef98b8b717a829ca5603af80e1f9e2e48013ab227b68ef37872ef84ee479bf" [[package]] name = "cxxbridge-macro" -version = "1.0.94" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" +checksum = "086c685979a698443656e5cf7856c95c642295a38599f12fb1ff76fb28d19892" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 1.0.109", ] [[package]] name = "darling" -version = "0.14.4" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +checksum = "c0808e1bd8671fb44a113a14e13497557533369847788fa2ae912b6ebfce9fa8" dependencies = [ "darling_core", "darling_macro", @@ -1595,9 +1541,9 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.14.4" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +checksum = "001d80444f28e193f30c2f293455da62dcf9a6b29918a4253152ae2b1de592cb" dependencies = [ "fnv", "ident_case", @@ -1609,9 +1555,9 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.14.4" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +checksum = "b36230598a2d5de7ec1c6f51f72d8a99a9208daff41de2084d06e3fd3ea56685" dependencies = [ "darling_core", "quote", @@ -1681,11 +1627,11 @@ dependencies = [ [[package]] name = "der-parser" -version = "8.2.0" +version = "8.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" +checksum = "42d4bc9b0db0a0df9ae64634ac5bdefb7afcb534e182275ca0beadbe486701c1" dependencies = [ - "asn1-rs 0.5.2", + "asn1-rs 0.5.1", "displaydoc", "nom", "num-bigint", @@ -1773,7 +1719,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] @@ -1865,9 +1811,9 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "dtoa" -version = "1.0.6" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65d09067bfacaa79114679b279d7f5885b53295b1e2cfb4e79c8e4bd3d633169" +checksum = "c00704156a7de8df8da0911424e30c2049957b0a714542a44e05fe693dd85313" [[package]] name = "dyn-clonable" @@ -1910,9 +1856,9 @@ dependencies = [ [[package]] name = "ecdsa" -version = "0.16.2" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "644d3b8674a5fc5b929ae435bca85c2323d85ccb013a5509c2ac9ee11a6284ba" +checksum = "d1b0a1222f8072619e8a6b667a854020a03d363738303203c09468b3424a420a" dependencies = [ "der 0.7.1", "elliptic-curve 0.13.2", @@ -1974,7 +1920,7 @@ dependencies = [ "der 0.6.1", "digest 0.10.6", "ff 0.12.1", - "generic-array 0.14.7", + "generic-array 0.14.6", "group 0.12.1", "hkdf", "pem-rfc7468", @@ -1995,7 +1941,7 @@ dependencies = [ "crypto-bigint 0.5.1", "digest 0.10.6", "ff 0.13.0", - "generic-array 0.14.7", + "generic-array 0.14.6", "group 0.13.0", "pkcs8 0.10.1", "rand_core 0.6.4", @@ -2018,22 +1964,22 @@ dependencies = [ [[package]] name = "enumflags2" -version = "0.7.6" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0044ebdf7fbb2a772e0c0233a9d3173c5cd8af8ae7078d4c5188af44ffffaa4b" +checksum = "e75d4cd21b95383444831539909fbb14b9dc3fdceb2a6f5d36577329a1f55ccb" dependencies = [ "enumflags2_derive", ] [[package]] name = "enumflags2_derive" -version = "0.7.6" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d2c772ccdbdfd1967b4f5d79d17c98ebf92009fdcc838db7aa434462f600c26" +checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 1.0.109", ] [[package]] @@ -2079,17 +2025,6 @@ dependencies = [ "winapi", ] -[[package]] -name = "errno" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d6a0976c999d473fe89ad888d5a284e55366d9dc9038b1ba2aa15128c4afa0" -dependencies = [ - "errno-dragonfly", - "libc", - "windows-sys 0.45.0", -] - [[package]] name = "errno-dragonfly" version = "0.1.2" @@ -2180,9 +2115,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.1.20" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e825f6987101665dea6ec934c09ec6d721de7bc1bf92248e1d5810c8cd636b77" +checksum = "a214f5bb88731d436478f3ae1f8a277b62124089ba9fb67f4f93fb100ef73c90" [[package]] name = "file-per-thread-logger" @@ -2202,7 +2137,7 @@ checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.2.16", + "redox_syscall", "windows-sys 0.45.0", ] @@ -2333,7 +2268,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.2.1", + "clap 4.1.8", "comfy-table", "frame-benchmarking", "frame-support", @@ -2424,7 +2359,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.2.1", + "clap 4.1.8", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -2460,9 +2395,9 @@ dependencies = [ [[package]] name = "frame-metadata" -version = "15.1.0" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "878babb0b136e731cc77ec2fd883ff02745ff21e6fb662729953d44923df009c" +checksum = "df6bb8542ef006ef0de09a5c4420787d79823c0ed7924225822362fd2bf2ff2d" dependencies = [ "cfg-if", "parity-scale-codec", @@ -2852,9 +2787,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" dependencies = [ "typenum", "version_check", @@ -3137,7 +3072,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" dependencies = [ "digest 0.9.0", - "generic-array 0.14.7", + "generic-array 0.14.6", "hmac 0.8.1", ] @@ -3212,9 +3147,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.25" +version = "0.14.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899" +checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c" dependencies = [ "bytes", "futures-channel", @@ -3251,16 +3186,16 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.54" +version = "0.1.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c17cc76786e99f8d2f055c11159e7f0091c42474dcc3189fbab96072e873e6d" +checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows 0.46.0", + "winapi", ] [[package]] @@ -3312,9 +3247,9 @@ dependencies = [ [[package]] name = "if-watch" -version = "3.0.1" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9465340214b296cd17a0009acdb890d6160010b8adf8f78a00d0d7ab270f79f" +checksum = "ba7abdbb86e485125dad06c2691e1e393bf3b08c7b743b43aa162a00fd39062e" dependencies = [ "async-io", "core-foundation", @@ -3326,7 +3261,7 @@ dependencies = [ "rtnetlink", "system-configuration", "tokio", - "windows 0.34.0", + "windows", ] [[package]] @@ -3360,9 +3295,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.9.3" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" dependencies = [ "autocfg", "hashbrown 0.12.3", @@ -3381,7 +3316,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] @@ -3429,11 +3364,10 @@ checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" [[package]] name = "io-lifetimes" -version = "1.0.9" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09270fd4fa1111bc614ed2246c7ef56239a3063d5be0d1ec3b589c505d400aeb" +checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" dependencies = [ - "hermit-abi 0.3.1", "libc", "windows-sys 0.45.0", ] @@ -3458,19 +3392,19 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.7.2" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" +checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "is-terminal" -version = "0.4.6" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "256017f749ab3117e93acb91063009e1f1bb56d03965b14c2c8df4eb02c524d8" +checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" dependencies = [ "hermit-abi 0.3.1", - "io-lifetimes 1.0.9", - "rustix 0.37.6", + "io-lifetimes 1.0.5", + "rustix 0.36.8", "windows-sys 0.45.0", ] @@ -3485,9 +3419,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.6" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" [[package]] name = "jobserver" @@ -3638,7 +3572,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "955890845095ccf31ef83ad41a05aabb4d8cc23dc3cac5a9f5c89cf26dd0da75" dependencies = [ "cfg-if", - "ecdsa 0.16.2", + "ecdsa 0.16.1", "elliptic-curve 0.13.2", "once_cell", "sha2 0.10.6", @@ -3918,16 +3852,18 @@ dependencies = [ [[package]] name = "libp2p-core" -version = "0.39.1" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9b7f8b7d65c070a5a1b5f8f0510648189da08f787b8963f8e21219e0710733af" +checksum = "881d9a54e97d97cdaa4125d48269d97ca8c40e5fefec6b85b30440dc60cc551f" dependencies = [ + "asn1_der", + "bs58", + "ed25519-dalek", "either", "fnv", "futures", "futures-timer", "instant", - "libp2p-identity", "log", "multiaddr", "multihash 0.17.0", @@ -3935,13 +3871,17 @@ dependencies = [ "once_cell", "parking_lot 0.12.1", "pin-project", - "quick-protobuf", + "prost", + "prost-build", "rand 0.8.5", "rw-stream-sink", + "sec1 0.3.0", + "sha2 0.10.6", "smallvec", "thiserror", "unsigned-varint", "void", + "zeroize", ] [[package]] @@ -4081,18 +4021,18 @@ dependencies = [ [[package]] name = "libp2p-noise" -version = "0.42.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c87c2803deffeae94108072a0387f8c9ff494af68a4908454c11c811e27b5e5" +checksum = "1216f9ec823ac7a2289b954674c54cbce81c9e45920b4fcf173018ede4295246" dependencies = [ "bytes", "curve25519-dalek 3.2.0", "futures", "libp2p-core", - "libp2p-identity", "log", "once_cell", - "quick-protobuf", + "prost", + "prost-build", "rand 0.8.5", "sha2 0.10.6", "snow", @@ -4424,12 +4364,6 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" -[[package]] -name = "linux-raw-sys" -version = "0.3.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d59d8c75012853d2e872fb56bc8a2e53718e2cafe1a4c823143141c6d90c322f" - [[package]] name = "lite-json" version = "0.2.0" @@ -4579,11 +4513,11 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memfd" -version = "0.6.3" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc89ccdc6e10d6907450f753537ebc5c5d3460d2e4e62ea74bd571db62c0f9e" +checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix 0.37.6", + "rustix 0.36.8", ] [[package]] @@ -4717,24 +4651,24 @@ dependencies = [ [[package]] name = "mockall" -version = "0.11.4" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96" +checksum = "50e4a1c770583dac7ab5e2f6c139153b783a53a1bbee9729613f193e59828326" dependencies = [ "cfg-if", "downcast", "fragile", "lazy_static", "mockall_derive", - "predicates 2.1.5", + "predicates", "predicates-tree", ] [[package]] name = "mockall_derive" -version = "0.11.4" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" +checksum = "832663583d5fa284ca8810bf7015e46c9fff9622d3cf34bd1eea5003fec06dd0" dependencies = [ "cfg-if", "proc-macro2", @@ -4744,14 +4678,13 @@ dependencies = [ [[package]] name = "multiaddr" -version = "0.17.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b36f567c7099511fa8612bbbb52dda2419ce0bdbacf31714e3a5ffdb766d3bd" +checksum = "3b53e0cc5907a5c216ba6584bf74be8ab47d6d6289f72793b2dddbf15dc3bf8c" dependencies = [ "arrayref", "byteorder", "data-encoding", - "log", "multibase", "multihash 0.17.0", "percent-encoding", @@ -4838,9 +4771,9 @@ dependencies = [ [[package]] name = "nalgebra" -version = "0.32.2" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d68d47bba83f9e2006d117a9a33af1524e655516b8919caac694427a6fb1e511" +checksum = "f6515c882ebfddccaa73ead7320ca28036c4bc84c9bcca3cc0cbba8efe89223a" dependencies = [ "approx", "matrixmultiply", @@ -4927,9 +4860,9 @@ dependencies = [ [[package]] name = "netlink-sys" -version = "0.8.5" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6471bf08e7ac0135876a9581bf3217ef0333c191c128d34878079f42ee150411" +checksum = "260e21fbb6f3d253a14df90eb0000a6066780a15dd901a7519ce02d77a94985b" dependencies = [ "bytes", "futures", @@ -4969,7 +4902,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes", - "clap 4.2.1", + "clap 4.1.8", "derive_more", "fs_extra", "futures", @@ -5006,7 +4939,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes", "assert_cmd", - "clap 4.2.1", + "clap 4.1.8", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -5127,7 +5060,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.2.1", + "clap 4.1.8", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -5186,7 +5119,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.2.1", + "clap 4.1.8", "generate-bags", "kitchensink-runtime", ] @@ -5195,7 +5128,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.2.1", + "clap 4.1.8", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -5471,7 +5404,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" dependencies = [ - "asn1-rs 0.5.2", + "asn1-rs 0.5.1", ] [[package]] @@ -5506,9 +5439,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "os_str_bytes" -version = "6.5.0" +version = "6.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267" +checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" [[package]] name = "output_vt100" @@ -7175,7 +7108,7 @@ dependencies = [ "cfg-if", "instant", "libc", - "redox_syscall 0.2.16", + "redox_syscall", "smallvec", "winapi", ] @@ -7188,16 +7121,16 @@ checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.2.16", + "redox_syscall", "smallvec", "windows-sys 0.45.0", ] [[package]] name = "paste" -version = "1.0.12" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" +checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" [[package]] name = "pbkdf2" @@ -7249,9 +7182,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.5.7" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1403e8401ad5dedea73c626b99758535b342502f8d1e361f4a2dd952749122" +checksum = "028accff104c4e513bad663bbcd2ad7cfd5304144404c31ed0a77ac103d00660" dependencies = [ "thiserror", "ucd-trie", @@ -7259,9 +7192,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.5.7" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be99c4c1d2fc2769b1d00239431d711d08f6efedcecb8b6e30707160aee99c15" +checksum = "2ac3922aac69a40733080f53c1ce7f91dcf57e1a5f6c52f421fadec7fbdc4b69" dependencies = [ "pest", "pest_generator", @@ -7269,22 +7202,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.7" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e56094789873daa36164de2e822b3888c6ae4b4f9da555a1103587658c805b1e" +checksum = "d06646e185566b5961b4058dd107e0a7f56e77c3f484549fb119867773c0f202" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.13", + "syn 1.0.109", ] [[package]] name = "pest_meta" -version = "2.5.7" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6733073c7cff3d8459fda0e42f13a047870242aed8b509fe98000928975f359e" +checksum = "e6f60b2ba541577e2a0c307c8f39d1439108120eb7903adeb6497fa880c59616" dependencies = [ "once_cell", "pest", @@ -7407,18 +7340,16 @@ dependencies = [ [[package]] name = "polling" -version = "2.6.0" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa" +checksum = "22122d5ec4f9fe1b3916419b76be1e80bcb93f618d071d2edf841b137b2a2bd6" dependencies = [ "autocfg", - "bitflags", "cfg-if", - "concurrent-queue", "libc", "log", - "pin-project-lite 0.2.9", - "windows-sys 0.45.0", + "wepoll-ffi", + "windows-sys 0.42.0", ] [[package]] @@ -7476,29 +7407,17 @@ dependencies = [ "regex", ] -[[package]] -name = "predicates" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c575290b64d24745b6c57a12a31465f0a66f3a4799686a6921526a33b0797965" -dependencies = [ - "anstyle", - "difflib", - "itertools", - "predicates-core", -] - [[package]] name = "predicates-core" -version = "1.0.6" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" +checksum = "72f883590242d3c6fc5bf50299011695fa6590c2c70eac95ee1bdb9a733ad1a2" [[package]] name = "predicates-tree" -version = "1.0.9" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" +checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d" dependencies = [ "predicates-core", "termtree", @@ -7518,9 +7437,9 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.1.25" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" +checksum = "e97e3215779627f01ee256d2fad52f3d95e8e1c11e9fc6fd08f7cd455d5d5c78" dependencies = [ "proc-macro2", "syn 1.0.109", @@ -7732,9 +7651,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.9.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c10f662eee9c94ddd7135043e544f3c82fa839a1e7b865911331961b53186c" +checksum = "72ef4ced82a24bb281af338b9e8f94429b6eca01b4e66d899f40031f074e74c9" dependencies = [ "bytes", "rand 0.8.5", @@ -7861,9 +7780,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.7.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" dependencies = [ "either", "rayon-core", @@ -7871,9 +7790,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.11.0" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +checksum = "356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b" dependencies = [ "crossbeam-channel", "crossbeam-deque", @@ -7915,15 +7834,6 @@ dependencies = [ "bitflags", ] -[[package]] -name = "redox_syscall" -version = "0.3.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" -dependencies = [ - "bitflags", -] - [[package]] name = "redox_users" version = "0.4.3" @@ -7931,28 +7841,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ "getrandom 0.2.8", - "redox_syscall 0.2.16", + "redox_syscall", "thiserror", ] [[package]] name = "ref-cast" -version = "1.0.16" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43faa91b1c8b36841ee70e97188a869d37ae21759da6846d4be66de5bf7b12c" +checksum = "8c78fb8c9293bcd48ef6fce7b4ca950ceaf21210de6e105a883ee280c0f7b9ed" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.16" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" +checksum = "9f9c0c92af03644e4806106281fe2e068ac5bc0ae74a707266d06ea27bccee5f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 1.0.109", ] [[package]] @@ -7969,9 +7879,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.7.3" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" +checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" dependencies = [ "aho-corasick", "memchr", @@ -7989,9 +7899,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.29" +version = "0.6.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" [[package]] name = "region" @@ -8124,9 +8034,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.22" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a36c42d1873f9a77c53bde094f9664d9891bc604a45b4798fd2c389ed12e5b" +checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" [[package]] name = "rustc-hash" @@ -8155,7 +8065,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.17", + "semver 1.0.16", ] [[package]] @@ -8174,7 +8084,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "727a1a6d65f786ec22df8a81ca3121107f235970dc1705ed681d3e6e8b9cd5f9" dependencies = [ "bitflags", - "errno 0.2.8", + "errno", "io-lifetimes 0.7.5", "libc", "linux-raw-sys 0.0.46", @@ -8183,32 +8093,18 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.11" +version = "0.36.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db4165c9963ab29e422d6c26fbc1d37f15bace6b2810221f9d925023480fcf0e" +checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644" dependencies = [ "bitflags", - "errno 0.2.8", - "io-lifetimes 1.0.9", + "errno", + "io-lifetimes 1.0.5", "libc", "linux-raw-sys 0.1.4", "windows-sys 0.45.0", ] -[[package]] -name = "rustix" -version = "0.37.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d097081ed288dfe45699b72f5b5d648e5f15d64d900c7080273baa20c16a6849" -dependencies = [ - "bitflags", - "errno 0.3.0", - "io-lifetimes 1.0.9", - "libc", - "linux-raw-sys 0.3.1", - "windows-sys 0.45.0", -] - [[package]] name = "rustls" version = "0.19.1" @@ -8257,9 +8153,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.12" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" +checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" [[package]] name = "rusty-fork" @@ -8285,9 +8181,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.13" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" [[package]] name = "safe-mix" @@ -8431,7 +8327,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "chrono", - "clap 4.2.1", + "clap 4.1.8", "fdlimit", "futures", "futures-timer", @@ -8971,7 +8867,7 @@ dependencies = [ "once_cell", "parity-scale-codec", "paste", - "rustix 0.36.11", + "rustix 0.36.8", "sc-allocator", "sc-executor-common", "sc-runtime-test", @@ -9548,7 +9444,7 @@ dependencies = [ name = "sc-storage-monitor" version = "0.1.0" dependencies = [ - "clap 4.2.1", + "clap 4.1.8", "fs4", "futures", "log", @@ -9720,9 +9616,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.5.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cfdffd972d76b22f3d7f81c8be34b2296afd3a25e0a547bd9abe340a4dbbe97" +checksum = "001cf62ece89779fd16105b5f515ad0e5cedcd5440d3dd806bb067978e7c3608" dependencies = [ "bitvec", "cfg-if", @@ -9734,9 +9630,9 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.5.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61fa974aea2d63dd18a4ec3a49d59af9f34178c73a4f56d2f18205628d00681e" +checksum = "303959cf613a6f6efd19ed4b4ad5bf79966a13352716299ad532cfb115f4205c" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9790,9 +9686,9 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "scratch" -version = "1.0.5" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" +checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" [[package]] name = "sct" @@ -9834,7 +9730,7 @@ checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ "base16ct 0.1.1", "der 0.6.1", - "generic-array 0.14.7", + "generic-array 0.14.6", "pkcs8 0.9.0", "subtle", "zeroize", @@ -9848,7 +9744,7 @@ checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e" dependencies = [ "base16ct 0.2.0", "der 0.7.1", - "generic-array 0.14.7", + "generic-array 0.14.6", "pkcs8 0.10.1", "subtle", "zeroize", @@ -9924,9 +9820,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.17" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" +checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" dependencies = [ "serde", ] @@ -9939,29 +9835,29 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.159" +version = "1.0.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065" +checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.159" +version = "1.0.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585" +checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 1.0.109", ] [[package]] name = "serde_json" -version = "1.0.95" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744" +checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76" dependencies = [ "itoa", "ryu", @@ -10147,9 +10043,9 @@ dependencies = [ [[package]] name = "socket2" -version = "0.4.9" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" dependencies = [ "libc", "winapi", @@ -10651,7 +10547,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.2.1", + "clap 4.1.8", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -11008,9 +10904,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "spin" -version = "0.9.7" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0959fd6f767df20b231736396e4f602171e00d95205676286e79d4a4eb67bef" +checksum = "7dccf47db1b41fa1573ed27ccf5e08e3ca771cb994f776668c5ebda893b248fc" [[package]] name = "spki" @@ -11138,7 +11034,7 @@ dependencies = [ name = "subkey" version = "3.0.0" dependencies = [ - "clap 4.2.1", + "clap 4.1.8", "sc-cli", ] @@ -11166,7 +11062,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.2.1", + "clap 4.1.8", "frame-support", "frame-system", "sc-cli", @@ -11494,15 +11390,15 @@ checksum = "8ae9980cab1db3fceee2f6c6f643d5d8de2997c58ee8d25fb0cc8a9e9e7348e5" [[package]] name = "tempfile" -version = "3.5.0" +version = "3.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" +checksum = "af18f7ae1acd354b992402e9ec5864359d693cd8a79dcbef59f76891701c1e95" dependencies = [ "cfg-if", "fastrand", - "redox_syscall 0.3.5", - "rustix 0.37.6", - "windows-sys 0.45.0", + "redox_syscall", + "rustix 0.36.8", + "windows-sys 0.42.0", ] [[package]] @@ -11516,9 +11412,9 @@ dependencies = [ [[package]] name = "termtree" -version = "0.4.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" +checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8" [[package]] name = "textwrap" @@ -11674,13 +11570,14 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.27.0" +version = "1.25.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0de47a4eecbe11f498978a9b29d792f0d2692d1dd003650c24c76510e3bc001" +checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af" dependencies = [ "autocfg", "bytes", "libc", + "memchr", "mio", "num_cpus", "parking_lot 0.12.1", @@ -11688,18 +11585,18 @@ dependencies = [ "signal-hook-registry", "socket2", "tokio-macros", - "windows-sys 0.45.0", + "windows-sys 0.42.0", ] [[package]] name = "tokio-macros" -version = "2.0.0" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61a573bdc87985e9d6ddeed1b3d864e8a302c847e40d647746df2f1de209d1ce" +checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 1.0.109", ] [[package]] @@ -12014,7 +11911,7 @@ name = "try-runtime-cli" version = "0.10.0-dev" dependencies = [ "async-trait", - "clap 4.2.1", + "clap 4.1.8", "frame-remote-externalities", "frame-try-runtime", "hex", @@ -12048,9 +11945,9 @@ dependencies = [ [[package]] name = "trybuild" -version = "1.0.80" +version = "1.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501dbdbb99861e4ab6b60eb6a7493956a9defb644fd034bc4a5ef27c693c8a3a" +checksum = "a44da5a6f2164c8e14d3bbc0657d69c5966af9f5f6930d4f600b1f5c4a673413" dependencies = [ "basic-toml", "dissimilar", @@ -12125,15 +12022,15 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.13" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" [[package]] name = "unicode-ident" -version = "1.0.8" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" [[package]] name = "unicode-normalization" @@ -12162,7 +12059,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", "subtle", ] @@ -12205,12 +12102,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "utf8parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" - [[package]] name = "uuid" version = "1.3.0" @@ -12270,11 +12161,12 @@ checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" [[package]] name = "walkdir" -version = "2.3.3" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" dependencies = [ "same-file", + "winapi", "winapi-util", ] @@ -12374,9 +12266,9 @@ checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" [[package]] name = "wasm-encoder" -version = "0.25.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eff853c4f09eec94d76af527eddad4e9de13b11d6286a1ef7134bc30135a2b7" +checksum = "68f7d56227d910901ce12dfd19acc40c12687994dfb3f57c90690f80be946ec5" dependencies = [ "leb128", ] @@ -12472,7 +12364,7 @@ version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e61a7006b0fdf24f6bbe8dcfdad5ca1b350de80061fb2827f31c82fbbb9565a" dependencies = [ - "spin 0.9.7", + "spin 0.9.5", "wasmi_arena", "wasmi_core 0.12.0", "wasmparser-nostd", @@ -12587,7 +12479,7 @@ dependencies = [ "directories-next", "file-per-thread-logger", "log", - "rustix 0.36.11", + "rustix 0.36.8", "serde", "sha2 0.10.6", "toml", @@ -12667,7 +12559,7 @@ checksum = "d0245e8a9347017c7185a72e215218a802ff561545c242953c11ba00fccc930f" dependencies = [ "object 0.29.0", "once_cell", - "rustix 0.36.11", + "rustix 0.36.8", ] [[package]] @@ -12698,7 +12590,7 @@ dependencies = [ "memoffset 0.6.5", "paste", "rand 0.8.5", - "rustix 0.36.11", + "rustix 0.36.8", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-jit-debug", @@ -12719,9 +12611,9 @@ dependencies = [ [[package]] name = "wast" -version = "55.0.0" +version = "54.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4984d3e1406571f4930ba5cf79bd70f75f41d0e87e17506e0bd19b0e5d085f05" +checksum = "3d48d9d731d835f4f8dacbb8de7d47be068812cb9877f5c60d408858778d8d2a" dependencies = [ "leb128", "memchr", @@ -12731,9 +12623,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.61" +version = "1.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af2b53f4da14db05d32e70e9c617abdf6620c575bd5dd972b7400037b4df2091" +checksum = "d1db2e3ed05ea31243761439194bec3af6efbbaf87c4c8667fb879e4f23791a0" dependencies = [ "wast", ] @@ -12847,7 +12739,7 @@ dependencies = [ "byteorder", "ccm", "curve25519-dalek 3.2.0", - "der-parser 8.2.0", + "der-parser 8.1.0", "elliptic-curve 0.12.3", "hkdf", "hmac 0.12.1", @@ -12989,6 +12881,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "wepoll-ffi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" +dependencies = [ + "cc", +] + [[package]] name = "which" version = "4.4.0" @@ -13060,15 +12961,6 @@ dependencies = [ "windows_x86_64_msvc 0.34.0", ] -[[package]] -name = "windows" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdacb41e6a96a052c6cb63a144f24900236121c6f63f4f8219fef5977ecb0c25" -dependencies = [ - "windows-targets", -] - [[package]] name = "windows-sys" version = "0.42.0" @@ -13076,12 +12968,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", + "windows_aarch64_msvc 0.42.1", + "windows_i686_gnu 0.42.1", + "windows_i686_msvc 0.42.1", + "windows_x86_64_gnu 0.42.1", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.2", + "windows_x86_64_msvc 0.42.1", ] [[package]] @@ -13095,24 +12987,24 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.42.2" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" dependencies = [ "windows_aarch64_gnullvm", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", + "windows_aarch64_msvc 0.42.1", + "windows_i686_gnu 0.42.1", + "windows_i686_msvc 0.42.1", + "windows_x86_64_gnu 0.42.1", "windows_x86_64_gnullvm", - "windows_x86_64_msvc 0.42.2", + "windows_x86_64_msvc 0.42.1", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.2" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" [[package]] name = "windows_aarch64_msvc" @@ -13122,9 +13014,9 @@ checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" [[package]] name = "windows_aarch64_msvc" -version = "0.42.2" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" [[package]] name = "windows_i686_gnu" @@ -13134,9 +13026,9 @@ checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" [[package]] name = "windows_i686_gnu" -version = "0.42.2" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" [[package]] name = "windows_i686_msvc" @@ -13146,9 +13038,9 @@ checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" [[package]] name = "windows_i686_msvc" -version = "0.42.2" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" [[package]] name = "windows_x86_64_gnu" @@ -13158,15 +13050,15 @@ checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" [[package]] name = "windows_x86_64_gnu" -version = "0.42.2" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.2" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" [[package]] name = "windows_x86_64_msvc" @@ -13176,9 +13068,9 @@ checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" [[package]] name = "windows_x86_64_msvc" -version = "0.42.2" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" [[package]] name = "winreg" @@ -13245,10 +13137,10 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" dependencies = [ - "asn1-rs 0.5.2", + "asn1-rs 0.5.1", "base64 0.13.1", "data-encoding", - "der-parser 8.2.0", + "der-parser 8.1.0", "lazy_static", "nom", "oid-registry 0.6.1", @@ -13288,22 +13180,23 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.6.0" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.4.2" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 1.0.109", + "synstructure", ] [[package]] From 8ee6f659bd41b32dd9cd6161c4bc76e3d7edb90c Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Tue, 4 Apr 2023 07:50:03 +0400 Subject: [PATCH 28/48] update libp2p-core --- Cargo.lock | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4ae7b63a27c73..fcf3c0c7c4a50 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -321,12 +321,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "asn1_der" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22d1f4b888c298a027c99dc9048015fac177587de20fc30232a057dfbe24a21" - [[package]] name = "assert_cmd" version = "2.0.8" @@ -3852,18 +3846,16 @@ dependencies = [ [[package]] name = "libp2p-core" -version = "0.39.0" +version = "0.39.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "881d9a54e97d97cdaa4125d48269d97ca8c40e5fefec6b85b30440dc60cc551f" +checksum = "9b7f8b7d65c070a5a1b5f8f0510648189da08f787b8963f8e21219e0710733af" dependencies = [ - "asn1_der", - "bs58", - "ed25519-dalek", "either", "fnv", "futures", "futures-timer", "instant", + "libp2p-identity", "log", "multiaddr", "multihash 0.17.0", @@ -3871,17 +3863,13 @@ dependencies = [ "once_cell", "parking_lot 0.12.1", "pin-project", - "prost", - "prost-build", + "quick-protobuf", "rand 0.8.5", "rw-stream-sink", - "sec1 0.3.0", - "sha2 0.10.6", "smallvec", "thiserror", "unsigned-varint", "void", - "zeroize", ] [[package]] From 29caff62b5a466e502301fbc888f2af8a9fccc90 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Tue, 4 Apr 2023 08:08:03 +0400 Subject: [PATCH 29/48] fix docs --- client/network/src/discovery.rs | 6 +++--- client/network/src/request_responses.rs | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/client/network/src/discovery.rs b/client/network/src/discovery.rs index 5e57d3d0fb492..d432a2096c3bd 100644 --- a/client/network/src/discovery.rs +++ b/client/network/src/discovery.rs @@ -906,9 +906,9 @@ impl NetworkBehaviour for DiscoveryBehaviour { ToSwarm::Dial { .. } => { unreachable!("mDNS never dials!"); }, - ToSwarm::NotifyHandler { event, .. } => match event {}, /* `event` is an - * enum with no - * variant */ + ToSwarm::NotifyHandler { event, .. } => match event {}, /* `event` is an */ + // enum with no + // variant ToSwarm::ReportObservedAddr { address, score } => return Poll::Ready(ToSwarm::ReportObservedAddr { address, score }), ToSwarm::CloseConnection { peer_id, connection } => diff --git a/client/network/src/request_responses.rs b/client/network/src/request_responses.rs index b062beac2b542..0fc56def71b5d 100644 --- a/client/network/src/request_responses.rs +++ b/client/network/src/request_responses.rs @@ -18,8 +18,8 @@ //! Collection of request-response protocols. //! -//! The [`RequestResponse`] struct defined in this module provides support for zero or more -//! so-called "request-response" protocols. +//! The [`RequestResponsesBehaviour`] struct defined in this module provides support for zero or +//! more so-called "request-response" protocols. //! //! A request-response protocol works in the following way: //! @@ -1317,10 +1317,10 @@ mod tests { } /// A [`RequestId`] is a unique identifier among either all inbound or all outbound requests for - /// a single [`RequestResponse`] behaviour. It is not guaranteed to be unique across multiple - /// [`RequestResponse`] behaviours. Thus when handling [`RequestId`] in the context of multiple - /// [`RequestResponse`] behaviours, one needs to couple the protocol name with the [`RequestId`] - /// to get a unique request identifier. + /// a single [`RequestResponsesBehaviour`] behaviour. It is not guaranteed to be unique across + /// multiple [`RequestResponsesBehaviour`] behaviours. Thus when handling [`RequestId`] in the + /// context of multiple [`RequestResponsesBehaviour`] behaviours, one needs to couple the + /// protocol name with the [`RequestId`] to get a unique request identifier. /// /// This test ensures that two requests on different protocols can be handled concurrently /// without a [`RequestId`] collision. From c69c0a61215724334a1b8a2ec4dfbf82bb4bb6e4 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Tue, 4 Apr 2023 08:28:43 +0400 Subject: [PATCH 30/48] use libp2p-identity instead of libp2p where it's possible. libp2p-identity is much smaller, hence makes sense to use it instead of larger libp2p crate. --- Cargo.lock | 7 +++---- client/consensus/common/Cargo.toml | 2 +- client/consensus/common/src/import_queue.rs | 2 +- client/consensus/common/src/import_queue/basic_queue.rs | 2 +- client/network/common/Cargo.toml | 3 +-- client/network/common/src/sync.rs | 2 +- client/network/light/Cargo.toml | 2 +- client/network/light/src/light_client_requests/handler.rs | 2 +- client/peerset/Cargo.toml | 2 +- client/peerset/src/lib.rs | 4 ++-- client/peerset/src/peersstate.rs | 4 ++-- client/peerset/tests/fuzz.rs | 2 +- 12 files changed, 16 insertions(+), 18 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fcf3c0c7c4a50..29db2bf07e174 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8419,7 +8419,7 @@ dependencies = [ "async-trait", "futures", "futures-timer", - "libp2p", + "libp2p-identity", "log", "mockall", "parking_lot 0.12.1", @@ -8989,7 +8989,6 @@ dependencies = [ "bytes", "futures", "futures-timer", - "libp2p", "libp2p-identity", "parity-scale-codec", "prost-build", @@ -9035,7 +9034,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "futures", - "libp2p", + "libp2p-identity", "log", "parity-scale-codec", "prost", @@ -9183,7 +9182,7 @@ name = "sc-peerset" version = "4.0.0-dev" dependencies = [ "futures", - "libp2p", + "libp2p-identity", "log", "rand 0.8.5", "sc-utils", diff --git a/client/consensus/common/Cargo.toml b/client/consensus/common/Cargo.toml index 81ee9c1d926bc..0091f40c2929e 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 = "0.51.2" +libp2p-identity = { version = "0.1", features = ["peerid"] } log = "0.4.17" mockall = "0.11.3" parking_lot = "0.12.1" diff --git a/client/consensus/common/src/import_queue.rs b/client/consensus/common/src/import_queue.rs index cec9aca47e29f..11ebbd4036a20 100644 --- a/client/consensus/common/src/import_queue.rs +++ b/client/consensus/common/src/import_queue.rs @@ -66,7 +66,7 @@ pub type BoxJustificationImport = Box + Send + Sync>; /// Maps to the RuntimeOrigin used by the network. -pub type RuntimeOrigin = libp2p::PeerId; +pub type RuntimeOrigin = libp2p_identity::PeerId; /// Block data used by the queue. #[derive(Debug, PartialEq, Eq, Clone)] diff --git a/client/consensus/common/src/import_queue/basic_queue.rs b/client/consensus/common/src/import_queue/basic_queue.rs index 653c88321554e..b93913703d39f 100644 --- a/client/consensus/common/src/import_queue/basic_queue.rs +++ b/client/consensus/common/src/import_queue/basic_queue.rs @@ -635,7 +635,7 @@ mod tests { let hash = Hash::random(); finality_sender .unbounded_send(worker_messages::ImportJustification( - libp2p::PeerId::random(), + libp2p_identity::PeerId::random(), hash, 1, (*b"TEST", Vec::new()), diff --git a/client/network/common/Cargo.toml b/client/network/common/Cargo.toml index 8f4371602a37b..b7301ff8cb878 100644 --- a/client/network/common/Cargo.toml +++ b/client/network/common/Cargo.toml @@ -25,8 +25,7 @@ codec = { package = "parity-scale-codec", version = "3.2.2", features = [ ] } futures = "0.3.21" futures-timer = "3.0.2" -libp2p = { version = "0.51.2", features = ["request-response", "kad"] } -libp2p-identity = { version = "0.1", features = ["ed25519", "peerid"] } +libp2p-identity = { version = "0.1", features = ["peerid"] } prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.10.0-dev", path = "../../../utils/prometheus" } smallvec = "1.8.0" sc-consensus = { version = "0.10.0-dev", path = "../../consensus/common" } diff --git a/client/network/common/src/sync.rs b/client/network/common/src/sync.rs index d02a81379aea0..0201d21e3ee99 100644 --- a/client/network/common/src/sync.rs +++ b/client/network/common/src/sync.rs @@ -25,7 +25,7 @@ pub mod warp; use crate::role::Roles; use futures::Stream; -use libp2p::PeerId; +use libp2p_identity::PeerId; use message::{BlockAnnounce, BlockData, BlockRequest, BlockResponse}; use sc_consensus::{import_queue::RuntimeOrigin, IncomingBlock}; diff --git a/client/network/light/Cargo.toml b/client/network/light/Cargo.toml index 23e2effe3556b..ffdae896e16e3 100644 --- a/client/network/light/Cargo.toml +++ b/client/network/light/Cargo.toml @@ -21,7 +21,7 @@ codec = { package = "parity-scale-codec", version = "3.2.2", features = [ "derive", ] } futures = "0.3.21" -libp2p = "0.51.2" +libp2p-identity = { version = "0.1", features = ["peerid"] } log = "0.4.16" prost = "0.11" sp-blockchain = { version = "4.0.0-dev", path = "../../../primitives/blockchain" } diff --git a/client/network/light/src/light_client_requests/handler.rs b/client/network/light/src/light_client_requests/handler.rs index db2630b79f498..2a68ebe9c2b23 100644 --- a/client/network/light/src/light_client_requests/handler.rs +++ b/client/network/light/src/light_client_requests/handler.rs @@ -25,7 +25,7 @@ use crate::schema; use codec::{self, Decode, Encode}; use futures::{channel::mpsc, prelude::*}; -use libp2p::PeerId; +use libp2p_identity::PeerId; use log::{debug, trace}; use prost::Message; use sc_client_api::{BlockBackend, ProofProvider}; diff --git a/client/peerset/Cargo.toml b/client/peerset/Cargo.toml index b733cffe42d4f..d0e760b259cf5 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 = "0.51.2" +libp2p-identity = { version = "0.1", features = ["peerid"] } log = "0.4.17" serde_json = "1.0.85" wasm-timer = "0.2" diff --git a/client/peerset/src/lib.rs b/client/peerset/src/lib.rs index e5393acbaa32f..e169be8e8ed5b 100644 --- a/client/peerset/src/lib.rs +++ b/client/peerset/src/lib.rs @@ -46,7 +46,7 @@ use std::{ }; use wasm_timer::Delay; -pub use libp2p::PeerId; +pub use libp2p_identity::PeerId; /// We don't accept nodes whose reputation is under this value. pub const BANNED_THRESHOLD: i32 = 82 * (i32::MIN / 100); @@ -781,7 +781,7 @@ mod tests { BANNED_THRESHOLD, }; use futures::prelude::*; - use libp2p::PeerId; + use libp2p_identity::PeerId; use std::{pin::Pin, task::Poll, thread, time::Duration}; fn assert_messages(mut peerset: Peerset, messages: Vec) -> Peerset { diff --git a/client/peerset/src/peersstate.rs b/client/peerset/src/peersstate.rs index 84907ac914b45..2d4a9295c24c9 100644 --- a/client/peerset/src/peersstate.rs +++ b/client/peerset/src/peersstate.rs @@ -28,7 +28,7 @@ //! > for example connecting to some nodes in priority should be added outside of this //! > module, rather than inside. -use libp2p::PeerId; +use libp2p_identity::PeerId; use log::error; use std::{ borrow::Cow, @@ -626,7 +626,7 @@ impl<'a> Drop for Reputation<'a> { #[cfg(test)] mod tests { use super::{Peer, PeersState, SetConfig}; - use libp2p::PeerId; + use libp2p_identity::PeerId; use std::iter; #[test] diff --git a/client/peerset/tests/fuzz.rs b/client/peerset/tests/fuzz.rs index 1f4bd053b553a..122f17062577d 100644 --- a/client/peerset/tests/fuzz.rs +++ b/client/peerset/tests/fuzz.rs @@ -17,7 +17,7 @@ // along with this program. If not, see . use futures::prelude::*; -use libp2p::PeerId; +use libp2p_identity::PeerId; use rand::{ distributions::{Distribution, Uniform, WeightedIndex}, seq::IteratorRandom, From 866d5220d66736bdf31da4ca1b73654d7539c4bd Mon Sep 17 00:00:00 2001 From: Anton Date: Wed, 5 Apr 2023 12:13:38 +0400 Subject: [PATCH 31/48] Update client/network/src/discovery.rs Co-authored-by: Aaro Altonen <48052676+altonen@users.noreply.github.com> --- client/network/src/discovery.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/network/src/discovery.rs b/client/network/src/discovery.rs index d432a2096c3bd..775425ae438d9 100644 --- a/client/network/src/discovery.rs +++ b/client/network/src/discovery.rs @@ -540,7 +540,7 @@ impl NetworkBehaviour for DiscoveryBehaviour { let mut list = self .permanent_addresses .iter() - .filter_map(|(p, a)| if *p == peer_id { Some(a.clone()) } else { None }) + .filter_map(|(p, a)| (*p == peer_id).then_some(a.clone())) .collect::>(); if let Some(ephemeral_addresses) = self.ephemeral_addresses.get(&peer_id) { From 724188d34e5fd29d4fa2bd298c06e7f0f4228266 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Thu, 6 Apr 2023 11:07:23 +0400 Subject: [PATCH 32/48] update Cargo.lock --- Cargo.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 9ec5fbbb40918..6b021acc4ed9b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -7489,7 +7489,7 @@ checksum = "9d4f284d87b9cedc2ff57223cbc4e3937cd6063c01e92c8e2a8c080df0013933" dependencies = [ "proc-macro2", "quote", - "syn", + "syn 1.0.109", ] [[package]] From 60e1634bacaba3f70ef6c8ed52281bc4566fff4f Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Thu, 6 Apr 2023 11:48:58 +0400 Subject: [PATCH 33/48] add comment for per_connection_event_buffer_size current value is somewhat arbitrary and needs to be tweaked depending on memory usage and network worker sleep stats. --- client/network/src/service.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/client/network/src/service.rs b/client/network/src/service.rs index 7d4746e64a851..903c250b226e7 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -394,6 +394,8 @@ where ) .substream_upgrade_protocol_override(upgrade::Version::V1Lazy) .notify_handler_buffer_size(NonZeroUsize::new(32).expect("32 != 0; qed")) + // NOTE: 24 is somewhat arbitrary and should be tuned in the future if necessary. + // See https://github.com/paritytech/substrate/pull/6080 .per_connection_event_buffer_size(24) .max_negotiating_inbound_streams(2048); From bb1b5dbbc0e375a208990ac16a0749f09a53d20d Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Thu, 6 Apr 2023 11:52:41 +0400 Subject: [PATCH 34/48] fix link format --- client/network/src/service.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/network/src/service.rs b/client/network/src/service.rs index 903c250b226e7..2466320112a86 100644 --- a/client/network/src/service.rs +++ b/client/network/src/service.rs @@ -395,7 +395,7 @@ where .substream_upgrade_protocol_override(upgrade::Version::V1Lazy) .notify_handler_buffer_size(NonZeroUsize::new(32).expect("32 != 0; qed")) // NOTE: 24 is somewhat arbitrary and should be tuned in the future if necessary. - // See https://github.com/paritytech/substrate/pull/6080 + // See .per_connection_event_buffer_size(24) .max_negotiating_inbound_streams(2048); From b3d43e3b17fe7a695fc922563039f444098e55fd Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Fri, 7 Apr 2023 12:45:11 +0400 Subject: [PATCH 35/48] update Cargo.lock --- Cargo.lock | 829 ++++++++++++++++++++++------------------------------- 1 file changed, 350 insertions(+), 479 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 26e56afec57ef..5dfb611d956bf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -42,7 +42,7 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] @@ -51,18 +51,18 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", "rand_core 0.6.4", ] [[package]] name = "aead" -version = "0.5.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0" +checksum = "5c192eb8f11fc081b0fe4259ba5af04217d4e0faddd02417310a927911abd7c8" dependencies = [ "crypto-common", - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] @@ -95,7 +95,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241" dependencies = [ "cfg-if", - "cipher 0.4.4", + "cipher 0.4.3", "cpufeatures", ] @@ -119,9 +119,9 @@ version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "82e1366e0c69c9f927b1fa5ce2c7bf9eafc8f9268c0b9800729e8b267612447c" dependencies = [ - "aead 0.5.2", + "aead 0.5.1", "aes 0.8.2", - "cipher 0.4.4", + "cipher 0.4.3", "ctr 0.9.2", "ghash 0.5.0", "subtle", @@ -153,7 +153,7 @@ version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" dependencies = [ - "getrandom 0.2.9", + "getrandom 0.2.8", "once_cell", "version_check", ] @@ -165,7 +165,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f" dependencies = [ "cfg-if", - "getrandom 0.2.9", + "getrandom 0.2.8", "once_cell", "version_check", ] @@ -203,51 +203,17 @@ dependencies = [ "winapi", ] -[[package]] -name = "anstream" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "342258dd14006105c2b75ab1bd7543a03bdf0cfc94383303ac212a04939dff6f" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-wincon", - "concolor-override", - "concolor-query", - "is-terminal", - "utf8parse", -] - [[package]] name = "anstyle" version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "23ea9e81bd02e310c216d080f6223c179012256e5151c41db88d12c88a1684d2" -[[package]] -name = "anstyle-parse" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7d1bb534e9efed14f3e5f44e7dd1a4f709384023a4165199a4241e18dff0116" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-wincon" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3127af6145b149f3287bb9a0d10ad9c5692dba8c53ad48285e5bec4063834fa" -dependencies = [ - "anstyle", - "windows-sys 0.45.0", -] - [[package]] name = "anyhow" -version = "1.0.70" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7de8ce5e0f9f8d88245311066a578d72b7af3e7088f32783804676302df237e4" +checksum = "224afbd727c3d6e4b90103ece64b8d1b67fbb1973b1046c2281eed3f3803f800" [[package]] name = "approx" @@ -278,9 +244,9 @@ checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6" [[package]] name = "arrayref" -version = "0.3.7" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" +checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544" [[package]] name = "arrayvec" @@ -312,9 +278,9 @@ dependencies = [ [[package]] name = "asn1-rs" -version = "0.5.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" +checksum = "cf6690c370453db30743b373a60ba498fc0d6d83b11f4abfd87a84a075db5dd4" dependencies = [ "asn1-rs-derive 0.4.0", "asn1-rs-impl", @@ -395,38 +361,39 @@ dependencies = [ [[package]] name = "async-io" -version = "1.13.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" +checksum = "8c374dda1ed3e7d8f0d9ba58715f924862c63eae6849c92d3a18e7fbde9e2794" dependencies = [ "async-lock", "autocfg", - "cfg-if", "concurrent-queue", "futures-lite", + "libc", "log", "parking", "polling", - "rustix 0.37.8", "slab", "socket2", "waker-fn", + "windows-sys 0.42.0", ] [[package]] name = "async-lock" -version = "2.7.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" +checksum = "c8101efe8695a6c17e02911402145357e718ac92d3ff88ae8419e84b1707b685" dependencies = [ "event-listener", + "futures-lite", ] [[package]] name = "async-stream" -version = "0.3.5" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51" +checksum = "ad445822218ce64be7a341abfb0b1ea43b5c23aa83902542a4542e78309d8e5e" dependencies = [ "async-stream-impl", "futures-core", @@ -435,24 +402,24 @@ dependencies = [ [[package]] name = "async-stream-impl" -version = "0.3.5" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" +checksum = "e4655ae1a7b0cdf149156f780c5bf3f1352bc53cbd9e0a361a7ef7b22947e965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 1.0.109", ] [[package]] name = "async-trait" -version = "0.1.68" +version = "0.1.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" +checksum = "1cd7fce9ba8c3c042128ce72d8b2ddbf3a05747efb67ea0313c635e10bda47a2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 1.0.109", ] [[package]] @@ -544,9 +511,9 @@ checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" [[package]] name = "basic-toml" -version = "0.1.2" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c0de75129aa8d0cceaf750b89013f0e08804d6ec61416da787b35ad0d7cddf1" +checksum = "2e819b667739967cd44d308b8c7b71305d8bb0729ac44a248aa08f33d01950b4" dependencies = [ "serde", ] @@ -681,7 +648,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] @@ -690,7 +657,7 @@ version = "0.10.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] @@ -738,9 +705,9 @@ checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3" [[package]] name = "bstr" -version = "1.4.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d4260bcc2e8fc9df1eac4919a720effeb63a3f0952f5bf4944adfa18897f09" +checksum = "5ffdb39cb703212f3c11973452c2861b972f757b021158f3516ba10f2fa8b2c1" dependencies = [ "memchr", "once_cell", @@ -777,9 +744,9 @@ checksum = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7" [[package]] name = "bytemuck" -version = "1.13.1" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea" +checksum = "c041d3eab048880cb0b86b256447da3f18859a163c3b8d8893f4e6368abe6393" [[package]] name = "byteorder" @@ -806,9 +773,9 @@ dependencies = [ [[package]] name = "camino" -version = "1.1.4" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c530edf18f37068ac2d977409ed5cd50d53d73bc653c7647b48eb78976ac9ae2" +checksum = "6031a462f977dd38968b6f23378356512feeace69cef817e1a4475108093cec3" dependencies = [ "serde", ] @@ -824,13 +791,13 @@ dependencies = [ [[package]] name = "cargo_metadata" -version = "0.15.4" +version = "0.15.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a" +checksum = "08a1ec454bc3eead8719cb56e15dbbfecdbc14e4b3a3ae4936cc6e31f5fc0d07" dependencies = [ "camino", "cargo-platform", - "semver 1.0.17", + "semver 1.0.16", "serde", "serde_json", "thiserror", @@ -922,7 +889,7 @@ name = "chain-spec-builder" version = "2.0.0" dependencies = [ "ansi_term", - "clap 4.2.1", + "clap 4.1.8", "node-cli", "rand 0.8.5", "sc-chain-spec", @@ -933,9 +900,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.24" +version = "0.4.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4e3c5919066adf22df73762e50cffcde3a758f2a848b113b586d1f86728b673b" +checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f" dependencies = [ "iana-time-zone", "js-sys", @@ -992,7 +959,7 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "12f8e7987cbd042a63249497f41aed09f8e65add917ea6566effbc56578d6801" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] @@ -1001,14 +968,14 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] name = "cipher" -version = "0.4.4" +version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +checksum = "d1873270f8f7942c191139cb8a40fd228da6c3fd2fc376d7e92d47aa14aeb59e" dependencies = [ "crypto-common", "inout", @@ -1025,9 +992,9 @@ dependencies = [ [[package]] name = "clang-sys" -version = "1.6.1" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c688fc74432808e3eb684cae8830a86be1d66a2bd58e1f248ed0960a590baf6f" +checksum = "77ed9a53e5d4d9c573ae844bfac6872b159cb1d1585a83b29e7a64b7eef7332a" dependencies = [ "glob", "libc", @@ -1048,47 +1015,39 @@ dependencies = [ [[package]] name = "clap" -version = "4.2.1" +version = "4.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "046ae530c528f252094e4a77886ee1374437744b2bff1497aa898bbddbbb29b3" +checksum = "c3d7ae14b20b94cb02149ed21a86c423859cbe18dc7ed69845cace50e52b40a5" dependencies = [ - "clap_builder", + "bitflags", "clap_derive", + "clap_lex 0.3.2", + "is-terminal", "once_cell", -] - -[[package]] -name = "clap_builder" -version = "4.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "223163f58c9a40c3b0a43e1c4b50a9ce09f007ea2cb1ec258a687945b4b7929f" -dependencies = [ - "anstream", - "anstyle", - "bitflags", - "clap_lex 0.4.1", "strsim", + "termcolor", ] [[package]] name = "clap_complete" -version = "4.2.0" +version = "4.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01c22dcfb410883764b29953103d9ef7bb8fe21b3fa1158bc99986c2067294bd" +checksum = "501ff0a401473ea1d4c3b125ff95506b62c5bc5768d818634195fbb7c4ad5ff4" dependencies = [ - "clap 4.2.1", + "clap 4.1.8", ] [[package]] name = "clap_derive" -version = "4.2.0" +version = "4.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f9644cd56d6b87dbe899ef8b053e331c0637664e9e21a33dfcdc36093f5c5c4" +checksum = "44bec8e5c9d09e439c4335b1af0abaab56dcf3b94999a936e1bb47b9134288f0" dependencies = [ "heck", + "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.13", + "syn 1.0.109", ] [[package]] @@ -1102,9 +1061,12 @@ dependencies = [ [[package]] name = "clap_lex" -version = "0.4.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a2dd5a6fe8c6e3502f568a6353e5273bbb15193ad9a89e457b9970798efbea1" +checksum = "350b9cf31731f9957399229e9b2adc51eeabdfbe9d71d9a0552275fd12710d09" +dependencies = [ + "os_str_bytes", +] [[package]] name = "codespan-reporting" @@ -1127,21 +1089,6 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "concolor-override" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a855d4a1978dc52fb0536a04d384c2c0c1aa273597f08b77c8c4d3b2eec6037f" - -[[package]] -name = "concolor-query" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "88d11d52c3d7ca2e6d0040212be9e4dbbcd78b6447f535b6b561f449427944cf" -dependencies = [ - "windows-sys 0.45.0", -] - [[package]] name = "concurrent-queue" version = "2.1.0" @@ -1159,9 +1106,9 @@ checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913" [[package]] name = "constant_time_eq" -version = "0.2.5" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13418e745008f7349ec7e449155f419a61b92b58a99cc3616942b926825ec76b" +checksum = "f3ad85c1f65dc7b37604eb0e89748faf0b9653065f2a8ef69f96a687ec1e9279" [[package]] name = "core-foundation" @@ -1175,9 +1122,9 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.4" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" [[package]] name = "core2" @@ -1199,9 +1146,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.6" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" dependencies = [ "libc", ] @@ -1422,7 +1369,7 @@ version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", "rand_core 0.6.4", "subtle", "zeroize", @@ -1434,7 +1381,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c2538c4e68e52548bacb3e83ac549f903d44f011ac9d5abb5e132e67d0808f7" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", "rand_core 0.6.4", "subtle", "zeroize", @@ -1446,7 +1393,7 @@ version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", "rand_core 0.6.4", "typenum", ] @@ -1457,7 +1404,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", "subtle", ] @@ -1467,7 +1414,7 @@ version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", "subtle", ] @@ -1496,7 +1443,7 @@ version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" dependencies = [ - "cipher 0.4.4", + "cipher 0.4.3", ] [[package]] @@ -1541,9 +1488,9 @@ dependencies = [ [[package]] name = "cxx" -version = "1.0.94" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f61f1b6389c3fe1c316bf8a4dccc90a38208354b330925bce1f74a6c4756eb93" +checksum = "86d3488e7665a7a483b57e25bdd90d0aeb2bc7608c8d0346acf2ad3f1caf1d62" dependencies = [ "cc", "cxxbridge-flags", @@ -1553,9 +1500,9 @@ dependencies = [ [[package]] name = "cxx-build" -version = "1.0.94" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12cee708e8962df2aeb38f594aae5d827c022b6460ac71a7a3e2c3c2aae5a07b" +checksum = "48fcaf066a053a41a81dfb14d57d99738b767febb8b735c3016e469fac5da690" dependencies = [ "cc", "codespan-reporting", @@ -1563,31 +1510,31 @@ dependencies = [ "proc-macro2", "quote", "scratch", - "syn 2.0.13", + "syn 1.0.109", ] [[package]] name = "cxxbridge-flags" -version = "1.0.94" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7944172ae7e4068c533afbb984114a56c46e9ccddda550499caa222902c7f7bb" +checksum = "a2ef98b8b717a829ca5603af80e1f9e2e48013ab227b68ef37872ef84ee479bf" [[package]] name = "cxxbridge-macro" -version = "1.0.94" +version = "1.0.91" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2345488264226bf682893e25de0769f3360aac9957980ec49361b083ddaa5bc5" +checksum = "086c685979a698443656e5cf7856c95c642295a38599f12fb1ff76fb28d19892" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 1.0.109", ] [[package]] name = "darling" -version = "0.14.4" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +checksum = "c0808e1bd8671fb44a113a14e13497557533369847788fa2ae912b6ebfce9fa8" dependencies = [ "darling_core", "darling_macro", @@ -1595,9 +1542,9 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.14.4" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +checksum = "001d80444f28e193f30c2f293455da62dcf9a6b29918a4253152ae2b1de592cb" dependencies = [ "fnv", "ident_case", @@ -1609,9 +1556,9 @@ dependencies = [ [[package]] name = "darling_macro" -version = "0.14.4" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +checksum = "b36230598a2d5de7ec1c6f51f72d8a99a9208daff41de2084d06e3fd3ea56685" dependencies = [ "darling_core", "quote", @@ -1657,9 +1604,9 @@ dependencies = [ [[package]] name = "der" -version = "0.7.3" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82b10af9f9f9f2134a42d3f8aa74658660f2e0234b0eb81bd171df8aa32779ed" +checksum = "bc906908ea6458456e5eaa160a9c08543ec3d1e6f71e2235cedd660cb65f9df0" dependencies = [ "const-oid", "zeroize", @@ -1681,11 +1628,11 @@ dependencies = [ [[package]] name = "der-parser" -version = "8.2.0" +version = "8.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" +checksum = "42d4bc9b0db0a0df9ae64634ac5bdefb7afcb534e182275ca0beadbe486701c1" dependencies = [ - "asn1-rs 0.5.2", + "asn1-rs 0.5.1", "displaydoc", "nom", "num-bigint", @@ -1773,7 +1720,7 @@ version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] @@ -1783,7 +1730,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" dependencies = [ "block-buffer 0.10.4", - "const-oid", "crypto-common", "subtle", ] @@ -1866,9 +1812,9 @@ checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" [[package]] name = "dtoa" -version = "1.0.6" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65d09067bfacaa79114679b279d7f5885b53295b1e2cfb4e79c8e4bd3d633169" +checksum = "c00704156a7de8df8da0911424e30c2049957b0a714542a44e05fe693dd85313" [[package]] name = "dyn-clonable" @@ -1911,15 +1857,14 @@ dependencies = [ [[package]] name = "ecdsa" -version = "0.16.4" +version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "106401dadc137d05cb0d4ab4d42be089746aefdfe8992df4d0edcf351c16ddca" +checksum = "d1b0a1222f8072619e8a6b667a854020a03d363738303203c09468b3424a420a" dependencies = [ - "der 0.7.3", - "digest 0.10.6", - "elliptic-curve 0.13.3", + "der 0.7.1", + "elliptic-curve 0.13.2", "rfc6979 0.4.0", - "signature 2.1.0", + "signature 2.0.0", ] [[package]] @@ -1976,7 +1921,7 @@ dependencies = [ "der 0.6.1", "digest 0.10.6", "ff 0.12.1", - "generic-array 0.14.7", + "generic-array 0.14.6", "group 0.12.1", "hkdf", "pem-rfc7468", @@ -1989,17 +1934,17 @@ dependencies = [ [[package]] name = "elliptic-curve" -version = "0.13.3" +version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cdacd4d6ed3f9b98680b679c0e52a823b8a2c7a97358d508fe247f2180c282" +checksum = "6ea5a92946e8614bb585254898bb7dd1ddad241ace60c52149e3765e34cc039d" dependencies = [ "base16ct 0.2.0", "crypto-bigint 0.5.1", "digest 0.10.6", "ff 0.13.0", - "generic-array 0.14.7", + "generic-array 0.14.6", "group 0.13.0", - "pkcs8 0.10.2", + "pkcs8 0.10.1", "rand_core 0.6.4", "sec1 0.7.1", "subtle", @@ -2020,22 +1965,22 @@ dependencies = [ [[package]] name = "enumflags2" -version = "0.7.6" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0044ebdf7fbb2a772e0c0233a9d3173c5cd8af8ae7078d4c5188af44ffffaa4b" +checksum = "e75d4cd21b95383444831539909fbb14b9dc3fdceb2a6f5d36577329a1f55ccb" dependencies = [ "enumflags2_derive", ] [[package]] name = "enumflags2_derive" -version = "0.7.6" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d2c772ccdbdfd1967b4f5d79d17c98ebf92009fdcc838db7aa434462f600c26" +checksum = "f58dc3c5e468259f19f2d46304a6b28f1c3d034442e14b322d2b850e36f6d5ae" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 1.0.109", ] [[package]] @@ -2182,9 +2127,9 @@ dependencies = [ [[package]] name = "fiat-crypto" -version = "0.1.20" +version = "0.1.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e825f6987101665dea6ec934c09ec6d721de7bc1bf92248e1d5810c8cd636b77" +checksum = "a214f5bb88731d436478f3ae1f8a277b62124089ba9fb67f4f93fb100ef73c90" [[package]] name = "file-per-thread-logger" @@ -2198,14 +2143,14 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.21" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cbc844cecaee9d4443931972e1289c8ff485cb4cc2767cb03ca139ed6885153" +checksum = "8a3de6e8d11b22ff9edc6d916f890800597d60f8b2da1caf2955c274638d6412" dependencies = [ "cfg-if", "libc", "redox_syscall 0.2.16", - "windows-sys 0.48.0", + "windows-sys 0.45.0", ] [[package]] @@ -2335,7 +2280,7 @@ dependencies = [ "Inflector", "array-bytes", "chrono", - "clap 4.2.1", + "clap 4.1.8", "comfy-table", "frame-benchmarking", "frame-support", @@ -2426,7 +2371,7 @@ dependencies = [ name = "frame-election-solution-type-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.2.1", + "clap 4.1.8", "frame-election-provider-solution-type", "frame-election-provider-support", "frame-support", @@ -2462,9 +2407,9 @@ dependencies = [ [[package]] name = "frame-metadata" -version = "15.1.0" +version = "15.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "878babb0b136e731cc77ec2fd883ff02745ff21e6fb662729953d44923df009c" +checksum = "df6bb8542ef006ef0de09a5c4420787d79823c0ed7924225822362fd2bf2ff2d" dependencies = [ "cfg-if", "parity-scale-codec", @@ -2855,9 +2800,9 @@ dependencies = [ [[package]] name = "generic-array" -version = "0.14.7" +version = "0.14.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" dependencies = [ "typenum", "version_check", @@ -2887,9 +2832,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.9" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" dependencies = [ "cfg-if", "libc", @@ -3140,7 +3085,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1" dependencies = [ "digest 0.9.0", - "generic-array 0.14.7", + "generic-array 0.14.6", "hmac 0.8.1", ] @@ -3215,9 +3160,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "hyper" -version = "0.14.25" +version = "0.14.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc5e554ff619822309ffd57d8734d77cd5ce6238bc956f037ea06c58238c9899" +checksum = "5e011372fa0b68db8350aa7a248930ecc7839bf46d8485577d69f117a75f164c" dependencies = [ "bytes", "futures-channel", @@ -3254,16 +3199,16 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.56" +version = "0.1.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" +checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows 0.48.0", + "winapi", ] [[package]] @@ -3315,9 +3260,9 @@ dependencies = [ [[package]] name = "if-watch" -version = "3.0.1" +version = "3.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9465340214b296cd17a0009acdb890d6160010b8adf8f78a00d0d7ab270f79f" +checksum = "ba7abdbb86e485125dad06c2691e1e393bf3b08c7b743b43aa162a00fd39062e" dependencies = [ "async-io", "core-foundation", @@ -3329,7 +3274,7 @@ dependencies = [ "rtnetlink", "system-configuration", "tokio", - "windows 0.34.0", + "windows", ] [[package]] @@ -3363,9 +3308,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.9.3" +version = "1.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" dependencies = [ "autocfg", "hashbrown 0.12.3", @@ -3384,7 +3329,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", ] [[package]] @@ -3432,13 +3377,12 @@ checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" [[package]] name = "io-lifetimes" -version = "1.0.10" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c66c74d2ae7e79a5a8f7ac924adbe38ee42a859c6539ad869eb51f0b52dc220" +checksum = "1abeb7a0dd0f8181267ff8adc397075586500b81b28a73e8a0208b00fc170fb3" dependencies = [ - "hermit-abi 0.3.1", "libc", - "windows-sys 0.48.0", + "windows-sys 0.45.0", ] [[package]] @@ -3461,20 +3405,20 @@ dependencies = [ [[package]] name = "ipnet" -version = "2.7.2" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" +checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" [[package]] name = "is-terminal" -version = "0.4.7" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "adcf93614601c8129ddf72e2d5633df827ba6551541c6d8c59520a371475be1f" +checksum = "21b6b32576413a8e69b90e952e4a026476040d81017b80445deda5f2d3921857" dependencies = [ "hermit-abi 0.3.1", - "io-lifetimes 1.0.10", - "rustix 0.37.8", - "windows-sys 0.48.0", + "io-lifetimes 1.0.5", + "rustix 0.36.8", + "windows-sys 0.45.0", ] [[package]] @@ -3488,9 +3432,9 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.6" +version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" [[package]] name = "jobserver" @@ -3641,8 +3585,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "955890845095ccf31ef83ad41a05aabb4d8cc23dc3cac5a9f5c89cf26dd0da75" dependencies = [ "cfg-if", - "ecdsa 0.16.4", - "elliptic-curve 0.13.3", + "ecdsa 0.16.1", + "elliptic-curve 0.13.2", "once_cell", "sha2 0.10.6", ] @@ -3822,9 +3766,9 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "libc" -version = "0.2.141" +version = "0.2.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" +checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c" [[package]] name = "libgit2-sys" @@ -3869,7 +3813,7 @@ dependencies = [ "bytes", "futures", "futures-timer", - "getrandom 0.2.9", + "getrandom 0.2.8", "instant", "libp2p-allow-block-list", "libp2p-connection-limits", @@ -4084,18 +4028,18 @@ dependencies = [ [[package]] name = "libp2p-noise" -version = "0.42.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c87c2803deffeae94108072a0387f8c9ff494af68a4908454c11c811e27b5e5" +checksum = "1216f9ec823ac7a2289b954674c54cbce81c9e45920b4fcf173018ede4295246" dependencies = [ "bytes", "curve25519-dalek 3.2.0", "futures", "libp2p-core", - "libp2p-identity", "log", "once_cell", - "quick-protobuf", + "prost", + "prost-build", "rand 0.8.5", "sha2 0.10.6", "snow", @@ -4582,11 +4526,11 @@ checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] name = "memfd" -version = "0.6.3" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc89ccdc6e10d6907450f753537ebc5c5d3460d2e4e62ea74bd571db62c0f9e" +checksum = "b20a59d985586e4a5aef64564ac77299f8586d8be6cf9106a5a40207e8908efb" dependencies = [ - "rustix 0.37.8", + "rustix 0.36.8", ] [[package]] @@ -4720,9 +4664,9 @@ dependencies = [ [[package]] name = "mockall" -version = "0.11.4" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96" +checksum = "50e4a1c770583dac7ab5e2f6c139153b783a53a1bbee9729613f193e59828326" dependencies = [ "cfg-if", "downcast", @@ -4735,9 +4679,9 @@ dependencies = [ [[package]] name = "mockall_derive" -version = "0.11.4" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" +checksum = "832663583d5fa284ca8810bf7015e46c9fff9622d3cf34bd1eea5003fec06dd0" dependencies = [ "cfg-if", "proc-macro2", @@ -4747,14 +4691,13 @@ dependencies = [ [[package]] name = "multiaddr" -version = "0.17.1" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b36f567c7099511fa8612bbbb52dda2419ce0bdbacf31714e3a5ffdb766d3bd" +checksum = "3b53e0cc5907a5c216ba6584bf74be8ab47d6d6289f72793b2dddbf15dc3bf8c" dependencies = [ "arrayref", "byteorder", "data-encoding", - "log", "multibase", "multihash 0.17.0", "percent-encoding", @@ -4841,9 +4784,9 @@ dependencies = [ [[package]] name = "nalgebra" -version = "0.32.2" +version = "0.32.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d68d47bba83f9e2006d117a9a33af1524e655516b8919caac694427a6fb1e511" +checksum = "f6515c882ebfddccaa73ead7320ca28036c4bc84c9bcca3cc0cbba8efe89223a" dependencies = [ "approx", "matrixmultiply", @@ -4930,9 +4873,9 @@ dependencies = [ [[package]] name = "netlink-sys" -version = "0.8.5" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6471bf08e7ac0135876a9581bf3217ef0333c191c128d34878079f42ee150411" +checksum = "260e21fbb6f3d253a14df90eb0000a6066780a15dd901a7519ce02d77a94985b" dependencies = [ "bytes", "futures", @@ -4972,7 +4915,7 @@ name = "node-bench" version = "0.9.0-dev" dependencies = [ "array-bytes", - "clap 4.2.1", + "clap 4.1.8", "derive_more", "fs_extra", "futures", @@ -5009,7 +4952,7 @@ version = "3.0.0-dev" dependencies = [ "array-bytes", "assert_cmd", - "clap 4.2.1", + "clap 4.1.8", "clap_complete", "criterion", "frame-benchmarking-cli", @@ -5131,7 +5074,7 @@ dependencies = [ name = "node-inspect" version = "0.9.0-dev" dependencies = [ - "clap 4.2.1", + "clap 4.1.8", "parity-scale-codec", "sc-cli", "sc-client-api", @@ -5190,7 +5133,7 @@ dependencies = [ name = "node-runtime-generate-bags" version = "3.0.0" dependencies = [ - "clap 4.2.1", + "clap 4.1.8", "generate-bags", "kitchensink-runtime", ] @@ -5199,7 +5142,7 @@ dependencies = [ name = "node-template" version = "4.0.0-dev" dependencies = [ - "clap 4.2.1", + "clap 4.1.8", "frame-benchmarking", "frame-benchmarking-cli", "frame-system", @@ -5475,7 +5418,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" dependencies = [ - "asn1-rs 0.5.2", + "asn1-rs 0.5.1", ] [[package]] @@ -5510,9 +5453,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "os_str_bytes" -version = "6.5.0" +version = "6.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ceedf44fb00f2d1984b0bc98102627ce622e083e49a5bacdb3e514fa4238e267" +checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" [[package]] name = "output_vt100" @@ -7199,9 +7142,9 @@ dependencies = [ [[package]] name = "paste" -version = "1.0.12" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f746c4065a8fa3fe23974dd82f15431cc8d40779821001404d10d2e79ca7d79" +checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" [[package]] name = "pbkdf2" @@ -7253,9 +7196,9 @@ checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "pest" -version = "2.5.7" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1403e8401ad5dedea73c626b99758535b342502f8d1e361f4a2dd952749122" +checksum = "028accff104c4e513bad663bbcd2ad7cfd5304144404c31ed0a77ac103d00660" dependencies = [ "thiserror", "ucd-trie", @@ -7263,9 +7206,9 @@ dependencies = [ [[package]] name = "pest_derive" -version = "2.5.7" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be99c4c1d2fc2769b1d00239431d711d08f6efedcecb8b6e30707160aee99c15" +checksum = "2ac3922aac69a40733080f53c1ce7f91dcf57e1a5f6c52f421fadec7fbdc4b69" dependencies = [ "pest", "pest_generator", @@ -7273,22 +7216,22 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.5.7" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e56094789873daa36164de2e822b3888c6ae4b4f9da555a1103587658c805b1e" +checksum = "d06646e185566b5961b4058dd107e0a7f56e77c3f484549fb119867773c0f202" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.13", + "syn 1.0.109", ] [[package]] name = "pest_meta" -version = "2.5.7" +version = "2.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6733073c7cff3d8459fda0e42f13a047870242aed8b509fe98000928975f359e" +checksum = "e6f60b2ba541577e2a0c307c8f39d1439108120eb7903adeb6497fa880c59616" dependencies = [ "once_cell", "pest", @@ -7355,12 +7298,12 @@ dependencies = [ [[package]] name = "pkcs8" -version = "0.10.2" +version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +checksum = "3d2820d87d2b008616e5c27212dd9e0e694fb4c6b522de06094106813328cb49" dependencies = [ - "der 0.7.3", - "spki 0.7.1", + "der 0.7.1", + "spki 0.7.0", ] [[package]] @@ -7411,18 +7354,16 @@ dependencies = [ [[package]] name = "polling" -version = "2.6.0" +version = "2.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e1f879b2998099c2d69ab9605d145d5b661195627eccc680002c4918a7fb6fa" +checksum = "22122d5ec4f9fe1b3916419b76be1e80bcb93f618d071d2edf841b137b2a2bd6" dependencies = [ "autocfg", - "bitflags", "cfg-if", - "concurrent-queue", "libc", "log", - "pin-project-lite 0.2.9", - "windows-sys 0.45.0", + "wepoll-ffi", + "windows-sys 0.42.0", ] [[package]] @@ -7500,9 +7441,9 @@ checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174" [[package]] name = "predicates-tree" -version = "1.0.9" +version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf" +checksum = "54ff541861505aabf6ea722d2131ee980b8276e10a1297b94e896dd8b621850d" dependencies = [ "predicates-core", "termtree", @@ -7522,9 +7463,9 @@ dependencies = [ [[package]] name = "prettyplease" -version = "0.1.25" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c8646e95016a7a6c4adea95bafa8a16baab64b583356217f2c85db4a39d9a86" +checksum = "e97e3215779627f01ee256d2fad52f3d95e8e1c11e9fc6fd08f7cd455d5d5c78" dependencies = [ "proc-macro2", "syn 1.0.109", @@ -7747,9 +7688,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.9.3" +version = "0.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c10f662eee9c94ddd7135043e544f3c82fa839a1e7b865911331961b53186c" +checksum = "72ef4ced82a24bb281af338b9e8f94429b6eca01b4e66d899f40031f074e74c9" dependencies = [ "bytes", "rand 0.8.5", @@ -7837,7 +7778,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.9", + "getrandom 0.2.8", ] [[package]] @@ -7876,9 +7817,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3" [[package]] name = "rayon" -version = "1.7.0" +version = "1.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d2df5196e37bcc87abebc0053e20787d73847bb33134a69841207dd0a47f03b" +checksum = "6db3a213adf02b3bcfd2d3846bb41cb22857d131789e01df434fb7e7bc0759b7" dependencies = [ "either", "rayon-core", @@ -7886,9 +7827,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.11.0" +version = "1.10.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b8f95bd6966f5c87776639160a66bd8ab9895d9d4ab01ddba9fc60661aebe8d" +checksum = "356a0625f1954f730c0201cdab48611198dc6ce21f4acff55089b5a78e6e835b" dependencies = [ "crossbeam-channel", "crossbeam-deque", @@ -7945,29 +7886,29 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b" dependencies = [ - "getrandom 0.2.9", + "getrandom 0.2.8", "redox_syscall 0.2.16", "thiserror", ] [[package]] name = "ref-cast" -version = "1.0.16" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43faa91b1c8b36841ee70e97188a869d37ae21759da6846d4be66de5bf7b12c" +checksum = "8c78fb8c9293bcd48ef6fce7b4ca950ceaf21210de6e105a883ee280c0f7b9ed" dependencies = [ "ref-cast-impl", ] [[package]] name = "ref-cast-impl" -version = "1.0.16" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d2275aab483050ab2a7364c1a46604865ee7d6906684e08db0f090acf74f9e7" +checksum = "9f9c0c92af03644e4806106281fe2e068ac5bc0ae74a707266d06ea27bccee5f" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 1.0.109", ] [[package]] @@ -8139,9 +8080,9 @@ dependencies = [ [[package]] name = "rustc-demangle" -version = "0.1.22" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a36c42d1873f9a77c53bde094f9664d9891bc604a45b4798fd2c389ed12e5b" +checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" [[package]] name = "rustc-hash" @@ -8170,7 +8111,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" dependencies = [ - "semver 1.0.17", + "semver 1.0.16", ] [[package]] @@ -8198,13 +8139,13 @@ dependencies = [ [[package]] name = "rustix" -version = "0.36.12" +version = "0.36.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0af200a3324fa5bcd922e84e9b55a298ea9f431a489f01961acdebc6e908f25" +checksum = "f43abb88211988493c1abb44a70efa56ff0ce98f233b7b276146f1f3f7ba9644" dependencies = [ "bitflags", - "errno 0.3.0", - "io-lifetimes 1.0.10", + "errno 0.2.8", + "io-lifetimes 1.0.5", "libc", "linux-raw-sys 0.1.4", "windows-sys 0.45.0", @@ -8212,16 +8153,16 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.8" +version = "0.37.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aef160324be24d31a62147fae491c14d2204a3865c7ca8c3b0d7f7bcb3ea635" +checksum = "2aae838e49b3d63e9274e1c01833cc8139d3fec468c3b84688c628f44b1ae11d" dependencies = [ "bitflags", "errno 0.3.0", - "io-lifetimes 1.0.10", + "io-lifetimes 1.0.5", "libc", "linux-raw-sys 0.3.1", - "windows-sys 0.48.0", + "windows-sys 0.45.0", ] [[package]] @@ -8272,9 +8213,9 @@ dependencies = [ [[package]] name = "rustversion" -version = "1.0.12" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" +checksum = "5583e89e108996506031660fe09baa5011b9dd0341b89029313006d1fb508d70" [[package]] name = "rusty-fork" @@ -8300,9 +8241,9 @@ dependencies = [ [[package]] name = "ryu" -version = "1.0.13" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" [[package]] name = "safe-mix" @@ -8446,7 +8387,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes", "chrono", - "clap 4.2.1", + "clap 4.1.8", "fdlimit", "futures", "futures-timer", @@ -8986,7 +8927,7 @@ dependencies = [ "once_cell", "parity-scale-codec", "paste", - "rustix 0.36.12", + "rustix 0.36.8", "sc-allocator", "sc-executor-common", "sc-runtime-test", @@ -9562,7 +9503,7 @@ dependencies = [ name = "sc-storage-monitor" version = "0.1.0" dependencies = [ - "clap 4.2.1", + "clap 4.1.8", "fs4", "futures", "log", @@ -9734,9 +9675,9 @@ dependencies = [ [[package]] name = "scale-info" -version = "2.5.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0cfdffd972d76b22f3d7f81c8be34b2296afd3a25e0a547bd9abe340a4dbbe97" +checksum = "001cf62ece89779fd16105b5f515ad0e5cedcd5440d3dd806bb067978e7c3608" dependencies = [ "bitvec", "cfg-if", @@ -9748,9 +9689,9 @@ dependencies = [ [[package]] name = "scale-info-derive" -version = "2.5.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61fa974aea2d63dd18a4ec3a49d59af9f34178c73a4f56d2f18205628d00681e" +checksum = "303959cf613a6f6efd19ed4b4ad5bf79966a13352716299ad532cfb115f4205c" dependencies = [ "proc-macro-crate", "proc-macro2", @@ -9804,9 +9745,9 @@ checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" [[package]] name = "scratch" -version = "1.0.5" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1792db035ce95be60c3f8853017b3999209281c24e2ba5bc8e59bf97a0c590c1" +checksum = "ddccb15bcce173023b3fedd9436f882a0739b8dfb45e4f6b6002bee5929f61b2" [[package]] name = "sct" @@ -9848,7 +9789,7 @@ checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928" dependencies = [ "base16ct 0.1.1", "der 0.6.1", - "generic-array 0.14.7", + "generic-array 0.14.6", "pkcs8 0.9.0", "subtle", "zeroize", @@ -9861,9 +9802,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e" dependencies = [ "base16ct 0.2.0", - "der 0.7.3", - "generic-array 0.14.7", - "pkcs8 0.10.2", + "der 0.7.1", + "generic-array 0.14.6", + "pkcs8 0.10.1", "subtle", "zeroize", ] @@ -9938,9 +9879,9 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.17" +version = "1.0.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed" +checksum = "58bc9567378fc7690d6b2addae4e60ac2eeea07becb2c64b9f218b53865cba2a" dependencies = [ "serde", ] @@ -9953,29 +9894,29 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.159" +version = "1.0.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065" +checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.159" +version = "1.0.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c614d17805b093df4b147b51339e7e44bf05ef59fba1e45d83500bcfb4d8585" +checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 1.0.109", ] [[package]] name = "serde_json" -version = "1.0.95" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d721eca97ac802aa7777b701877c8004d950fc142651367300d21c1cc0194744" +checksum = "cad406b69c91885b5107daf2c29572f6c8cdb3c66826821e286c533490c0bc76" dependencies = [ "itoa", "ryu", @@ -10088,9 +10029,9 @@ dependencies = [ [[package]] name = "signature" -version = "2.1.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500" +checksum = "8fe458c98333f9c8152221191a77e2a44e8325d0193484af2e9421a53019e57d" dependencies = [ "digest 0.10.6", "rand_core 0.6.4", @@ -10665,7 +10606,7 @@ dependencies = [ name = "sp-npos-elections-fuzzer" version = "2.0.0-alpha.5" dependencies = [ - "clap 4.2.1", + "clap 4.1.8", "honggfuzz", "parity-scale-codec", "rand 0.8.5", @@ -11022,9 +10963,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "spin" -version = "0.9.8" +version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +checksum = "7dccf47db1b41fa1573ed27ccf5e08e3ca771cb994f776668c5ebda893b248fc" [[package]] name = "spki" @@ -11038,12 +10979,12 @@ dependencies = [ [[package]] name = "spki" -version = "0.7.1" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37a5be806ab6f127c3da44b7378837ebf01dadca8510a0e572460216b228bd0e" +checksum = "c0445c905640145c7ea8c1993555957f65e7c46d0535b91ba501bc9bfc85522f" dependencies = [ "base64ct", - "der 0.7.3", + "der 0.7.1", ] [[package]] @@ -11152,7 +11093,7 @@ dependencies = [ name = "subkey" version = "3.0.0" dependencies = [ - "clap 4.2.1", + "clap 4.1.8", "sc-cli", ] @@ -11194,7 +11135,7 @@ dependencies = [ name = "substrate-frame-cli" version = "4.0.0-dev" dependencies = [ - "clap 4.2.1", + "clap 4.1.8", "frame-support", "frame-system", "sc-cli", @@ -11529,7 +11470,7 @@ dependencies = [ "cfg-if", "fastrand", "redox_syscall 0.3.5", - "rustix 0.37.8", + "rustix 0.37.7", "windows-sys 0.45.0", ] @@ -11544,9 +11485,9 @@ dependencies = [ [[package]] name = "termtree" -version = "0.4.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76" +checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8" [[package]] name = "textwrap" @@ -12043,7 +11984,7 @@ version = "0.10.0-dev" dependencies = [ "assert_cmd", "async-trait", - "clap 4.2.1", + "clap 4.1.8", "frame-remote-externalities", "frame-try-runtime", "hex", @@ -12079,9 +12020,9 @@ dependencies = [ [[package]] name = "trybuild" -version = "1.0.80" +version = "1.0.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "501dbdbb99861e4ab6b60eb6a7493956a9defb644fd034bc4a5ef27c693c8a3a" +checksum = "a44da5a6f2164c8e14d3bbc0657d69c5966af9f5f6930d4f600b1f5c4a673413" dependencies = [ "basic-toml", "dissimilar", @@ -12156,15 +12097,15 @@ dependencies = [ [[package]] name = "unicode-bidi" -version = "0.3.13" +version = "0.3.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" [[package]] name = "unicode-ident" -version = "1.0.8" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" [[package]] name = "unicode-normalization" @@ -12193,7 +12134,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05" dependencies = [ - "generic-array 0.14.7", + "generic-array 0.14.6", "subtle", ] @@ -12236,19 +12177,13 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "utf8parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" - [[package]] name = "uuid" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1674845326ee10d37ca60470760d4288a6f80f304007d92e5c53bab78c9cfd79" dependencies = [ - "getrandom 0.2.9", + "getrandom 0.2.8", ] [[package]] @@ -12301,11 +12236,12 @@ checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" [[package]] name = "walkdir" -version = "2.3.3" +version = "2.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698" +checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" dependencies = [ "same-file", + "winapi", "winapi-util", ] @@ -12405,9 +12341,9 @@ checksum = "0046fef7e28c3804e5e38bfa31ea2a0f73905319b677e57ebe37e49358989b5d" [[package]] name = "wasm-encoder" -version = "0.25.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4eff853c4f09eec94d76af527eddad4e9de13b11d6286a1ef7134bc30135a2b7" +checksum = "68f7d56227d910901ce12dfd19acc40c12687994dfb3f57c90690f80be946ec5" dependencies = [ "leb128", ] @@ -12503,7 +12439,7 @@ version = "0.28.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e61a7006b0fdf24f6bbe8dcfdad5ca1b350de80061fb2827f31c82fbbb9565a" dependencies = [ - "spin 0.9.8", + "spin 0.9.5", "wasmi_arena", "wasmi_core 0.12.0", "wasmparser-nostd", @@ -12618,7 +12554,7 @@ dependencies = [ "directories-next", "file-per-thread-logger", "log", - "rustix 0.36.12", + "rustix 0.36.8", "serde", "sha2 0.10.6", "toml", @@ -12698,7 +12634,7 @@ checksum = "d0245e8a9347017c7185a72e215218a802ff561545c242953c11ba00fccc930f" dependencies = [ "object 0.29.0", "once_cell", - "rustix 0.36.12", + "rustix 0.36.8", ] [[package]] @@ -12729,7 +12665,7 @@ dependencies = [ "memoffset 0.6.5", "paste", "rand 0.8.5", - "rustix 0.36.12", + "rustix 0.36.8", "wasmtime-asm-macros", "wasmtime-environ", "wasmtime-jit-debug", @@ -12750,9 +12686,9 @@ dependencies = [ [[package]] name = "wast" -version = "55.0.0" +version = "54.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4984d3e1406571f4930ba5cf79bd70f75f41d0e87e17506e0bd19b0e5d085f05" +checksum = "3d48d9d731d835f4f8dacbb8de7d47be068812cb9877f5c60d408858778d8d2a" dependencies = [ "leb128", "memchr", @@ -12762,9 +12698,9 @@ dependencies = [ [[package]] name = "wat" -version = "1.0.61" +version = "1.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af2b53f4da14db05d32e70e9c617abdf6620c575bd5dd972b7400037b4df2091" +checksum = "d1db2e3ed05ea31243761439194bec3af6efbbaf87c4c8667fb879e4f23791a0" dependencies = [ "wast", ] @@ -12878,7 +12814,7 @@ dependencies = [ "byteorder", "ccm", "curve25519-dalek 3.2.0", - "der-parser 8.2.0", + "der-parser 8.1.0", "elliptic-curve 0.12.3", "hkdf", "hmac 0.12.1", @@ -13020,6 +12956,15 @@ dependencies = [ "winapi", ] +[[package]] +name = "wepoll-ffi" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d743fdedc5c64377b5fc2bc036b01c7fd642205a0d96356034ae3404d49eb7fb" +dependencies = [ + "cc", +] + [[package]] name = "which" version = "4.4.0" @@ -13091,28 +13036,19 @@ dependencies = [ "windows_x86_64_msvc 0.34.0", ] -[[package]] -name = "windows" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" -dependencies = [ - "windows-targets 0.48.0", -] - [[package]] name = "windows-sys" version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc 0.42.1", + "windows_i686_gnu 0.42.1", + "windows_i686_msvc 0.42.1", + "windows_x86_64_gnu 0.42.1", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc 0.42.1", ] [[package]] @@ -13121,59 +13057,29 @@ version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" dependencies = [ - "windows-targets 0.42.2", -] - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.0", + "windows-targets", ] [[package]] name = "windows-targets" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" -dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", -] - -[[package]] -name = "windows-targets" -version = "0.48.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +checksum = "8e2522491fbfcd58cc84d47aeb2958948c4b8982e9a2d8a2a35bbaed431390e7" dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc 0.42.1", + "windows_i686_gnu 0.42.1", + "windows_i686_msvc 0.42.1", + "windows_x86_64_gnu 0.42.1", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc 0.42.1", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" [[package]] name = "windows_aarch64_msvc" @@ -13183,15 +13089,9 @@ checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d" [[package]] name = "windows_aarch64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" [[package]] name = "windows_i686_gnu" @@ -13201,15 +13101,9 @@ checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed" [[package]] name = "windows_i686_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" [[package]] name = "windows_i686_msvc" @@ -13219,15 +13113,9 @@ checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956" [[package]] name = "windows_i686_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" [[package]] name = "windows_x86_64_gnu" @@ -13237,27 +13125,15 @@ checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4" [[package]] name = "windows_x86_64_gnu" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.42.2" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" [[package]] name = "windows_x86_64_msvc" @@ -13267,15 +13143,9 @@ checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9" [[package]] name = "windows_x86_64_msvc" -version = "0.42.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.42.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" [[package]] name = "winreg" @@ -13342,10 +13212,10 @@ version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8" dependencies = [ - "asn1-rs 0.5.2", + "asn1-rs 0.5.1", "base64 0.13.1", "data-encoding", - "der-parser 8.2.0", + "der-parser 8.1.0", "lazy_static", "nom", "oid-registry 0.6.1", @@ -13376,31 +13246,32 @@ checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec" [[package]] name = "yasna" -version = "0.5.2" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e17bb3549cc1321ae1296b9cdc2698e2b6cb1992adfa19a8c72e5b7a738f44cd" +checksum = "aed2e7a52e3744ab4d0c05c20aa065258e84c49fd4226f5191b2ed29712710b4" dependencies = [ "time 0.3.20", ] [[package]] name = "zeroize" -version = "1.6.0" +version = "1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f" dependencies = [ "zeroize_derive", ] [[package]] name = "zeroize_derive" -version = "1.4.2" +version = "1.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" +checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.13", + "syn 1.0.109", + "synstructure", ] [[package]] @@ -13424,9 +13295,9 @@ dependencies = [ [[package]] name = "zstd-sys" -version = "2.0.8+zstd.1.5.5" +version = "2.0.7+zstd.1.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5556e6ee25d32df2586c098bbfa278803692a20d0ab9565e049480d52707ec8c" +checksum = "94509c3ba2fe55294d752b79842c530ccfab760192521df74a081a78d2b3c7f5" dependencies = [ "cc", "libc", From 6544dd4138e2f89517bd7c7281fc78a638ec7040 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Thu, 4 May 2023 12:51:20 +0400 Subject: [PATCH 36/48] upgrade to libp2p 0.51.3 --- Cargo.lock | 4 ++-- client/authority-discovery/Cargo.toml | 2 +- client/network-gossip/Cargo.toml | 2 +- client/network/Cargo.toml | 2 +- client/network/sync/Cargo.toml | 2 +- client/network/test/Cargo.toml | 2 +- client/network/transactions/Cargo.toml | 2 +- client/offchain/Cargo.toml | 2 +- client/telemetry/Cargo.toml | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 81bf90ddb42ac..9d7cee34c7c64 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3842,9 +3842,9 @@ checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" [[package]] name = "libp2p" -version = "0.51.2" +version = "0.51.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab78d6d2201578bb3a33dff33c540af6b8f0bdcd751b4028e798e868c2ca0722" +checksum = "f210d259724eae82005b5c48078619b7745edb7b76de370b03f8ba59ea103097" dependencies = [ "bytes", "futures", diff --git a/client/authority-discovery/Cargo.toml b/client/authority-discovery/Cargo.toml index 8d8e09772e464..4beb471f9e46d 100644 --- a/client/authority-discovery/Cargo.toml +++ b/client/authority-discovery/Cargo.toml @@ -21,7 +21,7 @@ codec = { package = "parity-scale-codec", version = "3.2.2", default-features = futures = "0.3.21" futures-timer = "3.0.1" ip_network = "0.4.1" -libp2p = { version = "0.51.2", features = ["kad", "ed25519"] } +libp2p = { version = "0.51.3", features = ["kad", "ed25519"] } log = "0.4.17" prost = "0.11" rand = "0.8.5" diff --git a/client/network-gossip/Cargo.toml b/client/network-gossip/Cargo.toml index 88224542a325e..40277c946a1d7 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.8.2" futures = "0.3.21" futures-timer = "3.0.1" -libp2p = "0.51.2" +libp2p = "0.51.3" log = "0.4.17" lru = "0.8.1" tracing = "0.1.29" diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index 342622c5d9890..dab754cf44d6e 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -25,7 +25,7 @@ fnv = "1.0.6" futures = "0.3.21" futures-timer = "3.0.2" ip_network = "0.4.1" -libp2p = { version = "0.51.2", features = ["dns", "identify", "kad", "macros", "mdns", "mplex", "noise", "ping", "tcp", "tokio", "yamux", "websocket", "request-response"] } +libp2p = { version = "0.51.3", features = ["dns", "identify", "kad", "macros", "mdns", "mplex", "noise", "ping", "tcp", "tokio", "yamux", "websocket", "request-response"] } linked_hash_set = "0.1.3" log = "0.4.17" lru = "0.8.1" diff --git a/client/network/sync/Cargo.toml b/client/network/sync/Cargo.toml index ab748f5d56652..ce713596011fb 100644 --- a/client/network/sync/Cargo.toml +++ b/client/network/sync/Cargo.toml @@ -21,7 +21,7 @@ async-trait = "0.1.58" codec = { package = "parity-scale-codec", version = "3.2.2", features = ["derive"] } futures = "0.3.21" futures-timer = "3.0.2" -libp2p = "0.51.2" +libp2p = "0.51.3" log = "0.4.17" lru = "0.8.1" mockall = "0.11.3" diff --git a/client/network/test/Cargo.toml b/client/network/test/Cargo.toml index 0ef927aed88a7..af519008dddaf 100644 --- a/client/network/test/Cargo.toml +++ b/client/network/test/Cargo.toml @@ -17,7 +17,7 @@ tokio = "1.22.0" async-trait = "0.1.57" futures = "0.3.21" futures-timer = "3.0.1" -libp2p = "0.51.2" +libp2p = "0.51.3" log = "0.4.17" parking_lot = "0.12.1" rand = "0.8.5" diff --git a/client/network/transactions/Cargo.toml b/client/network/transactions/Cargo.toml index d6723a741df0f..3ae1dc5908df4 100644 --- a/client/network/transactions/Cargo.toml +++ b/client/network/transactions/Cargo.toml @@ -16,7 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"] array-bytes = "4.1" codec = { package = "parity-scale-codec", version = "3.2.2", features = ["derive"] } futures = "0.3.21" -libp2p = "0.51.2" +libp2p = "0.51.3" log = "0.4.17" pin-project = "1.0.12" prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.10.0-dev", path = "../../../utils/prometheus" } diff --git a/client/offchain/Cargo.toml b/client/offchain/Cargo.toml index acb8957d46395..a2ab54ba5e638 100644 --- a/client/offchain/Cargo.toml +++ b/client/offchain/Cargo.toml @@ -21,7 +21,7 @@ futures = "0.3.21" futures-timer = "3.0.2" hyper = { version = "0.14.16", features = ["stream", "http2"] } hyper-rustls = { version = "0.23.0", features = ["http2"] } -libp2p = "0.51.2" +libp2p = "0.51.3" num_cpus = "1.13" once_cell = "1.8" parking_lot = "0.12.1" diff --git a/client/telemetry/Cargo.toml b/client/telemetry/Cargo.toml index 6862b1ce8d56c..1d4758c7d261b 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.51.2", features = ["dns", "tcp", "tokio", "wasm-ext", "websocket"] } +libp2p = { version = "0.51.3", features = ["dns", "tcp", "tokio", "wasm-ext", "websocket"] } log = "0.4.17" parking_lot = "0.12.1" pin-project = "1.0.12" From 9e25820e706e464a0e962a8604861fcb2a7641eb Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Thu, 4 May 2023 13:20:08 +0400 Subject: [PATCH 37/48] deprecate mplex --- Cargo.lock | 19 ------------------- client/network/Cargo.toml | 2 +- client/network/README.md | 2 -- client/network/src/lib.rs | 2 -- client/network/src/transport.rs | 9 ++------- 5 files changed, 3 insertions(+), 31 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9d7cee34c7c64..82bd2fd53e543 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3860,7 +3860,6 @@ dependencies = [ "libp2p-kad", "libp2p-mdns", "libp2p-metrics", - "libp2p-mplex", "libp2p-noise", "libp2p-ping", "libp2p-quic", @@ -4044,24 +4043,6 @@ dependencies = [ "prometheus-client", ] -[[package]] -name = "libp2p-mplex" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d34780b514b159e6f3fd70ba3e72664ec89da28dca2d1e7856ee55e2c7031ba" -dependencies = [ - "asynchronous-codec", - "bytes", - "futures", - "libp2p-core", - "log", - "nohash-hasher", - "parking_lot 0.12.1", - "rand 0.8.5", - "smallvec", - "unsigned-varint", -] - [[package]] name = "libp2p-noise" version = "0.42.0" diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index dab754cf44d6e..de4c4c14a2587 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -25,7 +25,7 @@ fnv = "1.0.6" futures = "0.3.21" futures-timer = "3.0.2" ip_network = "0.4.1" -libp2p = { version = "0.51.3", features = ["dns", "identify", "kad", "macros", "mdns", "mplex", "noise", "ping", "tcp", "tokio", "yamux", "websocket", "request-response"] } +libp2p = { version = "0.51.3", features = ["dns", "identify", "kad", "macros", "mdns", "noise", "ping", "tcp", "tokio", "yamux", "websocket", "request-response"] } linked_hash_set = "0.1.3" log = "0.4.17" lru = "0.8.1" diff --git a/client/network/README.md b/client/network/README.md index b9c0e028ffe77..cad46d059092c 100644 --- a/client/network/README.md +++ b/client/network/README.md @@ -66,8 +66,6 @@ negotiated and applied. The exact handshake protocol is experimental and is subj The following multiplexing protocols are supported: -- [Mplex](https://github.com/libp2p/specs/tree/master/mplex). Support for mplex will likely -be deprecated in the future. - [Yamux](https://github.com/hashicorp/yamux/blob/master/spec.md). ## Substreams diff --git a/client/network/src/lib.rs b/client/network/src/lib.rs index f29eb69ade64e..79023923e8b05 100644 --- a/client/network/src/lib.rs +++ b/client/network/src/lib.rs @@ -87,8 +87,6 @@ //! //! The following multiplexing protocols are supported: //! -//! - [Mplex](https://github.com/libp2p/specs/tree/master/mplex). Support for mplex will likely -//! be deprecated in the future. //! - [Yamux](https://github.com/hashicorp/yamux/blob/master/spec.md). //! //! ## Substreams diff --git a/client/network/src/transport.rs b/client/network/src/transport.rs index 619961dd0b4fc..e20121154cfcd 100644 --- a/client/network/src/transport.rs +++ b/client/network/src/transport.rs @@ -19,12 +19,11 @@ use either::Either; use libp2p::{ core::{ - self, muxing::StreamMuxerBox, transport::{Boxed, OptionalTransport}, upgrade, }, - dns, identity, mplex, noise, tcp, websocket, PeerId, Transport, TransportExt, + dns, identity, noise, tcp, websocket, PeerId, Transport, TransportExt, }; use std::{sync::Arc, time::Duration}; @@ -100,10 +99,6 @@ pub fn build_transport( }; let multiplexing_config = { - let mut mplex_config = mplex::MplexConfig::new(); - mplex_config.set_max_buffer_behaviour(mplex::MaxBufferBehaviour::Block); - mplex_config.set_max_buffer_size(usize::MAX); - let mut yamux_config = libp2p::yamux::YamuxConfig::default(); // Enable proper flow-control: window updates are only sent when // buffered data has been consumed. @@ -114,7 +109,7 @@ pub fn build_transport( yamux_config.set_receive_window_size(yamux_window_size); } - core::upgrade::SelectUpgrade::new(yamux_config, mplex_config) + yamux_config }; let transport = transport From 39ffe488314828b92fdfefbf949113e98733de6d Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Thu, 4 May 2023 15:23:59 +0400 Subject: [PATCH 38/48] Revert "deprecate mplex" This reverts commit 9e25820e706e464a0e962a8604861fcb2a7641eb. --- Cargo.lock | 19 +++++++++++++++++++ client/network/Cargo.toml | 2 +- client/network/README.md | 2 ++ client/network/src/lib.rs | 2 ++ client/network/src/transport.rs | 9 +++++++-- 5 files changed, 31 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 82bd2fd53e543..9d7cee34c7c64 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3860,6 +3860,7 @@ dependencies = [ "libp2p-kad", "libp2p-mdns", "libp2p-metrics", + "libp2p-mplex", "libp2p-noise", "libp2p-ping", "libp2p-quic", @@ -4043,6 +4044,24 @@ dependencies = [ "prometheus-client", ] +[[package]] +name = "libp2p-mplex" +version = "0.39.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d34780b514b159e6f3fd70ba3e72664ec89da28dca2d1e7856ee55e2c7031ba" +dependencies = [ + "asynchronous-codec", + "bytes", + "futures", + "libp2p-core", + "log", + "nohash-hasher", + "parking_lot 0.12.1", + "rand 0.8.5", + "smallvec", + "unsigned-varint", +] + [[package]] name = "libp2p-noise" version = "0.42.0" diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index de4c4c14a2587..dab754cf44d6e 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -25,7 +25,7 @@ fnv = "1.0.6" futures = "0.3.21" futures-timer = "3.0.2" ip_network = "0.4.1" -libp2p = { version = "0.51.3", features = ["dns", "identify", "kad", "macros", "mdns", "noise", "ping", "tcp", "tokio", "yamux", "websocket", "request-response"] } +libp2p = { version = "0.51.3", features = ["dns", "identify", "kad", "macros", "mdns", "mplex", "noise", "ping", "tcp", "tokio", "yamux", "websocket", "request-response"] } linked_hash_set = "0.1.3" log = "0.4.17" lru = "0.8.1" diff --git a/client/network/README.md b/client/network/README.md index cad46d059092c..b9c0e028ffe77 100644 --- a/client/network/README.md +++ b/client/network/README.md @@ -66,6 +66,8 @@ negotiated and applied. The exact handshake protocol is experimental and is subj The following multiplexing protocols are supported: +- [Mplex](https://github.com/libp2p/specs/tree/master/mplex). Support for mplex will likely +be deprecated in the future. - [Yamux](https://github.com/hashicorp/yamux/blob/master/spec.md). ## Substreams diff --git a/client/network/src/lib.rs b/client/network/src/lib.rs index 79023923e8b05..f29eb69ade64e 100644 --- a/client/network/src/lib.rs +++ b/client/network/src/lib.rs @@ -87,6 +87,8 @@ //! //! The following multiplexing protocols are supported: //! +//! - [Mplex](https://github.com/libp2p/specs/tree/master/mplex). Support for mplex will likely +//! be deprecated in the future. //! - [Yamux](https://github.com/hashicorp/yamux/blob/master/spec.md). //! //! ## Substreams diff --git a/client/network/src/transport.rs b/client/network/src/transport.rs index e20121154cfcd..619961dd0b4fc 100644 --- a/client/network/src/transport.rs +++ b/client/network/src/transport.rs @@ -19,11 +19,12 @@ use either::Either; use libp2p::{ core::{ + self, muxing::StreamMuxerBox, transport::{Boxed, OptionalTransport}, upgrade, }, - dns, identity, noise, tcp, websocket, PeerId, Transport, TransportExt, + dns, identity, mplex, noise, tcp, websocket, PeerId, Transport, TransportExt, }; use std::{sync::Arc, time::Duration}; @@ -99,6 +100,10 @@ pub fn build_transport( }; let multiplexing_config = { + let mut mplex_config = mplex::MplexConfig::new(); + mplex_config.set_max_buffer_behaviour(mplex::MaxBufferBehaviour::Block); + mplex_config.set_max_buffer_size(usize::MAX); + let mut yamux_config = libp2p::yamux::YamuxConfig::default(); // Enable proper flow-control: window updates are only sent when // buffered data has been consumed. @@ -109,7 +114,7 @@ pub fn build_transport( yamux_config.set_receive_window_size(yamux_window_size); } - yamux_config + core::upgrade::SelectUpgrade::new(yamux_config, mplex_config) }; let transport = transport From 0bf1bfafee798261387e178c6b14ab86b66527e5 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Thu, 4 May 2023 15:24:13 +0400 Subject: [PATCH 39/48] Revert "upgrade to libp2p 0.51.3" This reverts commit 6544dd4138e2f89517bd7c7281fc78a638ec7040. --- Cargo.lock | 4 ++-- client/authority-discovery/Cargo.toml | 2 +- client/network-gossip/Cargo.toml | 2 +- client/network/Cargo.toml | 2 +- client/network/sync/Cargo.toml | 2 +- client/network/test/Cargo.toml | 2 +- client/network/transactions/Cargo.toml | 2 +- client/offchain/Cargo.toml | 2 +- client/telemetry/Cargo.toml | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9d7cee34c7c64..81bf90ddb42ac 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3842,9 +3842,9 @@ checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" [[package]] name = "libp2p" -version = "0.51.3" +version = "0.51.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f210d259724eae82005b5c48078619b7745edb7b76de370b03f8ba59ea103097" +checksum = "ab78d6d2201578bb3a33dff33c540af6b8f0bdcd751b4028e798e868c2ca0722" dependencies = [ "bytes", "futures", diff --git a/client/authority-discovery/Cargo.toml b/client/authority-discovery/Cargo.toml index 4beb471f9e46d..8d8e09772e464 100644 --- a/client/authority-discovery/Cargo.toml +++ b/client/authority-discovery/Cargo.toml @@ -21,7 +21,7 @@ codec = { package = "parity-scale-codec", version = "3.2.2", default-features = futures = "0.3.21" futures-timer = "3.0.1" ip_network = "0.4.1" -libp2p = { version = "0.51.3", features = ["kad", "ed25519"] } +libp2p = { version = "0.51.2", features = ["kad", "ed25519"] } log = "0.4.17" prost = "0.11" rand = "0.8.5" diff --git a/client/network-gossip/Cargo.toml b/client/network-gossip/Cargo.toml index 40277c946a1d7..88224542a325e 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.8.2" futures = "0.3.21" futures-timer = "3.0.1" -libp2p = "0.51.3" +libp2p = "0.51.2" log = "0.4.17" lru = "0.8.1" tracing = "0.1.29" diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index dab754cf44d6e..342622c5d9890 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -25,7 +25,7 @@ fnv = "1.0.6" futures = "0.3.21" futures-timer = "3.0.2" ip_network = "0.4.1" -libp2p = { version = "0.51.3", features = ["dns", "identify", "kad", "macros", "mdns", "mplex", "noise", "ping", "tcp", "tokio", "yamux", "websocket", "request-response"] } +libp2p = { version = "0.51.2", features = ["dns", "identify", "kad", "macros", "mdns", "mplex", "noise", "ping", "tcp", "tokio", "yamux", "websocket", "request-response"] } linked_hash_set = "0.1.3" log = "0.4.17" lru = "0.8.1" diff --git a/client/network/sync/Cargo.toml b/client/network/sync/Cargo.toml index ce713596011fb..ab748f5d56652 100644 --- a/client/network/sync/Cargo.toml +++ b/client/network/sync/Cargo.toml @@ -21,7 +21,7 @@ async-trait = "0.1.58" codec = { package = "parity-scale-codec", version = "3.2.2", features = ["derive"] } futures = "0.3.21" futures-timer = "3.0.2" -libp2p = "0.51.3" +libp2p = "0.51.2" log = "0.4.17" lru = "0.8.1" mockall = "0.11.3" diff --git a/client/network/test/Cargo.toml b/client/network/test/Cargo.toml index af519008dddaf..0ef927aed88a7 100644 --- a/client/network/test/Cargo.toml +++ b/client/network/test/Cargo.toml @@ -17,7 +17,7 @@ tokio = "1.22.0" async-trait = "0.1.57" futures = "0.3.21" futures-timer = "3.0.1" -libp2p = "0.51.3" +libp2p = "0.51.2" log = "0.4.17" parking_lot = "0.12.1" rand = "0.8.5" diff --git a/client/network/transactions/Cargo.toml b/client/network/transactions/Cargo.toml index 3ae1dc5908df4..d6723a741df0f 100644 --- a/client/network/transactions/Cargo.toml +++ b/client/network/transactions/Cargo.toml @@ -16,7 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"] array-bytes = "4.1" codec = { package = "parity-scale-codec", version = "3.2.2", features = ["derive"] } futures = "0.3.21" -libp2p = "0.51.3" +libp2p = "0.51.2" log = "0.4.17" pin-project = "1.0.12" prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.10.0-dev", path = "../../../utils/prometheus" } diff --git a/client/offchain/Cargo.toml b/client/offchain/Cargo.toml index a2ab54ba5e638..acb8957d46395 100644 --- a/client/offchain/Cargo.toml +++ b/client/offchain/Cargo.toml @@ -21,7 +21,7 @@ futures = "0.3.21" futures-timer = "3.0.2" hyper = { version = "0.14.16", features = ["stream", "http2"] } hyper-rustls = { version = "0.23.0", features = ["http2"] } -libp2p = "0.51.3" +libp2p = "0.51.2" num_cpus = "1.13" once_cell = "1.8" parking_lot = "0.12.1" diff --git a/client/telemetry/Cargo.toml b/client/telemetry/Cargo.toml index 1d4758c7d261b..6862b1ce8d56c 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.51.3", features = ["dns", "tcp", "tokio", "wasm-ext", "websocket"] } +libp2p = { version = "0.51.2", features = ["dns", "tcp", "tokio", "wasm-ext", "websocket"] } log = "0.4.17" parking_lot = "0.12.1" pin-project = "1.0.12" From 979d0765511962d168777053a855ba54cf81aca1 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Fri, 5 May 2023 12:38:18 +0400 Subject: [PATCH 40/48] use new libp2p version in `statement` crate --- client/network/statement/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/network/statement/Cargo.toml b/client/network/statement/Cargo.toml index 36d8cb077210d..54b750d06c3cc 100644 --- a/client/network/statement/Cargo.toml +++ b/client/network/statement/Cargo.toml @@ -17,7 +17,7 @@ array-bytes = "4.1" async-channel = "1.8.0" codec = { package = "parity-scale-codec", version = "3.2.2", features = ["derive"] } futures = "0.3.21" -libp2p = "0.50.0" +libp2p = "0.51.2" log = "0.4.17" pin-project = "1.0.12" prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.10.0-dev", path = "../../../utils/prometheus" } From 82b3956de18cff31743ec8580f1e322c830ba16a Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Sat, 6 May 2023 12:28:33 +0400 Subject: [PATCH 41/48] pin version temporarily --- client/authority-discovery/Cargo.toml | 2 +- client/network-gossip/Cargo.toml | 2 +- client/network/Cargo.toml | 2 +- client/network/statement/Cargo.toml | 2 +- client/network/sync/Cargo.toml | 2 +- client/network/test/Cargo.toml | 2 +- client/network/transactions/Cargo.toml | 2 +- client/offchain/Cargo.toml | 2 +- client/telemetry/Cargo.toml | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/client/authority-discovery/Cargo.toml b/client/authority-discovery/Cargo.toml index 8d8e09772e464..2ec005a2ec01b 100644 --- a/client/authority-discovery/Cargo.toml +++ b/client/authority-discovery/Cargo.toml @@ -21,7 +21,7 @@ codec = { package = "parity-scale-codec", version = "3.2.2", default-features = futures = "0.3.21" futures-timer = "3.0.1" ip_network = "0.4.1" -libp2p = { version = "0.51.2", features = ["kad", "ed25519"] } +libp2p = { version = "= 0.51.2", features = ["kad", "ed25519"] } log = "0.4.17" prost = "0.11" rand = "0.8.5" diff --git a/client/network-gossip/Cargo.toml b/client/network-gossip/Cargo.toml index 88224542a325e..59e7502165aa5 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.8.2" futures = "0.3.21" futures-timer = "3.0.1" -libp2p = "0.51.2" +libp2p = "= 0.51.2" log = "0.4.17" lru = "0.8.1" tracing = "0.1.29" diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index 342622c5d9890..fb199f73fa8a8 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -25,7 +25,7 @@ fnv = "1.0.6" futures = "0.3.21" futures-timer = "3.0.2" ip_network = "0.4.1" -libp2p = { version = "0.51.2", features = ["dns", "identify", "kad", "macros", "mdns", "mplex", "noise", "ping", "tcp", "tokio", "yamux", "websocket", "request-response"] } +libp2p = { version = "= 0.51.2", features = ["dns", "identify", "kad", "macros", "mdns", "mplex", "noise", "ping", "tcp", "tokio", "yamux", "websocket", "request-response"] } linked_hash_set = "0.1.3" log = "0.4.17" lru = "0.8.1" diff --git a/client/network/statement/Cargo.toml b/client/network/statement/Cargo.toml index 54b750d06c3cc..b28a06bf8d39a 100644 --- a/client/network/statement/Cargo.toml +++ b/client/network/statement/Cargo.toml @@ -17,7 +17,7 @@ array-bytes = "4.1" async-channel = "1.8.0" codec = { package = "parity-scale-codec", version = "3.2.2", features = ["derive"] } futures = "0.3.21" -libp2p = "0.51.2" +libp2p = "= 0.51.2" log = "0.4.17" pin-project = "1.0.12" prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.10.0-dev", path = "../../../utils/prometheus" } diff --git a/client/network/sync/Cargo.toml b/client/network/sync/Cargo.toml index ab748f5d56652..26d6af9ec34f0 100644 --- a/client/network/sync/Cargo.toml +++ b/client/network/sync/Cargo.toml @@ -21,7 +21,7 @@ async-trait = "0.1.58" codec = { package = "parity-scale-codec", version = "3.2.2", features = ["derive"] } futures = "0.3.21" futures-timer = "3.0.2" -libp2p = "0.51.2" +libp2p = "= 0.51.2" log = "0.4.17" lru = "0.8.1" mockall = "0.11.3" diff --git a/client/network/test/Cargo.toml b/client/network/test/Cargo.toml index 0ef927aed88a7..a338168145267 100644 --- a/client/network/test/Cargo.toml +++ b/client/network/test/Cargo.toml @@ -17,7 +17,7 @@ tokio = "1.22.0" async-trait = "0.1.57" futures = "0.3.21" futures-timer = "3.0.1" -libp2p = "0.51.2" +libp2p = "= 0.51.2" log = "0.4.17" parking_lot = "0.12.1" rand = "0.8.5" diff --git a/client/network/transactions/Cargo.toml b/client/network/transactions/Cargo.toml index d6723a741df0f..46cf3c65bd86d 100644 --- a/client/network/transactions/Cargo.toml +++ b/client/network/transactions/Cargo.toml @@ -16,7 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"] array-bytes = "4.1" codec = { package = "parity-scale-codec", version = "3.2.2", features = ["derive"] } futures = "0.3.21" -libp2p = "0.51.2" +libp2p = "= 0.51.2" log = "0.4.17" pin-project = "1.0.12" prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.10.0-dev", path = "../../../utils/prometheus" } diff --git a/client/offchain/Cargo.toml b/client/offchain/Cargo.toml index acb8957d46395..0a0fbdbace16d 100644 --- a/client/offchain/Cargo.toml +++ b/client/offchain/Cargo.toml @@ -21,7 +21,7 @@ futures = "0.3.21" futures-timer = "3.0.2" hyper = { version = "0.14.16", features = ["stream", "http2"] } hyper-rustls = { version = "0.23.0", features = ["http2"] } -libp2p = "0.51.2" +libp2p = "= 0.51.2" num_cpus = "1.13" once_cell = "1.8" parking_lot = "0.12.1" diff --git a/client/telemetry/Cargo.toml b/client/telemetry/Cargo.toml index 6862b1ce8d56c..54e0a19f1f919 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.51.2", features = ["dns", "tcp", "tokio", "wasm-ext", "websocket"] } +libp2p = { version = "= 0.51.2", features = ["dns", "tcp", "tokio", "wasm-ext", "websocket"] } log = "0.4.17" parking_lot = "0.12.1" pin-project = "1.0.12" From 1c35b8281187091e4885a6082f495c4236371c50 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Sat, 6 May 2023 17:11:19 +0400 Subject: [PATCH 42/48] libp2p 0.51.3 --- Cargo.lock | 79 +++----------------------- client/authority-discovery/Cargo.toml | 2 +- client/network-gossip/Cargo.toml | 2 +- client/network/Cargo.toml | 2 +- client/network/statement/Cargo.toml | 2 +- client/network/sync/Cargo.toml | 2 +- client/network/test/Cargo.toml | 2 +- client/network/transactions/Cargo.toml | 2 +- client/offchain/Cargo.toml | 2 +- client/telemetry/Cargo.toml | 2 +- 10 files changed, 18 insertions(+), 79 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9278b056392e4..0619306aa8b4c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1175,19 +1175,6 @@ dependencies = [ "crossbeam-utils", ] -[[package]] -name = "console" -version = "0.15.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60" -dependencies = [ - "encode_unicode", - "lazy_static", - "libc", - "unicode-width", - "windows-sys 0.42.0", -] - [[package]] name = "const-oid" version = "0.9.2" @@ -2041,12 +2028,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "encode_unicode" -version = "0.3.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" - [[package]] name = "enum-as-inner" version = "0.5.1" @@ -2520,7 +2501,6 @@ dependencies = [ "async-recursion", "frame-support", "futures", - "indicatif", "jsonrpsee", "log", "pallet-elections-phragmen", @@ -2529,7 +2509,6 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "spinners", "substrate-rpc-client", "tokio", "tracing-subscriber 0.3.16", @@ -3426,18 +3405,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" -[[package]] -name = "indicatif" -version = "0.17.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cef509aa9bc73864d6756f0d34d35504af3cf0844373afe9b8669a5b8005a729" -dependencies = [ - "console", - "number_prefix", - "portable-atomic", - "unicode-width", -] - [[package]] name = "inout" version = "0.1.3" @@ -3944,9 +3911,9 @@ checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" [[package]] name = "libp2p" -version = "0.51.2" +version = "0.51.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab78d6d2201578bb3a33dff33c540af6b8f0bdcd751b4028e798e868c2ca0722" +checksum = "f210d259724eae82005b5c48078619b7745edb7b76de370b03f8ba59ea103097" dependencies = [ "bytes", "futures", @@ -4608,12 +4575,6 @@ dependencies = [ "libc", ] -[[package]] -name = "maplit" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" - [[package]] name = "match_cfg" version = "0.1.0" @@ -5530,12 +5491,6 @@ dependencies = [ "libc", ] -[[package]] -name = "number_prefix" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" - [[package]] name = "object" version = "0.29.0" @@ -7631,12 +7586,6 @@ dependencies = [ "universal-hash 0.5.0", ] -[[package]] -name = "portable-atomic" -version = "0.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26f6a7b87c2e435a3241addceeeff740ff8b7e76b74c13bf9acb17fa454ea00b" - [[package]] name = "ppv-lite86" version = "0.2.17" @@ -11274,17 +11223,6 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dccf47db1b41fa1573ed27ccf5e08e3ca771cb994f776668c5ebda893b248fc" -[[package]] -name = "spinners" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08615eea740067d9899969bc2891c68a19c315cb1f66640af9a9ecb91b13bcab" -dependencies = [ - "lazy_static", - "maplit", - "strum", -] - [[package]] name = "spki" version = "0.6.0" @@ -12732,9 +12670,9 @@ dependencies = [ [[package]] name = "wasm-opt" -version = "0.112.0" +version = "0.111.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87fef6d0d508f08334e0ab0e6877feb4c0ecb3956bcf2cb950699b22fedf3e9c" +checksum = "84a303793cbc01fb96551badfc7367db6007396bba6bac97936b3c8b6f7fdb41" dependencies = [ "anyhow", "libc", @@ -12748,9 +12686,9 @@ dependencies = [ [[package]] name = "wasm-opt-cxx-sys" -version = "0.112.0" +version = "0.111.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc816bbc1596c8f2e8127e137a760c798023ef3d378f2ae51f0f1840e2dfa445" +checksum = "d9c9deb56f8a9f2ec177b3bd642a8205621835944ed5da55f2388ef216aca5a4" dependencies = [ "anyhow", "cxx", @@ -12760,14 +12698,15 @@ dependencies = [ [[package]] name = "wasm-opt-sys" -version = "0.112.0" +version = "0.111.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40199e4f68ef1071b3c6d0bd8026a12b481865d4b9e49c156932ea9a6234dd14" +checksum = "4432e28b542738a9776cedf92e8a99d8991c7b4667ee2c7ccddfb479dd2856a7" dependencies = [ "anyhow", "cc", "cxx", "cxx-build", + "regex", ] [[package]] diff --git a/client/authority-discovery/Cargo.toml b/client/authority-discovery/Cargo.toml index 2ec005a2ec01b..4beb471f9e46d 100644 --- a/client/authority-discovery/Cargo.toml +++ b/client/authority-discovery/Cargo.toml @@ -21,7 +21,7 @@ codec = { package = "parity-scale-codec", version = "3.2.2", default-features = futures = "0.3.21" futures-timer = "3.0.1" ip_network = "0.4.1" -libp2p = { version = "= 0.51.2", features = ["kad", "ed25519"] } +libp2p = { version = "0.51.3", features = ["kad", "ed25519"] } log = "0.4.17" prost = "0.11" rand = "0.8.5" diff --git a/client/network-gossip/Cargo.toml b/client/network-gossip/Cargo.toml index 59e7502165aa5..40277c946a1d7 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.8.2" futures = "0.3.21" futures-timer = "3.0.1" -libp2p = "= 0.51.2" +libp2p = "0.51.3" log = "0.4.17" lru = "0.8.1" tracing = "0.1.29" diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index fb199f73fa8a8..dab754cf44d6e 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -25,7 +25,7 @@ fnv = "1.0.6" futures = "0.3.21" futures-timer = "3.0.2" ip_network = "0.4.1" -libp2p = { version = "= 0.51.2", features = ["dns", "identify", "kad", "macros", "mdns", "mplex", "noise", "ping", "tcp", "tokio", "yamux", "websocket", "request-response"] } +libp2p = { version = "0.51.3", features = ["dns", "identify", "kad", "macros", "mdns", "mplex", "noise", "ping", "tcp", "tokio", "yamux", "websocket", "request-response"] } linked_hash_set = "0.1.3" log = "0.4.17" lru = "0.8.1" diff --git a/client/network/statement/Cargo.toml b/client/network/statement/Cargo.toml index b28a06bf8d39a..a81e6a916c05c 100644 --- a/client/network/statement/Cargo.toml +++ b/client/network/statement/Cargo.toml @@ -17,7 +17,7 @@ array-bytes = "4.1" async-channel = "1.8.0" codec = { package = "parity-scale-codec", version = "3.2.2", features = ["derive"] } futures = "0.3.21" -libp2p = "= 0.51.2" +libp2p = "0.51.3" log = "0.4.17" pin-project = "1.0.12" prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.10.0-dev", path = "../../../utils/prometheus" } diff --git a/client/network/sync/Cargo.toml b/client/network/sync/Cargo.toml index 26d6af9ec34f0..ce713596011fb 100644 --- a/client/network/sync/Cargo.toml +++ b/client/network/sync/Cargo.toml @@ -21,7 +21,7 @@ async-trait = "0.1.58" codec = { package = "parity-scale-codec", version = "3.2.2", features = ["derive"] } futures = "0.3.21" futures-timer = "3.0.2" -libp2p = "= 0.51.2" +libp2p = "0.51.3" log = "0.4.17" lru = "0.8.1" mockall = "0.11.3" diff --git a/client/network/test/Cargo.toml b/client/network/test/Cargo.toml index a338168145267..af519008dddaf 100644 --- a/client/network/test/Cargo.toml +++ b/client/network/test/Cargo.toml @@ -17,7 +17,7 @@ tokio = "1.22.0" async-trait = "0.1.57" futures = "0.3.21" futures-timer = "3.0.1" -libp2p = "= 0.51.2" +libp2p = "0.51.3" log = "0.4.17" parking_lot = "0.12.1" rand = "0.8.5" diff --git a/client/network/transactions/Cargo.toml b/client/network/transactions/Cargo.toml index 46cf3c65bd86d..3ae1dc5908df4 100644 --- a/client/network/transactions/Cargo.toml +++ b/client/network/transactions/Cargo.toml @@ -16,7 +16,7 @@ targets = ["x86_64-unknown-linux-gnu"] array-bytes = "4.1" codec = { package = "parity-scale-codec", version = "3.2.2", features = ["derive"] } futures = "0.3.21" -libp2p = "= 0.51.2" +libp2p = "0.51.3" log = "0.4.17" pin-project = "1.0.12" prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.10.0-dev", path = "../../../utils/prometheus" } diff --git a/client/offchain/Cargo.toml b/client/offchain/Cargo.toml index 0a0fbdbace16d..a2ab54ba5e638 100644 --- a/client/offchain/Cargo.toml +++ b/client/offchain/Cargo.toml @@ -21,7 +21,7 @@ futures = "0.3.21" futures-timer = "3.0.2" hyper = { version = "0.14.16", features = ["stream", "http2"] } hyper-rustls = { version = "0.23.0", features = ["http2"] } -libp2p = "= 0.51.2" +libp2p = "0.51.3" num_cpus = "1.13" once_cell = "1.8" parking_lot = "0.12.1" diff --git a/client/telemetry/Cargo.toml b/client/telemetry/Cargo.toml index 54e0a19f1f919..1d4758c7d261b 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.51.2", features = ["dns", "tcp", "tokio", "wasm-ext", "websocket"] } +libp2p = { version = "0.51.3", features = ["dns", "tcp", "tokio", "wasm-ext", "websocket"] } log = "0.4.17" parking_lot = "0.12.1" pin-project = "1.0.12" From 7c7ff4072573720308b70f32b3ea25d39470c677 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Sat, 6 May 2023 17:32:48 +0400 Subject: [PATCH 43/48] deprecate mplex --- Cargo.lock | 94 ++++++++++++++++++++++++--------- client/network/Cargo.toml | 2 +- client/network/README.md | 2 - client/network/src/lib.rs | 2 - client/network/src/transport.rs | 9 +--- 5 files changed, 71 insertions(+), 38 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0619306aa8b4c..647c2b3cf4e4a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1175,6 +1175,19 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "console" +version = "0.15.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3d79fbe8970a77e3e34151cc13d3b3e248aa0faaecb9f6091fa07ebefe5ad60" +dependencies = [ + "encode_unicode", + "lazy_static", + "libc", + "unicode-width", + "windows-sys 0.42.0", +] + [[package]] name = "const-oid" version = "0.9.2" @@ -2028,6 +2041,12 @@ dependencies = [ "zeroize", ] +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + [[package]] name = "enum-as-inner" version = "0.5.1" @@ -2501,6 +2520,7 @@ dependencies = [ "async-recursion", "frame-support", "futures", + "indicatif", "jsonrpsee", "log", "pallet-elections-phragmen", @@ -2509,6 +2529,7 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", + "spinners", "substrate-rpc-client", "tokio", "tracing-subscriber 0.3.16", @@ -3405,6 +3426,18 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590" +[[package]] +name = "indicatif" +version = "0.17.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cef509aa9bc73864d6756f0d34d35504af3cf0844373afe9b8669a5b8005a729" +dependencies = [ + "console", + "number_prefix", + "portable-atomic", + "unicode-width", +] + [[package]] name = "inout" version = "0.1.3" @@ -3929,7 +3962,6 @@ dependencies = [ "libp2p-kad", "libp2p-mdns", "libp2p-metrics", - "libp2p-mplex", "libp2p-noise", "libp2p-ping", "libp2p-quic", @@ -4113,24 +4145,6 @@ dependencies = [ "prometheus-client", ] -[[package]] -name = "libp2p-mplex" -version = "0.39.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d34780b514b159e6f3fd70ba3e72664ec89da28dca2d1e7856ee55e2c7031ba" -dependencies = [ - "asynchronous-codec", - "bytes", - "futures", - "libp2p-core", - "log", - "nohash-hasher", - "parking_lot 0.12.1", - "rand 0.8.5", - "smallvec", - "unsigned-varint", -] - [[package]] name = "libp2p-noise" version = "0.42.0" @@ -4575,6 +4589,12 @@ dependencies = [ "libc", ] +[[package]] +name = "maplit" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" + [[package]] name = "match_cfg" version = "0.1.0" @@ -5491,6 +5511,12 @@ dependencies = [ "libc", ] +[[package]] +name = "number_prefix" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3" + [[package]] name = "object" version = "0.29.0" @@ -7586,6 +7612,12 @@ dependencies = [ "universal-hash 0.5.0", ] +[[package]] +name = "portable-atomic" +version = "0.3.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26f6a7b87c2e435a3241addceeeff740ff8b7e76b74c13bf9acb17fa454ea00b" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -11223,6 +11255,17 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7dccf47db1b41fa1573ed27ccf5e08e3ca771cb994f776668c5ebda893b248fc" +[[package]] +name = "spinners" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08615eea740067d9899969bc2891c68a19c315cb1f66640af9a9ecb91b13bcab" +dependencies = [ + "lazy_static", + "maplit", + "strum", +] + [[package]] name = "spki" version = "0.6.0" @@ -12670,9 +12713,9 @@ dependencies = [ [[package]] name = "wasm-opt" -version = "0.111.0" +version = "0.112.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84a303793cbc01fb96551badfc7367db6007396bba6bac97936b3c8b6f7fdb41" +checksum = "87fef6d0d508f08334e0ab0e6877feb4c0ecb3956bcf2cb950699b22fedf3e9c" dependencies = [ "anyhow", "libc", @@ -12686,9 +12729,9 @@ dependencies = [ [[package]] name = "wasm-opt-cxx-sys" -version = "0.111.0" +version = "0.112.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c9deb56f8a9f2ec177b3bd642a8205621835944ed5da55f2388ef216aca5a4" +checksum = "bc816bbc1596c8f2e8127e137a760c798023ef3d378f2ae51f0f1840e2dfa445" dependencies = [ "anyhow", "cxx", @@ -12698,15 +12741,14 @@ dependencies = [ [[package]] name = "wasm-opt-sys" -version = "0.111.0" +version = "0.112.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4432e28b542738a9776cedf92e8a99d8991c7b4667ee2c7ccddfb479dd2856a7" +checksum = "40199e4f68ef1071b3c6d0bd8026a12b481865d4b9e49c156932ea9a6234dd14" dependencies = [ "anyhow", "cc", "cxx", "cxx-build", - "regex", ] [[package]] diff --git a/client/network/Cargo.toml b/client/network/Cargo.toml index dab754cf44d6e..de4c4c14a2587 100644 --- a/client/network/Cargo.toml +++ b/client/network/Cargo.toml @@ -25,7 +25,7 @@ fnv = "1.0.6" futures = "0.3.21" futures-timer = "3.0.2" ip_network = "0.4.1" -libp2p = { version = "0.51.3", features = ["dns", "identify", "kad", "macros", "mdns", "mplex", "noise", "ping", "tcp", "tokio", "yamux", "websocket", "request-response"] } +libp2p = { version = "0.51.3", features = ["dns", "identify", "kad", "macros", "mdns", "noise", "ping", "tcp", "tokio", "yamux", "websocket", "request-response"] } linked_hash_set = "0.1.3" log = "0.4.17" lru = "0.8.1" diff --git a/client/network/README.md b/client/network/README.md index b9c0e028ffe77..cad46d059092c 100644 --- a/client/network/README.md +++ b/client/network/README.md @@ -66,8 +66,6 @@ negotiated and applied. The exact handshake protocol is experimental and is subj The following multiplexing protocols are supported: -- [Mplex](https://github.com/libp2p/specs/tree/master/mplex). Support for mplex will likely -be deprecated in the future. - [Yamux](https://github.com/hashicorp/yamux/blob/master/spec.md). ## Substreams diff --git a/client/network/src/lib.rs b/client/network/src/lib.rs index f29eb69ade64e..79023923e8b05 100644 --- a/client/network/src/lib.rs +++ b/client/network/src/lib.rs @@ -87,8 +87,6 @@ //! //! The following multiplexing protocols are supported: //! -//! - [Mplex](https://github.com/libp2p/specs/tree/master/mplex). Support for mplex will likely -//! be deprecated in the future. //! - [Yamux](https://github.com/hashicorp/yamux/blob/master/spec.md). //! //! ## Substreams diff --git a/client/network/src/transport.rs b/client/network/src/transport.rs index 619961dd0b4fc..e20121154cfcd 100644 --- a/client/network/src/transport.rs +++ b/client/network/src/transport.rs @@ -19,12 +19,11 @@ use either::Either; use libp2p::{ core::{ - self, muxing::StreamMuxerBox, transport::{Boxed, OptionalTransport}, upgrade, }, - dns, identity, mplex, noise, tcp, websocket, PeerId, Transport, TransportExt, + dns, identity, noise, tcp, websocket, PeerId, Transport, TransportExt, }; use std::{sync::Arc, time::Duration}; @@ -100,10 +99,6 @@ pub fn build_transport( }; let multiplexing_config = { - let mut mplex_config = mplex::MplexConfig::new(); - mplex_config.set_max_buffer_behaviour(mplex::MaxBufferBehaviour::Block); - mplex_config.set_max_buffer_size(usize::MAX); - let mut yamux_config = libp2p::yamux::YamuxConfig::default(); // Enable proper flow-control: window updates are only sent when // buffered data has been consumed. @@ -114,7 +109,7 @@ pub fn build_transport( yamux_config.set_receive_window_size(yamux_window_size); } - core::upgrade::SelectUpgrade::new(yamux_config, mplex_config) + yamux_config }; let transport = transport From 0630e6d8bb63cf03d55977a4bbe22811c7002b00 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Thu, 11 May 2023 13:26:29 +0400 Subject: [PATCH 44/48] deprecate legacy noise handshake --- Cargo.lock | 310 ++++++++---------- client/authority-discovery/Cargo.toml | 1 + client/authority-discovery/src/worker.rs | 14 +- .../src/worker/schema/tests.rs | 2 +- client/cli/src/params/node_key_params.rs | 4 +- client/network/src/behaviour.rs | 6 +- client/network/src/config.rs | 6 +- client/network/src/discovery.rs | 26 +- .../src/protocol/notifications/tests.rs | 7 +- client/network/src/request_responses.rs | 7 +- client/network/src/transport.rs | 23 +- 11 files changed, 166 insertions(+), 240 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 0e6e8e847a01b..6520c277c0ea1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -514,12 +514,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "asn1_der" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "155a5a185e42c6b77ac7b88a15143d930a9e9727a5b7b77eed417404ab15c247" - [[package]] name = "assert_cmd" version = "2.0.11" @@ -4094,22 +4088,24 @@ checksum = "348108ab3fba42ec82ff6e9564fc4ca0247bdccdc68dd8af9764bbc79c3c8ffb" [[package]] name = "libp2p" -version = "0.50.1" +version = "0.51.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7b0104790be871edcf97db9bd2356604984e623a08d825c3f27852290266b8" +checksum = "f210d259724eae82005b5c48078619b7745edb7b76de370b03f8ba59ea103097" dependencies = [ "bytes", "futures", "futures-timer", "getrandom 0.2.9", "instant", - "libp2p-core 0.38.0", + "libp2p-allow-block-list", + "libp2p-connection-limits", + "libp2p-core", "libp2p-dns", "libp2p-identify", + "libp2p-identity", "libp2p-kad", "libp2p-mdns", "libp2p-metrics", - "libp2p-mplex", "libp2p-noise", "libp2p-ping", "libp2p-quic", @@ -4120,44 +4116,32 @@ dependencies = [ "libp2p-webrtc", "libp2p-websocket", "libp2p-yamux", - "multiaddr 0.16.0", - "parking_lot 0.12.1", + "multiaddr", "pin-project", - "smallvec", ] [[package]] -name = "libp2p-core" -version = "0.38.0" +name = "libp2p-allow-block-list" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6a8fcd392ff67af6cc3f03b1426c41f7f26b6b9aff2dc632c1c56dd649e571f" +checksum = "510daa05efbc25184458db837f6f9a5143888f1caa742426d92e1833ddd38a50" dependencies = [ - "asn1_der", - "bs58", - "ed25519-dalek", - "either", - "fnv", - "futures", - "futures-timer", - "instant", - "log", - "multiaddr 0.16.0", - "multihash 0.16.3", - "multistream-select", - "once_cell", - "parking_lot 0.12.1", - "pin-project", - "prost", - "prost-build", - "rand 0.8.5", - "rw-stream-sink", - "sec1 0.3.0", - "sha2 0.10.6", - "smallvec", - "thiserror", - "unsigned-varint", + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", + "void", +] + +[[package]] +name = "libp2p-connection-limits" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4caa33f1d26ed664c4fe2cca81a08c8e07d4c1c04f2f4ac7655c2dd85467fda0" +dependencies = [ + "libp2p-core", + "libp2p-identity", + "libp2p-swarm", "void", - "zeroize", ] [[package]] @@ -4173,7 +4157,7 @@ dependencies = [ "instant", "libp2p-identity", "log", - "multiaddr 0.17.1", + "multiaddr", "multihash 0.17.0", "multistream-select", "once_cell", @@ -4190,12 +4174,12 @@ dependencies = [ [[package]] name = "libp2p-dns" -version = "0.38.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e42a271c1b49f789b92f7fc87749fa79ce5c7bdc88cbdfacb818a4bca47fec5" +checksum = "146ff7034daae62077c415c2376b8057368042df6ab95f5432ad5e88568b1554" dependencies = [ "futures", - "libp2p-core 0.38.0", + "libp2p-core", "log", "parking_lot 0.12.1", "smallvec", @@ -4204,20 +4188,21 @@ dependencies = [ [[package]] name = "libp2p-identify" -version = "0.41.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c052d0026f4817b44869bfb6810f4e1112f43aec8553f2cb38881c524b563abf" +checksum = "5455f472243e63b9c497ff320ded0314254a9eb751799a39c283c6f20b793f3c" dependencies = [ "asynchronous-codec", + "either", "futures", "futures-timer", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "libp2p-swarm", "log", - "lru", - "prost", - "prost-build", - "prost-codec", + "lru 0.10.0", + "quick-protobuf", + "quick-protobuf-codec", "smallvec", "thiserror", "void", @@ -4232,7 +4217,7 @@ dependencies = [ "bs58", "ed25519-dalek", "log", - "multiaddr 0.17.1", + "multiaddr", "multihash 0.17.0", "quick-protobuf", "rand 0.8.5", @@ -4243,9 +4228,9 @@ dependencies = [ [[package]] name = "libp2p-kad" -version = "0.42.1" +version = "0.43.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2766dcd2be8c87d5e1f35487deb22d765f49c6ae1251b3633efe3b25698bd3d2" +checksum = "39d5ef876a2b2323d63c258e63c2f8e36f205fe5a11f0b3095d59635650790ff" dependencies = [ "arrayvec 0.7.2", "asynchronous-codec", @@ -4255,11 +4240,11 @@ dependencies = [ "futures", "futures-timer", "instant", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "libp2p-swarm", "log", - "prost", - "prost-build", + "quick-protobuf", "rand 0.8.5", "sha2 0.10.6", "smallvec", @@ -4271,14 +4256,15 @@ dependencies = [ [[package]] name = "libp2p-mdns" -version = "0.42.0" +version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04f378264aade9872d6ccd315c0accc18be3a35d15fc1b9c36e5b6f983b62b5b" +checksum = "19983e1f949f979a928f2c603de1cf180cc0dc23e4ac93a62651ccb18341460b" dependencies = [ "data-encoding", "futures", "if-watch", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "libp2p-swarm", "log", "rand 0.8.5", @@ -4291,11 +4277,11 @@ dependencies = [ [[package]] name = "libp2p-metrics" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ad8a64f29da86005c86a4d2728b8a0719e9b192f4092b609fd8790acb9dec55" +checksum = "a42ec91e227d7d0dafa4ce88b333cdf5f277253873ab087555c92798db2ddd46" dependencies = [ - "libp2p-core 0.38.0", + "libp2p-core", "libp2p-identify", "libp2p-kad", "libp2p-ping", @@ -4303,38 +4289,20 @@ dependencies = [ "prometheus-client", ] -[[package]] -name = "libp2p-mplex" -version = "0.38.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03805b44107aa013e7cbbfa5627b31c36cbedfdfb00603c0311998882bc4bace" -dependencies = [ - "asynchronous-codec", - "bytes", - "futures", - "libp2p-core 0.38.0", - "log", - "nohash-hasher", - "parking_lot 0.12.1", - "rand 0.8.5", - "smallvec", - "unsigned-varint", -] - [[package]] name = "libp2p-noise" -version = "0.41.0" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a978cb57efe82e892ec6f348a536bfbd9fee677adbe5689d7a93ad3a9bffbf2e" +checksum = "9c3673da89d29936bc6435bafc638e2f184180d554ce844db65915113f86ec5e" dependencies = [ "bytes", "curve25519-dalek 3.2.0", "futures", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "log", "once_cell", - "prost", - "prost-build", + "quick-protobuf", "rand 0.8.5", "sha2 0.10.6", "snow", @@ -4346,14 +4314,15 @@ dependencies = [ [[package]] name = "libp2p-ping" -version = "0.41.0" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "929fcace45a112536e22b3dcfd4db538723ef9c3cb79f672b98be2cc8e25f37f" +checksum = "3e57759c19c28a73ef1eb3585ca410cefb72c1a709fcf6de1612a378e4219202" dependencies = [ + "either", "futures", "futures-timer", "instant", - "libp2p-core 0.38.0", + "libp2p-core", "libp2p-swarm", "log", "rand 0.8.5", @@ -4362,15 +4331,16 @@ dependencies = [ [[package]] name = "libp2p-quic" -version = "0.7.0-alpha" +version = "0.7.0-alpha.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01e7c867e95c8130667b24409d236d37598270e6da69b3baf54213ba31ffca59" +checksum = "c6b26abd81cd2398382a1edfe739b539775be8a90fa6914f39b2ab49571ec735" dependencies = [ "bytes", "futures", "futures-timer", "if-watch", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "libp2p-tls", "log", "parking_lot 0.12.1", @@ -4383,49 +4353,46 @@ dependencies = [ [[package]] name = "libp2p-request-response" -version = "0.23.0" +version = "0.24.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3236168796727bfcf4927f766393415361e2c644b08bedb6a6b13d957c9a4884" +checksum = "7ffdb374267d42dc5ed5bc53f6e601d4a64ac5964779c6e40bb9e4f14c1e30d5" dependencies = [ "async-trait", - "bytes", "futures", "instant", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "libp2p-swarm", - "log", "rand 0.8.5", "smallvec", - "unsigned-varint", ] [[package]] name = "libp2p-swarm" -version = "0.41.1" +version = "0.42.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2a35472fe3276b3855c00f1c032ea8413615e030256429ad5349cdf67c6e1a0" +checksum = "903b3d592d7694e56204d211f29d31bc004be99386644ba8731fc3e3ef27b296" dependencies = [ "either", "fnv", "futures", "futures-timer", "instant", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "libp2p-swarm-derive", "log", - "pin-project", "rand 0.8.5", "smallvec", - "thiserror", "tokio", "void", ] [[package]] name = "libp2p-swarm-derive" -version = "0.31.0" +version = "0.32.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d527d5827582abd44a6d80c07ff8b50b4ee238a8979e05998474179e79dc400" +checksum = "0fba456131824ab6acd4c7bf61e9c0f0a3014b5fc9868ccb8e10d344594cdc4f" dependencies = [ "heck", "quote", @@ -4434,15 +4401,15 @@ dependencies = [ [[package]] name = "libp2p-tcp" -version = "0.38.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b257baf6df8f2df39678b86c578961d48cc8b68642a12f0f763f56c8e5858d" +checksum = "33d33698596d7722d85d3ab0c86c2c322254fce1241e91208e3679b4eb3026cf" dependencies = [ "futures", "futures-timer", "if-watch", "libc", - "libp2p-core 0.38.0", + "libp2p-core", "log", "socket2", "tokio", @@ -4456,7 +4423,7 @@ checksum = "ff08d13d0dc66e5e9ba6279c1de417b84fa0d0adc3b03e5732928c180ec02781" dependencies = [ "futures", "futures-rustls", - "libp2p-core 0.39.2", + "libp2p-core", "libp2p-identity", "rcgen 0.10.0", "ring", @@ -4469,13 +4436,13 @@ dependencies = [ [[package]] name = "libp2p-wasm-ext" -version = "0.38.0" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bb1a35299860e0d4b3c02a3e74e3b293ad35ae0cee8a056363b0c862d082069" +checksum = "77dff9d32353a5887adb86c8afc1de1a94d9e8c3bc6df8b2201d7cdf5c848f43" dependencies = [ "futures", "js-sys", - "libp2p-core 0.38.0", + "libp2p-core", "parity-send-wrapper", "wasm-bindgen", "wasm-bindgen-futures", @@ -4483,9 +4450,9 @@ dependencies = [ [[package]] name = "libp2p-webrtc" -version = "0.4.0-alpha" +version = "0.4.0-alpha.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdb6cd86dd68cba72308ea05de1cebf3ba0ae6e187c40548167955d4e3970f6a" +checksum = "dba48592edbc2f60b4bc7c10d65445b0c3964c07df26fdf493b6880d33be36f8" dependencies = [ "async-trait", "asynchronous-codec", @@ -4494,13 +4461,13 @@ dependencies = [ "futures-timer", "hex", "if-watch", - "libp2p-core 0.38.0", + "libp2p-core", + "libp2p-identity", "libp2p-noise", "log", - "multihash 0.16.3", - "prost", - "prost-build", - "prost-codec", + "multihash 0.17.0", + "quick-protobuf", + "quick-protobuf-codec", "rand 0.8.5", "rcgen 0.9.3", "serde", @@ -4514,14 +4481,14 @@ dependencies = [ [[package]] name = "libp2p-websocket" -version = "0.40.0" +version = "0.41.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d705506030d5c0aaf2882437c70dab437605f21c5f9811978f694e6917a3b54" +checksum = "111273f7b3d3510524c752e8b7a5314b7f7a1fee7e68161c01a7d72cbb06db9f" dependencies = [ "either", "futures", "futures-rustls", - "libp2p-core 0.38.0", + "libp2p-core", "log", "parking_lot 0.12.1", "quicksink", @@ -4533,14 +4500,13 @@ dependencies = [ [[package]] name = "libp2p-yamux" -version = "0.42.0" +version = "0.43.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f63594a0aa818642d9d4915c791945053877253f08a3626f13416b5cd928a29" +checksum = "4dcd21d950662700a385d4c6d68e2f5f54d778e97068cdd718522222ef513bda" dependencies = [ "futures", - "libp2p-core 0.38.0", + "libp2p-core", "log", - "parking_lot 0.12.1", "thiserror", "yamux", ] @@ -4725,6 +4691,15 @@ dependencies = [ "hashbrown 0.12.3", ] +[[package]] +name = "lru" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03f1160296536f10c833a82dca22267d5486734230d47bf00bf435885814ba1e" +dependencies = [ + "hashbrown 0.13.2", +] + [[package]] name = "lru-cache" version = "0.1.2" @@ -4998,24 +4973,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "multiaddr" -version = "0.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aebdb21e90f81d13ed01dc84123320838e53963c2ca94b60b305d3fa64f31e" -dependencies = [ - "arrayref", - "byteorder", - "data-encoding", - "multibase", - "multihash 0.16.3", - "percent-encoding", - "serde", - "static_assertions", - "unsigned-varint", - "url", -] - [[package]] name = "multiaddr" version = "0.17.1" @@ -5070,7 +5027,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40" dependencies = [ "core2", + "digest 0.10.6", "multihash-derive", + "sha2 0.10.6", "unsigned-varint", ] @@ -8019,21 +7978,21 @@ dependencies = [ [[package]] name = "prometheus-client" -version = "0.18.1" +version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83cd1b99916654a69008fd66b4f9397fbe08e6e51dfe23d4417acf5d3b8cb87c" +checksum = "5d6fa99d535dd930d1249e6c79cb3c2915f9172a540fe2b02a4c8f9ca954721e" dependencies = [ "dtoa", "itoa", "parking_lot 0.12.1", - "prometheus-client-derive-text-encode", + "prometheus-client-derive-encode", ] [[package]] -name = "prometheus-client-derive-text-encode" -version = "0.3.0" +name = "prometheus-client-derive-encode" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd" +checksum = "72b6a5217beb0ad503ee7fa752d451c905113d70721b937126158f3106a48cc1" dependencies = [ "proc-macro2", "quote", @@ -8072,19 +8031,6 @@ dependencies = [ "which", ] -[[package]] -name = "prost-codec" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc34979ff898b6e141106178981ce2596c387ea6e62533facfc61a37fc879c0" -dependencies = [ - "asynchronous-codec", - "bytes", - "prost", - "thiserror", - "unsigned-varint", -] - [[package]] name = "prost-derive" version = "0.11.9" @@ -8131,6 +8077,19 @@ dependencies = [ "byteorder", ] +[[package]] +name = "quick-protobuf-codec" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1693116345026436eb2f10b677806169c1a1260c1c60eaaffe3fb5a29ae23d8b" +dependencies = [ + "asynchronous-codec", + "bytes", + "quick-protobuf", + "thiserror", + "unsigned-varint", +] + [[package]] name = "quickcheck" version = "1.0.3" @@ -8749,6 +8708,7 @@ dependencies = [ "ip_network", "libp2p", "log", + "multihash 0.17.0", "parity-scale-codec", "prost", "prost-build", @@ -8848,7 +8808,7 @@ dependencies = [ "fdlimit", "futures", "futures-timer", - "libp2p", + "libp2p-identity", "log", "names", "parity-scale-codec", @@ -8949,7 +8909,7 @@ dependencies = [ "async-trait", "futures", "futures-timer", - "libp2p", + "libp2p-identity", "log", "mockall", "parking_lot 0.12.1", @@ -9315,7 +9275,7 @@ dependencies = [ "assert_matches", "criterion", "env_logger 0.9.3", - "lru", + "lru 0.8.1", "num_cpus", "parity-scale-codec", "parking_lot 0.12.1", @@ -9442,7 +9402,7 @@ dependencies = [ "libp2p", "linked_hash_set", "log", - "lru", + "lru 0.8.1", "mockall", "multistream-select", "parity-scale-codec", @@ -9486,7 +9446,7 @@ version = "0.10.0-dev" dependencies = [ "cid", "futures", - "libp2p", + "libp2p-identity", "log", "prost", "prost-build", @@ -9516,7 +9476,7 @@ dependencies = [ "bytes", "futures", "futures-timer", - "libp2p", + "libp2p-identity", "parity-scale-codec", "prost-build", "sc-consensus", @@ -9543,7 +9503,7 @@ dependencies = [ "futures-timer", "libp2p", "log", - "lru", + "lru 0.8.1", "quickcheck", "sc-network", "sc-network-common", @@ -9561,7 +9521,7 @@ version = "0.10.0-dev" dependencies = [ "array-bytes 4.2.0", "futures", - "libp2p", + "libp2p-identity", "log", "parity-scale-codec", "prost", @@ -9607,7 +9567,7 @@ dependencies = [ "futures-timer", "libp2p", "log", - "lru", + "lru 0.8.1", "mockall", "parity-scale-codec", "prost", @@ -9729,7 +9689,7 @@ name = "sc-peerset" version = "4.0.0-dev" dependencies = [ "futures", - "libp2p", + "libp2p-identity", "log", "rand 0.8.5", "sc-utils", @@ -10775,7 +10735,7 @@ version = "4.0.0-dev" dependencies = [ "futures", "log", - "lru", + "lru 0.8.1", "parity-scale-codec", "parking_lot 0.12.1", "sp-api", diff --git a/client/authority-discovery/Cargo.toml b/client/authority-discovery/Cargo.toml index 4beb471f9e46d..8b9fb743b4ade 100644 --- a/client/authority-discovery/Cargo.toml +++ b/client/authority-discovery/Cargo.toml @@ -22,6 +22,7 @@ futures = "0.3.21" futures-timer = "3.0.1" ip_network = "0.4.1" libp2p = { version = "0.51.3", features = ["kad", "ed25519"] } +multihash = { version = "0.17.0", default-features = false, features = ["std", "sha2"] } log = "0.4.17" prost = "0.11" rand = "0.8.5" diff --git a/client/authority-discovery/src/worker.rs b/client/authority-discovery/src/worker.rs index 11369f711f0d1..a29e74df9accc 100644 --- a/client/authority-discovery/src/worker.rs +++ b/client/authority-discovery/src/worker.rs @@ -34,12 +34,8 @@ use futures::{channel::mpsc, future, stream::Fuse, FutureExt, Stream, StreamExt} use addr_cache::AddrCache; use codec::{Decode, Encode}; use ip_network::IpNetwork; -use libp2p::{ - core::multiaddr, - identity::PublicKey, - multihash::{Multihash, MultihashDigest}, - Multiaddr, PeerId, -}; +use libp2p::{core::multiaddr, identity::PublicKey, multihash::Multihash, Multiaddr, PeerId}; +use multihash::{Code, MultihashDigest}; use log::{debug, error, log_enabled}; use prometheus_endpoint::{register, Counter, CounterVec, Gauge, Opts, U64}; @@ -553,7 +549,7 @@ where // properly signed by the owner of the PeerId if let Some(peer_signature) = peer_signature { - let public_key = PublicKey::from_protobuf_encoding(&peer_signature.public_key) + let public_key = PublicKey::try_decode_protobuf(&peer_signature.public_key) .map_err(Error::ParsingLibp2pIdentity)?; let signature = Signature { public_key, bytes: peer_signature.signature }; @@ -625,7 +621,7 @@ pub trait NetworkProvider: NetworkDHTProvider + NetworkStateInfo + NetworkSigner impl NetworkProvider for T where T: NetworkDHTProvider + NetworkStateInfo + NetworkSigner {} fn hash_authority_id(id: &[u8]) -> KademliaKey { - KademliaKey::new(&libp2p::multihash::Code::Sha2_256.digest(id).digest()) + KademliaKey::new(&Code::Sha2_256.digest(id).digest()) } // Makes sure all values are the same and returns it @@ -662,7 +658,7 @@ fn sign_record_with_peer_id( let signature = network .sign_with_local_identity(serialized_record) .map_err(|e| Error::CannotSign(format!("{} (network packet)", e)))?; - let public_key = signature.public_key.to_protobuf_encoding(); + let public_key = signature.public_key.encode_protobuf(); let signature = signature.bytes; Ok(schema::PeerSignature { signature, public_key }) } diff --git a/client/authority-discovery/src/worker/schema/tests.rs b/client/authority-discovery/src/worker/schema/tests.rs index 7d04ea4edf556..c765e4e5384db 100644 --- a/client/authority-discovery/src/worker/schema/tests.rs +++ b/client/authority-discovery/src/worker/schema/tests.rs @@ -67,7 +67,7 @@ fn v1_decodes_v2() { let record_v2 = AuthorityRecord { addresses: vec_addresses.clone() }; let mut vec_record_v2 = vec![]; record_v2.encode(&mut vec_record_v2).unwrap(); - let vec_peer_public = peer_public.to_protobuf_encoding(); + let vec_peer_public = peer_public.encode_protobuf(); let peer_signature_v2 = PeerSignature { public_key: vec_peer_public, signature: vec_peer_signature }; let signed_record_v2 = SignedAuthorityRecord { diff --git a/client/cli/src/params/node_key_params.rs b/client/cli/src/params/node_key_params.rs index 60fee03a0ddd4..8c5579eaec494 100644 --- a/client/cli/src/params/node_key_params.rs +++ b/client/cli/src/params/node_key_params.rs @@ -101,7 +101,7 @@ fn invalid_node_key(e: impl std::fmt::Display) -> error::Error { /// Parse a Ed25519 secret key from a hex string into a `sc_network::Secret`. fn parse_ed25519_secret(hex: &str) -> error::Result { H256::from_str(hex).map_err(invalid_node_key).and_then(|bytes| { - ed25519::SecretKey::from_bytes(bytes) + ed25519::SecretKey::try_from_bytes(bytes) .map(sc_network::config::Secret::Input) .map_err(invalid_node_key) }) @@ -154,7 +154,7 @@ mod tests { .into_keypair() .expect("Creates node key pair"); - if let Some(pair) = node_key.into_ed25519() { + if let Ok(pair) = node_key.try_into_ed25519() { if pair.secret().as_ref() != key.as_ref() { panic!("Invalid key") } diff --git a/client/network/src/behaviour.rs b/client/network/src/behaviour.rs index aae7992f3693e..ef967eee92686 100644 --- a/client/network/src/behaviour.rs +++ b/client/network/src/behaviour.rs @@ -28,7 +28,7 @@ use crate::{ use bytes::Bytes; use futures::channel::oneshot; use libp2p::{ - core::Multiaddr, identify::Info as IdentifyInfo, identity::PublicKey, kad::record, + core::Multiaddr, identify::Info as IdentifyInfo, identity::PublicKey, kad::RecordKey, swarm::NetworkBehaviour, PeerId, }; @@ -254,13 +254,13 @@ impl Behaviour { /// 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) { + pub fn get_value(&mut self, key: RecordKey) { self.discovery.get_value(key); } /// Starts putting a record into DHT. Will later produce either a `ValuePut` or a /// `ValuePutFailed` event. - pub fn put_value(&mut self, key: record::Key, value: Vec) { + pub fn put_value(&mut self, key: RecordKey, value: Vec) { self.discovery.put_value(key, value); } } diff --git a/client/network/src/config.rs b/client/network/src/config.rs index 24f27f5acf0fb..ca902fb180e32 100644 --- a/client/network/src/config.rs +++ b/client/network/src/config.rs @@ -378,8 +378,8 @@ impl NodeKeyConfig { None } }) { - Some(s) => ed25519::SecretKey::from_bytes(s), - _ => ed25519::SecretKey::from_bytes(&mut b), + Some(s) => ed25519::SecretKey::try_from_bytes(s), + _ => ed25519::SecretKey::try_from_bytes(&mut b), }, ed25519::SecretKey::generate, |b| b.as_ref().to_vec(), @@ -743,7 +743,7 @@ mod tests { } fn secret_bytes(kp: Keypair) -> Vec { - kp.into_ed25519() + kp.try_into_ed25519() .expect("ed25519 keypair") .secret() .as_ref() diff --git a/client/network/src/discovery.rs b/client/network/src/discovery.rs index 775425ae438d9..708406bd15340 100644 --- a/client/network/src/discovery.rs +++ b/client/network/src/discovery.rs @@ -56,12 +56,9 @@ use libp2p::{ core::{Endpoint, Multiaddr}, kad::{ handler::KademliaHandler, - record::{ - self, - store::{MemoryStore, RecordStore}, - }, + record::store::{MemoryStore, RecordStore}, GetClosestPeersError, GetRecordOk, Kademlia, KademliaBucketInserts, KademliaConfig, - KademliaEvent, QueryId, QueryResult, Quorum, Record, + KademliaEvent, QueryId, QueryResult, Quorum, Record, RecordKey, }, mdns::{self, tokio::Behaviour as TokioMdns}, multiaddr::Protocol, @@ -375,7 +372,7 @@ impl DiscoveryBehaviour { /// Start fetching a record from the DHT. /// /// A corresponding `ValueFound` or `ValueNotFound` event will later be generated. - pub fn get_value(&mut self, key: record::Key) { + pub fn get_value(&mut self, key: RecordKey) { if let Some(k) = self.kademlia.as_mut() { k.get_record(key.clone()); } @@ -385,7 +382,7 @@ impl DiscoveryBehaviour { /// `get_value`. /// /// A corresponding `ValuePut` or `ValuePutFailed` event will later be generated. - pub fn put_value(&mut self, key: record::Key, value: Vec) { + pub fn put_value(&mut self, key: RecordKey, value: Vec) { if let Some(k) = self.kademlia.as_mut() { if let Err(e) = k.put_record(Record::new(key.clone(), value.clone()), Quorum::All) { warn!(target: "sub-libp2p", "Libp2p => Failed to put record: {:?}", e); @@ -461,22 +458,22 @@ pub enum DiscoveryOut { /// The DHT yielded results for the record request. /// /// Returning the result grouped in (key, value) pairs as well as the request duration. - ValueFound(Vec<(record::Key, Vec)>, Duration), + ValueFound(Vec<(RecordKey, Vec)>, Duration), /// The record requested was not found in the DHT. /// /// Returning the corresponding key as well as the request duration. - ValueNotFound(record::Key, Duration), + ValueNotFound(RecordKey, Duration), /// The record with a given key was successfully inserted into the DHT. /// /// Returning the corresponding key as well as the request duration. - ValuePut(record::Key, Duration), + ValuePut(RecordKey, Duration), /// Inserting a value into the DHT failed. /// /// Returning the corresponding key as well as the request duration. - ValuePutFailed(record::Key, Duration), + ValuePutFailed(RecordKey, Duration), /// Started a random Kademlia query. /// @@ -980,13 +977,10 @@ mod tests { .map(|i| { let keypair = Keypair::generate_ed25519(); - let noise_keys = - noise::Keypair::::new().into_authentic(&keypair).unwrap(); - let transport = MemoryTransport::new() .upgrade(upgrade::Version::V1) - .authenticate(noise::NoiseConfig::xx(noise_keys).into_authenticated()) - .multiplex(yamux::YamuxConfig::default()) + .authenticate(noise::Config::new(&keypair).unwrap()) + .multiplex(yamux::Config::default()) .boxed(); let behaviour = { diff --git a/client/network/src/protocol/notifications/tests.rs b/client/network/src/protocol/notifications/tests.rs index 32c7f41f62cdc..d13a4fcfa3809 100644 --- a/client/network/src/protocol/notifications/tests.rs +++ b/client/network/src/protocol/notifications/tests.rs @@ -58,13 +58,10 @@ fn build_nodes() -> (Swarm, Swarm) { for index in 0..2 { let keypair = keypairs[index].clone(); - let noise_keys = - noise::Keypair::::new().into_authentic(&keypair).unwrap(); - let transport = MemoryTransport::new() .upgrade(upgrade::Version::V1) - .authenticate(noise::NoiseConfig::xx(noise_keys).into_authenticated()) - .multiplex(yamux::YamuxConfig::default()) + .authenticate(noise::Config::new(&keypair).unwrap()) + .multiplex(yamux::Config::default()) .timeout(Duration::from_secs(20)) .boxed(); diff --git a/client/network/src/request_responses.rs b/client/network/src/request_responses.rs index 0fc56def71b5d..5a93e9244a269 100644 --- a/client/network/src/request_responses.rs +++ b/client/network/src/request_responses.rs @@ -1066,13 +1066,10 @@ mod tests { ) -> (Swarm, Multiaddr, Peerset) { let keypair = Keypair::generate_ed25519(); - let noise_keys = - noise::Keypair::::new().into_authentic(&keypair).unwrap(); - let transport = MemoryTransport::new() .upgrade(upgrade::Version::V1) - .authenticate(noise::NoiseConfig::xx(noise_keys).into_authenticated()) - .multiplex(libp2p::yamux::YamuxConfig::default()) + .authenticate(noise::NoiseConfig::new(&keypair).unwrap()) + .multiplex(libp2p::yamux::Config::default()) .boxed(); let config = PeersetConfig { diff --git a/client/network/src/transport.rs b/client/network/src/transport.rs index e20121154cfcd..9e63ce98878a6 100644 --- a/client/network/src/transport.rs +++ b/client/network/src/transport.rs @@ -78,28 +78,9 @@ pub fn build_transport( Either::Right(OptionalTransport::some(libp2p::core::transport::MemoryTransport::default())) }; - let authentication_config = - { - // For more information about these two panics, see in "On the Importance of - // Checking Cryptographic Protocols for Faults" by Dan Boneh, Richard A. DeMillo, - // and Richard J. Lipton. - let noise_keypair = noise::Keypair::::new().into_authentic(&keypair) - .expect("can only fail in case of a hardware bug; since this signing is performed only \ - once and at initialization, we're taking the bet that the inconvenience of a very \ - rare panic here is basically zero"); - - // Legacy noise configurations for backward compatibility. - #[allow(deprecated)] - let noise_legacy = noise::LegacyConfig { recv_legacy_handshake: true, ..Default::default() }; - - let mut xx_config = noise::NoiseConfig::xx(noise_keypair); - #[allow(deprecated)] - xx_config.set_legacy_config(noise_legacy); - xx_config.into_authenticated() - }; - + let authentication_config = noise::Config::new(&keypair).expect("Can create noise config. qed"); let multiplexing_config = { - let mut yamux_config = libp2p::yamux::YamuxConfig::default(); + let mut yamux_config = libp2p::yamux::Config::default(); // Enable proper flow-control: window updates are only sent when // buffered data has been consumed. yamux_config.set_window_update_mode(libp2p::yamux::WindowUpdateMode::on_read()); From 5551d2301eee37b8be99c7fea313047ef318c7c8 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Thu, 11 May 2023 14:33:32 +0400 Subject: [PATCH 45/48] fix build error --- client/network/src/request_responses.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/network/src/request_responses.rs b/client/network/src/request_responses.rs index 5a93e9244a269..e0f4074e0a22e 100644 --- a/client/network/src/request_responses.rs +++ b/client/network/src/request_responses.rs @@ -1068,7 +1068,7 @@ mod tests { let transport = MemoryTransport::new() .upgrade(upgrade::Version::V1) - .authenticate(noise::NoiseConfig::new(&keypair).unwrap()) + .authenticate(noise::Config::new(&keypair).unwrap()) .multiplex(libp2p::yamux::Config::default()) .boxed(); From 97e75cf759921da5e5184d7e5447daea155d1974 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Thu, 11 May 2023 14:58:04 +0400 Subject: [PATCH 46/48] update libp2p-identity --- client/cli/Cargo.toml | 2 +- client/consensus/common/Cargo.toml | 2 +- client/network/bitswap/Cargo.toml | 2 +- client/network/common/Cargo.toml | 2 +- client/network/light/Cargo.toml | 2 +- client/peerset/Cargo.toml | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/client/cli/Cargo.toml b/client/cli/Cargo.toml index bf124d7ba301d..49e0765dd29d0 100644 --- a/client/cli/Cargo.toml +++ b/client/cli/Cargo.toml @@ -18,7 +18,7 @@ chrono = "0.4.10" clap = { version = "4.2.5", features = ["derive", "string"] } fdlimit = "0.2.1" futures = "0.3.21" -libp2p-identity = { version = "0.1.0", features = ["peerid", "ed25519"]} +libp2p-identity = { version = "0.1.2", features = ["peerid", "ed25519"]} log = "0.4.17" names = { version = "0.13.0", default-features = false } parity-scale-codec = "3.2.2" diff --git a/client/consensus/common/Cargo.toml b/client/consensus/common/Cargo.toml index 0091f40c2929e..32dc5f75255ee 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-identity = { version = "0.1", features = ["peerid"] } +libp2p-identity = { version = "0.1.2", features = ["peerid"] } log = "0.4.17" mockall = "0.11.3" parking_lot = "0.12.1" diff --git a/client/network/bitswap/Cargo.toml b/client/network/bitswap/Cargo.toml index e6e6904e6df53..a953676ec160e 100644 --- a/client/network/bitswap/Cargo.toml +++ b/client/network/bitswap/Cargo.toml @@ -18,7 +18,7 @@ prost-build = "0.11" [dependencies] cid = "0.8.6" futures = "0.3.21" -libp2p-identity = { version = "0.1.0", features = ["peerid"] } +libp2p-identity = { version = "0.1.2", features = ["peerid"] } 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 b7301ff8cb878..d9769413b857f 100644 --- a/client/network/common/Cargo.toml +++ b/client/network/common/Cargo.toml @@ -25,7 +25,7 @@ codec = { package = "parity-scale-codec", version = "3.2.2", features = [ ] } futures = "0.3.21" futures-timer = "3.0.2" -libp2p-identity = { version = "0.1", features = ["peerid"] } +libp2p-identity = { version = "0.1.2", features = ["peerid"] } prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.10.0-dev", path = "../../../utils/prometheus" } smallvec = "1.8.0" sc-consensus = { version = "0.10.0-dev", path = "../../consensus/common" } diff --git a/client/network/light/Cargo.toml b/client/network/light/Cargo.toml index ffdae896e16e3..cd0dfbca50d2a 100644 --- a/client/network/light/Cargo.toml +++ b/client/network/light/Cargo.toml @@ -21,7 +21,7 @@ codec = { package = "parity-scale-codec", version = "3.2.2", features = [ "derive", ] } futures = "0.3.21" -libp2p-identity = { version = "0.1", features = ["peerid"] } +libp2p-identity = { version = "0.1.2", features = ["peerid"] } log = "0.4.16" prost = "0.11" sp-blockchain = { version = "4.0.0-dev", path = "../../../primitives/blockchain" } diff --git a/client/peerset/Cargo.toml b/client/peerset/Cargo.toml index d0e760b259cf5..c4846eccaf1a3 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-identity = { version = "0.1", features = ["peerid"] } +libp2p-identity = { version = "0.1.2", features = ["peerid"] } log = "0.4.17" serde_json = "1.0.85" wasm-timer = "0.2" From a7a5b8e900603910d236247bffc3771546cd0b78 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Thu, 11 May 2023 22:25:59 +0400 Subject: [PATCH 47/48] enable libp2p-identity:ed25519 feature in sc-consensus --- client/consensus/common/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/consensus/common/Cargo.toml b/client/consensus/common/Cargo.toml index 32dc5f75255ee..e953d67965627 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-identity = { version = "0.1.2", features = ["peerid"] } +libp2p-identity = { version = "0.1.2", features = ["peerid", "ed25519"] } log = "0.4.17" mockall = "0.11.3" parking_lot = "0.12.1" From 0a0defc55abfcbe987c0492ac329028f021f13d2 Mon Sep 17 00:00:00 2001 From: Anton Kaliaev Date: Fri, 12 May 2023 09:41:12 +0400 Subject: [PATCH 48/48] enable ed25519 for peerset as well --- client/peerset/Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/peerset/Cargo.toml b/client/peerset/Cargo.toml index c4846eccaf1a3..043f8a8352caa 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-identity = { version = "0.1.2", features = ["peerid"] } +libp2p-identity = { version = "0.1.2", features = ["peerid", "ed25519"] } log = "0.4.17" serde_json = "1.0.85" wasm-timer = "0.2"