Add Block msg reader and writers, and Tx msg writer

This commit is contained in:
Deirdre Connolly 2019-10-09 21:47:53 -04:00 committed by Deirdre Connolly
parent 8dc9181610
commit 483d6584f9
2 changed files with 24 additions and 6 deletions

View File

@ -9,7 +9,7 @@ use failure::Error;
use tokio::codec::{Decoder, Encoder}; use tokio::codec::{Decoder, Encoder};
use zebra_chain::{ use zebra_chain::{
block::{BlockHeader, BlockHeaderHash}, block::{Block, BlockHeader, BlockHeaderHash},
serialization::{ReadZcashExt, WriteZcashExt, ZcashDeserialize, ZcashSerialize}, serialization::{ReadZcashExt, WriteZcashExt, ZcashDeserialize, ZcashSerialize},
transaction::Transaction, transaction::Transaction,
types::{BlockHeight, Sha256dChecksum}, types::{BlockHeight, Sha256dChecksum},
@ -211,7 +211,11 @@ impl Codec {
hash.zcash_serialize(&mut writer)?; hash.zcash_serialize(&mut writer)?;
} }
} }
Block { ref block } => { Block {
ref version,
ref block,
} => {
writer.write_u32::<LittleEndian>(version.0)?;
block block
.zcash_serialize(&mut writer) .zcash_serialize(&mut writer)
.expect("Blocks must serialize."); .expect("Blocks must serialize.");
@ -246,7 +250,15 @@ impl Codec {
header.zcash_serialize(&mut writer)?; header.zcash_serialize(&mut writer)?;
} }
} }
Tx {
ref version,
ref transaction,
} => {
writer.write_u32::<LittleEndian>(version.0)?;
transaction
.zcash_serialize(&mut writer)
.expect("Transactions must serialize.");
}
_ => bail!("unimplemented message type"), _ => bail!("unimplemented message type"),
} }
Ok(()) Ok(())
@ -427,9 +439,12 @@ impl Codec {
Ok(Message::Verack) Ok(Message::Verack)
} }
fn read_block<R: Read>(&self, mut _reader: R) -> Result<Message, Error> { fn read_block<R: Read>(&self, mut reader: R) -> Result<Message, Error> {
trace!("block"); Ok(Message::Block {
bail!("unimplemented message type") version: Version(reader.read_u32::<LittleEndian>()?),
block: Block::zcash_deserialize(&mut reader)?,
})
} }
fn read_getblocks<R: Read>(&self, mut reader: R) -> Result<Message, Error> { fn read_getblocks<R: Read>(&self, mut reader: R) -> Result<Message, Error> {

View File

@ -138,6 +138,9 @@ pub enum Message {
/// ///
/// [Bitcoin reference](https://en.bitcoin.it/wiki/Protocol_documentation#block) /// [Bitcoin reference](https://en.bitcoin.it/wiki/Protocol_documentation#block)
Block { Block {
/// Transaction data format version (note, this is signed).
version: Version,
/// The block itself. /// The block itself.
block: Block, block: Block,
}, },