From bc5cb3bc31137c2f58553c0c9804661a39f2b58c Mon Sep 17 00:00:00 2001 From: Andrew Poelstra Date: Sat, 16 Jun 2018 22:54:32 +0000 Subject: [PATCH 1/3] Revert "Added regtest" This reverts commit 34e228c6993aa0e4494753b32cfbea836f1da1e6. --- src/blockdata/constants.rs | 14 -------------- src/network/constants.rs | 10 ++-------- src/util/address.rs | 8 ++++---- src/util/bip32.rs | 4 ++-- src/util/privkey.rs | 2 +- 5 files changed, 9 insertions(+), 29 deletions(-) diff --git a/src/blockdata/constants.rs b/src/blockdata/constants.rs index f08a9c0..468211f 100644 --- a/src/blockdata/constants.rs +++ b/src/blockdata/constants.rs @@ -121,20 +121,6 @@ pub fn genesis_block(network: Network) -> Block { txdata: txdata } } - Network::Regtest => { - let txdata = vec![bitcoin_genesis_tx()]; - Block { - header: BlockHeader { - version: 1, - prev_blockhash: Default::default(), - merkle_root: txdata.merkle_root(), - time: 1296688602, - bits: 0x207fffff, - nonce: 2 - }, - txdata: txdata - } - } } } diff --git a/src/network/constants.rs b/src/network/constants.rs index bdd6fac..6c10515 100644 --- a/src/network/constants.rs +++ b/src/network/constants.rs @@ -28,9 +28,7 @@ user_enum! { #[doc="Classic Bitcoin"] Bitcoin <-> "bitcoin", #[doc="Bitcoin's testnet"] - Testnet <-> "testnet", - #[doc="Bitcoin's regtest"] - Regtest <-> "regtest" + Testnet <-> "testnet" } } @@ -46,8 +44,7 @@ pub const USER_AGENT: &'static str = "bitcoin-rust v0.1"; pub fn magic(network: Network) -> u32 { match network { Network::Bitcoin => 0xD9B4BEF9, - Network::Testnet => 0x0709110B, - Network::Regtest => 0xDAB5BFFA, + Network::Testnet => 0x0709110B // Note: any new entries here must be added to `consensus_decode` below } } @@ -66,7 +63,6 @@ impl ConsensusDecodable for Network { match magic { 0xD9B4BEF9 => Ok(Network::Bitcoin), 0x0709110B => Ok(Network::Testnet), - 0xDAB5BFFA => Ok(Network::Regtest), x => Err(d.error(format!("Unknown network (magic {:x})", x))) } } @@ -81,11 +77,9 @@ mod tests { fn serialize_test() { assert_eq!(serialize(&Network::Bitcoin).unwrap(), vec![0xf9, 0xbe, 0xb4, 0xd9]); assert_eq!(serialize(&Network::Testnet).unwrap(), vec![0x0b, 0x11, 0x09, 0x07]); - assert_eq!(serialize(&Network::Regtest).unwrap(), vec![0xfa, 0xbf, 0xb5, 0xda]); assert_eq!(deserialize(&[0xf9, 0xbe, 0xb4, 0xd9]).ok(), Some(Network::Bitcoin)); assert_eq!(deserialize(&[0x0b, 0x11, 0x09, 0x07]).ok(), Some(Network::Testnet)); - assert_eq!(deserialize(&[0xfa, 0xbf, 0xb5, 0xda]).ok(), Some(Network::Regtest)); let bad: Result = deserialize("fakenet".as_bytes()); assert!(bad.is_err()); diff --git a/src/util/address.rs b/src/util/address.rs index a61b329..80d9660 100644 --- a/src/util/address.rs +++ b/src/util/address.rs @@ -162,7 +162,7 @@ impl Address { fn bech_network (network: Network) -> bitcoin_bech32::constants::Network { match network { Network::Bitcoin => bitcoin_bech32::constants::Network::Bitcoin, - Network::Testnet | Network::Regtest => bitcoin_bech32::constants::Network::Testnet, + Network::Testnet => bitcoin_bech32::constants::Network::Testnet } } @@ -206,7 +206,7 @@ impl ToString for Address { let mut prefixed = [0; 21]; prefixed[0] = match self.network { Network::Bitcoin => 0, - Network::Testnet | Network::Regtest => 111, + Network::Testnet => 111, }; prefixed[1..].copy_from_slice(&hash[..]); base58::check_encode_slice(&prefixed[..]) @@ -215,7 +215,7 @@ impl ToString for Address { let mut prefixed = [0; 21]; prefixed[0] = match self.network { Network::Bitcoin => 0, - Network::Testnet | Network::Regtest => 111, + Network::Testnet => 111, }; prefixed[1..].copy_from_slice(&hash[..]); base58::check_encode_slice(&prefixed[..]) @@ -224,7 +224,7 @@ impl ToString for Address { let mut prefixed = [0; 21]; prefixed[0] = match self.network { Network::Bitcoin => 5, - Network::Testnet | Network::Regtest => 196, + Network::Testnet => 196, }; prefixed[1..].copy_from_slice(&hash[..]); base58::check_encode_slice(&prefixed[..]) diff --git a/src/util/bip32.rs b/src/util/bip32.rs index bc83a0a..ff785dc 100644 --- a/src/util/bip32.rs +++ b/src/util/bip32.rs @@ -344,7 +344,7 @@ impl ToString for ExtendedPrivKey { let mut ret = [0; 78]; ret[0..4].copy_from_slice(&match self.network { Network::Bitcoin => [0x04, 0x88, 0xAD, 0xE4], - Network::Testnet | Network::Regtest => [0x04, 0x35, 0x83, 0x94], + Network::Testnet => [0x04, 0x35, 0x83, 0x94], }[..]); ret[4] = self.depth as u8; ret[5..9].copy_from_slice(&self.parent_fingerprint[..]); @@ -402,7 +402,7 @@ impl ToString for ExtendedPubKey { let mut ret = [0; 78]; ret[0..4].copy_from_slice(&match self.network { Network::Bitcoin => [0x04u8, 0x88, 0xB2, 0x1E], - Network::Testnet | Network::Regtest => [0x04u8, 0x35, 0x87, 0xCF], + Network::Testnet => [0x04u8, 0x35, 0x87, 0xCF], }[..]); ret[4] = self.depth as u8; ret[5..9].copy_from_slice(&self.parent_fingerprint[..]); diff --git a/src/util/privkey.rs b/src/util/privkey.rs index 7ffb8f5..fd2c46f 100644 --- a/src/util/privkey.rs +++ b/src/util/privkey.rs @@ -96,7 +96,7 @@ impl ToString for Privkey { let mut ret = [0; 34]; ret[0] = match self.network { Network::Bitcoin => 128, - Network::Testnet | Network::Regtest => 239, + Network::Testnet => 239 }; ret[1..33].copy_from_slice(&self.key[..]); if self.compressed { From 5c753fb517acc18a924f6c86ec53a70a62175cd9 Mon Sep 17 00:00:00 2001 From: Andrew Poelstra Date: Sat, 16 Jun 2018 22:55:27 +0000 Subject: [PATCH 2/3] Bump version to 0.13.2 --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index dae9893..150affa 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "bitcoin" -version = "0.13.1" +version = "0.13.2" authors = ["Andrew Poelstra "] license = "CC0-1.0" homepage = "https://github.com/rust-bitcoin/rust-bitcoin/" From 7988b78c1f39507d43ff8ac81fce453ebeaf0abd Mon Sep 17 00:00:00 2001 From: Igor Aleksanov Date: Thu, 17 May 2018 16:08:02 +0300 Subject: [PATCH 3/3] Added regtest Completed regtest integration to the code Added tests for regtest Get rid of panics --- src/blockdata/constants.rs | 14 ++++++++++++++ src/network/constants.rs | 10 ++++++++-- src/util/address.rs | 8 ++++---- src/util/bip32.rs | 4 ++-- src/util/privkey.rs | 2 +- 5 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/blockdata/constants.rs b/src/blockdata/constants.rs index 468211f..f08a9c0 100644 --- a/src/blockdata/constants.rs +++ b/src/blockdata/constants.rs @@ -121,6 +121,20 @@ pub fn genesis_block(network: Network) -> Block { txdata: txdata } } + Network::Regtest => { + let txdata = vec![bitcoin_genesis_tx()]; + Block { + header: BlockHeader { + version: 1, + prev_blockhash: Default::default(), + merkle_root: txdata.merkle_root(), + time: 1296688602, + bits: 0x207fffff, + nonce: 2 + }, + txdata: txdata + } + } } } diff --git a/src/network/constants.rs b/src/network/constants.rs index 6c10515..bdd6fac 100644 --- a/src/network/constants.rs +++ b/src/network/constants.rs @@ -28,7 +28,9 @@ user_enum! { #[doc="Classic Bitcoin"] Bitcoin <-> "bitcoin", #[doc="Bitcoin's testnet"] - Testnet <-> "testnet" + Testnet <-> "testnet", + #[doc="Bitcoin's regtest"] + Regtest <-> "regtest" } } @@ -44,7 +46,8 @@ pub const USER_AGENT: &'static str = "bitcoin-rust v0.1"; pub fn magic(network: Network) -> u32 { match network { Network::Bitcoin => 0xD9B4BEF9, - Network::Testnet => 0x0709110B + Network::Testnet => 0x0709110B, + Network::Regtest => 0xDAB5BFFA, // Note: any new entries here must be added to `consensus_decode` below } } @@ -63,6 +66,7 @@ impl ConsensusDecodable for Network { match magic { 0xD9B4BEF9 => Ok(Network::Bitcoin), 0x0709110B => Ok(Network::Testnet), + 0xDAB5BFFA => Ok(Network::Regtest), x => Err(d.error(format!("Unknown network (magic {:x})", x))) } } @@ -77,9 +81,11 @@ mod tests { fn serialize_test() { assert_eq!(serialize(&Network::Bitcoin).unwrap(), vec![0xf9, 0xbe, 0xb4, 0xd9]); assert_eq!(serialize(&Network::Testnet).unwrap(), vec![0x0b, 0x11, 0x09, 0x07]); + assert_eq!(serialize(&Network::Regtest).unwrap(), vec![0xfa, 0xbf, 0xb5, 0xda]); assert_eq!(deserialize(&[0xf9, 0xbe, 0xb4, 0xd9]).ok(), Some(Network::Bitcoin)); assert_eq!(deserialize(&[0x0b, 0x11, 0x09, 0x07]).ok(), Some(Network::Testnet)); + assert_eq!(deserialize(&[0xfa, 0xbf, 0xb5, 0xda]).ok(), Some(Network::Regtest)); let bad: Result = deserialize("fakenet".as_bytes()); assert!(bad.is_err()); diff --git a/src/util/address.rs b/src/util/address.rs index 80d9660..a61b329 100644 --- a/src/util/address.rs +++ b/src/util/address.rs @@ -162,7 +162,7 @@ impl Address { fn bech_network (network: Network) -> bitcoin_bech32::constants::Network { match network { Network::Bitcoin => bitcoin_bech32::constants::Network::Bitcoin, - Network::Testnet => bitcoin_bech32::constants::Network::Testnet + Network::Testnet | Network::Regtest => bitcoin_bech32::constants::Network::Testnet, } } @@ -206,7 +206,7 @@ impl ToString for Address { let mut prefixed = [0; 21]; prefixed[0] = match self.network { Network::Bitcoin => 0, - Network::Testnet => 111, + Network::Testnet | Network::Regtest => 111, }; prefixed[1..].copy_from_slice(&hash[..]); base58::check_encode_slice(&prefixed[..]) @@ -215,7 +215,7 @@ impl ToString for Address { let mut prefixed = [0; 21]; prefixed[0] = match self.network { Network::Bitcoin => 0, - Network::Testnet => 111, + Network::Testnet | Network::Regtest => 111, }; prefixed[1..].copy_from_slice(&hash[..]); base58::check_encode_slice(&prefixed[..]) @@ -224,7 +224,7 @@ impl ToString for Address { let mut prefixed = [0; 21]; prefixed[0] = match self.network { Network::Bitcoin => 5, - Network::Testnet => 196, + Network::Testnet | Network::Regtest => 196, }; prefixed[1..].copy_from_slice(&hash[..]); base58::check_encode_slice(&prefixed[..]) diff --git a/src/util/bip32.rs b/src/util/bip32.rs index ff785dc..bc83a0a 100644 --- a/src/util/bip32.rs +++ b/src/util/bip32.rs @@ -344,7 +344,7 @@ impl ToString for ExtendedPrivKey { let mut ret = [0; 78]; ret[0..4].copy_from_slice(&match self.network { Network::Bitcoin => [0x04, 0x88, 0xAD, 0xE4], - Network::Testnet => [0x04, 0x35, 0x83, 0x94], + Network::Testnet | Network::Regtest => [0x04, 0x35, 0x83, 0x94], }[..]); ret[4] = self.depth as u8; ret[5..9].copy_from_slice(&self.parent_fingerprint[..]); @@ -402,7 +402,7 @@ impl ToString for ExtendedPubKey { let mut ret = [0; 78]; ret[0..4].copy_from_slice(&match self.network { Network::Bitcoin => [0x04u8, 0x88, 0xB2, 0x1E], - Network::Testnet => [0x04u8, 0x35, 0x87, 0xCF], + Network::Testnet | Network::Regtest => [0x04u8, 0x35, 0x87, 0xCF], }[..]); ret[4] = self.depth as u8; ret[5..9].copy_from_slice(&self.parent_fingerprint[..]); diff --git a/src/util/privkey.rs b/src/util/privkey.rs index fd2c46f..7ffb8f5 100644 --- a/src/util/privkey.rs +++ b/src/util/privkey.rs @@ -96,7 +96,7 @@ impl ToString for Privkey { let mut ret = [0; 34]; ret[0] = match self.network { Network::Bitcoin => 128, - Network::Testnet => 239 + Network::Testnet | Network::Regtest => 239, }; ret[1..33].copy_from_slice(&self.key[..]); if self.compressed {