diff --git a/src/blockdata/constants.rs b/src/blockdata/constants.rs index af639f41..7d835fd4 100644 --- a/src/blockdata/constants.rs +++ b/src/blockdata/constants.rs @@ -50,6 +50,15 @@ pub const MIN_TRANSACTION_WEIGHT: u32 = 4 * 60; pub const WITNESS_SCALE_FACTOR: usize = 4; /// The maximum allowed number of signature check operations in a block pub const MAX_BLOCK_SIGOPS_COST: i64 = 80_000; +/// Mainnet (bitcoin) pubkey address prefix. +pub const PUBKEY_ADDRESS_PREFIX_MAIN: u8 = 0; // 0x00 +/// Mainnet (bitcoin) script address prefix. +pub const SCRIPT_ADDRESS_PREFIX_MAIN: u8 = 5; // 0x05 +/// Test (tesnet, signet, regtest) pubkey address prefix. +pub const PUBKEY_ADDRESS_PREFIX_TEST: u8 = 111; // 0x6f +/// Test (tesnet, signet, regtest) script address prefix. +pub const SCRIPT_ADDRESS_PREFIX_TEST: u8 = 196; // 0xc4 + /// In Bitcoind this is insanely described as ~((u256)0 >> 32) pub fn max_target(_: Network) -> Uint256 { diff --git a/src/util/address.rs b/src/util/address.rs index 3bb3b2a2..4c639a64 100644 --- a/src/util/address.rs +++ b/src/util/address.rs @@ -43,6 +43,7 @@ use bech32; use hashes::Hash; use hash_types::{PubkeyHash, WPubkeyHash, ScriptHash, WScriptHash}; use blockdata::script; +use blockdata::constants::{PUBKEY_ADDRESS_PREFIX_MAIN, SCRIPT_ADDRESS_PREFIX_MAIN, PUBKEY_ADDRESS_PREFIX_TEST, SCRIPT_ADDRESS_PREFIX_TEST}; use network::constants::Network; use util::base58; use util::ecdsa; @@ -411,8 +412,8 @@ impl fmt::Display for Address { Payload::PubkeyHash(ref hash) => { let mut prefixed = [0; 21]; prefixed[0] = match self.network { - Network::Bitcoin => 0, - Network::Testnet | Network::Signet | Network::Regtest => 111, + Network::Bitcoin => PUBKEY_ADDRESS_PREFIX_MAIN, + Network::Testnet | Network::Signet | Network::Regtest => PUBKEY_ADDRESS_PREFIX_TEST, }; prefixed[1..].copy_from_slice(&hash[..]); base58::check_encode_slice_to_fmt(fmt, &prefixed[..]) @@ -420,8 +421,8 @@ impl fmt::Display for Address { Payload::ScriptHash(ref hash) => { let mut prefixed = [0; 21]; prefixed[0] = match self.network { - Network::Bitcoin => 5, - Network::Testnet | Network::Signet | Network::Regtest => 196, + Network::Bitcoin => SCRIPT_ADDRESS_PREFIX_MAIN, + Network::Testnet | Network::Signet | Network::Regtest => SCRIPT_ADDRESS_PREFIX_TEST, }; prefixed[1..].copy_from_slice(&hash[..]); base58::check_encode_slice_to_fmt(fmt, &prefixed[..]) @@ -535,19 +536,19 @@ impl FromStr for Address { } let (network, payload) = match data[0] { - 0 => ( + PUBKEY_ADDRESS_PREFIX_MAIN => ( Network::Bitcoin, Payload::PubkeyHash(PubkeyHash::from_slice(&data[1..]).unwrap()), ), - 5 => ( + SCRIPT_ADDRESS_PREFIX_MAIN => ( Network::Bitcoin, Payload::ScriptHash(ScriptHash::from_slice(&data[1..]).unwrap()), ), - 111 => ( + PUBKEY_ADDRESS_PREFIX_TEST => ( Network::Testnet, Payload::PubkeyHash(PubkeyHash::from_slice(&data[1..]).unwrap()), ), - 196 => ( + SCRIPT_ADDRESS_PREFIX_TEST => ( Network::Testnet, Payload::ScriptHash(ScriptHash::from_slice(&data[1..]).unwrap()), ),