Move just the Network enum to -chain, keep everything else in -network
This commit is contained in:
parent
380d622b37
commit
a5f4db7528
|
|
@ -11,9 +11,9 @@ use sha2::Sha256;
|
||||||
use proptest_derive::Arbitrary;
|
use proptest_derive::Arbitrary;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
network::Network,
|
|
||||||
serialization::{SerializationError, ZcashDeserialize, ZcashSerialize},
|
serialization::{SerializationError, ZcashDeserialize, ZcashSerialize},
|
||||||
types::Script,
|
types::Script,
|
||||||
|
Network,
|
||||||
};
|
};
|
||||||
|
|
||||||
/// A hash of a redeem script, as used in transparent
|
/// A hash of a redeem script, as used in transparent
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,6 @@ pub mod addresses;
|
||||||
pub mod block;
|
pub mod block;
|
||||||
pub mod equihash_solution;
|
pub mod equihash_solution;
|
||||||
pub mod keys;
|
pub mod keys;
|
||||||
pub mod network;
|
|
||||||
pub mod note_commitment_tree;
|
pub mod note_commitment_tree;
|
||||||
pub mod note_encryption;
|
pub mod note_encryption;
|
||||||
pub mod proofs;
|
pub mod proofs;
|
||||||
|
|
@ -23,3 +22,12 @@ pub mod transaction;
|
||||||
pub mod types;
|
pub mod types;
|
||||||
|
|
||||||
pub use redjubjub;
|
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,
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -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]);
|
|
||||||
}
|
|
||||||
|
|
@ -15,17 +15,6 @@ use crate::serialization::{
|
||||||
ReadZcashExt, SerializationError, WriteZcashExt, ZcashDeserialize, ZcashSerialize,
|
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).
|
/// A 4-byte checksum using truncated double-SHA256 (two rounds of SHA256).
|
||||||
#[derive(Copy, Clone, Eq, PartialEq)]
|
#[derive(Copy, Clone, Eq, PartialEq)]
|
||||||
pub struct Sha256dChecksum(pub [u8; 4]);
|
pub struct Sha256dChecksum(pub [u8; 4]);
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ use std::{
|
||||||
time::Duration,
|
time::Duration,
|
||||||
};
|
};
|
||||||
|
|
||||||
use zebra_chain::network::Network;
|
use zebra_chain::Network;
|
||||||
|
|
||||||
/// Configuration for networking code.
|
/// Configuration for networking code.
|
||||||
#[derive(Clone, Debug, Deserialize, Serialize)]
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,15 @@ pub const CURRENT_VERSION: Version = Version(170_009);
|
||||||
/// The minimum version supported for peer connections.
|
/// The minimum version supported for peer connections.
|
||||||
pub const MIN_VERSION: Version = Version(170_009);
|
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)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,12 +10,12 @@ use tokio_util::codec::{Decoder, Encoder};
|
||||||
|
|
||||||
use zebra_chain::{
|
use zebra_chain::{
|
||||||
block::{Block, BlockHeaderHash},
|
block::{Block, BlockHeaderHash},
|
||||||
network::Network,
|
|
||||||
serialization::{
|
serialization::{
|
||||||
ReadZcashExt, SerializationError as Error, WriteZcashExt, ZcashDeserialize, ZcashSerialize,
|
ReadZcashExt, SerializationError as Error, WriteZcashExt, ZcashDeserialize, ZcashSerialize,
|
||||||
},
|
},
|
||||||
transaction::Transaction,
|
transaction::Transaction,
|
||||||
types::{BlockHeight, Magic, Sha256dChecksum},
|
types::{BlockHeight, Sha256dChecksum},
|
||||||
|
Network,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::constants;
|
use crate::constants;
|
||||||
|
|
@ -136,7 +136,7 @@ impl Encoder for Codec {
|
||||||
// but leave it for now until we fix the issue above.
|
// but leave it for now until we fix the issue above.
|
||||||
let mut header = [0u8; HEADER_LEN];
|
let mut header = [0u8; HEADER_LEN];
|
||||||
let mut header_writer = Cursor::new(&mut header[..]);
|
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_all(command)?;
|
||||||
header_writer.write_u32::<LittleEndian>(body.len() as u32)?;
|
header_writer.write_u32::<LittleEndian>(body.len() as u32)?;
|
||||||
header_writer.write_all(&Sha256dChecksum::from(&body[..]).0)?;
|
header_writer.write_all(&Sha256dChecksum::from(&body[..]).0)?;
|
||||||
|
|
@ -309,7 +309,7 @@ impl Decoder for Codec {
|
||||||
"read header from src buffer"
|
"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"));
|
return Err(Parse("supplied magic did not meet expectations"));
|
||||||
}
|
}
|
||||||
if body_len >= self.builder.max_len {
|
if body_len >= self.builder.max_len {
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,31 @@ use std::fmt;
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
use proptest_derive::Arbitrary;
|
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<Network> 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.
|
/// A protocol version number.
|
||||||
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
|
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
|
||||||
pub struct Version(pub u32);
|
pub struct Version(pub u32);
|
||||||
|
|
@ -48,18 +73,6 @@ impl Default for Tweak {
|
||||||
#[derive(Clone, Debug, Eq, PartialEq)]
|
#[derive(Clone, Debug, Eq, PartialEq)]
|
||||||
pub struct Filter(pub Vec<u8>);
|
pub struct Filter(pub Vec<u8>);
|
||||||
|
|
||||||
#[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)]
|
#[cfg(test)]
|
||||||
mod proptest {
|
mod proptest {
|
||||||
|
|
||||||
|
|
@ -67,7 +80,15 @@ mod proptest {
|
||||||
|
|
||||||
use proptest::prelude::*;
|
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! {
|
proptest! {
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue