refactor(wallet)!: Remove method get_address
As this is now made redundant by the newly added wallet address methods.
This commit is contained in:
parent
d3763e5e37
commit
d87874780b
@ -21,7 +21,6 @@ use bitcoin::Network;
|
|||||||
use miniscript::policy::Concrete;
|
use miniscript::policy::Concrete;
|
||||||
use miniscript::Descriptor;
|
use miniscript::Descriptor;
|
||||||
|
|
||||||
use bdk::wallet::AddressIndex::New;
|
|
||||||
use bdk::{KeychainKind, Wallet};
|
use bdk::{KeychainKind, Wallet};
|
||||||
|
|
||||||
/// Miniscript policy is a high level abstraction of spending conditions. Defined in the
|
/// Miniscript policy is a high level abstraction of spending conditions. Defined in the
|
||||||
@ -51,7 +50,7 @@ fn main() -> Result<(), Box<dyn Error>> {
|
|||||||
|
|
||||||
println!(
|
println!(
|
||||||
"First derived address from the descriptor: \n{}",
|
"First derived address from the descriptor: \n{}",
|
||||||
wallet.get_address(New)
|
wallet.next_unused_address(KeychainKind::External)?,
|
||||||
);
|
);
|
||||||
|
|
||||||
// BDK also has it's own `Policy` structure to represent the spending condition in a more
|
// BDK also has it's own `Policy` structure to represent the spending condition in a more
|
||||||
|
@ -74,7 +74,7 @@ impl<T: DescriptorTemplate> IntoWalletDescriptor for T {
|
|||||||
/// ```
|
/// ```
|
||||||
/// # use bdk::bitcoin::{PrivateKey, Network};
|
/// # use bdk::bitcoin::{PrivateKey, Network};
|
||||||
/// # use bdk::Wallet;
|
/// # use bdk::Wallet;
|
||||||
/// # use bdk::wallet::AddressIndex::New;
|
/// # use bdk::KeychainKind;
|
||||||
/// use bdk::template::P2Pkh;
|
/// use bdk::template::P2Pkh;
|
||||||
///
|
///
|
||||||
/// let key =
|
/// let key =
|
||||||
@ -82,7 +82,9 @@ impl<T: DescriptorTemplate> IntoWalletDescriptor for T {
|
|||||||
/// let mut wallet = Wallet::new_no_persist(P2Pkh(key), None, Network::Testnet)?;
|
/// let mut wallet = Wallet::new_no_persist(P2Pkh(key), None, Network::Testnet)?;
|
||||||
///
|
///
|
||||||
/// assert_eq!(
|
/// assert_eq!(
|
||||||
/// wallet.get_address(New).to_string(),
|
/// wallet
|
||||||
|
/// .next_unused_address(KeychainKind::External)?
|
||||||
|
/// .to_string(),
|
||||||
/// "mwJ8hxFYW19JLuc65RCTaP4v1rzVU8cVMT"
|
/// "mwJ8hxFYW19JLuc65RCTaP4v1rzVU8cVMT"
|
||||||
/// );
|
/// );
|
||||||
/// # Ok::<_, Box<dyn std::error::Error>>(())
|
/// # Ok::<_, Box<dyn std::error::Error>>(())
|
||||||
@ -102,15 +104,17 @@ impl<K: IntoDescriptorKey<Legacy>> DescriptorTemplate for P2Pkh<K> {
|
|||||||
/// ```
|
/// ```
|
||||||
/// # use bdk::bitcoin::{PrivateKey, Network};
|
/// # use bdk::bitcoin::{PrivateKey, Network};
|
||||||
/// # use bdk::Wallet;
|
/// # use bdk::Wallet;
|
||||||
|
/// # use bdk::KeychainKind;
|
||||||
/// use bdk::template::P2Wpkh_P2Sh;
|
/// use bdk::template::P2Wpkh_P2Sh;
|
||||||
/// use bdk::wallet::AddressIndex;
|
|
||||||
///
|
///
|
||||||
/// let key =
|
/// let key =
|
||||||
/// bitcoin::PrivateKey::from_wif("cTc4vURSzdx6QE6KVynWGomDbLaA75dNALMNyfjh3p8DRRar84Um")?;
|
/// bitcoin::PrivateKey::from_wif("cTc4vURSzdx6QE6KVynWGomDbLaA75dNALMNyfjh3p8DRRar84Um")?;
|
||||||
/// let mut wallet = Wallet::new_no_persist(P2Wpkh_P2Sh(key), None, Network::Testnet)?;
|
/// let mut wallet = Wallet::new_no_persist(P2Wpkh_P2Sh(key), None, Network::Testnet)?;
|
||||||
///
|
///
|
||||||
/// assert_eq!(
|
/// assert_eq!(
|
||||||
/// wallet.get_address(AddressIndex::New).to_string(),
|
/// wallet
|
||||||
|
/// .next_unused_address(KeychainKind::External)?
|
||||||
|
/// .to_string(),
|
||||||
/// "2NB4ox5VDRw1ecUv6SnT3VQHPXveYztRqk5"
|
/// "2NB4ox5VDRw1ecUv6SnT3VQHPXveYztRqk5"
|
||||||
/// );
|
/// );
|
||||||
/// # Ok::<_, Box<dyn std::error::Error>>(())
|
/// # Ok::<_, Box<dyn std::error::Error>>(())
|
||||||
@ -131,15 +135,17 @@ impl<K: IntoDescriptorKey<Segwitv0>> DescriptorTemplate for P2Wpkh_P2Sh<K> {
|
|||||||
/// ```
|
/// ```
|
||||||
/// # use bdk::bitcoin::{PrivateKey, Network};
|
/// # use bdk::bitcoin::{PrivateKey, Network};
|
||||||
/// # use bdk::{Wallet};
|
/// # use bdk::{Wallet};
|
||||||
|
/// # use bdk::KeychainKind;
|
||||||
/// use bdk::template::P2Wpkh;
|
/// use bdk::template::P2Wpkh;
|
||||||
/// use bdk::wallet::AddressIndex::New;
|
|
||||||
///
|
///
|
||||||
/// let key =
|
/// let key =
|
||||||
/// bitcoin::PrivateKey::from_wif("cTc4vURSzdx6QE6KVynWGomDbLaA75dNALMNyfjh3p8DRRar84Um")?;
|
/// bitcoin::PrivateKey::from_wif("cTc4vURSzdx6QE6KVynWGomDbLaA75dNALMNyfjh3p8DRRar84Um")?;
|
||||||
/// let mut wallet = Wallet::new_no_persist(P2Wpkh(key), None, Network::Testnet)?;
|
/// let mut wallet = Wallet::new_no_persist(P2Wpkh(key), None, Network::Testnet)?;
|
||||||
///
|
///
|
||||||
/// assert_eq!(
|
/// assert_eq!(
|
||||||
/// wallet.get_address(New).to_string(),
|
/// wallet
|
||||||
|
/// .next_unused_address(KeychainKind::External)?
|
||||||
|
/// .to_string(),
|
||||||
/// "tb1q4525hmgw265tl3drrl8jjta7ayffu6jf68ltjd"
|
/// "tb1q4525hmgw265tl3drrl8jjta7ayffu6jf68ltjd"
|
||||||
/// );
|
/// );
|
||||||
/// # Ok::<_, Box<dyn std::error::Error>>(())
|
/// # Ok::<_, Box<dyn std::error::Error>>(())
|
||||||
@ -159,7 +165,7 @@ impl<K: IntoDescriptorKey<Segwitv0>> DescriptorTemplate for P2Wpkh<K> {
|
|||||||
/// ```
|
/// ```
|
||||||
/// # use bdk::bitcoin::{PrivateKey, Network};
|
/// # use bdk::bitcoin::{PrivateKey, Network};
|
||||||
/// # use bdk::Wallet;
|
/// # use bdk::Wallet;
|
||||||
/// # use bdk::wallet::AddressIndex::New;
|
/// # use bdk::KeychainKind;
|
||||||
/// use bdk::template::P2TR;
|
/// use bdk::template::P2TR;
|
||||||
///
|
///
|
||||||
/// let key =
|
/// let key =
|
||||||
@ -167,7 +173,9 @@ impl<K: IntoDescriptorKey<Segwitv0>> DescriptorTemplate for P2Wpkh<K> {
|
|||||||
/// let mut wallet = Wallet::new_no_persist(P2TR(key), None, Network::Testnet)?;
|
/// let mut wallet = Wallet::new_no_persist(P2TR(key), None, Network::Testnet)?;
|
||||||
///
|
///
|
||||||
/// assert_eq!(
|
/// assert_eq!(
|
||||||
/// wallet.get_address(New).to_string(),
|
/// wallet
|
||||||
|
/// .next_unused_address(KeychainKind::External)?
|
||||||
|
/// .to_string(),
|
||||||
/// "tb1pvjf9t34fznr53u5tqhejz4nr69luzkhlvsdsdfq9pglutrpve2xq7hps46"
|
/// "tb1pvjf9t34fznr53u5tqhejz4nr69luzkhlvsdsdfq9pglutrpve2xq7hps46"
|
||||||
/// );
|
/// );
|
||||||
/// # Ok::<_, Box<dyn std::error::Error>>(())
|
/// # Ok::<_, Box<dyn std::error::Error>>(())
|
||||||
@ -192,7 +200,6 @@ impl<K: IntoDescriptorKey<Tap>> DescriptorTemplate for P2TR<K> {
|
|||||||
/// # use std::str::FromStr;
|
/// # use std::str::FromStr;
|
||||||
/// # use bdk::bitcoin::{PrivateKey, Network};
|
/// # use bdk::bitcoin::{PrivateKey, Network};
|
||||||
/// # use bdk::{Wallet, KeychainKind};
|
/// # use bdk::{Wallet, KeychainKind};
|
||||||
/// # use bdk::wallet::AddressIndex::New;
|
|
||||||
/// use bdk::template::Bip44;
|
/// use bdk::template::Bip44;
|
||||||
///
|
///
|
||||||
/// let key = bitcoin::bip32::Xpriv::from_str("tprv8ZgxMBicQKsPeZRHk4rTG6orPS2CRNFX3njhUXx5vj9qGog5ZMH4uGReDWN5kCkY3jmWEtWause41CDvBRXD1shKknAMKxT99o9qUTRVC6m")?;
|
/// let key = bitcoin::bip32::Xpriv::from_str("tprv8ZgxMBicQKsPeZRHk4rTG6orPS2CRNFX3njhUXx5vj9qGog5ZMH4uGReDWN5kCkY3jmWEtWause41CDvBRXD1shKknAMKxT99o9qUTRVC6m")?;
|
||||||
@ -202,7 +209,7 @@ impl<K: IntoDescriptorKey<Tap>> DescriptorTemplate for P2TR<K> {
|
|||||||
/// Network::Testnet,
|
/// Network::Testnet,
|
||||||
/// )?;
|
/// )?;
|
||||||
///
|
///
|
||||||
/// assert_eq!(wallet.get_address(New).to_string(), "mmogjc7HJEZkrLqyQYqJmxUqFaC7i4uf89");
|
/// assert_eq!(wallet.next_unused_address(KeychainKind::External)?.to_string(), "mmogjc7HJEZkrLqyQYqJmxUqFaC7i4uf89");
|
||||||
/// assert_eq!(wallet.public_descriptor(KeychainKind::External).unwrap().to_string(), "pkh([c55b303f/44'/1'/0']tpubDCuorCpzvYS2LCD75BR46KHE8GdDeg1wsAgNZeNr6DaB5gQK1o14uErKwKLuFmeemkQ6N2m3rNgvctdJLyr7nwu2yia7413Hhg8WWE44cgT/0/*)#5wrnv0xt");
|
/// assert_eq!(wallet.public_descriptor(KeychainKind::External).unwrap().to_string(), "pkh([c55b303f/44'/1'/0']tpubDCuorCpzvYS2LCD75BR46KHE8GdDeg1wsAgNZeNr6DaB5gQK1o14uErKwKLuFmeemkQ6N2m3rNgvctdJLyr7nwu2yia7413Hhg8WWE44cgT/0/*)#5wrnv0xt");
|
||||||
/// # Ok::<_, Box<dyn std::error::Error>>(())
|
/// # Ok::<_, Box<dyn std::error::Error>>(())
|
||||||
/// ```
|
/// ```
|
||||||
@ -229,7 +236,6 @@ impl<K: DerivableKey<Legacy>> DescriptorTemplate for Bip44<K> {
|
|||||||
/// # use std::str::FromStr;
|
/// # use std::str::FromStr;
|
||||||
/// # use bdk::bitcoin::{PrivateKey, Network};
|
/// # use bdk::bitcoin::{PrivateKey, Network};
|
||||||
/// # use bdk::{Wallet, KeychainKind};
|
/// # use bdk::{Wallet, KeychainKind};
|
||||||
/// # use bdk::wallet::AddressIndex::New;
|
|
||||||
/// use bdk::template::Bip44Public;
|
/// use bdk::template::Bip44Public;
|
||||||
///
|
///
|
||||||
/// let key = bitcoin::bip32::Xpub::from_str("tpubDDDzQ31JkZB7VxUr9bjvBivDdqoFLrDPyLWtLapArAi51ftfmCb2DPxwLQzX65iNcXz1DGaVvyvo6JQ6rTU73r2gqdEo8uov9QKRb7nKCSU")?;
|
/// let key = bitcoin::bip32::Xpub::from_str("tpubDDDzQ31JkZB7VxUr9bjvBivDdqoFLrDPyLWtLapArAi51ftfmCb2DPxwLQzX65iNcXz1DGaVvyvo6JQ6rTU73r2gqdEo8uov9QKRb7nKCSU")?;
|
||||||
@ -240,7 +246,7 @@ impl<K: DerivableKey<Legacy>> DescriptorTemplate for Bip44<K> {
|
|||||||
/// Network::Testnet,
|
/// Network::Testnet,
|
||||||
/// )?;
|
/// )?;
|
||||||
///
|
///
|
||||||
/// assert_eq!(wallet.get_address(New).to_string(), "miNG7dJTzJqNbFS19svRdTCisC65dsubtR");
|
/// assert_eq!(wallet.next_unused_address(KeychainKind::External)?.to_string(), "miNG7dJTzJqNbFS19svRdTCisC65dsubtR");
|
||||||
/// assert_eq!(wallet.public_descriptor(KeychainKind::External).unwrap().to_string(), "pkh([c55b303f/44'/1'/0']tpubDDDzQ31JkZB7VxUr9bjvBivDdqoFLrDPyLWtLapArAi51ftfmCb2DPxwLQzX65iNcXz1DGaVvyvo6JQ6rTU73r2gqdEo8uov9QKRb7nKCSU/0/*)#cfhumdqz");
|
/// assert_eq!(wallet.public_descriptor(KeychainKind::External).unwrap().to_string(), "pkh([c55b303f/44'/1'/0']tpubDDDzQ31JkZB7VxUr9bjvBivDdqoFLrDPyLWtLapArAi51ftfmCb2DPxwLQzX65iNcXz1DGaVvyvo6JQ6rTU73r2gqdEo8uov9QKRb7nKCSU/0/*)#cfhumdqz");
|
||||||
/// # Ok::<_, Box<dyn std::error::Error>>(())
|
/// # Ok::<_, Box<dyn std::error::Error>>(())
|
||||||
/// ```
|
/// ```
|
||||||
@ -267,7 +273,6 @@ impl<K: DerivableKey<Legacy>> DescriptorTemplate for Bip44Public<K> {
|
|||||||
/// # use std::str::FromStr;
|
/// # use std::str::FromStr;
|
||||||
/// # use bdk::bitcoin::{PrivateKey, Network};
|
/// # use bdk::bitcoin::{PrivateKey, Network};
|
||||||
/// # use bdk::{Wallet, KeychainKind};
|
/// # use bdk::{Wallet, KeychainKind};
|
||||||
/// # use bdk::wallet::AddressIndex::New;
|
|
||||||
/// use bdk::template::Bip49;
|
/// use bdk::template::Bip49;
|
||||||
///
|
///
|
||||||
/// let key = bitcoin::bip32::Xpriv::from_str("tprv8ZgxMBicQKsPeZRHk4rTG6orPS2CRNFX3njhUXx5vj9qGog5ZMH4uGReDWN5kCkY3jmWEtWause41CDvBRXD1shKknAMKxT99o9qUTRVC6m")?;
|
/// let key = bitcoin::bip32::Xpriv::from_str("tprv8ZgxMBicQKsPeZRHk4rTG6orPS2CRNFX3njhUXx5vj9qGog5ZMH4uGReDWN5kCkY3jmWEtWause41CDvBRXD1shKknAMKxT99o9qUTRVC6m")?;
|
||||||
@ -277,7 +282,7 @@ impl<K: DerivableKey<Legacy>> DescriptorTemplate for Bip44Public<K> {
|
|||||||
/// Network::Testnet,
|
/// Network::Testnet,
|
||||||
/// )?;
|
/// )?;
|
||||||
///
|
///
|
||||||
/// assert_eq!(wallet.get_address(New).to_string(), "2N4zkWAoGdUv4NXhSsU8DvS5MB36T8nKHEB");
|
/// assert_eq!(wallet.next_unused_address(KeychainKind::External)?.to_string(), "2N4zkWAoGdUv4NXhSsU8DvS5MB36T8nKHEB");
|
||||||
/// assert_eq!(wallet.public_descriptor(KeychainKind::External).unwrap().to_string(), "sh(wpkh([c55b303f/49'/1'/0']tpubDDYr4kdnZgjjShzYNjZUZXUUtpXaofdkMaipyS8ThEh45qFmhT4hKYways7UXmg6V7het1QiFo9kf4kYUXyDvV4rHEyvSpys9pjCB3pukxi/0/*))#s9vxlc8e");
|
/// assert_eq!(wallet.public_descriptor(KeychainKind::External).unwrap().to_string(), "sh(wpkh([c55b303f/49'/1'/0']tpubDDYr4kdnZgjjShzYNjZUZXUUtpXaofdkMaipyS8ThEh45qFmhT4hKYways7UXmg6V7het1QiFo9kf4kYUXyDvV4rHEyvSpys9pjCB3pukxi/0/*))#s9vxlc8e");
|
||||||
/// # Ok::<_, Box<dyn std::error::Error>>(())
|
/// # Ok::<_, Box<dyn std::error::Error>>(())
|
||||||
/// ```
|
/// ```
|
||||||
@ -304,7 +309,6 @@ impl<K: DerivableKey<Segwitv0>> DescriptorTemplate for Bip49<K> {
|
|||||||
/// # use std::str::FromStr;
|
/// # use std::str::FromStr;
|
||||||
/// # use bdk::bitcoin::{PrivateKey, Network};
|
/// # use bdk::bitcoin::{PrivateKey, Network};
|
||||||
/// # use bdk::{Wallet, KeychainKind};
|
/// # use bdk::{Wallet, KeychainKind};
|
||||||
/// # use bdk::wallet::AddressIndex::New;
|
|
||||||
/// use bdk::template::Bip49Public;
|
/// use bdk::template::Bip49Public;
|
||||||
///
|
///
|
||||||
/// let key = bitcoin::bip32::Xpub::from_str("tpubDC49r947KGK52X5rBWS4BLs5m9SRY3pYHnvRrm7HcybZ3BfdEsGFyzCMzayi1u58eT82ZeyFZwH7DD6Q83E3fM9CpfMtmnTygnLfP59jL9L")?;
|
/// let key = bitcoin::bip32::Xpub::from_str("tpubDC49r947KGK52X5rBWS4BLs5m9SRY3pYHnvRrm7HcybZ3BfdEsGFyzCMzayi1u58eT82ZeyFZwH7DD6Q83E3fM9CpfMtmnTygnLfP59jL9L")?;
|
||||||
@ -315,7 +319,7 @@ impl<K: DerivableKey<Segwitv0>> DescriptorTemplate for Bip49<K> {
|
|||||||
/// Network::Testnet,
|
/// Network::Testnet,
|
||||||
/// )?;
|
/// )?;
|
||||||
///
|
///
|
||||||
/// assert_eq!(wallet.get_address(New).to_string(), "2N3K4xbVAHoiTQSwxkZjWDfKoNC27pLkYnt");
|
/// assert_eq!(wallet.next_unused_address(KeychainKind::External)?.to_string(), "2N3K4xbVAHoiTQSwxkZjWDfKoNC27pLkYnt");
|
||||||
/// assert_eq!(wallet.public_descriptor(KeychainKind::External).unwrap().to_string(), "sh(wpkh([c55b303f/49'/1'/0']tpubDC49r947KGK52X5rBWS4BLs5m9SRY3pYHnvRrm7HcybZ3BfdEsGFyzCMzayi1u58eT82ZeyFZwH7DD6Q83E3fM9CpfMtmnTygnLfP59jL9L/0/*))#3tka9g0q");
|
/// assert_eq!(wallet.public_descriptor(KeychainKind::External).unwrap().to_string(), "sh(wpkh([c55b303f/49'/1'/0']tpubDC49r947KGK52X5rBWS4BLs5m9SRY3pYHnvRrm7HcybZ3BfdEsGFyzCMzayi1u58eT82ZeyFZwH7DD6Q83E3fM9CpfMtmnTygnLfP59jL9L/0/*))#3tka9g0q");
|
||||||
/// # Ok::<_, Box<dyn std::error::Error>>(())
|
/// # Ok::<_, Box<dyn std::error::Error>>(())
|
||||||
/// ```
|
/// ```
|
||||||
@ -342,7 +346,6 @@ impl<K: DerivableKey<Segwitv0>> DescriptorTemplate for Bip49Public<K> {
|
|||||||
/// # use std::str::FromStr;
|
/// # use std::str::FromStr;
|
||||||
/// # use bdk::bitcoin::{PrivateKey, Network};
|
/// # use bdk::bitcoin::{PrivateKey, Network};
|
||||||
/// # use bdk::{Wallet, KeychainKind};
|
/// # use bdk::{Wallet, KeychainKind};
|
||||||
/// # use bdk::wallet::AddressIndex::New;
|
|
||||||
/// use bdk::template::Bip84;
|
/// use bdk::template::Bip84;
|
||||||
///
|
///
|
||||||
/// let key = bitcoin::bip32::Xpriv::from_str("tprv8ZgxMBicQKsPeZRHk4rTG6orPS2CRNFX3njhUXx5vj9qGog5ZMH4uGReDWN5kCkY3jmWEtWause41CDvBRXD1shKknAMKxT99o9qUTRVC6m")?;
|
/// let key = bitcoin::bip32::Xpriv::from_str("tprv8ZgxMBicQKsPeZRHk4rTG6orPS2CRNFX3njhUXx5vj9qGog5ZMH4uGReDWN5kCkY3jmWEtWause41CDvBRXD1shKknAMKxT99o9qUTRVC6m")?;
|
||||||
@ -352,7 +355,7 @@ impl<K: DerivableKey<Segwitv0>> DescriptorTemplate for Bip49Public<K> {
|
|||||||
/// Network::Testnet,
|
/// Network::Testnet,
|
||||||
/// )?;
|
/// )?;
|
||||||
///
|
///
|
||||||
/// assert_eq!(wallet.get_address(New).to_string(), "tb1qhl85z42h7r4su5u37rvvw0gk8j2t3n9y7zsg4n");
|
/// assert_eq!(wallet.next_unused_address(KeychainKind::External)?.to_string(), "tb1qhl85z42h7r4su5u37rvvw0gk8j2t3n9y7zsg4n");
|
||||||
/// assert_eq!(wallet.public_descriptor(KeychainKind::External).unwrap().to_string(), "wpkh([c55b303f/84'/1'/0']tpubDDc5mum24DekpNw92t6fHGp8Gr2JjF9J7i4TZBtN6Vp8xpAULG5CFaKsfugWa5imhrQQUZKXe261asP5koDHo5bs3qNTmf3U3o4v9SaB8gg/0/*)#6kfecsmr");
|
/// assert_eq!(wallet.public_descriptor(KeychainKind::External).unwrap().to_string(), "wpkh([c55b303f/84'/1'/0']tpubDDc5mum24DekpNw92t6fHGp8Gr2JjF9J7i4TZBtN6Vp8xpAULG5CFaKsfugWa5imhrQQUZKXe261asP5koDHo5bs3qNTmf3U3o4v9SaB8gg/0/*)#6kfecsmr");
|
||||||
/// # Ok::<_, Box<dyn std::error::Error>>(())
|
/// # Ok::<_, Box<dyn std::error::Error>>(())
|
||||||
/// ```
|
/// ```
|
||||||
@ -379,7 +382,6 @@ impl<K: DerivableKey<Segwitv0>> DescriptorTemplate for Bip84<K> {
|
|||||||
/// # use std::str::FromStr;
|
/// # use std::str::FromStr;
|
||||||
/// # use bdk::bitcoin::{PrivateKey, Network};
|
/// # use bdk::bitcoin::{PrivateKey, Network};
|
||||||
/// # use bdk::{Wallet, KeychainKind};
|
/// # use bdk::{Wallet, KeychainKind};
|
||||||
/// # use bdk::wallet::AddressIndex::New;
|
|
||||||
/// use bdk::template::Bip84Public;
|
/// use bdk::template::Bip84Public;
|
||||||
///
|
///
|
||||||
/// let key = bitcoin::bip32::Xpub::from_str("tpubDC2Qwo2TFsaNC4ju8nrUJ9mqVT3eSgdmy1yPqhgkjwmke3PRXutNGRYAUo6RCHTcVQaDR3ohNU9we59brGHuEKPvH1ags2nevW5opEE9Z5Q")?;
|
/// let key = bitcoin::bip32::Xpub::from_str("tpubDC2Qwo2TFsaNC4ju8nrUJ9mqVT3eSgdmy1yPqhgkjwmke3PRXutNGRYAUo6RCHTcVQaDR3ohNU9we59brGHuEKPvH1ags2nevW5opEE9Z5Q")?;
|
||||||
@ -390,7 +392,7 @@ impl<K: DerivableKey<Segwitv0>> DescriptorTemplate for Bip84<K> {
|
|||||||
/// Network::Testnet,
|
/// Network::Testnet,
|
||||||
/// )?;
|
/// )?;
|
||||||
///
|
///
|
||||||
/// assert_eq!(wallet.get_address(New).to_string(), "tb1qedg9fdlf8cnnqfd5mks6uz5w4kgpk2pr6y4qc7");
|
/// assert_eq!(wallet.next_unused_address(KeychainKind::External)?.to_string(), "tb1qedg9fdlf8cnnqfd5mks6uz5w4kgpk2pr6y4qc7");
|
||||||
/// assert_eq!(wallet.public_descriptor(KeychainKind::External).unwrap().to_string(), "wpkh([c55b303f/84'/1'/0']tpubDC2Qwo2TFsaNC4ju8nrUJ9mqVT3eSgdmy1yPqhgkjwmke3PRXutNGRYAUo6RCHTcVQaDR3ohNU9we59brGHuEKPvH1ags2nevW5opEE9Z5Q/0/*)#dhu402yv");
|
/// assert_eq!(wallet.public_descriptor(KeychainKind::External).unwrap().to_string(), "wpkh([c55b303f/84'/1'/0']tpubDC2Qwo2TFsaNC4ju8nrUJ9mqVT3eSgdmy1yPqhgkjwmke3PRXutNGRYAUo6RCHTcVQaDR3ohNU9we59brGHuEKPvH1ags2nevW5opEE9Z5Q/0/*)#dhu402yv");
|
||||||
/// # Ok::<_, Box<dyn std::error::Error>>(())
|
/// # Ok::<_, Box<dyn std::error::Error>>(())
|
||||||
/// ```
|
/// ```
|
||||||
@ -417,7 +419,6 @@ impl<K: DerivableKey<Segwitv0>> DescriptorTemplate for Bip84Public<K> {
|
|||||||
/// # use std::str::FromStr;
|
/// # use std::str::FromStr;
|
||||||
/// # use bdk::bitcoin::{PrivateKey, Network};
|
/// # use bdk::bitcoin::{PrivateKey, Network};
|
||||||
/// # use bdk::{Wallet, KeychainKind};
|
/// # use bdk::{Wallet, KeychainKind};
|
||||||
/// # use bdk::wallet::AddressIndex::New;
|
|
||||||
/// use bdk::template::Bip86;
|
/// use bdk::template::Bip86;
|
||||||
///
|
///
|
||||||
/// let key = bitcoin::bip32::Xpriv::from_str("tprv8ZgxMBicQKsPeZRHk4rTG6orPS2CRNFX3njhUXx5vj9qGog5ZMH4uGReDWN5kCkY3jmWEtWause41CDvBRXD1shKknAMKxT99o9qUTRVC6m")?;
|
/// let key = bitcoin::bip32::Xpriv::from_str("tprv8ZgxMBicQKsPeZRHk4rTG6orPS2CRNFX3njhUXx5vj9qGog5ZMH4uGReDWN5kCkY3jmWEtWause41CDvBRXD1shKknAMKxT99o9qUTRVC6m")?;
|
||||||
@ -427,7 +428,7 @@ impl<K: DerivableKey<Segwitv0>> DescriptorTemplate for Bip84Public<K> {
|
|||||||
/// Network::Testnet,
|
/// Network::Testnet,
|
||||||
/// )?;
|
/// )?;
|
||||||
///
|
///
|
||||||
/// assert_eq!(wallet.get_address(New).to_string(), "tb1p5unlj09djx8xsjwe97269kqtxqpwpu2epeskgqjfk4lnf69v4tnqpp35qu");
|
/// assert_eq!(wallet.next_unused_address(KeychainKind::External)?.to_string(), "tb1p5unlj09djx8xsjwe97269kqtxqpwpu2epeskgqjfk4lnf69v4tnqpp35qu");
|
||||||
/// assert_eq!(wallet.public_descriptor(KeychainKind::External).unwrap().to_string(), "tr([c55b303f/86'/1'/0']tpubDCiHofpEs47kx358bPdJmTZHmCDqQ8qw32upCSxHrSEdeeBs2T5Mq6QMB2ukeMqhNBiyhosBvJErteVhfURPGXPv3qLJPw5MVpHUewsbP2m/0/*)#dkgvr5hm");
|
/// assert_eq!(wallet.public_descriptor(KeychainKind::External).unwrap().to_string(), "tr([c55b303f/86'/1'/0']tpubDCiHofpEs47kx358bPdJmTZHmCDqQ8qw32upCSxHrSEdeeBs2T5Mq6QMB2ukeMqhNBiyhosBvJErteVhfURPGXPv3qLJPw5MVpHUewsbP2m/0/*)#dkgvr5hm");
|
||||||
/// # Ok::<_, Box<dyn std::error::Error>>(())
|
/// # Ok::<_, Box<dyn std::error::Error>>(())
|
||||||
/// ```
|
/// ```
|
||||||
@ -454,7 +455,6 @@ impl<K: DerivableKey<Tap>> DescriptorTemplate for Bip86<K> {
|
|||||||
/// # use std::str::FromStr;
|
/// # use std::str::FromStr;
|
||||||
/// # use bdk::bitcoin::{PrivateKey, Network};
|
/// # use bdk::bitcoin::{PrivateKey, Network};
|
||||||
/// # use bdk::{Wallet, KeychainKind};
|
/// # use bdk::{Wallet, KeychainKind};
|
||||||
/// # use bdk::wallet::AddressIndex::New;
|
|
||||||
/// use bdk::template::Bip86Public;
|
/// use bdk::template::Bip86Public;
|
||||||
///
|
///
|
||||||
/// let key = bitcoin::bip32::Xpub::from_str("tpubDC2Qwo2TFsaNC4ju8nrUJ9mqVT3eSgdmy1yPqhgkjwmke3PRXutNGRYAUo6RCHTcVQaDR3ohNU9we59brGHuEKPvH1ags2nevW5opEE9Z5Q")?;
|
/// let key = bitcoin::bip32::Xpub::from_str("tpubDC2Qwo2TFsaNC4ju8nrUJ9mqVT3eSgdmy1yPqhgkjwmke3PRXutNGRYAUo6RCHTcVQaDR3ohNU9we59brGHuEKPvH1ags2nevW5opEE9Z5Q")?;
|
||||||
@ -465,7 +465,7 @@ impl<K: DerivableKey<Tap>> DescriptorTemplate for Bip86<K> {
|
|||||||
/// Network::Testnet,
|
/// Network::Testnet,
|
||||||
/// )?;
|
/// )?;
|
||||||
///
|
///
|
||||||
/// assert_eq!(wallet.get_address(New).to_string(), "tb1pwjp9f2k5n0xq73ecuu0c5njvgqr3vkh7yaylmpqvsuuaafymh0msvcmh37");
|
/// assert_eq!(wallet.next_unused_address(KeychainKind::External)?.to_string(), "tb1pwjp9f2k5n0xq73ecuu0c5njvgqr3vkh7yaylmpqvsuuaafymh0msvcmh37");
|
||||||
/// assert_eq!(wallet.public_descriptor(KeychainKind::External).unwrap().to_string(), "tr([c55b303f/86'/1'/0']tpubDC2Qwo2TFsaNC4ju8nrUJ9mqVT3eSgdmy1yPqhgkjwmke3PRXutNGRYAUo6RCHTcVQaDR3ohNU9we59brGHuEKPvH1ags2nevW5opEE9Z5Q/0/*)#2p65srku");
|
/// assert_eq!(wallet.public_descriptor(KeychainKind::External).unwrap().to_string(), "tr([c55b303f/86'/1'/0']tpubDC2Qwo2TFsaNC4ju8nrUJ9mqVT3eSgdmy1yPqhgkjwmke3PRXutNGRYAUo6RCHTcVQaDR3ohNU9we59brGHuEKPvH1ags2nevW5opEE9Z5Q/0/*)#2p65srku");
|
||||||
/// # Ok::<_, Box<dyn std::error::Error>>(())
|
/// # Ok::<_, Box<dyn std::error::Error>>(())
|
||||||
/// ```
|
/// ```
|
||||||
|
@ -179,7 +179,7 @@ impl
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// The address index selection strategy to use to derived an address from the wallet's external
|
/// The address index selection strategy to use to derived an address from the wallet's external
|
||||||
/// descriptor. See [`Wallet::get_address`]. If you're unsure which one to use use `WalletIndex::New`.
|
/// descriptor.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum AddressIndex {
|
pub enum AddressIndex {
|
||||||
/// Return a new address after incrementing the current descriptor index.
|
/// Return a new address after incrementing the current descriptor index.
|
||||||
@ -256,36 +256,6 @@ impl Wallet {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Wallet {
|
|
||||||
/// Infallibly return a derived address using the external descriptor, see [`AddressIndex`] for
|
|
||||||
/// available address index selection strategies. If none of the keys in the descriptor are derivable
|
|
||||||
/// (i.e. does not end with /*) then the same address will always be returned for any [`AddressIndex`].
|
|
||||||
///
|
|
||||||
/// # Panics
|
|
||||||
///
|
|
||||||
/// This panics when the caller requests for an address of derivation index greater than the
|
|
||||||
/// BIP32 max index.
|
|
||||||
pub fn get_address(&mut self, address_index: AddressIndex) -> AddressInfo {
|
|
||||||
self.try_get_address(address_index).unwrap()
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Infallibly return a derived address using the internal (change) descriptor.
|
|
||||||
///
|
|
||||||
/// If the wallet doesn't have an internal descriptor it will use the external descriptor.
|
|
||||||
///
|
|
||||||
/// see [`AddressIndex`] for available address index selection strategies. If none of the keys
|
|
||||||
/// in the descriptor are derivable (i.e. does not end with /*) then the same address will always
|
|
||||||
/// be returned for any [`AddressIndex`].
|
|
||||||
///
|
|
||||||
/// # Panics
|
|
||||||
///
|
|
||||||
/// This panics when the caller requests for an address of derivation index greater than the
|
|
||||||
/// BIP32 max index.
|
|
||||||
pub fn get_internal_address(&mut self, address_index: AddressIndex) -> AddressInfo {
|
|
||||||
self.try_get_internal_address(address_index).unwrap()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// The error type when constructing a fresh [`Wallet`].
|
/// The error type when constructing a fresh [`Wallet`].
|
||||||
///
|
///
|
||||||
/// Methods [`new`] and [`new_with_genesis_hash`] may return this error.
|
/// Methods [`new`] and [`new_with_genesis_hash`] may return this error.
|
||||||
@ -803,13 +773,7 @@ impl Wallet {
|
|||||||
/// # Errors
|
/// # Errors
|
||||||
///
|
///
|
||||||
/// If writing to persistent storage fails.
|
/// If writing to persistent storage fails.
|
||||||
pub fn reveal_next_address(
|
pub fn reveal_next_address(&mut self, keychain: KeychainKind) -> anyhow::Result<AddressInfo> {
|
||||||
&mut self,
|
|
||||||
keychain: KeychainKind,
|
|
||||||
) -> Result<AddressInfo, D::WriteError>
|
|
||||||
where
|
|
||||||
D: PersistBackend<ChangeSet>,
|
|
||||||
{
|
|
||||||
let keychain = self.map_keychain(keychain);
|
let keychain = self.map_keychain(keychain);
|
||||||
let ((index, spk), index_changeset) = self.indexed_graph.index.reveal_next_spk(&keychain);
|
let ((index, spk), index_changeset) = self.indexed_graph.index.reveal_next_spk(&keychain);
|
||||||
|
|
||||||
@ -837,10 +801,7 @@ impl Wallet {
|
|||||||
&mut self,
|
&mut self,
|
||||||
keychain: KeychainKind,
|
keychain: KeychainKind,
|
||||||
index: u32,
|
index: u32,
|
||||||
) -> Result<impl Iterator<Item = AddressInfo> + '_, D::WriteError>
|
) -> anyhow::Result<impl Iterator<Item = AddressInfo> + '_> {
|
||||||
where
|
|
||||||
D: PersistBackend<ChangeSet>,
|
|
||||||
{
|
|
||||||
let keychain = self.map_keychain(keychain);
|
let keychain = self.map_keychain(keychain);
|
||||||
let (spk_iter, index_changeset) =
|
let (spk_iter, index_changeset) =
|
||||||
self.indexed_graph.index.reveal_to_target(&keychain, index);
|
self.indexed_graph.index.reveal_to_target(&keychain, index);
|
||||||
@ -864,13 +825,7 @@ impl Wallet {
|
|||||||
/// # Errors
|
/// # Errors
|
||||||
///
|
///
|
||||||
/// If writing to persistent storage fails.
|
/// If writing to persistent storage fails.
|
||||||
pub fn next_unused_address(
|
pub fn next_unused_address(&mut self, keychain: KeychainKind) -> anyhow::Result<AddressInfo> {
|
||||||
&mut self,
|
|
||||||
keychain: KeychainKind,
|
|
||||||
) -> Result<AddressInfo, D::WriteError>
|
|
||||||
where
|
|
||||||
D: PersistBackend<ChangeSet>,
|
|
||||||
{
|
|
||||||
let keychain = self.map_keychain(keychain);
|
let keychain = self.map_keychain(keychain);
|
||||||
let ((index, spk), index_changeset) = self.indexed_graph.index.next_unused_spk(&keychain);
|
let ((index, spk), index_changeset) = self.indexed_graph.index.next_unused_spk(&keychain);
|
||||||
|
|
||||||
@ -2646,7 +2601,7 @@ macro_rules! doctest_wallet {
|
|||||||
() => {{
|
() => {{
|
||||||
use $crate::bitcoin::{BlockHash, Transaction, absolute, TxOut, Network, hashes::Hash};
|
use $crate::bitcoin::{BlockHash, Transaction, absolute, TxOut, Network, hashes::Hash};
|
||||||
use $crate::chain::{ConfirmationTime, BlockId};
|
use $crate::chain::{ConfirmationTime, BlockId};
|
||||||
use $crate::wallet::{AddressIndex, Wallet};
|
use $crate::{KeychainKind, wallet::Wallet};
|
||||||
let descriptor = "tr([73c5da0a/86'/0'/0']tprv8fMn4hSKPRC1oaCPqxDb1JWtgkpeiQvZhsr8W2xuy3GEMkzoArcAWTfJxYb6Wj8XNNDWEjfYKK4wGQXh3ZUXhDF2NcnsALpWTeSwarJt7Vc/0/*)";
|
let descriptor = "tr([73c5da0a/86'/0'/0']tprv8fMn4hSKPRC1oaCPqxDb1JWtgkpeiQvZhsr8W2xuy3GEMkzoArcAWTfJxYb6Wj8XNNDWEjfYKK4wGQXh3ZUXhDF2NcnsALpWTeSwarJt7Vc/0/*)";
|
||||||
let change_descriptor = "tr([73c5da0a/86'/0'/0']tprv8fMn4hSKPRC1oaCPqxDb1JWtgkpeiQvZhsr8W2xuy3GEMkzoArcAWTfJxYb6Wj8XNNDWEjfYKK4wGQXh3ZUXhDF2NcnsALpWTeSwarJt7Vc/1/*)";
|
let change_descriptor = "tr([73c5da0a/86'/0'/0']tprv8fMn4hSKPRC1oaCPqxDb1JWtgkpeiQvZhsr8W2xuy3GEMkzoArcAWTfJxYb6Wj8XNNDWEjfYKK4wGQXh3ZUXhDF2NcnsALpWTeSwarJt7Vc/1/*)";
|
||||||
|
|
||||||
@ -2656,7 +2611,7 @@ macro_rules! doctest_wallet {
|
|||||||
Network::Regtest,
|
Network::Regtest,
|
||||||
)
|
)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let address = wallet.get_address(AddressIndex::New).address;
|
let address = wallet.peek_address(KeychainKind::External, 0).address;
|
||||||
let tx = Transaction {
|
let tx = Transaction {
|
||||||
version: transaction::Version::ONE,
|
version: transaction::Version::ONE,
|
||||||
lock_time: absolute::LockTime::ZERO,
|
lock_time: absolute::LockTime::ZERO,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#![allow(unused)]
|
#![allow(unused)]
|
||||||
|
|
||||||
use bdk::{wallet::AddressIndex, KeychainKind, LocalOutput, Wallet};
|
use bdk::{KeychainKind, LocalOutput, Wallet};
|
||||||
use bdk_chain::indexed_tx_graph::Indexer;
|
use bdk_chain::indexed_tx_graph::Indexer;
|
||||||
use bdk_chain::{BlockId, ConfirmationTime};
|
use bdk_chain::{BlockId, ConfirmationTime};
|
||||||
use bitcoin::hashes::Hash;
|
use bitcoin::hashes::Hash;
|
||||||
@ -20,7 +20,7 @@ pub fn get_funded_wallet_with_change(
|
|||||||
change: Option<&str>,
|
change: Option<&str>,
|
||||||
) -> (Wallet, bitcoin::Txid) {
|
) -> (Wallet, bitcoin::Txid) {
|
||||||
let mut wallet = Wallet::new_no_persist(descriptor, change, Network::Regtest).unwrap();
|
let mut wallet = Wallet::new_no_persist(descriptor, change, Network::Regtest).unwrap();
|
||||||
let change_address = wallet.get_address(AddressIndex::New).address;
|
let change_address = wallet.peek_address(KeychainKind::External, 0).address;
|
||||||
let sendto_address = Address::from_str("bcrt1q3qtze4ys45tgdvguj66zrk4fu6hq3a3v9pfly5")
|
let sendto_address = Address::from_str("bcrt1q3qtze4ys45tgdvguj66zrk4fu6hq3a3v9pfly5")
|
||||||
.expect("address")
|
.expect("address")
|
||||||
.require_network(Network::Regtest)
|
.require_network(Network::Regtest)
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
use bdk::bitcoin::{Amount, FeeRate, Psbt, TxIn};
|
use bdk::bitcoin::{Amount, FeeRate, Psbt, TxIn};
|
||||||
use bdk::wallet::AddressIndex;
|
use bdk::{psbt, KeychainKind, SignOptions};
|
||||||
use bdk::wallet::AddressIndex::New;
|
|
||||||
use bdk::{psbt, SignOptions};
|
|
||||||
use core::str::FromStr;
|
use core::str::FromStr;
|
||||||
mod common;
|
mod common;
|
||||||
use common::*;
|
use common::*;
|
||||||
@ -14,7 +12,7 @@ const PSBT_STR: &str = "cHNidP8BAKACAAAAAqsJSaCMWvfEm4IS9Bfi8Vqz9cM9zxU4IagTn4d6
|
|||||||
fn test_psbt_malformed_psbt_input_legacy() {
|
fn test_psbt_malformed_psbt_input_legacy() {
|
||||||
let psbt_bip = Psbt::from_str(PSBT_STR).unwrap();
|
let psbt_bip = Psbt::from_str(PSBT_STR).unwrap();
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let send_to = wallet.get_address(AddressIndex::New);
|
let send_to = wallet.peek_address(KeychainKind::External, 0);
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.add_recipient(send_to.script_pubkey(), 10_000);
|
builder.add_recipient(send_to.script_pubkey(), 10_000);
|
||||||
let mut psbt = builder.finish().unwrap();
|
let mut psbt = builder.finish().unwrap();
|
||||||
@ -31,7 +29,7 @@ fn test_psbt_malformed_psbt_input_legacy() {
|
|||||||
fn test_psbt_malformed_psbt_input_segwit() {
|
fn test_psbt_malformed_psbt_input_segwit() {
|
||||||
let psbt_bip = Psbt::from_str(PSBT_STR).unwrap();
|
let psbt_bip = Psbt::from_str(PSBT_STR).unwrap();
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let send_to = wallet.get_address(AddressIndex::New);
|
let send_to = wallet.peek_address(KeychainKind::External, 0);
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.add_recipient(send_to.script_pubkey(), 10_000);
|
builder.add_recipient(send_to.script_pubkey(), 10_000);
|
||||||
let mut psbt = builder.finish().unwrap();
|
let mut psbt = builder.finish().unwrap();
|
||||||
@ -47,7 +45,7 @@ fn test_psbt_malformed_psbt_input_segwit() {
|
|||||||
#[should_panic(expected = "InputIndexOutOfRange")]
|
#[should_panic(expected = "InputIndexOutOfRange")]
|
||||||
fn test_psbt_malformed_tx_input() {
|
fn test_psbt_malformed_tx_input() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let send_to = wallet.get_address(AddressIndex::New);
|
let send_to = wallet.peek_address(KeychainKind::External, 0);
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.add_recipient(send_to.script_pubkey(), 10_000);
|
builder.add_recipient(send_to.script_pubkey(), 10_000);
|
||||||
let mut psbt = builder.finish().unwrap();
|
let mut psbt = builder.finish().unwrap();
|
||||||
@ -63,7 +61,7 @@ fn test_psbt_malformed_tx_input() {
|
|||||||
fn test_psbt_sign_with_finalized() {
|
fn test_psbt_sign_with_finalized() {
|
||||||
let psbt_bip = Psbt::from_str(PSBT_STR).unwrap();
|
let psbt_bip = Psbt::from_str(PSBT_STR).unwrap();
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let send_to = wallet.get_address(AddressIndex::New);
|
let send_to = wallet.peek_address(KeychainKind::External, 0);
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.add_recipient(send_to.script_pubkey(), 10_000);
|
builder.add_recipient(send_to.script_pubkey(), 10_000);
|
||||||
let mut psbt = builder.finish().unwrap();
|
let mut psbt = builder.finish().unwrap();
|
||||||
@ -84,7 +82,7 @@ fn test_psbt_fee_rate_with_witness_utxo() {
|
|||||||
let expected_fee_rate = FeeRate::from_sat_per_kwu(310);
|
let expected_fee_rate = FeeRate::from_sat_per_kwu(310);
|
||||||
|
|
||||||
let (mut wallet, _) = get_funded_wallet("wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
|
let (mut wallet, _) = get_funded_wallet("wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.peek_address(KeychainKind::External, 0);
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
||||||
builder.fee_rate(expected_fee_rate);
|
builder.fee_rate(expected_fee_rate);
|
||||||
@ -109,7 +107,7 @@ fn test_psbt_fee_rate_with_nonwitness_utxo() {
|
|||||||
let expected_fee_rate = FeeRate::from_sat_per_kwu(310);
|
let expected_fee_rate = FeeRate::from_sat_per_kwu(310);
|
||||||
|
|
||||||
let (mut wallet, _) = get_funded_wallet("pkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
|
let (mut wallet, _) = get_funded_wallet("pkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.peek_address(KeychainKind::External, 0);
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
||||||
builder.fee_rate(expected_fee_rate);
|
builder.fee_rate(expected_fee_rate);
|
||||||
@ -133,7 +131,7 @@ fn test_psbt_fee_rate_with_missing_txout() {
|
|||||||
let expected_fee_rate = FeeRate::from_sat_per_kwu(310);
|
let expected_fee_rate = FeeRate::from_sat_per_kwu(310);
|
||||||
|
|
||||||
let (mut wpkh_wallet, _) = get_funded_wallet("wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
|
let (mut wpkh_wallet, _) = get_funded_wallet("wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
|
||||||
let addr = wpkh_wallet.get_address(New);
|
let addr = wpkh_wallet.peek_address(KeychainKind::External, 0);
|
||||||
let mut builder = wpkh_wallet.build_tx();
|
let mut builder = wpkh_wallet.build_tx();
|
||||||
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
||||||
builder.fee_rate(expected_fee_rate);
|
builder.fee_rate(expected_fee_rate);
|
||||||
@ -145,7 +143,7 @@ fn test_psbt_fee_rate_with_missing_txout() {
|
|||||||
assert!(wpkh_psbt.fee_rate().is_none());
|
assert!(wpkh_psbt.fee_rate().is_none());
|
||||||
|
|
||||||
let (mut pkh_wallet, _) = get_funded_wallet("pkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
|
let (mut pkh_wallet, _) = get_funded_wallet("pkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
|
||||||
let addr = pkh_wallet.get_address(New);
|
let addr = pkh_wallet.peek_address(KeychainKind::External, 0);
|
||||||
let mut builder = pkh_wallet.build_tx();
|
let mut builder = pkh_wallet.build_tx();
|
||||||
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
||||||
builder.fee_rate(expected_fee_rate);
|
builder.fee_rate(expected_fee_rate);
|
||||||
@ -174,7 +172,7 @@ fn test_psbt_multiple_internalkey_signers() {
|
|||||||
|
|
||||||
let (mut wallet, _) = get_funded_wallet(&desc);
|
let (mut wallet, _) = get_funded_wallet(&desc);
|
||||||
let to_spend = wallet.get_balance().total();
|
let to_spend = wallet.get_balance().total();
|
||||||
let send_to = wallet.get_address(AddressIndex::New);
|
let send_to = wallet.peek_address(KeychainKind::External, 0);
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.drain_to(send_to.script_pubkey()).drain_wallet();
|
builder.drain_to(send_to.script_pubkey()).drain_wallet();
|
||||||
let mut psbt = builder.finish().unwrap();
|
let mut psbt = builder.finish().unwrap();
|
||||||
|
@ -7,8 +7,8 @@ use bdk::signer::{SignOptions, SignerError};
|
|||||||
use bdk::wallet::coin_selection::{self, LargestFirstCoinSelection};
|
use bdk::wallet::coin_selection::{self, LargestFirstCoinSelection};
|
||||||
use bdk::wallet::error::CreateTxError;
|
use bdk::wallet::error::CreateTxError;
|
||||||
use bdk::wallet::tx_builder::AddForeignUtxoError;
|
use bdk::wallet::tx_builder::AddForeignUtxoError;
|
||||||
use bdk::wallet::{AddressIndex, AddressInfo, Balance, Wallet};
|
use bdk::wallet::NewError;
|
||||||
use bdk::wallet::{AddressIndex::*, NewError};
|
use bdk::wallet::{AddressInfo, Balance, Wallet};
|
||||||
use bdk::KeychainKind;
|
use bdk::KeychainKind;
|
||||||
use bdk_chain::COINBASE_MATURITY;
|
use bdk_chain::COINBASE_MATURITY;
|
||||||
use bdk_chain::{BlockId, ConfirmationTime};
|
use bdk_chain::{BlockId, ConfirmationTime};
|
||||||
@ -26,12 +26,13 @@ mod common;
|
|||||||
use common::*;
|
use common::*;
|
||||||
|
|
||||||
fn receive_output(wallet: &mut Wallet, value: u64, height: ConfirmationTime) -> OutPoint {
|
fn receive_output(wallet: &mut Wallet, value: u64, height: ConfirmationTime) -> OutPoint {
|
||||||
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let tx = Transaction {
|
let tx = Transaction {
|
||||||
version: transaction::Version::ONE,
|
version: transaction::Version::ONE,
|
||||||
lock_time: absolute::LockTime::ZERO,
|
lock_time: absolute::LockTime::ZERO,
|
||||||
input: vec![],
|
input: vec![],
|
||||||
output: vec![TxOut {
|
output: vec![TxOut {
|
||||||
script_pubkey: wallet.get_address(LastUnused).script_pubkey(),
|
script_pubkey: addr.script_pubkey(),
|
||||||
value: Amount::from_sat(value),
|
value: Amount::from_sat(value),
|
||||||
}],
|
}],
|
||||||
};
|
};
|
||||||
@ -76,7 +77,7 @@ fn load_recovers_wallet() {
|
|||||||
let mut wallet = Wallet::new(get_test_tr_single_sig_xprv(), None, db, Network::Testnet)
|
let mut wallet = Wallet::new(get_test_tr_single_sig_xprv(), None, db, Network::Testnet)
|
||||||
.expect("must init wallet");
|
.expect("must init wallet");
|
||||||
|
|
||||||
wallet.try_get_address(New).unwrap();
|
wallet.reveal_next_address(KeychainKind::External).unwrap();
|
||||||
wallet.spk_index().clone()
|
wallet.spk_index().clone()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -343,7 +344,7 @@ fn test_create_tx_empty_recipients() {
|
|||||||
#[should_panic(expected = "NoUtxosSelected")]
|
#[should_panic(expected = "NoUtxosSelected")]
|
||||||
fn test_create_tx_manually_selected_empty_utxos() {
|
fn test_create_tx_manually_selected_empty_utxos() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.add_recipient(addr.script_pubkey(), 25_000)
|
.add_recipient(addr.script_pubkey(), 25_000)
|
||||||
@ -354,7 +355,7 @@ fn test_create_tx_manually_selected_empty_utxos() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_version_0() {
|
fn test_create_tx_version_0() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.add_recipient(addr.script_pubkey(), 25_000)
|
.add_recipient(addr.script_pubkey(), 25_000)
|
||||||
@ -365,7 +366,7 @@ fn test_create_tx_version_0() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_version_1_csv() {
|
fn test_create_tx_version_1_csv() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_single_sig_csv());
|
let (mut wallet, _) = get_funded_wallet(get_test_single_sig_csv());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.add_recipient(addr.script_pubkey(), 25_000)
|
.add_recipient(addr.script_pubkey(), 25_000)
|
||||||
@ -376,7 +377,7 @@ fn test_create_tx_version_1_csv() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_custom_version() {
|
fn test_create_tx_custom_version() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.add_recipient(addr.script_pubkey(), 25_000)
|
.add_recipient(addr.script_pubkey(), 25_000)
|
||||||
@ -390,7 +391,7 @@ fn test_create_tx_custom_version() {
|
|||||||
fn test_create_tx_default_locktime_is_last_sync_height() {
|
fn test_create_tx_default_locktime_is_last_sync_height() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
|
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.add_recipient(addr.script_pubkey(), 25_000);
|
builder.add_recipient(addr.script_pubkey(), 25_000);
|
||||||
let psbt = builder.finish().unwrap();
|
let psbt = builder.finish().unwrap();
|
||||||
@ -403,7 +404,7 @@ fn test_create_tx_default_locktime_is_last_sync_height() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_fee_sniping_locktime_last_sync() {
|
fn test_create_tx_fee_sniping_locktime_last_sync() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.add_recipient(addr.script_pubkey(), 25_000);
|
builder.add_recipient(addr.script_pubkey(), 25_000);
|
||||||
|
|
||||||
@ -419,7 +420,7 @@ fn test_create_tx_fee_sniping_locktime_last_sync() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_default_locktime_cltv() {
|
fn test_create_tx_default_locktime_cltv() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_single_sig_cltv());
|
let (mut wallet, _) = get_funded_wallet(get_test_single_sig_cltv());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.add_recipient(addr.script_pubkey(), 25_000);
|
builder.add_recipient(addr.script_pubkey(), 25_000);
|
||||||
let psbt = builder.finish().unwrap();
|
let psbt = builder.finish().unwrap();
|
||||||
@ -430,7 +431,7 @@ fn test_create_tx_default_locktime_cltv() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_custom_locktime() {
|
fn test_create_tx_custom_locktime() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.add_recipient(addr.script_pubkey(), 25_000)
|
.add_recipient(addr.script_pubkey(), 25_000)
|
||||||
@ -447,7 +448,7 @@ fn test_create_tx_custom_locktime() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_custom_locktime_compatible_with_cltv() {
|
fn test_create_tx_custom_locktime_compatible_with_cltv() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_single_sig_cltv());
|
let (mut wallet, _) = get_funded_wallet(get_test_single_sig_cltv());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.add_recipient(addr.script_pubkey(), 25_000)
|
.add_recipient(addr.script_pubkey(), 25_000)
|
||||||
@ -460,7 +461,7 @@ fn test_create_tx_custom_locktime_compatible_with_cltv() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_custom_locktime_incompatible_with_cltv() {
|
fn test_create_tx_custom_locktime_incompatible_with_cltv() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_single_sig_cltv());
|
let (mut wallet, _) = get_funded_wallet(get_test_single_sig_cltv());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.add_recipient(addr.script_pubkey(), 25_000)
|
.add_recipient(addr.script_pubkey(), 25_000)
|
||||||
@ -473,7 +474,7 @@ fn test_create_tx_custom_locktime_incompatible_with_cltv() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_no_rbf_csv() {
|
fn test_create_tx_no_rbf_csv() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_single_sig_csv());
|
let (mut wallet, _) = get_funded_wallet(get_test_single_sig_csv());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.add_recipient(addr.script_pubkey(), 25_000);
|
builder.add_recipient(addr.script_pubkey(), 25_000);
|
||||||
let psbt = builder.finish().unwrap();
|
let psbt = builder.finish().unwrap();
|
||||||
@ -484,7 +485,7 @@ fn test_create_tx_no_rbf_csv() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_with_default_rbf_csv() {
|
fn test_create_tx_with_default_rbf_csv() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_single_sig_csv());
|
let (mut wallet, _) = get_funded_wallet(get_test_single_sig_csv());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.add_recipient(addr.script_pubkey(), 25_000)
|
.add_recipient(addr.script_pubkey(), 25_000)
|
||||||
@ -498,7 +499,7 @@ fn test_create_tx_with_default_rbf_csv() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_with_custom_rbf_csv() {
|
fn test_create_tx_with_custom_rbf_csv() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_single_sig_csv());
|
let (mut wallet, _) = get_funded_wallet(get_test_single_sig_csv());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.add_recipient(addr.script_pubkey(), 25_000)
|
.add_recipient(addr.script_pubkey(), 25_000)
|
||||||
@ -511,7 +512,7 @@ fn test_create_tx_with_custom_rbf_csv() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_no_rbf_cltv() {
|
fn test_create_tx_no_rbf_cltv() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_single_sig_cltv());
|
let (mut wallet, _) = get_funded_wallet(get_test_single_sig_cltv());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.add_recipient(addr.script_pubkey(), 25_000);
|
builder.add_recipient(addr.script_pubkey(), 25_000);
|
||||||
let psbt = builder.finish().unwrap();
|
let psbt = builder.finish().unwrap();
|
||||||
@ -522,7 +523,7 @@ fn test_create_tx_no_rbf_cltv() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_invalid_rbf_sequence() {
|
fn test_create_tx_invalid_rbf_sequence() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.add_recipient(addr.script_pubkey(), 25_000)
|
.add_recipient(addr.script_pubkey(), 25_000)
|
||||||
@ -533,7 +534,7 @@ fn test_create_tx_invalid_rbf_sequence() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_custom_rbf_sequence() {
|
fn test_create_tx_custom_rbf_sequence() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.add_recipient(addr.script_pubkey(), 25_000)
|
.add_recipient(addr.script_pubkey(), 25_000)
|
||||||
@ -546,7 +547,7 @@ fn test_create_tx_custom_rbf_sequence() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_default_sequence() {
|
fn test_create_tx_default_sequence() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.add_recipient(addr.script_pubkey(), 25_000);
|
builder.add_recipient(addr.script_pubkey(), 25_000);
|
||||||
let psbt = builder.finish().unwrap();
|
let psbt = builder.finish().unwrap();
|
||||||
@ -557,7 +558,7 @@ fn test_create_tx_default_sequence() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_change_policy_no_internal() {
|
fn test_create_tx_change_policy_no_internal() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.add_recipient(addr.script_pubkey(), 25_000)
|
.add_recipient(addr.script_pubkey(), 25_000)
|
||||||
@ -580,7 +581,7 @@ macro_rules! check_fee {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_drain_wallet_and_drain_to() {
|
fn test_create_tx_drain_wallet_and_drain_to() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
||||||
let psbt = builder.finish().unwrap();
|
let psbt = builder.finish().unwrap();
|
||||||
@ -599,7 +600,7 @@ fn test_create_tx_drain_wallet_and_drain_to_and_with_recipient() {
|
|||||||
let addr = Address::from_str("2N4eQYCbKUHCCTUjBJeHcJp9ok6J2GZsTDt")
|
let addr = Address::from_str("2N4eQYCbKUHCCTUjBJeHcJp9ok6J2GZsTDt")
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.assume_checked();
|
.assume_checked();
|
||||||
let drain_addr = wallet.get_address(New);
|
let drain_addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.add_recipient(addr.script_pubkey(), 20_000)
|
.add_recipient(addr.script_pubkey(), 20_000)
|
||||||
@ -625,7 +626,7 @@ fn test_create_tx_drain_wallet_and_drain_to_and_with_recipient() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_drain_to_and_utxos() {
|
fn test_create_tx_drain_to_and_utxos() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let utxos: Vec<_> = wallet.list_unspent().map(|u| u.outpoint).collect();
|
let utxos: Vec<_> = wallet.list_unspent().map(|u| u.outpoint).collect();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
@ -646,7 +647,7 @@ fn test_create_tx_drain_to_and_utxos() {
|
|||||||
#[should_panic(expected = "NoRecipients")]
|
#[should_panic(expected = "NoRecipients")]
|
||||||
fn test_create_tx_drain_to_no_drain_wallet_no_utxos() {
|
fn test_create_tx_drain_to_no_drain_wallet_no_utxos() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let drain_addr = wallet.get_address(New);
|
let drain_addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.drain_to(drain_addr.script_pubkey());
|
builder.drain_to(drain_addr.script_pubkey());
|
||||||
builder.finish().unwrap();
|
builder.finish().unwrap();
|
||||||
@ -655,7 +656,7 @@ fn test_create_tx_drain_to_no_drain_wallet_no_utxos() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_default_fee_rate() {
|
fn test_create_tx_default_fee_rate() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.add_recipient(addr.script_pubkey(), 25_000);
|
builder.add_recipient(addr.script_pubkey(), 25_000);
|
||||||
let psbt = builder.finish().unwrap();
|
let psbt = builder.finish().unwrap();
|
||||||
@ -667,7 +668,7 @@ fn test_create_tx_default_fee_rate() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_custom_fee_rate() {
|
fn test_create_tx_custom_fee_rate() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.add_recipient(addr.script_pubkey(), 25_000)
|
.add_recipient(addr.script_pubkey(), 25_000)
|
||||||
@ -681,7 +682,7 @@ fn test_create_tx_custom_fee_rate() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_absolute_fee() {
|
fn test_create_tx_absolute_fee() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.drain_to(addr.script_pubkey())
|
.drain_to(addr.script_pubkey())
|
||||||
@ -701,7 +702,7 @@ fn test_create_tx_absolute_fee() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_absolute_zero_fee() {
|
fn test_create_tx_absolute_zero_fee() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.drain_to(addr.script_pubkey())
|
.drain_to(addr.script_pubkey())
|
||||||
@ -722,7 +723,7 @@ fn test_create_tx_absolute_zero_fee() {
|
|||||||
#[should_panic(expected = "InsufficientFunds")]
|
#[should_panic(expected = "InsufficientFunds")]
|
||||||
fn test_create_tx_absolute_high_fee() {
|
fn test_create_tx_absolute_high_fee() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.drain_to(addr.script_pubkey())
|
.drain_to(addr.script_pubkey())
|
||||||
@ -736,7 +737,7 @@ fn test_create_tx_add_change() {
|
|||||||
use bdk::wallet::tx_builder::TxOrdering;
|
use bdk::wallet::tx_builder::TxOrdering;
|
||||||
|
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.add_recipient(addr.script_pubkey(), 25_000)
|
.add_recipient(addr.script_pubkey(), 25_000)
|
||||||
@ -755,7 +756,7 @@ fn test_create_tx_add_change() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_skip_change_dust() {
|
fn test_create_tx_skip_change_dust() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.add_recipient(addr.script_pubkey(), 49_800);
|
builder.add_recipient(addr.script_pubkey(), 49_800);
|
||||||
let psbt = builder.finish().unwrap();
|
let psbt = builder.finish().unwrap();
|
||||||
@ -770,7 +771,7 @@ fn test_create_tx_skip_change_dust() {
|
|||||||
#[should_panic(expected = "InsufficientFunds")]
|
#[should_panic(expected = "InsufficientFunds")]
|
||||||
fn test_create_tx_drain_to_dust_amount() {
|
fn test_create_tx_drain_to_dust_amount() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
// very high fee rate, so that the only output would be below dust
|
// very high fee rate, so that the only output would be below dust
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
@ -783,7 +784,7 @@ fn test_create_tx_drain_to_dust_amount() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_ordering_respected() {
|
fn test_create_tx_ordering_respected() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.add_recipient(addr.script_pubkey(), 30_000)
|
.add_recipient(addr.script_pubkey(), 30_000)
|
||||||
@ -804,7 +805,7 @@ fn test_create_tx_ordering_respected() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_default_sighash() {
|
fn test_create_tx_default_sighash() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.add_recipient(addr.script_pubkey(), 30_000);
|
builder.add_recipient(addr.script_pubkey(), 30_000);
|
||||||
let psbt = builder.finish().unwrap();
|
let psbt = builder.finish().unwrap();
|
||||||
@ -815,7 +816,7 @@ fn test_create_tx_default_sighash() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_create_tx_custom_sighash() {
|
fn test_create_tx_custom_sighash() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.add_recipient(addr.script_pubkey(), 30_000)
|
.add_recipient(addr.script_pubkey(), 30_000)
|
||||||
@ -834,7 +835,7 @@ fn test_create_tx_input_hd_keypaths() {
|
|||||||
use core::str::FromStr;
|
use core::str::FromStr;
|
||||||
|
|
||||||
let (mut wallet, _) = get_funded_wallet("wpkh([d34db33f/44'/0'/0']tpubDEnoLuPdBep9bzw5LoGYpsxUQYheRQ9gcgrJhJEcdKFB9cWQRyYmkCyRoTqeD4tJYiVVgt6A3rN6rWn9RYhR9sBsGxji29LYWHuKKbdb1ev/0/*)");
|
let (mut wallet, _) = get_funded_wallet("wpkh([d34db33f/44'/0'/0']tpubDEnoLuPdBep9bzw5LoGYpsxUQYheRQ9gcgrJhJEcdKFB9cWQRyYmkCyRoTqeD4tJYiVVgt6A3rN6rWn9RYhR9sBsGxji29LYWHuKKbdb1ev/0/*)");
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
||||||
let psbt = builder.finish().unwrap();
|
let psbt = builder.finish().unwrap();
|
||||||
@ -856,7 +857,7 @@ fn test_create_tx_output_hd_keypaths() {
|
|||||||
|
|
||||||
let (mut wallet, _) = get_funded_wallet("wpkh([d34db33f/44'/0'/0']tpubDEnoLuPdBep9bzw5LoGYpsxUQYheRQ9gcgrJhJEcdKFB9cWQRyYmkCyRoTqeD4tJYiVVgt6A3rN6rWn9RYhR9sBsGxji29LYWHuKKbdb1ev/0/*)");
|
let (mut wallet, _) = get_funded_wallet("wpkh([d34db33f/44'/0'/0']tpubDEnoLuPdBep9bzw5LoGYpsxUQYheRQ9gcgrJhJEcdKFB9cWQRyYmkCyRoTqeD4tJYiVVgt6A3rN6rWn9RYhR9sBsGxji29LYWHuKKbdb1ev/0/*)");
|
||||||
|
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
||||||
let psbt = builder.finish().unwrap();
|
let psbt = builder.finish().unwrap();
|
||||||
@ -878,7 +879,7 @@ fn test_create_tx_set_redeem_script_p2sh() {
|
|||||||
|
|
||||||
let (mut wallet, _) =
|
let (mut wallet, _) =
|
||||||
get_funded_wallet("sh(pk(cVpPVruEDdmutPzisEsYvtST1usBR3ntr8pXSyt6D2YYqXRyPcFW))");
|
get_funded_wallet("sh(pk(cVpPVruEDdmutPzisEsYvtST1usBR3ntr8pXSyt6D2YYqXRyPcFW))");
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
||||||
let psbt = builder.finish().unwrap();
|
let psbt = builder.finish().unwrap();
|
||||||
@ -901,7 +902,7 @@ fn test_create_tx_set_witness_script_p2wsh() {
|
|||||||
|
|
||||||
let (mut wallet, _) =
|
let (mut wallet, _) =
|
||||||
get_funded_wallet("wsh(pk(cVpPVruEDdmutPzisEsYvtST1usBR3ntr8pXSyt6D2YYqXRyPcFW))");
|
get_funded_wallet("wsh(pk(cVpPVruEDdmutPzisEsYvtST1usBR3ntr8pXSyt6D2YYqXRyPcFW))");
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
||||||
let psbt = builder.finish().unwrap();
|
let psbt = builder.finish().unwrap();
|
||||||
@ -922,7 +923,7 @@ fn test_create_tx_set_witness_script_p2wsh() {
|
|||||||
fn test_create_tx_set_redeem_witness_script_p2wsh_p2sh() {
|
fn test_create_tx_set_redeem_witness_script_p2wsh_p2sh() {
|
||||||
let (mut wallet, _) =
|
let (mut wallet, _) =
|
||||||
get_funded_wallet("sh(wsh(pk(cVpPVruEDdmutPzisEsYvtST1usBR3ntr8pXSyt6D2YYqXRyPcFW)))");
|
get_funded_wallet("sh(wsh(pk(cVpPVruEDdmutPzisEsYvtST1usBR3ntr8pXSyt6D2YYqXRyPcFW)))");
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
||||||
let psbt = builder.finish().unwrap();
|
let psbt = builder.finish().unwrap();
|
||||||
@ -940,7 +941,7 @@ fn test_create_tx_set_redeem_witness_script_p2wsh_p2sh() {
|
|||||||
fn test_create_tx_non_witness_utxo() {
|
fn test_create_tx_non_witness_utxo() {
|
||||||
let (mut wallet, _) =
|
let (mut wallet, _) =
|
||||||
get_funded_wallet("sh(pk(cVpPVruEDdmutPzisEsYvtST1usBR3ntr8pXSyt6D2YYqXRyPcFW))");
|
get_funded_wallet("sh(pk(cVpPVruEDdmutPzisEsYvtST1usBR3ntr8pXSyt6D2YYqXRyPcFW))");
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
||||||
let psbt = builder.finish().unwrap();
|
let psbt = builder.finish().unwrap();
|
||||||
@ -953,7 +954,7 @@ fn test_create_tx_non_witness_utxo() {
|
|||||||
fn test_create_tx_only_witness_utxo() {
|
fn test_create_tx_only_witness_utxo() {
|
||||||
let (mut wallet, _) =
|
let (mut wallet, _) =
|
||||||
get_funded_wallet("wsh(pk(cVpPVruEDdmutPzisEsYvtST1usBR3ntr8pXSyt6D2YYqXRyPcFW))");
|
get_funded_wallet("wsh(pk(cVpPVruEDdmutPzisEsYvtST1usBR3ntr8pXSyt6D2YYqXRyPcFW))");
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.drain_to(addr.script_pubkey())
|
.drain_to(addr.script_pubkey())
|
||||||
@ -969,7 +970,7 @@ fn test_create_tx_only_witness_utxo() {
|
|||||||
fn test_create_tx_shwpkh_has_witness_utxo() {
|
fn test_create_tx_shwpkh_has_witness_utxo() {
|
||||||
let (mut wallet, _) =
|
let (mut wallet, _) =
|
||||||
get_funded_wallet("sh(wpkh(cVpPVruEDdmutPzisEsYvtST1usBR3ntr8pXSyt6D2YYqXRyPcFW))");
|
get_funded_wallet("sh(wpkh(cVpPVruEDdmutPzisEsYvtST1usBR3ntr8pXSyt6D2YYqXRyPcFW))");
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
||||||
let psbt = builder.finish().unwrap();
|
let psbt = builder.finish().unwrap();
|
||||||
@ -981,7 +982,7 @@ fn test_create_tx_shwpkh_has_witness_utxo() {
|
|||||||
fn test_create_tx_both_non_witness_utxo_and_witness_utxo_default() {
|
fn test_create_tx_both_non_witness_utxo_and_witness_utxo_default() {
|
||||||
let (mut wallet, _) =
|
let (mut wallet, _) =
|
||||||
get_funded_wallet("wsh(pk(cVpPVruEDdmutPzisEsYvtST1usBR3ntr8pXSyt6D2YYqXRyPcFW))");
|
get_funded_wallet("wsh(pk(cVpPVruEDdmutPzisEsYvtST1usBR3ntr8pXSyt6D2YYqXRyPcFW))");
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
||||||
let psbt = builder.finish().unwrap();
|
let psbt = builder.finish().unwrap();
|
||||||
@ -996,8 +997,11 @@ fn test_create_tx_add_utxo() {
|
|||||||
let small_output_tx = Transaction {
|
let small_output_tx = Transaction {
|
||||||
input: vec![],
|
input: vec![],
|
||||||
output: vec![TxOut {
|
output: vec![TxOut {
|
||||||
|
script_pubkey: wallet
|
||||||
|
.next_unused_address(KeychainKind::External)
|
||||||
|
.unwrap()
|
||||||
|
.script_pubkey(),
|
||||||
value: Amount::from_sat(25_000),
|
value: Amount::from_sat(25_000),
|
||||||
script_pubkey: wallet.get_address(New).address.script_pubkey(),
|
|
||||||
}],
|
}],
|
||||||
version: transaction::Version::non_standard(0),
|
version: transaction::Version::non_standard(0),
|
||||||
lock_time: absolute::LockTime::ZERO,
|
lock_time: absolute::LockTime::ZERO,
|
||||||
@ -1042,8 +1046,11 @@ fn test_create_tx_manually_selected_insufficient() {
|
|||||||
let small_output_tx = Transaction {
|
let small_output_tx = Transaction {
|
||||||
input: vec![],
|
input: vec![],
|
||||||
output: vec![TxOut {
|
output: vec![TxOut {
|
||||||
|
script_pubkey: wallet
|
||||||
|
.next_unused_address(KeychainKind::External)
|
||||||
|
.unwrap()
|
||||||
|
.script_pubkey(),
|
||||||
value: Amount::from_sat(25_000),
|
value: Amount::from_sat(25_000),
|
||||||
script_pubkey: wallet.get_address(New).address.script_pubkey(),
|
|
||||||
}],
|
}],
|
||||||
version: transaction::Version::non_standard(0),
|
version: transaction::Version::non_standard(0),
|
||||||
lock_time: absolute::LockTime::ZERO,
|
lock_time: absolute::LockTime::ZERO,
|
||||||
@ -1094,8 +1101,11 @@ fn test_create_tx_policy_path_no_csv() {
|
|||||||
lock_time: absolute::LockTime::ZERO,
|
lock_time: absolute::LockTime::ZERO,
|
||||||
input: vec![],
|
input: vec![],
|
||||||
output: vec![TxOut {
|
output: vec![TxOut {
|
||||||
|
script_pubkey: wallet
|
||||||
|
.next_unused_address(KeychainKind::External)
|
||||||
|
.unwrap()
|
||||||
|
.script_pubkey(),
|
||||||
value: Amount::from_sat(50_000),
|
value: Amount::from_sat(50_000),
|
||||||
script_pubkey: wallet.get_address(New).script_pubkey(),
|
|
||||||
}],
|
}],
|
||||||
};
|
};
|
||||||
wallet
|
wallet
|
||||||
@ -1167,7 +1177,7 @@ fn test_create_tx_global_xpubs_with_origin() {
|
|||||||
use bitcoin::hex::FromHex;
|
use bitcoin::hex::FromHex;
|
||||||
|
|
||||||
let (mut wallet, _) = get_funded_wallet("wpkh([73756c7f/48'/0'/0'/2']tpubDCKxNyM3bLgbEX13Mcd8mYxbVg9ajDkWXMh29hMWBurKfVmBfWAM96QVP3zaUcN51HvkZ3ar4VwP82kC8JZhhux8vFQoJintSpVBwpFvyU3/0/*)");
|
let (mut wallet, _) = get_funded_wallet("wpkh([73756c7f/48'/0'/0'/2']tpubDCKxNyM3bLgbEX13Mcd8mYxbVg9ajDkWXMh29hMWBurKfVmBfWAM96QVP3zaUcN51HvkZ3ar4VwP82kC8JZhhux8vFQoJintSpVBwpFvyU3/0/*)");
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.add_recipient(addr.script_pubkey(), 25_000)
|
.add_recipient(addr.script_pubkey(), 25_000)
|
||||||
@ -1430,7 +1440,7 @@ fn test_get_psbt_input() {
|
|||||||
)]
|
)]
|
||||||
fn test_create_tx_global_xpubs_origin_missing() {
|
fn test_create_tx_global_xpubs_origin_missing() {
|
||||||
let (mut wallet, _) = get_funded_wallet("wpkh(tpubDCKxNyM3bLgbEX13Mcd8mYxbVg9ajDkWXMh29hMWBurKfVmBfWAM96QVP3zaUcN51HvkZ3ar4VwP82kC8JZhhux8vFQoJintSpVBwpFvyU3/0/*)");
|
let (mut wallet, _) = get_funded_wallet("wpkh(tpubDCKxNyM3bLgbEX13Mcd8mYxbVg9ajDkWXMh29hMWBurKfVmBfWAM96QVP3zaUcN51HvkZ3ar4VwP82kC8JZhhux8vFQoJintSpVBwpFvyU3/0/*)");
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.add_recipient(addr.script_pubkey(), 25_000)
|
.add_recipient(addr.script_pubkey(), 25_000)
|
||||||
@ -1444,7 +1454,7 @@ fn test_create_tx_global_xpubs_master_without_origin() {
|
|||||||
use bitcoin::hex::FromHex;
|
use bitcoin::hex::FromHex;
|
||||||
|
|
||||||
let (mut wallet, _) = get_funded_wallet("wpkh(tpubD6NzVbkrYhZ4Y55A58Gv9RSNF5hy84b5AJqYy7sCcjFrkcLpPre8kmgfit6kY1Zs3BLgeypTDBZJM222guPpdz7Cup5yzaMu62u7mYGbwFL/0/*)");
|
let (mut wallet, _) = get_funded_wallet("wpkh(tpubD6NzVbkrYhZ4Y55A58Gv9RSNF5hy84b5AJqYy7sCcjFrkcLpPre8kmgfit6kY1Zs3BLgeypTDBZJM222guPpdz7Cup5yzaMu62u7mYGbwFL/0/*)");
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.add_recipient(addr.script_pubkey(), 25_000)
|
.add_recipient(addr.script_pubkey(), 25_000)
|
||||||
@ -1465,7 +1475,7 @@ fn test_create_tx_global_xpubs_master_without_origin() {
|
|||||||
#[should_panic(expected = "IrreplaceableTransaction")]
|
#[should_panic(expected = "IrreplaceableTransaction")]
|
||||||
fn test_bump_fee_irreplaceable_tx() {
|
fn test_bump_fee_irreplaceable_tx() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.add_recipient(addr.script_pubkey(), 25_000);
|
builder.add_recipient(addr.script_pubkey(), 25_000);
|
||||||
let psbt = builder.finish().unwrap();
|
let psbt = builder.finish().unwrap();
|
||||||
@ -1482,7 +1492,7 @@ fn test_bump_fee_irreplaceable_tx() {
|
|||||||
#[should_panic(expected = "TransactionConfirmed")]
|
#[should_panic(expected = "TransactionConfirmed")]
|
||||||
fn test_bump_fee_confirmed_tx() {
|
fn test_bump_fee_confirmed_tx() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.add_recipient(addr.script_pubkey(), 25_000);
|
builder.add_recipient(addr.script_pubkey(), 25_000);
|
||||||
let psbt = builder.finish().unwrap();
|
let psbt = builder.finish().unwrap();
|
||||||
@ -1506,7 +1516,7 @@ fn test_bump_fee_confirmed_tx() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_bump_fee_low_fee_rate() {
|
fn test_bump_fee_low_fee_rate() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.add_recipient(addr.script_pubkey(), 25_000)
|
.add_recipient(addr.script_pubkey(), 25_000)
|
||||||
@ -1540,7 +1550,7 @@ fn test_bump_fee_low_fee_rate() {
|
|||||||
#[should_panic(expected = "FeeTooLow")]
|
#[should_panic(expected = "FeeTooLow")]
|
||||||
fn test_bump_fee_low_abs() {
|
fn test_bump_fee_low_abs() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.add_recipient(addr.script_pubkey(), 25_000)
|
.add_recipient(addr.script_pubkey(), 25_000)
|
||||||
@ -1563,7 +1573,7 @@ fn test_bump_fee_low_abs() {
|
|||||||
#[should_panic(expected = "FeeTooLow")]
|
#[should_panic(expected = "FeeTooLow")]
|
||||||
fn test_bump_fee_zero_abs() {
|
fn test_bump_fee_zero_abs() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.add_recipient(addr.script_pubkey(), 25_000)
|
.add_recipient(addr.script_pubkey(), 25_000)
|
||||||
@ -1777,8 +1787,11 @@ fn test_bump_fee_drain_wallet() {
|
|||||||
lock_time: absolute::LockTime::ZERO,
|
lock_time: absolute::LockTime::ZERO,
|
||||||
input: vec![],
|
input: vec![],
|
||||||
output: vec![TxOut {
|
output: vec![TxOut {
|
||||||
|
script_pubkey: wallet
|
||||||
|
.next_unused_address(KeychainKind::External)
|
||||||
|
.unwrap()
|
||||||
|
.script_pubkey(),
|
||||||
value: Amount::from_sat(25_000),
|
value: Amount::from_sat(25_000),
|
||||||
script_pubkey: wallet.get_address(New).script_pubkey(),
|
|
||||||
}],
|
}],
|
||||||
};
|
};
|
||||||
wallet
|
wallet
|
||||||
@ -1842,7 +1855,10 @@ fn test_bump_fee_remove_output_manually_selected_only() {
|
|||||||
lock_time: absolute::LockTime::ZERO,
|
lock_time: absolute::LockTime::ZERO,
|
||||||
input: vec![],
|
input: vec![],
|
||||||
output: vec![TxOut {
|
output: vec![TxOut {
|
||||||
script_pubkey: wallet.get_address(New).script_pubkey(),
|
script_pubkey: wallet
|
||||||
|
.next_unused_address(KeychainKind::External)
|
||||||
|
.unwrap()
|
||||||
|
.script_pubkey(),
|
||||||
value: Amount::from_sat(25_000),
|
value: Amount::from_sat(25_000),
|
||||||
}],
|
}],
|
||||||
};
|
};
|
||||||
@ -1896,7 +1912,10 @@ fn test_bump_fee_add_input() {
|
|||||||
lock_time: absolute::LockTime::ZERO,
|
lock_time: absolute::LockTime::ZERO,
|
||||||
input: vec![],
|
input: vec![],
|
||||||
output: vec![TxOut {
|
output: vec![TxOut {
|
||||||
script_pubkey: wallet.get_address(New).script_pubkey(),
|
script_pubkey: wallet
|
||||||
|
.next_unused_address(KeychainKind::External)
|
||||||
|
.unwrap()
|
||||||
|
.script_pubkey(),
|
||||||
value: Amount::from_sat(25_000),
|
value: Amount::from_sat(25_000),
|
||||||
}],
|
}],
|
||||||
};
|
};
|
||||||
@ -2378,7 +2397,7 @@ fn test_fee_amount_negative_drain_val() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_sign_single_xprv() {
|
fn test_sign_single_xprv() {
|
||||||
let (mut wallet, _) = get_funded_wallet("wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
|
let (mut wallet, _) = get_funded_wallet("wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
||||||
let mut psbt = builder.finish().unwrap();
|
let mut psbt = builder.finish().unwrap();
|
||||||
@ -2393,7 +2412,7 @@ fn test_sign_single_xprv() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_sign_single_xprv_with_master_fingerprint_and_path() {
|
fn test_sign_single_xprv_with_master_fingerprint_and_path() {
|
||||||
let (mut wallet, _) = get_funded_wallet("wpkh([d34db33f/84h/1h/0h]tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
|
let (mut wallet, _) = get_funded_wallet("wpkh([d34db33f/84h/1h/0h]tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
||||||
let mut psbt = builder.finish().unwrap();
|
let mut psbt = builder.finish().unwrap();
|
||||||
@ -2408,7 +2427,7 @@ fn test_sign_single_xprv_with_master_fingerprint_and_path() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_sign_single_xprv_bip44_path() {
|
fn test_sign_single_xprv_bip44_path() {
|
||||||
let (mut wallet, _) = get_funded_wallet("wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/44'/0'/0'/0/*)");
|
let (mut wallet, _) = get_funded_wallet("wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/44'/0'/0'/0/*)");
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
||||||
let mut psbt = builder.finish().unwrap();
|
let mut psbt = builder.finish().unwrap();
|
||||||
@ -2423,7 +2442,7 @@ fn test_sign_single_xprv_bip44_path() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_sign_single_xprv_sh_wpkh() {
|
fn test_sign_single_xprv_sh_wpkh() {
|
||||||
let (mut wallet, _) = get_funded_wallet("sh(wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*))");
|
let (mut wallet, _) = get_funded_wallet("sh(wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*))");
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
||||||
let mut psbt = builder.finish().unwrap();
|
let mut psbt = builder.finish().unwrap();
|
||||||
@ -2439,7 +2458,7 @@ fn test_sign_single_xprv_sh_wpkh() {
|
|||||||
fn test_sign_single_wif() {
|
fn test_sign_single_wif() {
|
||||||
let (mut wallet, _) =
|
let (mut wallet, _) =
|
||||||
get_funded_wallet("wpkh(cVpPVruEDdmutPzisEsYvtST1usBR3ntr8pXSyt6D2YYqXRyPcFW)");
|
get_funded_wallet("wpkh(cVpPVruEDdmutPzisEsYvtST1usBR3ntr8pXSyt6D2YYqXRyPcFW)");
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
||||||
let mut psbt = builder.finish().unwrap();
|
let mut psbt = builder.finish().unwrap();
|
||||||
@ -2454,7 +2473,7 @@ fn test_sign_single_wif() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_sign_single_xprv_no_hd_keypaths() {
|
fn test_sign_single_xprv_no_hd_keypaths() {
|
||||||
let (mut wallet, _) = get_funded_wallet("wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
|
let (mut wallet, _) = get_funded_wallet("wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
||||||
let mut psbt = builder.finish().unwrap();
|
let mut psbt = builder.finish().unwrap();
|
||||||
@ -2539,7 +2558,7 @@ fn test_remove_partial_sigs_after_finalize_sign_option() {
|
|||||||
let (mut wallet, _) = get_funded_wallet("wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
|
let (mut wallet, _) = get_funded_wallet("wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
|
||||||
|
|
||||||
for remove_partial_sigs in &[true, false] {
|
for remove_partial_sigs in &[true, false] {
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
||||||
let mut psbt = builder.finish().unwrap();
|
let mut psbt = builder.finish().unwrap();
|
||||||
@ -2569,7 +2588,7 @@ fn test_try_finalize_sign_option() {
|
|||||||
let (mut wallet, _) = get_funded_wallet("wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
|
let (mut wallet, _) = get_funded_wallet("wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
|
||||||
|
|
||||||
for try_finalize in &[true, false] {
|
for try_finalize in &[true, false] {
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
||||||
let mut psbt = builder.finish().unwrap();
|
let mut psbt = builder.finish().unwrap();
|
||||||
@ -2603,7 +2622,7 @@ fn test_sign_nonstandard_sighash() {
|
|||||||
let sighash = EcdsaSighashType::NonePlusAnyoneCanPay;
|
let sighash = EcdsaSighashType::NonePlusAnyoneCanPay;
|
||||||
|
|
||||||
let (mut wallet, _) = get_funded_wallet("wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
|
let (mut wallet, _) = get_funded_wallet("wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.drain_to(addr.script_pubkey())
|
.drain_to(addr.script_pubkey())
|
||||||
@ -2649,12 +2668,25 @@ fn test_unused_address() {
|
|||||||
let mut wallet = Wallet::new_no_persist("wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)",
|
let mut wallet = Wallet::new_no_persist("wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/*)",
|
||||||
None, Network::Testnet).unwrap();
|
None, Network::Testnet).unwrap();
|
||||||
|
|
||||||
|
// `list_unused_addresses` should be empty if we haven't revealed any
|
||||||
|
assert!(wallet
|
||||||
|
.list_unused_addresses(KeychainKind::External)
|
||||||
|
.next()
|
||||||
|
.is_none());
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
wallet.get_address(LastUnused).to_string(),
|
wallet
|
||||||
|
.next_unused_address(KeychainKind::External)
|
||||||
|
.unwrap()
|
||||||
|
.to_string(),
|
||||||
"tb1q6yn66vajcctph75pvylgkksgpp6nq04ppwct9a"
|
"tb1q6yn66vajcctph75pvylgkksgpp6nq04ppwct9a"
|
||||||
);
|
);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
wallet.get_address(LastUnused).to_string(),
|
wallet
|
||||||
|
.list_unused_addresses(KeychainKind::External)
|
||||||
|
.next()
|
||||||
|
.unwrap()
|
||||||
|
.to_string(),
|
||||||
"tb1q6yn66vajcctph75pvylgkksgpp6nq04ppwct9a"
|
"tb1q6yn66vajcctph75pvylgkksgpp6nq04ppwct9a"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -2666,12 +2698,18 @@ fn test_next_unused_address() {
|
|||||||
assert_eq!(wallet.derivation_index(KeychainKind::External), None);
|
assert_eq!(wallet.derivation_index(KeychainKind::External), None);
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
wallet.get_address(LastUnused).to_string(),
|
wallet
|
||||||
|
.next_unused_address(KeychainKind::External)
|
||||||
|
.unwrap()
|
||||||
|
.to_string(),
|
||||||
"tb1q6yn66vajcctph75pvylgkksgpp6nq04ppwct9a"
|
"tb1q6yn66vajcctph75pvylgkksgpp6nq04ppwct9a"
|
||||||
);
|
);
|
||||||
assert_eq!(wallet.derivation_index(KeychainKind::External), Some(0));
|
assert_eq!(wallet.derivation_index(KeychainKind::External), Some(0));
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
wallet.get_address(LastUnused).to_string(),
|
wallet
|
||||||
|
.next_unused_address(KeychainKind::External)
|
||||||
|
.unwrap()
|
||||||
|
.to_string(),
|
||||||
"tb1q6yn66vajcctph75pvylgkksgpp6nq04ppwct9a"
|
"tb1q6yn66vajcctph75pvylgkksgpp6nq04ppwct9a"
|
||||||
);
|
);
|
||||||
assert_eq!(wallet.derivation_index(KeychainKind::External), Some(0));
|
assert_eq!(wallet.derivation_index(KeychainKind::External), Some(0));
|
||||||
@ -2680,7 +2718,10 @@ fn test_next_unused_address() {
|
|||||||
receive_output_in_latest_block(&mut wallet, 25_000);
|
receive_output_in_latest_block(&mut wallet, 25_000);
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
wallet.get_address(LastUnused).to_string(),
|
wallet
|
||||||
|
.next_unused_address(KeychainKind::External)
|
||||||
|
.unwrap()
|
||||||
|
.to_string(),
|
||||||
"tb1q4er7kxx6sssz3q7qp7zsqsdx4erceahhax77d7"
|
"tb1q4er7kxx6sssz3q7qp7zsqsdx4erceahhax77d7"
|
||||||
);
|
);
|
||||||
assert_eq!(wallet.derivation_index(KeychainKind::External), Some(1));
|
assert_eq!(wallet.derivation_index(KeychainKind::External), Some(1));
|
||||||
@ -2692,49 +2733,55 @@ fn test_peek_address_at_index() {
|
|||||||
None, Network::Testnet).unwrap();
|
None, Network::Testnet).unwrap();
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
wallet.get_address(Peek(1)).to_string(),
|
wallet.peek_address(KeychainKind::External, 1).to_string(),
|
||||||
"tb1q4er7kxx6sssz3q7qp7zsqsdx4erceahhax77d7"
|
"tb1q4er7kxx6sssz3q7qp7zsqsdx4erceahhax77d7"
|
||||||
);
|
);
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
wallet.get_address(Peek(0)).to_string(),
|
wallet.peek_address(KeychainKind::External, 0).to_string(),
|
||||||
"tb1q6yn66vajcctph75pvylgkksgpp6nq04ppwct9a"
|
"tb1q6yn66vajcctph75pvylgkksgpp6nq04ppwct9a"
|
||||||
);
|
);
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
wallet.get_address(Peek(2)).to_string(),
|
wallet.peek_address(KeychainKind::External, 2).to_string(),
|
||||||
"tb1qzntf2mqex4ehwkjlfdyy3ewdlk08qkvkvrz7x2"
|
"tb1qzntf2mqex4ehwkjlfdyy3ewdlk08qkvkvrz7x2"
|
||||||
);
|
);
|
||||||
|
|
||||||
// current new address is not affected
|
// current new address is not affected
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
wallet.get_address(New).to_string(),
|
wallet
|
||||||
|
.reveal_next_address(KeychainKind::External)
|
||||||
|
.unwrap()
|
||||||
|
.to_string(),
|
||||||
"tb1q6yn66vajcctph75pvylgkksgpp6nq04ppwct9a"
|
"tb1q6yn66vajcctph75pvylgkksgpp6nq04ppwct9a"
|
||||||
);
|
);
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
wallet.get_address(New).to_string(),
|
wallet
|
||||||
|
.reveal_next_address(KeychainKind::External)
|
||||||
|
.unwrap()
|
||||||
|
.to_string(),
|
||||||
"tb1q4er7kxx6sssz3q7qp7zsqsdx4erceahhax77d7"
|
"tb1q4er7kxx6sssz3q7qp7zsqsdx4erceahhax77d7"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_peek_address_at_index_not_derivable() {
|
fn test_peek_address_at_index_not_derivable() {
|
||||||
let mut wallet = Wallet::new_no_persist("wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/1)",
|
let wallet = Wallet::new_no_persist("wpkh(tpubEBr4i6yk5nf5DAaJpsi9N2pPYBeJ7fZ5Z9rmN4977iYLCGco1VyjB9tvvuvYtfZzjD5A8igzgw3HeWeeKFmanHYqksqZXYXGsw5zjnj7KM9/1)",
|
||||||
None, Network::Testnet).unwrap();
|
None, Network::Testnet).unwrap();
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
wallet.get_address(Peek(1)).to_string(),
|
wallet.peek_address(KeychainKind::External, 1).to_string(),
|
||||||
"tb1q4er7kxx6sssz3q7qp7zsqsdx4erceahhax77d7"
|
"tb1q4er7kxx6sssz3q7qp7zsqsdx4erceahhax77d7"
|
||||||
);
|
);
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
wallet.get_address(Peek(0)).to_string(),
|
wallet.peek_address(KeychainKind::External, 0).to_string(),
|
||||||
"tb1q4er7kxx6sssz3q7qp7zsqsdx4erceahhax77d7"
|
"tb1q4er7kxx6sssz3q7qp7zsqsdx4erceahhax77d7"
|
||||||
);
|
);
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
wallet.get_address(Peek(2)).to_string(),
|
wallet.peek_address(KeychainKind::External, 2).to_string(),
|
||||||
"tb1q4er7kxx6sssz3q7qp7zsqsdx4erceahhax77d7"
|
"tb1q4er7kxx6sssz3q7qp7zsqsdx4erceahhax77d7"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -2746,7 +2793,7 @@ fn test_returns_index_and_address() {
|
|||||||
|
|
||||||
// new index 0
|
// new index 0
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
wallet.get_address(New),
|
wallet.reveal_next_address(KeychainKind::External).unwrap(),
|
||||||
AddressInfo {
|
AddressInfo {
|
||||||
index: 0,
|
index: 0,
|
||||||
address: Address::from_str("tb1q6yn66vajcctph75pvylgkksgpp6nq04ppwct9a")
|
address: Address::from_str("tb1q6yn66vajcctph75pvylgkksgpp6nq04ppwct9a")
|
||||||
@ -2758,7 +2805,7 @@ fn test_returns_index_and_address() {
|
|||||||
|
|
||||||
// new index 1
|
// new index 1
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
wallet.get_address(New),
|
wallet.reveal_next_address(KeychainKind::External).unwrap(),
|
||||||
AddressInfo {
|
AddressInfo {
|
||||||
index: 1,
|
index: 1,
|
||||||
address: Address::from_str("tb1q4er7kxx6sssz3q7qp7zsqsdx4erceahhax77d7")
|
address: Address::from_str("tb1q4er7kxx6sssz3q7qp7zsqsdx4erceahhax77d7")
|
||||||
@ -2770,7 +2817,7 @@ fn test_returns_index_and_address() {
|
|||||||
|
|
||||||
// peek index 25
|
// peek index 25
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
wallet.get_address(Peek(25)),
|
wallet.peek_address(KeychainKind::External, 25),
|
||||||
AddressInfo {
|
AddressInfo {
|
||||||
index: 25,
|
index: 25,
|
||||||
address: Address::from_str("tb1qsp7qu0knx3sl6536dzs0703u2w2ag6ppl9d0c2")
|
address: Address::from_str("tb1qsp7qu0knx3sl6536dzs0703u2w2ag6ppl9d0c2")
|
||||||
@ -2782,7 +2829,7 @@ fn test_returns_index_and_address() {
|
|||||||
|
|
||||||
// new index 2
|
// new index 2
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
wallet.get_address(New),
|
wallet.reveal_next_address(KeychainKind::External).unwrap(),
|
||||||
AddressInfo {
|
AddressInfo {
|
||||||
index: 2,
|
index: 2,
|
||||||
address: Address::from_str("tb1qzntf2mqex4ehwkjlfdyy3ewdlk08qkvkvrz7x2")
|
address: Address::from_str("tb1qzntf2mqex4ehwkjlfdyy3ewdlk08qkvkvrz7x2")
|
||||||
@ -2808,7 +2855,7 @@ fn test_sending_to_bip350_bech32m_address() {
|
|||||||
fn test_get_address() {
|
fn test_get_address() {
|
||||||
use bdk::descriptor::template::Bip84;
|
use bdk::descriptor::template::Bip84;
|
||||||
let key = bitcoin::bip32::Xpriv::from_str("tprv8ZgxMBicQKsPcx5nBGsR63Pe8KnRUqmbJNENAfGftF3yuXoMMoVJJcYeUw5eVkm9WBPjWYt6HMWYJNesB5HaNVBaFc1M6dRjWSYnmewUMYy").unwrap();
|
let key = bitcoin::bip32::Xpriv::from_str("tprv8ZgxMBicQKsPcx5nBGsR63Pe8KnRUqmbJNENAfGftF3yuXoMMoVJJcYeUw5eVkm9WBPjWYt6HMWYJNesB5HaNVBaFc1M6dRjWSYnmewUMYy").unwrap();
|
||||||
let mut wallet = Wallet::new_no_persist(
|
let wallet = Wallet::new_no_persist(
|
||||||
Bip84(key, KeychainKind::External),
|
Bip84(key, KeychainKind::External),
|
||||||
Some(Bip84(key, KeychainKind::Internal)),
|
Some(Bip84(key, KeychainKind::Internal)),
|
||||||
Network::Regtest,
|
Network::Regtest,
|
||||||
@ -2816,7 +2863,7 @@ fn test_get_address() {
|
|||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
wallet.get_address(AddressIndex::New),
|
wallet.peek_address(KeychainKind::External, 0),
|
||||||
AddressInfo {
|
AddressInfo {
|
||||||
index: 0,
|
index: 0,
|
||||||
address: Address::from_str("bcrt1qrhgaqu0zvf5q2d0gwwz04w0dh0cuehhqvzpp4w")
|
address: Address::from_str("bcrt1qrhgaqu0zvf5q2d0gwwz04w0dh0cuehhqvzpp4w")
|
||||||
@ -2827,7 +2874,7 @@ fn test_get_address() {
|
|||||||
);
|
);
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
wallet.get_internal_address(AddressIndex::New),
|
wallet.peek_address(KeychainKind::Internal, 0),
|
||||||
AddressInfo {
|
AddressInfo {
|
||||||
index: 0,
|
index: 0,
|
||||||
address: Address::from_str("bcrt1q0ue3s5y935tw7v3gmnh36c5zzsaw4n9c9smq79")
|
address: Address::from_str("bcrt1q0ue3s5y935tw7v3gmnh36c5zzsaw4n9c9smq79")
|
||||||
@ -2837,11 +2884,11 @@ fn test_get_address() {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
let mut wallet =
|
let wallet =
|
||||||
Wallet::new_no_persist(Bip84(key, KeychainKind::External), None, Network::Regtest).unwrap();
|
Wallet::new_no_persist(Bip84(key, KeychainKind::External), None, Network::Regtest).unwrap();
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
wallet.get_internal_address(AddressIndex::New),
|
wallet.peek_address(KeychainKind::Internal, 0),
|
||||||
AddressInfo {
|
AddressInfo {
|
||||||
index: 0,
|
index: 0,
|
||||||
address: Address::from_str("bcrt1qrhgaqu0zvf5q2d0gwwz04w0dh0cuehhqvzpp4w")
|
address: Address::from_str("bcrt1qrhgaqu0zvf5q2d0gwwz04w0dh0cuehhqvzpp4w")
|
||||||
@ -2865,10 +2912,16 @@ fn test_get_address_no_reuse_single_descriptor() {
|
|||||||
let mut used_set = HashSet::new();
|
let mut used_set = HashSet::new();
|
||||||
|
|
||||||
(0..3).for_each(|_| {
|
(0..3).for_each(|_| {
|
||||||
let external_addr = wallet.get_address(AddressIndex::New).address;
|
let external_addr = wallet
|
||||||
|
.reveal_next_address(KeychainKind::External)
|
||||||
|
.unwrap()
|
||||||
|
.address;
|
||||||
assert!(used_set.insert(external_addr));
|
assert!(used_set.insert(external_addr));
|
||||||
|
|
||||||
let internal_addr = wallet.get_internal_address(AddressIndex::New).address;
|
let internal_addr = wallet
|
||||||
|
.reveal_next_address(KeychainKind::Internal)
|
||||||
|
.unwrap()
|
||||||
|
.address;
|
||||||
assert!(used_set.insert(internal_addr));
|
assert!(used_set.insert(internal_addr));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -2877,7 +2930,7 @@ fn test_get_address_no_reuse_single_descriptor() {
|
|||||||
fn test_taproot_remove_tapfields_after_finalize_sign_option() {
|
fn test_taproot_remove_tapfields_after_finalize_sign_option() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_tr_with_taptree());
|
let (mut wallet, _) = get_funded_wallet(get_test_tr_with_taptree());
|
||||||
|
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
||||||
let mut psbt = builder.finish().unwrap();
|
let mut psbt = builder.finish().unwrap();
|
||||||
@ -2902,7 +2955,7 @@ fn test_taproot_remove_tapfields_after_finalize_sign_option() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_taproot_psbt_populate_tap_key_origins() {
|
fn test_taproot_psbt_populate_tap_key_origins() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_tr_single_sig_xprv());
|
let (mut wallet, _) = get_funded_wallet(get_test_tr_single_sig_xprv());
|
||||||
let addr = wallet.get_address(AddressIndex::New);
|
let addr = wallet.reveal_next_address(KeychainKind::External).unwrap();
|
||||||
|
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.add_recipient(addr.script_pubkey(), 25_000);
|
builder.add_recipient(addr.script_pubkey(), 25_000);
|
||||||
@ -2937,7 +2990,7 @@ fn test_taproot_psbt_populate_tap_key_origins() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_taproot_psbt_populate_tap_key_origins_repeated_key() {
|
fn test_taproot_psbt_populate_tap_key_origins_repeated_key() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_tr_repeated_key());
|
let (mut wallet, _) = get_funded_wallet(get_test_tr_repeated_key());
|
||||||
let addr = wallet.get_address(AddressIndex::New);
|
let addr = wallet.reveal_next_address(KeychainKind::External).unwrap();
|
||||||
|
|
||||||
let path = vec![("rn4nre9c".to_string(), vec![0])]
|
let path = vec![("rn4nre9c".to_string(), vec![0])]
|
||||||
.into_iter()
|
.into_iter()
|
||||||
@ -3003,7 +3056,7 @@ fn test_taproot_psbt_input_tap_tree() {
|
|||||||
use bitcoin::taproot;
|
use bitcoin::taproot;
|
||||||
|
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_tr_with_taptree());
|
let (mut wallet, _) = get_funded_wallet(get_test_tr_with_taptree());
|
||||||
let addr = wallet.get_address(AddressIndex::Peek(0));
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
|
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
||||||
@ -3046,7 +3099,7 @@ fn test_taproot_psbt_input_tap_tree() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_taproot_sign_missing_witness_utxo() {
|
fn test_taproot_sign_missing_witness_utxo() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_tr_single_sig());
|
let (mut wallet, _) = get_funded_wallet(get_test_tr_single_sig());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
||||||
let mut psbt = builder.finish().unwrap();
|
let mut psbt = builder.finish().unwrap();
|
||||||
@ -3086,7 +3139,7 @@ fn test_taproot_sign_missing_witness_utxo() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_taproot_sign_using_non_witness_utxo() {
|
fn test_taproot_sign_using_non_witness_utxo() {
|
||||||
let (mut wallet, prev_txid) = get_funded_wallet(get_test_tr_single_sig());
|
let (mut wallet, prev_txid) = get_funded_wallet(get_test_tr_single_sig());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
builder.drain_to(addr.script_pubkey()).drain_wallet();
|
||||||
let mut psbt = builder.finish().unwrap();
|
let mut psbt = builder.finish().unwrap();
|
||||||
@ -3154,7 +3207,7 @@ fn test_taproot_foreign_utxo() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn test_spend_from_wallet(mut wallet: Wallet) {
|
fn test_spend_from_wallet(mut wallet: Wallet) {
|
||||||
let addr = wallet.get_address(AddressIndex::New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
|
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.add_recipient(addr.script_pubkey(), 25_000);
|
builder.add_recipient(addr.script_pubkey(), 25_000);
|
||||||
@ -3178,7 +3231,7 @@ fn test_spend_from_wallet(mut wallet: Wallet) {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_taproot_no_key_spend() {
|
fn test_taproot_no_key_spend() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_tr_with_taptree_both_priv());
|
let (mut wallet, _) = get_funded_wallet(get_test_tr_with_taptree_both_priv());
|
||||||
let addr = wallet.get_address(AddressIndex::New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
|
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.add_recipient(addr.script_pubkey(), 25_000);
|
builder.add_recipient(addr.script_pubkey(), 25_000);
|
||||||
@ -3213,7 +3266,7 @@ fn test_taproot_script_spend() {
|
|||||||
fn test_taproot_script_spend_sign_all_leaves() {
|
fn test_taproot_script_spend_sign_all_leaves() {
|
||||||
use bdk::signer::TapLeavesOptions;
|
use bdk::signer::TapLeavesOptions;
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_tr_with_taptree_both_priv());
|
let (mut wallet, _) = get_funded_wallet(get_test_tr_with_taptree_both_priv());
|
||||||
let addr = wallet.get_address(AddressIndex::New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
|
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.add_recipient(addr.script_pubkey(), 25_000);
|
builder.add_recipient(addr.script_pubkey(), 25_000);
|
||||||
@ -3244,7 +3297,7 @@ fn test_taproot_script_spend_sign_include_some_leaves() {
|
|||||||
use bitcoin::taproot::TapLeafHash;
|
use bitcoin::taproot::TapLeafHash;
|
||||||
|
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_tr_with_taptree_both_priv());
|
let (mut wallet, _) = get_funded_wallet(get_test_tr_with_taptree_both_priv());
|
||||||
let addr = wallet.get_address(AddressIndex::New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
|
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.add_recipient(addr.script_pubkey(), 25_000);
|
builder.add_recipient(addr.script_pubkey(), 25_000);
|
||||||
@ -3284,7 +3337,7 @@ fn test_taproot_script_spend_sign_exclude_some_leaves() {
|
|||||||
use bitcoin::taproot::TapLeafHash;
|
use bitcoin::taproot::TapLeafHash;
|
||||||
|
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_tr_with_taptree_both_priv());
|
let (mut wallet, _) = get_funded_wallet(get_test_tr_with_taptree_both_priv());
|
||||||
let addr = wallet.get_address(AddressIndex::New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
|
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.add_recipient(addr.script_pubkey(), 25_000);
|
builder.add_recipient(addr.script_pubkey(), 25_000);
|
||||||
@ -3322,7 +3375,7 @@ fn test_taproot_script_spend_sign_exclude_some_leaves() {
|
|||||||
fn test_taproot_script_spend_sign_no_leaves() {
|
fn test_taproot_script_spend_sign_no_leaves() {
|
||||||
use bdk::signer::TapLeavesOptions;
|
use bdk::signer::TapLeavesOptions;
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_tr_with_taptree_both_priv());
|
let (mut wallet, _) = get_funded_wallet(get_test_tr_with_taptree_both_priv());
|
||||||
let addr = wallet.get_address(AddressIndex::New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
|
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.add_recipient(addr.script_pubkey(), 25_000);
|
builder.add_recipient(addr.script_pubkey(), 25_000);
|
||||||
@ -3345,7 +3398,7 @@ fn test_taproot_script_spend_sign_no_leaves() {
|
|||||||
fn test_taproot_sign_derive_index_from_psbt() {
|
fn test_taproot_sign_derive_index_from_psbt() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_tr_single_sig_xprv());
|
let (mut wallet, _) = get_funded_wallet(get_test_tr_single_sig_xprv());
|
||||||
|
|
||||||
let addr = wallet.get_address(AddressIndex::New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
|
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder.add_recipient(addr.script_pubkey(), 25_000);
|
builder.add_recipient(addr.script_pubkey(), 25_000);
|
||||||
@ -3366,7 +3419,7 @@ fn test_taproot_sign_derive_index_from_psbt() {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_taproot_sign_explicit_sighash_all() {
|
fn test_taproot_sign_explicit_sighash_all() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_tr_single_sig());
|
let (mut wallet, _) = get_funded_wallet(get_test_tr_single_sig());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.drain_to(addr.script_pubkey())
|
.drain_to(addr.script_pubkey())
|
||||||
@ -3386,7 +3439,7 @@ fn test_taproot_sign_non_default_sighash() {
|
|||||||
let sighash = TapSighashType::NonePlusAnyoneCanPay;
|
let sighash = TapSighashType::NonePlusAnyoneCanPay;
|
||||||
|
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_tr_single_sig());
|
let (mut wallet, _) = get_funded_wallet(get_test_tr_single_sig());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
.drain_to(addr.script_pubkey())
|
.drain_to(addr.script_pubkey())
|
||||||
@ -3470,8 +3523,11 @@ fn test_spend_coinbase() {
|
|||||||
..Default::default()
|
..Default::default()
|
||||||
}],
|
}],
|
||||||
output: vec![TxOut {
|
output: vec![TxOut {
|
||||||
|
script_pubkey: wallet
|
||||||
|
.next_unused_address(KeychainKind::External)
|
||||||
|
.unwrap()
|
||||||
|
.script_pubkey(),
|
||||||
value: Amount::from_sat(25_000),
|
value: Amount::from_sat(25_000),
|
||||||
script_pubkey: wallet.get_address(New).address.script_pubkey(),
|
|
||||||
}],
|
}],
|
||||||
};
|
};
|
||||||
wallet
|
wallet
|
||||||
@ -3559,7 +3615,7 @@ fn test_spend_coinbase() {
|
|||||||
fn test_allow_dust_limit() {
|
fn test_allow_dust_limit() {
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_single_sig_cltv());
|
let (mut wallet, _) = get_funded_wallet(get_test_single_sig_cltv());
|
||||||
|
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
|
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
|
|
||||||
@ -3585,7 +3641,7 @@ fn test_fee_rate_sign_no_grinding_high_r() {
|
|||||||
// instead of 70). We then check that our fee rate and fee calculation is
|
// instead of 70). We then check that our fee rate and fee calculation is
|
||||||
// alright.
|
// alright.
|
||||||
let (mut wallet, _) = get_funded_wallet("wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
|
let (mut wallet, _) = get_funded_wallet("wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let fee_rate = FeeRate::from_sat_per_vb_unchecked(1);
|
let fee_rate = FeeRate::from_sat_per_vb_unchecked(1);
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
let mut data = PushBytesBuf::try_from(vec![0]).unwrap();
|
let mut data = PushBytesBuf::try_from(vec![0]).unwrap();
|
||||||
@ -3651,7 +3707,7 @@ fn test_fee_rate_sign_grinding_low_r() {
|
|||||||
// We then check that our fee rate and fee calculation is alright and that our
|
// We then check that our fee rate and fee calculation is alright and that our
|
||||||
// signature is 70 bytes.
|
// signature is 70 bytes.
|
||||||
let (mut wallet, _) = get_funded_wallet("wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
|
let (mut wallet, _) = get_funded_wallet("wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)");
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.next_unused_address(KeychainKind::External).unwrap();
|
||||||
let fee_rate = FeeRate::from_sat_per_vb_unchecked(1);
|
let fee_rate = FeeRate::from_sat_per_vb_unchecked(1);
|
||||||
let mut builder = wallet.build_tx();
|
let mut builder = wallet.build_tx();
|
||||||
builder
|
builder
|
||||||
@ -3684,8 +3740,8 @@ fn test_taproot_load_descriptor_duplicated_keys() {
|
|||||||
//
|
//
|
||||||
// Having the same key in multiple taproot leaves is safe and should be accepted by BDK
|
// Having the same key in multiple taproot leaves is safe and should be accepted by BDK
|
||||||
|
|
||||||
let (mut wallet, _) = get_funded_wallet(get_test_tr_dup_keys());
|
let (wallet, _) = get_funded_wallet(get_test_tr_dup_keys());
|
||||||
let addr = wallet.get_address(New);
|
let addr = wallet.peek_address(KeychainKind::External, 0);
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
addr.to_string(),
|
addr.to_string(),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user