diff --git a/zebra-chain/src/addresses/transparent.rs b/zebra-chain/src/addresses/transparent.rs index 64f1d51a..85458622 100644 --- a/zebra-chain/src/addresses/transparent.rs +++ b/zebra-chain/src/addresses/transparent.rs @@ -16,6 +16,20 @@ use crate::{ Network, }; +/// Magic numbers used to identify what networks Transparent Addresses +/// are associated with. +mod magics { + pub mod p2sh { + pub const MAINNET: [u8; 2] = [0x1C, 0xBD]; + pub const TESTNET: [u8; 2] = [0x1C, 0xBA]; + } + + pub mod p2pkh { + pub const MAINNET: [u8; 2] = [0x1C, 0xB8]; + pub const TESTNET: [u8; 2] = [0x1D, 0x25]; + } +} + /// Transparent Zcash Addresses /// /// In Bitcoin a single byte is used for the version field identifying @@ -102,9 +116,9 @@ impl ZcashSerialize for TransparentAddress { // Dev network doesn't have a recommendation so we // default to testnet bytes if it's not mainnet. if *network == Network::Mainnet { - writer.write_all(&[0x1C, 0xBD][..])? + writer.write_all(&magics::p2sh::MAINNET[..])? } else { - writer.write_all(&[0x1C, 0xBA][..])? + writer.write_all(&magics::p2sh::TESTNET[..])? } writer.write_all(script_hash)? } @@ -115,9 +129,9 @@ impl ZcashSerialize for TransparentAddress { // Dev network doesn't have a recommendation so we // default to testnet bytes if it's not mainnet. if *network == Network::Mainnet { - writer.write_all(&[0x1C, 0xB8][..])? + writer.write_all(&magics::p2pkh::MAINNET[..])? } else { - writer.write_all(&[0x1D, 0x25][..])? + writer.write_all(&magics::p2pkh::TESTNET[..])? } writer.write_all(pub_key_hash)? } @@ -136,19 +150,19 @@ impl ZcashDeserialize for TransparentAddress { reader.read_exact(&mut hash_bytes)?; match version_bytes { - [0x1c, 0xbd] => Ok(TransparentAddress::PayToScriptHash { + magics::p2sh::MAINNET => Ok(TransparentAddress::PayToScriptHash { network: Network::Mainnet, script_hash: hash_bytes, }), - [0x1c, 0xba] => Ok(TransparentAddress::PayToScriptHash { + magics::p2sh::TESTNET => Ok(TransparentAddress::PayToScriptHash { network: Network::Testnet, script_hash: hash_bytes, }), - [0x1c, 0xb8] => Ok(TransparentAddress::PayToPublicKeyHash { + magics::p2pkh::MAINNET => Ok(TransparentAddress::PayToPublicKeyHash { network: Network::Mainnet, pub_key_hash: hash_bytes, }), - [0x1d, 0x25] => Ok(TransparentAddress::PayToPublicKeyHash { + magics::p2pkh::TESTNET => Ok(TransparentAddress::PayToPublicKeyHash { network: Network::Testnet, pub_key_hash: hash_bytes, }),