diff --git a/CHANGELOG.md b/CHANGELOG.md index 30f5d8b6..3717708a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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. #### Changed - 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 a function to get the version of BDK at runtime diff --git a/examples/compiler.rs b/examples/compiler.rs index eb2e52d5..3b62147c 100644 --- a/examples/compiler.rs +++ b/examples/compiler.rs @@ -75,7 +75,7 @@ fn main() -> Result<(), Box> { .help("Sets the network") .takes_value(true) .default_value("testnet") - .possible_values(&["testnet", "regtest"]), + .possible_values(&["testnet", "regtest", "bitcoin", "signet"]), ) .get_matches(); @@ -95,10 +95,12 @@ fn main() -> Result<(), Box> { let database = MemoryDatabase::new(); - let network = match matches.value_of("network") { - Some("regtest") => Network::Regtest, - Some("testnet") | _ => Network::Testnet, - }; + let network = matches + .value_of("network") + .and_then(|n| Some(Network::from_str(n))) + .transpose() + .unwrap() + .unwrap_or(Network::Testnet); let wallet = Wallet::new_offline(&format!("{}", descriptor), None, network, database)?; info!("... First address: {}", wallet.get_new_address()?); diff --git a/src/descriptor/dsl.rs b/src/descriptor/dsl.rs index 41c4ec56..bc1f7256 100644 --- a/src/descriptor/dsl.rs +++ b/src/descriptor/dsl.rs @@ -686,7 +686,7 @@ mod test { use crate::descriptor::{DescriptorError, DescriptorMeta}; 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::PrivateKey; @@ -971,7 +971,10 @@ mod test { let desc_key = (xprv, path.clone()).to_descriptor_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 path = bip32::DerivationPath::from_str("m/10/20/30/40").unwrap(); diff --git a/src/keys/bip39.rs b/src/keys/bip39.rs index 4f121165..d4f80e33 100644 --- a/src/keys/bip39.rs +++ b/src/keys/bip39.rs @@ -149,7 +149,7 @@ mod test { let (desc, keys, networks) = crate::descriptor!(wpkh(key)).unwrap(); assert_eq!(desc.to_string(), "wpkh([be83839f/44'/0'/0']xpub6DCQ1YcqvZtSwGWMrwHELPehjWV3f2MGZ69yBADTxFEUAoLwb5Mp5GniQK6tTp3AgbngVz9zEFbBJUPVnkG7LFYt8QMTfbrNqs6FNEwAPKA/0/*)#0r8v4nkv"); assert_eq!(keys.len(), 1); - assert_eq!(networks.len(), 3); + assert_eq!(networks.len(), 4); } #[test] @@ -163,7 +163,7 @@ mod test { let (desc, keys, networks) = crate::descriptor!(wpkh(key)).unwrap(); assert_eq!(desc.to_string(), "wpkh([8f6cb80c/44'/0'/0']xpub6DWYS8bbihFevy29M4cbw4ZR3P5E12jB8R88gBDWCTCNpYiDHhYWNywrCF9VZQYagzPmsZpxXpytzSoxynyeFr4ZyzheVjnpLKuse4fiwZw/0/*)#h0j0tg5m"); assert_eq!(keys.len(), 1); - assert_eq!(networks.len(), 3); + assert_eq!(networks.len(), 4); } #[test] diff --git a/src/keys/mod.rs b/src/keys/mod.rs index 8c08d03a..065c008b 100644 --- a/src/keys/mod.rs +++ b/src/keys/mod.rs @@ -55,9 +55,14 @@ pub type ValidNetworks = HashSet; /// Create a set containing mainnet, testnet and regtest pub fn any_network() -> ValidNetworks { - vec![Network::Bitcoin, Network::Testnet, Network::Regtest] - .into_iter() - .collect() + vec![ + Network::Bitcoin, + Network::Testnet, + Network::Regtest, + Network::Signet, + ] + .into_iter() + .collect() } /// Create a set only containing mainnet pub fn mainnet_network() -> ValidNetworks { @@ -65,7 +70,7 @@ pub fn mainnet_network() -> ValidNetworks { } /// Create a set containing testnet and regtest pub fn test_networks() -> ValidNetworks { - vec![Network::Testnet, Network::Regtest] + vec![Network::Testnet, Network::Regtest, Network::Signet] .into_iter() .collect() }