Properly handle the Signet network

Closes #62
This commit is contained in:
Alekos Filini 2021-02-05 10:23:17 -05:00
parent 19eca4e2d1
commit fedd92c022
No known key found for this signature in database
GPG Key ID: 431401E4A4530061
5 changed files with 25 additions and 13 deletions

View File

@ -18,6 +18,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Removed the `parse_descriptor` example, since it wasn't demostrating any bdk-specific API anymore. - Removed the `parse_descriptor` example, since it wasn't demostrating any bdk-specific API anymore.
#### Changed #### Changed
- Updated `bitcoin` to `0.26`, `miniscript` to `5.1` and `electrum-client` to `0.6` - Updated `bitcoin` to `0.26`, `miniscript` to `5.1` and `electrum-client` to `0.6`
#### Added
- Added support for the `signet` network (issue #62)
#### Added #### Added
- Added a function to get the version of BDK at runtime - Added a function to get the version of BDK at runtime

View File

@ -75,7 +75,7 @@ fn main() -> Result<(), Box<dyn Error>> {
.help("Sets the network") .help("Sets the network")
.takes_value(true) .takes_value(true)
.default_value("testnet") .default_value("testnet")
.possible_values(&["testnet", "regtest"]), .possible_values(&["testnet", "regtest", "bitcoin", "signet"]),
) )
.get_matches(); .get_matches();
@ -95,10 +95,12 @@ fn main() -> Result<(), Box<dyn Error>> {
let database = MemoryDatabase::new(); let database = MemoryDatabase::new();
let network = match matches.value_of("network") { let network = matches
Some("regtest") => Network::Regtest, .value_of("network")
Some("testnet") | _ => Network::Testnet, .and_then(|n| Some(Network::from_str(n)))
}; .transpose()
.unwrap()
.unwrap_or(Network::Testnet);
let wallet = Wallet::new_offline(&format!("{}", descriptor), None, network, database)?; let wallet = Wallet::new_offline(&format!("{}", descriptor), None, network, database)?;
info!("... First address: {}", wallet.get_new_address()?); info!("... First address: {}", wallet.get_new_address()?);

View File

@ -686,7 +686,7 @@ mod test {
use crate::descriptor::{DescriptorError, DescriptorMeta}; use crate::descriptor::{DescriptorError, DescriptorMeta};
use crate::keys::{DescriptorKey, ToDescriptorKey, ValidNetworks}; use crate::keys::{DescriptorKey, ToDescriptorKey, ValidNetworks};
use bitcoin::network::constants::Network::{Bitcoin, Regtest, Testnet}; use bitcoin::network::constants::Network::{Bitcoin, Regtest, Signet, Testnet};
use bitcoin::util::bip32; use bitcoin::util::bip32;
use bitcoin::PrivateKey; use bitcoin::PrivateKey;
@ -971,7 +971,10 @@ mod test {
let desc_key = (xprv, path.clone()).to_descriptor_key().unwrap(); let desc_key = (xprv, path.clone()).to_descriptor_key().unwrap();
let (_desc, _key_map, valid_networks) = descriptor!(pkh(desc_key)).unwrap(); let (_desc, _key_map, valid_networks) = descriptor!(pkh(desc_key)).unwrap();
assert_eq!(valid_networks, [Testnet, Regtest].iter().cloned().collect()); assert_eq!(
valid_networks,
[Testnet, Regtest, Signet].iter().cloned().collect()
);
let xprv = bip32::ExtendedPrivKey::from_str("xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi").unwrap(); let xprv = bip32::ExtendedPrivKey::from_str("xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi").unwrap();
let path = bip32::DerivationPath::from_str("m/10/20/30/40").unwrap(); let path = bip32::DerivationPath::from_str("m/10/20/30/40").unwrap();

View File

@ -149,7 +149,7 @@ mod test {
let (desc, keys, networks) = crate::descriptor!(wpkh(key)).unwrap(); let (desc, keys, networks) = crate::descriptor!(wpkh(key)).unwrap();
assert_eq!(desc.to_string(), "wpkh([be83839f/44'/0'/0']xpub6DCQ1YcqvZtSwGWMrwHELPehjWV3f2MGZ69yBADTxFEUAoLwb5Mp5GniQK6tTp3AgbngVz9zEFbBJUPVnkG7LFYt8QMTfbrNqs6FNEwAPKA/0/*)#0r8v4nkv"); assert_eq!(desc.to_string(), "wpkh([be83839f/44'/0'/0']xpub6DCQ1YcqvZtSwGWMrwHELPehjWV3f2MGZ69yBADTxFEUAoLwb5Mp5GniQK6tTp3AgbngVz9zEFbBJUPVnkG7LFYt8QMTfbrNqs6FNEwAPKA/0/*)#0r8v4nkv");
assert_eq!(keys.len(), 1); assert_eq!(keys.len(), 1);
assert_eq!(networks.len(), 3); assert_eq!(networks.len(), 4);
} }
#[test] #[test]
@ -163,7 +163,7 @@ mod test {
let (desc, keys, networks) = crate::descriptor!(wpkh(key)).unwrap(); let (desc, keys, networks) = crate::descriptor!(wpkh(key)).unwrap();
assert_eq!(desc.to_string(), "wpkh([8f6cb80c/44'/0'/0']xpub6DWYS8bbihFevy29M4cbw4ZR3P5E12jB8R88gBDWCTCNpYiDHhYWNywrCF9VZQYagzPmsZpxXpytzSoxynyeFr4ZyzheVjnpLKuse4fiwZw/0/*)#h0j0tg5m"); assert_eq!(desc.to_string(), "wpkh([8f6cb80c/44'/0'/0']xpub6DWYS8bbihFevy29M4cbw4ZR3P5E12jB8R88gBDWCTCNpYiDHhYWNywrCF9VZQYagzPmsZpxXpytzSoxynyeFr4ZyzheVjnpLKuse4fiwZw/0/*)#h0j0tg5m");
assert_eq!(keys.len(), 1); assert_eq!(keys.len(), 1);
assert_eq!(networks.len(), 3); assert_eq!(networks.len(), 4);
} }
#[test] #[test]

View File

@ -55,7 +55,12 @@ pub type ValidNetworks = HashSet<Network>;
/// Create a set containing mainnet, testnet and regtest /// Create a set containing mainnet, testnet and regtest
pub fn any_network() -> ValidNetworks { pub fn any_network() -> ValidNetworks {
vec![Network::Bitcoin, Network::Testnet, Network::Regtest] vec![
Network::Bitcoin,
Network::Testnet,
Network::Regtest,
Network::Signet,
]
.into_iter() .into_iter()
.collect() .collect()
} }
@ -65,7 +70,7 @@ pub fn mainnet_network() -> ValidNetworks {
} }
/// Create a set containing testnet and regtest /// Create a set containing testnet and regtest
pub fn test_networks() -> ValidNetworks { pub fn test_networks() -> ValidNetworks {
vec![Network::Testnet, Network::Regtest] vec![Network::Testnet, Network::Regtest, Network::Signet]
.into_iter() .into_iter()
.collect() .collect()
} }