Wrap Blocks in Arc throughout codebase
This commit is contained in:
parent
18b4dbc16c
commit
9bcda0f9c7
|
@ -33,7 +33,7 @@ pub(super) enum Handler {
|
||||||
GetPeers,
|
GetPeers,
|
||||||
GetBlocksByHash {
|
GetBlocksByHash {
|
||||||
hashes: HashSet<BlockHeaderHash>,
|
hashes: HashSet<BlockHeaderHash>,
|
||||||
blocks: Vec<Block>,
|
blocks: Vec<Arc<Block>>,
|
||||||
},
|
},
|
||||||
FindBlocks,
|
FindBlocks,
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,7 @@ impl Handler {
|
||||||
Message::Block(block),
|
Message::Block(block),
|
||||||
) => {
|
) => {
|
||||||
if hashes.remove(&BlockHeaderHash::from(block.as_ref())) {
|
if hashes.remove(&BlockHeaderHash::from(block.as_ref())) {
|
||||||
blocks.push(*block);
|
blocks.push(block);
|
||||||
if hashes.is_empty() {
|
if hashes.is_empty() {
|
||||||
Finished(Ok(Response::Blocks(blocks)))
|
Finished(Ok(Response::Blocks(blocks)))
|
||||||
} else {
|
} else {
|
||||||
|
@ -435,7 +435,7 @@ where
|
||||||
Response::Blocks(blocks) => {
|
Response::Blocks(blocks) => {
|
||||||
// Generate one block message per block.
|
// Generate one block message per block.
|
||||||
for block in blocks.into_iter() {
|
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());
|
self.fail_with(e.into());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -451,7 +451,7 @@ impl Codec {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn read_block<R: Read>(&self, reader: R) -> Result<Message, Error> {
|
fn read_block<R: Read>(&self, reader: R) -> Result<Message, Error> {
|
||||||
Ok(Message::Block(Box::new(Block::zcash_deserialize(reader)?)))
|
Ok(Message::Block(Block::zcash_deserialize(reader)?.into()))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn read_getblocks<R: Read>(&self, mut reader: R) -> Result<Message, Error> {
|
fn read_getblocks<R: Read>(&self, mut reader: R) -> Result<Message, Error> {
|
||||||
|
@ -498,7 +498,7 @@ impl Codec {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn read_tx<R: Read>(&self, rdr: R) -> Result<Message, Error> {
|
fn read_tx<R: Read>(&self, rdr: R) -> Result<Message, Error> {
|
||||||
Ok(Message::Tx(Box::new(Transaction::zcash_deserialize(rdr)?)))
|
Ok(Message::Tx(Transaction::zcash_deserialize(rdr)?.into()))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn read_mempool<R: Read>(&self, mut _reader: R) -> Result<Message, Error> {
|
fn read_mempool<R: Read>(&self, mut _reader: R) -> Result<Message, Error> {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
//! Definitions of network messages.
|
//! Definitions of network messages.
|
||||||
|
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
use std::net;
|
use std::{net, sync::Arc};
|
||||||
|
|
||||||
use chrono::{DateTime, Utc};
|
use chrono::{DateTime, Utc};
|
||||||
|
|
||||||
|
@ -132,7 +132,7 @@ pub enum Message {
|
||||||
/// A `block` message.
|
/// A `block` message.
|
||||||
///
|
///
|
||||||
/// [Bitcoin reference](https://en.bitcoin.it/wiki/Protocol_documentation#block)
|
/// [Bitcoin reference](https://en.bitcoin.it/wiki/Protocol_documentation#block)
|
||||||
Block(Box<Block>),
|
Block(Arc<Block>),
|
||||||
|
|
||||||
/// A `getblocks` message.
|
/// A `getblocks` message.
|
||||||
///
|
///
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
use zebra_chain::block::{Block, BlockHeaderHash};
|
use zebra_chain::block::{Block, BlockHeaderHash};
|
||||||
|
|
||||||
use crate::meta_addr::MetaAddr;
|
use crate::meta_addr::MetaAddr;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
/// A response to a network request, represented in internal format.
|
/// A response to a network request, represented in internal format.
|
||||||
#[derive(Clone, Debug)]
|
#[derive(Clone, Debug)]
|
||||||
|
@ -13,7 +14,7 @@ pub enum Response {
|
||||||
Peers(Vec<MetaAddr>),
|
Peers(Vec<MetaAddr>),
|
||||||
|
|
||||||
/// A list of blocks.
|
/// A list of blocks.
|
||||||
Blocks(Vec<Block>),
|
Blocks(Vec<Arc<Block>>),
|
||||||
|
|
||||||
/// A list of block hashes.
|
/// A list of block hashes.
|
||||||
BlockHeaderHashes(Vec<BlockHeaderHash>),
|
BlockHeaderHashes(Vec<BlockHeaderHash>),
|
||||||
|
|
|
@ -132,7 +132,6 @@ impl ConnectCmd {
|
||||||
Some(Ok(zebra_network::Response::Blocks(blocks))) => {
|
Some(Ok(zebra_network::Response::Blocks(blocks))) => {
|
||||||
for block in blocks {
|
for block in blocks {
|
||||||
downloaded_block_heights.insert(block.coinbase_height().unwrap());
|
downloaded_block_heights.insert(block.coinbase_height().unwrap());
|
||||||
let block = block.into();
|
|
||||||
state
|
state
|
||||||
.ready_and()
|
.ready_and()
|
||||||
.await
|
.await
|
||||||
|
@ -153,7 +152,6 @@ impl ConnectCmd {
|
||||||
while let Some(Ok(zebra_network::Response::Blocks(blocks))) = block_requests.next().await {
|
while let Some(Ok(zebra_network::Response::Blocks(blocks))) = block_requests.next().await {
|
||||||
for block in blocks {
|
for block in blocks {
|
||||||
downloaded_block_heights.insert(block.coinbase_height().unwrap());
|
downloaded_block_heights.insert(block.coinbase_height().unwrap());
|
||||||
let block = block.into();
|
|
||||||
state
|
state
|
||||||
.ready_and()
|
.ready_and()
|
||||||
.await
|
.await
|
||||||
|
|
Loading…
Reference in New Issue