From a5f4db7528737081e984ffb2dcf57b43590568b9 Mon Sep 17 00:00:00 2001 From: Deirdre Connolly Date: Thu, 12 Mar 2020 19:34:34 -0400 Subject: [PATCH] Move just the Network enum to -chain, keep everything else in -network --- zebra-chain/src/addresses.rs | 2 +- zebra-chain/src/lib.rs | 10 ++++- zebra-chain/src/network.rs | 31 ------------- zebra-chain/src/types.rs | 11 ----- zebra-network/src/config.rs | 2 +- zebra-network/src/constants.rs | 9 ++++ zebra-network/src/protocol/external/codec.rs | 8 ++-- zebra-network/src/protocol/external/types.rs | 47 ++++++++++++++------ 8 files changed, 58 insertions(+), 62 deletions(-) delete mode 100644 zebra-chain/src/network.rs diff --git a/zebra-chain/src/addresses.rs b/zebra-chain/src/addresses.rs index 4358efb1..65896a21 100644 --- a/zebra-chain/src/addresses.rs +++ b/zebra-chain/src/addresses.rs @@ -11,9 +11,9 @@ use sha2::Sha256; use proptest_derive::Arbitrary; use crate::{ - network::Network, serialization::{SerializationError, ZcashDeserialize, ZcashSerialize}, types::Script, + Network, }; /// A hash of a redeem script, as used in transparent diff --git a/zebra-chain/src/lib.rs b/zebra-chain/src/lib.rs index 9368ce74..81141c2c 100644 --- a/zebra-chain/src/lib.rs +++ b/zebra-chain/src/lib.rs @@ -14,7 +14,6 @@ pub mod addresses; pub mod block; pub mod equihash_solution; pub mod keys; -pub mod network; pub mod note_commitment_tree; pub mod note_encryption; pub mod proofs; @@ -23,3 +22,12 @@ pub mod transaction; pub mod types; pub use redjubjub; + +/// An enum describing the possible network choices. +#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Serialize, Deserialize)] +pub enum Network { + /// The production mainnet. + Mainnet, + /// The testnet. + Testnet, +} diff --git a/zebra-chain/src/network.rs b/zebra-chain/src/network.rs deleted file mode 100644 index fcf7b962..00000000 --- a/zebra-chain/src/network.rs +++ /dev/null @@ -1,31 +0,0 @@ -//! Network-specific types. - -use crate::types::Magic; - -/// An enum describing the possible network choices. -#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Serialize, Deserialize)] -pub enum Network { - /// The production mainnet. - Mainnet, - /// The testnet. - Testnet, -} - -impl Network { - /// Get the magic value associated to this `Network`. - pub fn magic(self) -> Magic { - match self { - Network::Mainnet => magics::MAINNET, - Network::Testnet => magics::TESTNET, - } - } -} - -/// Magic numbers used to identify different Zcash networks. -pub mod magics { - use super::*; - /// The production mainnet. - pub const MAINNET: Magic = Magic([0x24, 0xe9, 0x27, 0x64]); - /// The testnet. - pub const TESTNET: Magic = Magic([0xfa, 0x1a, 0xf9, 0xbf]); -} diff --git a/zebra-chain/src/types.rs b/zebra-chain/src/types.rs index 81e2a5db..6c8217b2 100644 --- a/zebra-chain/src/types.rs +++ b/zebra-chain/src/types.rs @@ -15,17 +15,6 @@ use crate::serialization::{ ReadZcashExt, SerializationError, WriteZcashExt, ZcashDeserialize, ZcashSerialize, }; -/// A magic number identifying the network. -#[derive(Copy, Clone, Eq, PartialEq)] -#[cfg_attr(test, derive(Arbitrary))] -pub struct Magic(pub [u8; 4]); - -impl fmt::Debug for Magic { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - f.debug_tuple("Magic").field(&hex::encode(&self.0)).finish() - } -} - /// A 4-byte checksum using truncated double-SHA256 (two rounds of SHA256). #[derive(Copy, Clone, Eq, PartialEq)] pub struct Sha256dChecksum(pub [u8; 4]); diff --git a/zebra-network/src/config.rs b/zebra-network/src/config.rs index 648ff7d4..a71c21ce 100644 --- a/zebra-network/src/config.rs +++ b/zebra-network/src/config.rs @@ -4,7 +4,7 @@ use std::{ time::Duration, }; -use zebra_chain::network::Network; +use zebra_chain::Network; /// Configuration for networking code. #[derive(Clone, Debug, Deserialize, Serialize)] diff --git a/zebra-network/src/constants.rs b/zebra-network/src/constants.rs index 35aded78..46bc46ec 100644 --- a/zebra-network/src/constants.rs +++ b/zebra-network/src/constants.rs @@ -40,6 +40,15 @@ pub const CURRENT_VERSION: Version = Version(170_009); /// The minimum version supported for peer connections. pub const MIN_VERSION: Version = Version(170_009); +/// Magic numbers used to identify different Zcash networks. +pub mod magics { + use super::*; + /// The production mainnet. + pub const MAINNET: Magic = Magic([0x24, 0xe9, 0x27, 0x64]); + /// The testnet. + pub const TESTNET: Magic = Magic([0xfa, 0x1a, 0xf9, 0xbf]); +} + #[cfg(test)] mod tests { diff --git a/zebra-network/src/protocol/external/codec.rs b/zebra-network/src/protocol/external/codec.rs index 6932e29f..301013db 100644 --- a/zebra-network/src/protocol/external/codec.rs +++ b/zebra-network/src/protocol/external/codec.rs @@ -10,12 +10,12 @@ use tokio_util::codec::{Decoder, Encoder}; use zebra_chain::{ block::{Block, BlockHeaderHash}, - network::Network, serialization::{ ReadZcashExt, SerializationError as Error, WriteZcashExt, ZcashDeserialize, ZcashSerialize, }, transaction::Transaction, - types::{BlockHeight, Magic, Sha256dChecksum}, + types::{BlockHeight, Sha256dChecksum}, + Network, }; use crate::constants; @@ -136,7 +136,7 @@ impl Encoder for Codec { // but leave it for now until we fix the issue above. let mut header = [0u8; HEADER_LEN]; let mut header_writer = Cursor::new(&mut header[..]); - header_writer.write_all(&self.builder.network.magic().0)?; + header_writer.write_all(&Magic::from(self.builder.network).0[..])?; header_writer.write_all(command)?; header_writer.write_u32::(body.len() as u32)?; header_writer.write_all(&Sha256dChecksum::from(&body[..]).0)?; @@ -309,7 +309,7 @@ impl Decoder for Codec { "read header from src buffer" ); - if magic != self.builder.network.magic() { + if magic != Magic::from(self.builder.network) { return Err(Parse("supplied magic did not meet expectations")); } if body_len >= self.builder.max_len { diff --git a/zebra-network/src/protocol/external/types.rs b/zebra-network/src/protocol/external/types.rs index d2ac00bc..b798ea46 100644 --- a/zebra-network/src/protocol/external/types.rs +++ b/zebra-network/src/protocol/external/types.rs @@ -3,6 +3,31 @@ use std::fmt; #[cfg(test)] use proptest_derive::Arbitrary; +use zebra_chain::Network; + +use crate::constants::magics; + +/// A magic number identifying the network. +#[derive(Copy, Clone, Eq, PartialEq)] +#[cfg_attr(test, derive(Arbitrary))] +pub struct Magic(pub [u8; 4]); + +impl fmt::Debug for Magic { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.debug_tuple("Magic").field(&hex::encode(&self.0)).finish() + } +} + +impl From for Magic { + /// Get the magic value associated to this `Network`. + fn from(network: Network) -> Self { + match network { + Network::Mainnet => magics::MAINNET, + Network::Testnet => magics::TESTNET, + } + } +} + /// A protocol version number. #[derive(Copy, Clone, Debug, Eq, PartialEq)] pub struct Version(pub u32); @@ -48,18 +73,6 @@ impl Default for Tweak { #[derive(Clone, Debug, Eq, PartialEq)] pub struct Filter(pub Vec); -#[cfg(test)] -mod tests { - - use zebra_chain::network::magics; - - #[test] - fn magic_debug() { - assert_eq!(format!("{:?}", magics::MAINNET), "Magic(\"24e92764\")"); - assert_eq!(format!("{:?}", magics::TESTNET), "Magic(\"fa1af9bf\")"); - } -} - #[cfg(test)] mod proptest { @@ -67,7 +80,15 @@ mod proptest { use proptest::prelude::*; - use zebra_chain::types::Magic; + use super::Magic; + + use crate::constants::magics; + + #[test] + fn magic_debug() { + assert_eq!(format!("{:?}", magics::MAINNET), "Magic(\"24e92764\")"); + assert_eq!(format!("{:?}", magics::TESTNET), "Magic(\"fa1af9bf\")"); + } proptest! {