diff --git a/.gitignore b/.gitignore index bbf0f99bd..c28ab2560 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ .firebase/ # Emacs detritus *~ +# Vscode detrius +.vscode/ diff --git a/zebra-chain/src/block.rs b/zebra-chain/src/block.rs index 4a70f1d2c..107e535aa 100644 --- a/zebra-chain/src/block.rs +++ b/zebra-chain/src/block.rs @@ -6,7 +6,7 @@ mod tests; use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; use chrono::{DateTime, TimeZone, Utc}; -use std::{fmt, io}; +use std::{fmt, io, sync::Arc}; #[cfg(test)] use proptest_derive::Arbitrary; @@ -205,7 +205,7 @@ pub struct Block { /// The block header, containing block metadata. pub header: BlockHeader, /// The block transactions. - pub transactions: Vec, + pub transactions: Vec>, } impl Block { diff --git a/zebra-chain/src/transaction/serialize.rs b/zebra-chain/src/transaction/serialize.rs index 88f25b041..7e40b6fa3 100644 --- a/zebra-chain/src/transaction/serialize.rs +++ b/zebra-chain/src/transaction/serialize.rs @@ -2,7 +2,10 @@ //! transaction types, so that all of the serialization logic is in one place. use byteorder::{LittleEndian, ReadBytesExt, WriteBytesExt}; -use std::io::{self, Read}; +use std::{ + io::{self, Read}, + sync::Arc, +}; use crate::notes; use crate::proofs::ZkSnarkProof; @@ -564,3 +567,21 @@ impl ZcashDeserialize for Transaction { } } } + +impl ZcashDeserialize for Arc +where + T: ZcashDeserialize, +{ + fn zcash_deserialize(reader: R) -> Result { + Ok(Arc::new(T::zcash_deserialize(reader)?)) + } +} + +impl ZcashSerialize for Arc +where + T: ZcashSerialize, +{ + fn zcash_serialize(&self, writer: W) -> Result<(), io::Error> { + T::zcash_serialize(self, writer) + } +} diff --git a/zebra-network/src/protocol/external/message.rs b/zebra-network/src/protocol/external/message.rs index 4bed54b51..4f6f04e1e 100644 --- a/zebra-network/src/protocol/external/message.rs +++ b/zebra-network/src/protocol/external/message.rs @@ -236,7 +236,7 @@ pub enum Message { /// A `tx` message. /// /// [Bitcoin reference](https://en.bitcoin.it/wiki/Protocol_documentation#tx) - Tx(Box), + Tx(Arc), /// A `mempool` message. ///