|
6 | 6 | #![allow(unused_imports)] // Some imports are only used in specific versions. |
7 | 7 |
|
8 | 8 | use bitcoin::address::{Address, KnownHrp, NetworkChecked}; |
| 9 | +use bitcoin::bip32::{Xpriv, Xpub}; |
9 | 10 | use bitcoin::{secp256k1, Amount, CompressedPublicKey, FeeRate, Network, PrivateKey, PublicKey}; |
10 | 11 | use integration_test::{Node, NodeExt as _, Wallet}; |
11 | 12 | use node::{mtype, AddressType, ImportMultiRequest, ImportMultiScriptPubKey, ImportMultiTimestamp}; |
@@ -118,6 +119,40 @@ fn wallet__create_wallet__modelled() { |
118 | 119 | let _ = Node::with_wallet(Wallet::Default, &[]); |
119 | 120 | } |
120 | 121 |
|
| 122 | +#[test] |
| 123 | +#[cfg(not(feature = "v27_and_below"))] |
| 124 | +fn wallet__create_wallet_descriptor() { |
| 125 | + let node = Node::with_wallet(Wallet::Default, &[]); |
| 126 | + |
| 127 | + // BIP32 HD xprv/xpub for the creation of a descriptor with a private key that is in the wallet. |
| 128 | + let secp = secp256k1::Secp256k1::new(); |
| 129 | + let seed = [0u8; 32]; |
| 130 | + let xprv = Xpriv::new_master(Network::Regtest, &seed).unwrap(); |
| 131 | + let xpub = Xpub::from_priv(&secp, &xprv); |
| 132 | + let hdkey = xpub.to_string(); |
| 133 | + |
| 134 | + // Import the private key into the wallet. |
| 135 | + let privkey = bitcoin::PrivateKey { |
| 136 | + compressed: true, |
| 137 | + network: Network::Regtest.into(), |
| 138 | + inner: xprv.private_key, |
| 139 | + }; |
| 140 | + let wif = privkey.to_wif(); |
| 141 | + let raw_descriptor = format!("wpkh({})", wif); |
| 142 | + let info = node.client.get_descriptor_info(&raw_descriptor).expect("get_descriptor_info"); |
| 143 | + let descriptor = format!("{}#{}", raw_descriptor, info.checksum); |
| 144 | + |
| 145 | + let import_req = ImportDescriptorsRequest::new(descriptor, 0); |
| 146 | + node.client.import_descriptors(&[import_req]).expect("importdescriptors"); |
| 147 | + |
| 148 | + let json = node.client.create_wallet_descriptor("bech32", &hdkey) |
| 149 | + .expect("createwalletdescriptor"); |
| 150 | + |
| 151 | + // Check that a SigWit descriptor was created. |
| 152 | + let prefix = &json.descriptors[0][0..4]; |
| 153 | + assert_eq!(prefix, "wpkh"); |
| 154 | +} |
| 155 | + |
121 | 156 | #[test] |
122 | 157 | fn wallet__dump_priv_key__modelled() { |
123 | 158 | // As of Core v23 the default wallet is an native descriptor wallet which does not |
|
0 commit comments