From 9bcda0f9c77f4c74d66aa86912013b990d7ac57f Mon Sep 17 00:00:00 2001 From: Jane Lusby Date: Thu, 4 Jun 2020 16:31:48 -0700 Subject: [PATCH] Wrap Blocks in Arc throughout codebase --- zebra-network/src/peer/connection.rs | 6 +++--- zebra-network/src/protocol/external/codec.rs | 4 ++-- zebra-network/src/protocol/external/message.rs | 4 ++-- zebra-network/src/protocol/internal/response.rs | 3 ++- zebrad/src/commands/connect.rs | 2 -- 5 files changed, 9 insertions(+), 10 deletions(-) diff --git a/zebra-network/src/peer/connection.rs b/zebra-network/src/peer/connection.rs index c27bbc57e..44821fb8f 100644 --- a/zebra-network/src/peer/connection.rs +++ b/zebra-network/src/peer/connection.rs @@ -33,7 +33,7 @@ pub(super) enum Handler { GetPeers, GetBlocksByHash { hashes: HashSet, - blocks: Vec, + blocks: Vec>, }, FindBlocks, } @@ -72,7 +72,7 @@ impl Handler { Message::Block(block), ) => { if hashes.remove(&BlockHeaderHash::from(block.as_ref())) { - blocks.push(*block); + blocks.push(block); if hashes.is_empty() { Finished(Ok(Response::Blocks(blocks))) } else { @@ -435,7 +435,7 @@ where Response::Blocks(blocks) => { // Generate one block message per block. for block in blocks.into_iter() { - if let Err(e) = self.peer_tx.send(Message::Block(Box::new(block))).await { + if let Err(e) = self.peer_tx.send(Message::Block(block)).await { self.fail_with(e.into()); } } diff --git a/zebra-network/src/protocol/external/codec.rs b/zebra-network/src/protocol/external/codec.rs index 396c98d71..f0197efc5 100644 --- a/zebra-network/src/protocol/external/codec.rs +++ b/zebra-network/src/protocol/external/codec.rs @@ -451,7 +451,7 @@ impl Codec { } fn read_block(&self, reader: R) -> Result { - Ok(Message::Block(Box::new(Block::zcash_deserialize(reader)?))) + Ok(Message::Block(Block::zcash_deserialize(reader)?.into())) } fn read_getblocks(&self, mut reader: R) -> Result { @@ -498,7 +498,7 @@ impl Codec { } fn read_tx(&self, rdr: R) -> Result { - Ok(Message::Tx(Box::new(Transaction::zcash_deserialize(rdr)?))) + Ok(Message::Tx(Transaction::zcash_deserialize(rdr)?.into())) } fn read_mempool(&self, mut _reader: R) -> Result { diff --git a/zebra-network/src/protocol/external/message.rs b/zebra-network/src/protocol/external/message.rs index 30740b946..4bed54b51 100644 --- a/zebra-network/src/protocol/external/message.rs +++ b/zebra-network/src/protocol/external/message.rs @@ -1,7 +1,7 @@ //! Definitions of network messages. use std::error::Error; -use std::net; +use std::{net, sync::Arc}; use chrono::{DateTime, Utc}; @@ -132,7 +132,7 @@ pub enum Message { /// A `block` message. /// /// [Bitcoin reference](https://en.bitcoin.it/wiki/Protocol_documentation#block) - Block(Box), + Block(Arc), /// A `getblocks` message. /// diff --git a/zebra-network/src/protocol/internal/response.rs b/zebra-network/src/protocol/internal/response.rs index b7ca82aad..daa7f51dd 100644 --- a/zebra-network/src/protocol/internal/response.rs +++ b/zebra-network/src/protocol/internal/response.rs @@ -2,6 +2,7 @@ use zebra_chain::block::{Block, BlockHeaderHash}; use crate::meta_addr::MetaAddr; +use std::sync::Arc; /// A response to a network request, represented in internal format. #[derive(Clone, Debug)] @@ -13,7 +14,7 @@ pub enum Response { Peers(Vec), /// A list of blocks. - Blocks(Vec), + Blocks(Vec>), /// A list of block hashes. BlockHeaderHashes(Vec), diff --git a/zebrad/src/commands/connect.rs b/zebrad/src/commands/connect.rs index 114e52ed7..79f202f46 100644 --- a/zebrad/src/commands/connect.rs +++ b/zebrad/src/commands/connect.rs @@ -132,7 +132,6 @@ impl ConnectCmd { Some(Ok(zebra_network::Response::Blocks(blocks))) => { for block in blocks { downloaded_block_heights.insert(block.coinbase_height().unwrap()); - let block = block.into(); state .ready_and() .await @@ -153,7 +152,6 @@ impl ConnectCmd { while let Some(Ok(zebra_network::Response::Blocks(blocks))) = block_requests.next().await { for block in blocks { downloaded_block_heights.insert(block.coinbase_height().unwrap()); - let block = block.into(); state .ready_and() .await