From db84513bb10aef2843526f94bd0410c00714e053 Mon Sep 17 00:00:00 2001 From: piaoliu <441594700@qq.com> Date: Fri, 12 Apr 2019 15:02:02 +0800 Subject: [PATCH] chore: upgrade p2p dependence --- Cargo.lock | 55 ++++++++++++++++-------------- network/Cargo.toml | 10 +++--- network/src/network.rs | 16 +++++---- network/src/protocols/discovery.rs | 16 +++------ network/src/protocols/mod.rs | 15 ++++---- shared/src/chain_state.rs | 2 +- src/subcommand/run.rs | 8 ++--- sync/src/relayer/mod.rs | 30 ++++++++++++---- test/src/net.rs | 3 +- 9 files changed, 85 insertions(+), 70 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d0f5899e88..5c967c9e13 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -517,11 +517,11 @@ dependencies = [ "snap 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", "stop-handler 0.9.0-pre", "tempfile 3.0.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tentacle 0.2.0-alpha.1 (git+https://github.com/nervosnetwork/p2p?rev=53cb765b94041543a9c8582aa4d0d34fb2ac6d95)", - "tentacle-discovery 0.1.0 (git+https://github.com/nervosnetwork/p2p?rev=53cb765b94041543a9c8582aa4d0d34fb2ac6d95)", - "tentacle-identify 0.1.0 (git+https://github.com/nervosnetwork/p2p?rev=53cb765b94041543a9c8582aa4d0d34fb2ac6d95)", - "tentacle-ping 0.2.0 (git+https://github.com/nervosnetwork/p2p?rev=53cb765b94041543a9c8582aa4d0d34fb2ac6d95)", - "tentacle-secio 0.1.0 (git+https://github.com/nervosnetwork/p2p?rev=53cb765b94041543a9c8582aa4d0d34fb2ac6d95)", + "tentacle 0.2.0-alpha.1 (git+https://github.com/nervosnetwork/p2p?rev=1ce924dec380d65444a14dbbf285f2d6f411145d)", + "tentacle-discovery 0.1.0 (git+https://github.com/nervosnetwork/p2p?rev=1ce924dec380d65444a14dbbf285f2d6f411145d)", + "tentacle-identify 0.1.0 (git+https://github.com/nervosnetwork/p2p?rev=1ce924dec380d65444a14dbbf285f2d6f411145d)", + "tentacle-ping 0.2.0 (git+https://github.com/nervosnetwork/p2p?rev=1ce924dec380d65444a14dbbf285f2d6f411145d)", + "tentacle-secio 0.1.0 (git+https://github.com/nervosnetwork/p2p?rev=1ce924dec380d65444a14dbbf285f2d6f411145d)", "tokio 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", "unsigned-varint 0.2.2 (git+https://github.com/paritytech/unsigned-varint)", ] @@ -2005,7 +2005,7 @@ dependencies = [ [[package]] name = "parity-multiaddr" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ "arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", @@ -2830,34 +2830,36 @@ dependencies = [ [[package]] name = "tentacle" version = "0.2.0-alpha.1" -source = "git+https://github.com/nervosnetwork/p2p?rev=53cb765b94041543a9c8582aa4d0d34fb2ac6d95#53cb765b94041543a9c8582aa4d0d34fb2ac6d95" +source = "git+https://github.com/nervosnetwork/p2p?rev=1ce924dec380d65444a14dbbf285f2d6f411145d#1ce924dec380d65444a14dbbf285f2d6f411145d" dependencies = [ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", "flatbuffers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "flatbuffers-verifier 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "parity-multiaddr 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "tentacle-secio 0.1.0 (git+https://github.com/nervosnetwork/p2p?rev=53cb765b94041543a9c8582aa4d0d34fb2ac6d95)", + "parity-multiaddr 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "tentacle-secio 0.1.0 (git+https://github.com/nervosnetwork/p2p?rev=1ce924dec380d65444a14dbbf285f2d6f411145d)", "tokio 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", "tokio-threadpool 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-yamux 0.1.4 (git+https://github.com/nervosnetwork/p2p?rev=53cb765b94041543a9c8582aa4d0d34fb2ac6d95)", + "tokio-yamux 0.1.4 (git+https://github.com/nervosnetwork/p2p?rev=1ce924dec380d65444a14dbbf285f2d6f411145d)", ] [[package]] name = "tentacle-discovery" version = "0.1.0" -source = "git+https://github.com/nervosnetwork/p2p?rev=53cb765b94041543a9c8582aa4d0d34fb2ac6d95#53cb765b94041543a9c8582aa4d0d34fb2ac6d95" +source = "git+https://github.com/nervosnetwork/p2p?rev=1ce924dec380d65444a14dbbf285f2d6f411145d#1ce924dec380d65444a14dbbf285f2d6f411145d" dependencies = [ "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", "flatbuffers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "flatbuffers-verifier 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)", "serde 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.90 (registry+https://github.com/rust-lang/crates.io-index)", - "tentacle 0.2.0-alpha.1 (git+https://github.com/nervosnetwork/p2p?rev=53cb765b94041543a9c8582aa4d0d34fb2ac6d95)", + "tentacle 0.2.0-alpha.1 (git+https://github.com/nervosnetwork/p2p?rev=1ce924dec380d65444a14dbbf285f2d6f411145d)", "tokio 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", "trust-dns 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)", ] @@ -2865,38 +2867,41 @@ dependencies = [ [[package]] name = "tentacle-identify" version = "0.1.0" -source = "git+https://github.com/nervosnetwork/p2p?rev=53cb765b94041543a9c8582aa4d0d34fb2ac6d95#53cb765b94041543a9c8582aa4d0d34fb2ac6d95" +source = "git+https://github.com/nervosnetwork/p2p?rev=1ce924dec380d65444a14dbbf285f2d6f411145d#1ce924dec380d65444a14dbbf285f2d6f411145d" dependencies = [ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", "flatbuffers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "flatbuffers-verifier 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tentacle 0.2.0-alpha.1 (git+https://github.com/nervosnetwork/p2p?rev=53cb765b94041543a9c8582aa4d0d34fb2ac6d95)", + "tentacle 0.2.0-alpha.1 (git+https://github.com/nervosnetwork/p2p?rev=1ce924dec380d65444a14dbbf285f2d6f411145d)", "tokio 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "tentacle-ping" version = "0.2.0" -source = "git+https://github.com/nervosnetwork/p2p?rev=53cb765b94041543a9c8582aa4d0d34fb2ac6d95#53cb765b94041543a9c8582aa4d0d34fb2ac6d95" +source = "git+https://github.com/nervosnetwork/p2p?rev=1ce924dec380d65444a14dbbf285f2d6f411145d#1ce924dec380d65444a14dbbf285f2d6f411145d" dependencies = [ "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", "flatbuffers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "flatbuffers-verifier 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", "generic-channel 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tentacle 0.2.0-alpha.1 (git+https://github.com/nervosnetwork/p2p?rev=53cb765b94041543a9c8582aa4d0d34fb2ac6d95)", + "tentacle 0.2.0-alpha.1 (git+https://github.com/nervosnetwork/p2p?rev=1ce924dec380d65444a14dbbf285f2d6f411145d)", ] [[package]] name = "tentacle-secio" version = "0.1.0" -source = "git+https://github.com/nervosnetwork/p2p?rev=53cb765b94041543a9c8582aa4d0d34fb2ac6d95#53cb765b94041543a9c8582aa4d0d34fb2ac6d95" +source = "git+https://github.com/nervosnetwork/p2p?rev=1ce924dec380d65444a14dbbf285f2d6f411145d#1ce924dec380d65444a14dbbf285f2d6f411145d" dependencies = [ "aes-ctr 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", "bs58 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", "ctr 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "flatbuffers 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", + "flatbuffers-verifier 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", "futures 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", "hmac 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", "log 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3170,7 +3175,7 @@ dependencies = [ [[package]] name = "tokio-yamux" version = "0.1.4" -source = "git+https://github.com/nervosnetwork/p2p?rev=53cb765b94041543a9c8582aa4d0d34fb2ac6d95#53cb765b94041543a9c8582aa4d0d34fb2ac6d95" +source = "git+https://github.com/nervosnetwork/p2p?rev=1ce924dec380d65444a14dbbf285f2d6f411145d#1ce924dec380d65444a14dbbf285f2d6f411145d" dependencies = [ "byteorder 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3654,7 +3659,7 @@ dependencies = [ "checksum openssl-sys 0.9.43 (registry+https://github.com/rust-lang/crates.io-index)" = "33c86834957dd5b915623e94f2f4ab2c70dd8f6b70679824155d5ae21dbd495d" "checksum ordermap 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "a86ed3f5f244b372d6b1a00b72ef7f8876d0bc6a78a4c9985c53614041512063" "checksum owning_ref 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "49a4b8ea2179e6a2e27411d3bca09ca6dd630821cf6894c6c7c8467a8ee7ef13" -"checksum parity-multiaddr 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "61ae6944d4435d41f4d0f12108c5cbb9207cbb14bc8f2b4984c6e930dc9c8e41" +"checksum parity-multiaddr 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "143cb29a33d708ccc4b00686c93acee8c76d8e188b0156a5214fcec63b59a6fc" "checksum parity-multihash 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3e8eab0287ccde7821e337a124dc5a4f1d6e4c25d10cc91e3f9361615dd95076" "checksum parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337" "checksum parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9" @@ -3744,11 +3749,11 @@ dependencies = [ "checksum synom 0.11.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a393066ed9010ebaed60b9eafa373d4b1baac186dd7e008555b0f702b51945b6" "checksum synstructure 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "73687139bf99285483c96ac0add482c3776528beac1d97d444f6e91f203a2015" "checksum tempfile 3.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = "b86c784c88d98c801132806dadd3819ed29d8600836c4088e855cdf3e178ed8a" -"checksum tentacle 0.2.0-alpha.1 (git+https://github.com/nervosnetwork/p2p?rev=53cb765b94041543a9c8582aa4d0d34fb2ac6d95)" = "" -"checksum tentacle-discovery 0.1.0 (git+https://github.com/nervosnetwork/p2p?rev=53cb765b94041543a9c8582aa4d0d34fb2ac6d95)" = "" -"checksum tentacle-identify 0.1.0 (git+https://github.com/nervosnetwork/p2p?rev=53cb765b94041543a9c8582aa4d0d34fb2ac6d95)" = "" -"checksum tentacle-ping 0.2.0 (git+https://github.com/nervosnetwork/p2p?rev=53cb765b94041543a9c8582aa4d0d34fb2ac6d95)" = "" -"checksum tentacle-secio 0.1.0 (git+https://github.com/nervosnetwork/p2p?rev=53cb765b94041543a9c8582aa4d0d34fb2ac6d95)" = "" +"checksum tentacle 0.2.0-alpha.1 (git+https://github.com/nervosnetwork/p2p?rev=1ce924dec380d65444a14dbbf285f2d6f411145d)" = "" +"checksum tentacle-discovery 0.1.0 (git+https://github.com/nervosnetwork/p2p?rev=1ce924dec380d65444a14dbbf285f2d6f411145d)" = "" +"checksum tentacle-identify 0.1.0 (git+https://github.com/nervosnetwork/p2p?rev=1ce924dec380d65444a14dbbf285f2d6f411145d)" = "" +"checksum tentacle-ping 0.2.0 (git+https://github.com/nervosnetwork/p2p?rev=1ce924dec380d65444a14dbbf285f2d6f411145d)" = "" +"checksum tentacle-secio 0.1.0 (git+https://github.com/nervosnetwork/p2p?rev=1ce924dec380d65444a14dbbf285f2d6f411145d)" = "" "checksum termcolor 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "4096add70612622289f2fdcdbd5086dc81c1e2675e6ae58d6c4f62a16c6d7f2f" "checksum termion 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "689a3bdfaab439fd92bc87df5c4c78417d3cbe537487274e9b0b2dce76e92096" "checksum termios 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "72b620c5ea021d75a735c943269bb07d30c9b77d6ac6b236bc8b5c496ef05625" @@ -3772,7 +3777,7 @@ dependencies = [ "checksum tokio-trace-core 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "350c9edade9830dc185ae48ba45667a445ab59f6167ef6d0254ec9d2430d9dd3" "checksum tokio-udp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "66268575b80f4a4a710ef83d087fdfeeabdce9b74c797535fbac18a2cb906e92" "checksum tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "037ffc3ba0e12a0ab4aca92e5234e0dedeb48fddf6ccd260f1f150a36a9f2445" -"checksum tokio-yamux 0.1.4 (git+https://github.com/nervosnetwork/p2p?rev=53cb765b94041543a9c8582aa4d0d34fb2ac6d95)" = "" +"checksum tokio-yamux 0.1.4 (git+https://github.com/nervosnetwork/p2p?rev=1ce924dec380d65444a14dbbf285f2d6f411145d)" = "" "checksum toml 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "87c5890a989fa47ecdc7bcb4c63a77a82c18f306714104b1decfd722db17b39e" "checksum trust-dns 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)" = "65096825b064877da37eeeb9a83390bd23433eabfc503a6476dc5b1949034aa7" "checksum trust-dns-proto 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "09144f0992b0870fa8d2972cc069cbf1e3c0fda64d1f3d45c4d68d0e0b52ad4e" diff --git a/network/Cargo.toml b/network/Cargo.toml index 75c5afa6fb..fe2b4e1011 100644 --- a/network/Cargo.toml +++ b/network/Cargo.toml @@ -23,11 +23,11 @@ tokio = "0.1.18" futures = "0.1" snap = "0.2" crossbeam-channel = "0.3" -p2p = { git = "https://github.com/nervosnetwork/p2p", rev="53cb765b94041543a9c8582aa4d0d34fb2ac6d95", package="tentacle" } -secio = { git = "https://github.com/nervosnetwork/p2p", rev="53cb765b94041543a9c8582aa4d0d34fb2ac6d95", package="tentacle-secio" } -p2p-ping = { git = "https://github.com/nervosnetwork/p2p", rev="53cb765b94041543a9c8582aa4d0d34fb2ac6d95", package="tentacle-ping" } -p2p-discovery = { git = "https://github.com/nervosnetwork/p2p", rev="53cb765b94041543a9c8582aa4d0d34fb2ac6d95", package="tentacle-discovery" } -p2p-identify = { git = "https://github.com/nervosnetwork/p2p", rev="53cb765b94041543a9c8582aa4d0d34fb2ac6d95", package="tentacle-identify" } +p2p = { git = "https://github.com/nervosnetwork/p2p", rev="1ce924dec380d65444a14dbbf285f2d6f411145d", package="tentacle" } +secio = { git = "https://github.com/nervosnetwork/p2p", rev="1ce924dec380d65444a14dbbf285f2d6f411145d", package="tentacle-secio" } +p2p-ping = { git = "https://github.com/nervosnetwork/p2p", rev="1ce924dec380d65444a14dbbf285f2d6f411145d", package="tentacle-ping" } +p2p-discovery = { git = "https://github.com/nervosnetwork/p2p", rev="1ce924dec380d65444a14dbbf285f2d6f411145d", package="tentacle-discovery" } +p2p-identify = { git = "https://github.com/nervosnetwork/p2p", rev="1ce924dec380d65444a14dbbf285f2d6f411145d", package="tentacle-identify" } faketime = "0.2.0" rusqlite = {version = "0.16.0", features = ["bundled"]} lazy_static = "1.3.0" diff --git a/network/src/network.rs b/network/src/network.rs index 3970739be4..7fa0daa4f4 100644 --- a/network/src/network.rs +++ b/network/src/network.rs @@ -463,14 +463,16 @@ impl NetworkService { // TODO: how to deny banned node to open those protocols? // Ping protocol let (ping_sender, ping_receiver) = channel(std::u8::MAX as usize); + let ping_interval = Duration::from_secs(config.ping_interval_secs); + let ping_timeout = Duration::from_secs(config.ping_timeout_secs); + let ping_meta = MetaBuilder::default() .id(PING_PROTOCOL_ID) .service_handle(move || { ProtocolHandle::Both(Box::new(PingHandler::new( - PING_PROTOCOL_ID, - Duration::from_secs(config.ping_interval_secs), - Duration::from_secs(config.ping_timeout_secs), - ping_sender, + ping_interval, + ping_timeout, + ping_sender.clone(), ))) }) .build(); @@ -480,7 +482,7 @@ impl NetworkService { let disc_meta = MetaBuilder::default() .id(DISCOVERY_PROTOCOL_ID) .service_handle(move || { - ProtocolHandle::Both(Box::new(DiscoveryProtocol::new(disc_sender))) + ProtocolHandle::Both(Box::new(DiscoveryProtocol::new(disc_sender.clone()))) }) .build(); @@ -489,7 +491,7 @@ impl NetworkService { let identify_meta = MetaBuilder::default() .id(IDENTIFY_PROTOCOL_ID) .service_handle(move || { - ProtocolHandle::Both(Box::new(IdentifyProtocol::new(identify_callback))) + ProtocolHandle::Both(Box::new(IdentifyProtocol::new(identify_callback.clone()))) }) .build(); @@ -498,7 +500,7 @@ impl NetworkService { "flr".to_string(), FEELER_PROTOCOL_ID, &[1][..], - Box::new(Feeler {}), + || Box::new(Feeler {}), Arc::clone(&network_state), ); diff --git a/network/src/protocols/discovery.rs b/network/src/protocols/discovery.rs index b6d97f96dc..e92f13ee0c 100644 --- a/network/src/protocols/discovery.rs +++ b/network/src/protocols/discovery.rs @@ -3,7 +3,7 @@ use crate::NetworkState; use fnv::FnvHashMap; use futures::{sync::mpsc, sync::oneshot, try_ready, Async, Future, Stream}; use log::{debug, trace, warn}; -use std::sync::Arc; +use std::{sync::Arc, time::Duration}; use p2p::{ context::{ProtocolContext, ProtocolContextMutRef}, @@ -29,7 +29,7 @@ impl DiscoveryProtocol { let addr_mgr = DiscoveryAddressManager { event_sender: event_sender.clone(), }; - let discovery = Discovery::new(addr_mgr); + let discovery = Discovery::new(addr_mgr, Some(Duration::from_secs(7))); let discovery_handle = discovery.handle(); DiscoveryProtocol { discovery: Some(discovery), @@ -63,7 +63,7 @@ impl ServiceProtocol for DiscoveryProtocol { context.future_task(discovery_task); } - fn connected(&mut self, mut context: ProtocolContextMutRef, _: &str) { + fn connected(&mut self, context: ProtocolContextMutRef, _: &str) { let session = context.session; debug!( target: "network", @@ -81,15 +81,7 @@ impl ServiceProtocol for DiscoveryProtocol { let (sender, receiver) = mpsc::channel(8); self.discovery_senders.insert(session.id, sender); - let substream = Substream::new( - session.address.clone(), - session.ty, - context.proto_id, - session.id, - receiver, - context.control().clone(), - context.listens(), - ); + let substream = Substream::new(context, receiver); match self.discovery_handle.substream_sender.try_send(substream) { Ok(_) => { debug!(target: "network", "Send substream success"); diff --git a/network/src/protocols/mod.rs b/network/src/protocols/mod.rs index 105e20dd21..4c4e9955ec 100644 --- a/network/src/protocols/mod.rs +++ b/network/src/protocols/mod.rs @@ -34,21 +34,21 @@ pub struct CKBProtocol { protocol_name: String, // supported version, used to check protocol version supported_versions: Vec, - handler: Box, + handler: Box Box + Send + 'static>, network_state: Arc, } impl CKBProtocol { - pub fn new( + pub fn new Box + Send + 'static>( protocol_name: String, id: ProtocolId, versions: &[ProtocolVersion], - handler: Box, + handler: F, network_state: Arc, ) -> Self { CKBProtocol { id, - handler, + handler: Box::new(handler), network_state, protocol_name: format!("/ckb/{}/", protocol_name).to_string(), supported_versions: { @@ -90,7 +90,8 @@ impl CKBProtocol { }) .support_versions(supported_versions) .service_handle(move || { - let handler = CKBHandler::new(self.id, self.network_state, self.handler); + let handler = + CKBHandler::new(self.id, Arc::clone(&self.network_state), (self.handler)()); ProtocolHandle::Callback(Box::new(handler)) }) .build() @@ -100,14 +101,14 @@ impl CKBProtocol { struct CKBHandler { id: ProtocolId, network_state: Arc, - handler: Box, + handler: Box, } impl CKBHandler { pub fn new( id: ProtocolId, network_state: Arc, - handler: Box, + handler: Box, ) -> CKBHandler { CKBHandler { id, diff --git a/shared/src/chain_state.rs b/shared/src/chain_state.rs index a47f54ec5e..0a41e83062 100644 --- a/shared/src/chain_state.rs +++ b/shared/src/chain_state.rs @@ -182,7 +182,7 @@ impl ChainState { trace!(target: "tx_pool", "discarding already known transaction {:#x}", tx_hash); return Err(PoolError::Duplicate); } - let entry = PoolEntry::new(tx, 0, verify_result.map(Some).unwrap_or(None)); + let entry = PoolEntry::new(tx, 0, verify_result.ok()); self.staging_tx(&mut tx_pool, entry, max_cycles)?; Ok(verify_result.map_err(PoolError::InvalidTx)?) } else { diff --git a/src/subcommand/run.rs b/src/subcommand/run.rs index 9b2c5880af..68ee162aec 100644 --- a/src/subcommand/run.rs +++ b/src/subcommand/run.rs @@ -39,8 +39,6 @@ pub fn run(args: RunArgs) -> Result<(), ExitCode> { synchronizer.peers(), ); - let net_time_checker = NetTimeProtocol::default(); - let network_state = Arc::new( NetworkState::from_config(args.config.network).expect("Init network state failed"), ); @@ -49,21 +47,21 @@ pub fn run(args: RunArgs) -> Result<(), ExitCode> { "syn".to_string(), NetworkProtocol::SYNC as ProtocolId, &[1][..], - Box::new(synchronizer), + move || Box::new(synchronizer.clone()), Arc::clone(&network_state), ), CKBProtocol::new( "rel".to_string(), NetworkProtocol::RELAY as ProtocolId, &[1][..], - Box::new(relayer), + move || Box::new(relayer.clone()), Arc::clone(&network_state), ), CKBProtocol::new( "tim".to_string(), NetworkProtocol::TIME as ProtocolId, &[1][..], - Box::new(net_time_checker), + || Box::new(NetTimeProtocol::default()), Arc::clone(&network_state), ), ]; diff --git a/sync/src/relayer/mod.rs b/sync/src/relayer/mod.rs index 55d8aba254..484cdc9a77 100644 --- a/sync/src/relayer/mod.rs +++ b/sync/src/relayer/mod.rs @@ -51,6 +51,20 @@ pub struct Relayer { peers: Arc, } +impl Clone for Relayer +where + CI: ckb_shared::index::ChainIndex, +{ + fn clone(&self) -> Self { + Relayer { + chain: self.chain.clone(), + shared: Clone::clone(&self.shared), + state: Arc::clone(&self.state), + peers: Arc::clone(&self.peers), + } + } +} + impl Relayer { pub fn new(chain: ChainController, shared: Shared, peers: Arc) -> Self { Relayer { @@ -155,14 +169,16 @@ impl Relayer { .cloned() .collect::>(); - let fbb = &mut FlatBufferBuilder::new(); - let message = - RelayMessage::build_get_block_proposal(fbb, block.header.number(), &unknown_ids); - fbb.finish(message, None); + if !unknown_ids.is_empty() { + let fbb = &mut FlatBufferBuilder::new(); + let message = + RelayMessage::build_get_block_proposal(fbb, block.header.number(), &unknown_ids); + fbb.finish(message, None); - let ret = nc.send(peer, fbb.finished_data().to_vec()); - if ret.is_err() { - warn!(target: "relay", "relay get_block_proposal error {:?}", ret); + let ret = nc.send(peer, fbb.finished_data().to_vec()); + if ret.is_err() { + warn!(target: "relay", "relay get_block_proposal error {:?}", ret); + } } } diff --git a/test/src/net.rs b/test/src/net.rs index a42537a598..2da7c41520 100644 --- a/test/src/net.rs +++ b/test/src/net.rs @@ -66,11 +66,12 @@ impl Net { let protocols = test_protocols .into_iter() .map(|tp| { + let tx = tx.clone(); CKBProtocol::new( tp.protocol_name, tp.id, &tp.supported_versions, - Box::new(DummyProtocolHandler { tx: tx.clone() }), + move || Box::new(DummyProtocolHandler { tx: tx.clone() }), Arc::clone(&network_state), ) })