Skip to content

Commit 115b920

Browse files
committed
wip: Support N keychains
- Introduce `KeyRing`. - Swap KeychainKind for `u32`.
1 parent ce70bb7 commit 115b920

File tree

20 files changed

+6580
-6001
lines changed

20 files changed

+6580
-6001
lines changed

examples/example_wallet_electrum/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ version = "0.2.0"
44
edition = "2021"
55

66
[dependencies]
7-
bdk_wallet = { path = "../../wallet", features = ["file_store"] }
7+
# bdk_wallet = { path = "../../wallet", features = ["file_store"] }
8+
bdk_wallet = { version = "2.0.0-beta.0", features = ["file_store"] }
89
bdk_electrum = { version = "0.23.0" }
910
anyhow = "1"

examples/example_wallet_esplora_async/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ edition = "2021"
66
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
77

88
[dependencies]
9-
bdk_wallet = { path = "../../wallet", features = ["rusqlite"] }
9+
# bdk_wallet = { path = "../../wallet", features = ["rusqlite"] }
10+
bdk_wallet = { version = "2.0.0-beta.0", features = ["rusqlite"] }
1011
bdk_esplora = { version = "0.22.0", features = ["async-https", "tokio"] }
1112
tokio = { version = "1.38.1", features = ["rt", "rt-multi-thread", "macros"] }
1213
anyhow = "1"

examples/example_wallet_esplora_blocking/Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ publish = false
77
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
88

99
[dependencies]
10-
bdk_wallet = { path = "../../wallet", features = ["file_store"] }
11-
bdk_esplora = { version = "0.22.0", features = ["blocking"] }
10+
bdk_wallet = { path = "../../wallet", features = ["rusqlite"] }
11+
# bdk_esplora = { version = "0.22.0", features = ["blocking"] }
1212
anyhow = "1"
Lines changed: 20 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,91 +1,42 @@
1+
#![allow(unused)]
2+
13
use std::{collections::BTreeSet, io::Write};
24

3-
use bdk_esplora::{esplora_client, EsploraExt};
45
use bdk_wallet::{
56
bitcoin::{Amount, Network},
6-
file_store::Store,
7-
KeychainKind, SignOptions, Wallet,
7+
rusqlite::Connection,
8+
KeyRing, KeychainKind, PersistedWallet, SignOptions, Wallet, WalletParams,
89
};
910

10-
const DB_MAGIC: &str = "bdk_wallet_esplora_example";
11-
const DB_PATH: &str = "bdk-example-esplora-blocking.db";
1211
const SEND_AMOUNT: Amount = Amount::from_sat(5000);
1312
const STOP_GAP: usize = 5;
1413
const PARALLEL_REQUESTS: usize = 5;
1514

15+
const DB_PATH: &str = ".bdk_example_wallet_esplora_blocking.sqlite";
1616
const NETWORK: Network = Network::Signet;
1717
const EXTERNAL_DESC: &str = "wpkh(tprv8ZgxMBicQKsPdy6LMhUtFHAgpocR8GC6QmwMSFpZs7h6Eziw3SpThFfczTDh5rW2krkqffa11UpX3XkeTTB2FvzZKWXqPY54Y6Rq4AQ5R8L/84'/1'/0'/0/*)";
1818
const INTERNAL_DESC: &str = "wpkh(tprv8ZgxMBicQKsPdy6LMhUtFHAgpocR8GC6QmwMSFpZs7h6Eziw3SpThFfczTDh5rW2krkqffa11UpX3XkeTTB2FvzZKWXqPY54Y6Rq4AQ5R8L/84'/1'/0'/1/*)";
1919
const ESPLORA_URL: &str = "http://signet.bitcoindevkit.net";
2020

2121
fn main() -> Result<(), anyhow::Error> {
22-
let (mut db, _) = Store::<bdk_wallet::ChangeSet>::load_or_create(DB_MAGIC.as_bytes(), DB_PATH)?;
23-
24-
let wallet_opt = Wallet::load()
25-
.descriptor(KeychainKind::External, Some(EXTERNAL_DESC))
26-
.descriptor(KeychainKind::Internal, Some(INTERNAL_DESC))
27-
.extract_keys()
28-
.check_network(NETWORK)
29-
.load_wallet(&mut db)?;
30-
let mut wallet = match wallet_opt {
31-
Some(wallet) => wallet,
32-
None => Wallet::create(EXTERNAL_DESC, INTERNAL_DESC)
33-
.network(NETWORK)
34-
.create_wallet(&mut db)?,
22+
let mut conn = Connection::open(DB_PATH)?;
23+
24+
// Load from database, or if empty create new.
25+
let mut wallet = match PersistedWallet::load_from_changeset(&mut conn)? {
26+
Some(w) => w,
27+
None => PersistedWallet::with_params(
28+
&mut conn,
29+
WalletParams {
30+
keyring: KeyRing::new(EXTERNAL_DESC, NETWORK),
31+
..Default::default()
32+
},
33+
)?,
3534
};
3635

37-
let address = wallet.next_unused_address(KeychainKind::External);
38-
wallet.persist(&mut db)?;
39-
println!(
40-
"Next unused address: ({}) {}",
41-
address.index, address.address
42-
);
43-
44-
let balance = wallet.balance();
45-
println!("Wallet balance before syncing: {}", balance.total());
46-
47-
print!("Syncing...");
48-
let client = esplora_client::Builder::new(ESPLORA_URL).build_blocking();
49-
50-
let request = wallet.start_full_scan().inspect({
51-
let mut stdout = std::io::stdout();
52-
let mut once = BTreeSet::<KeychainKind>::new();
53-
move |keychain, spk_i, _| {
54-
if once.insert(keychain) {
55-
print!("\nScanning keychain [{:?}] ", keychain);
56-
}
57-
print!(" {:<3}", spk_i);
58-
stdout.flush().expect("must flush")
59-
}
60-
});
61-
62-
let update = client.full_scan(request, STOP_GAP, PARALLEL_REQUESTS)?;
63-
64-
wallet.apply_update(update)?;
65-
wallet.persist(&mut db)?;
66-
println!();
67-
68-
let balance = wallet.balance();
69-
println!("Wallet balance after syncing: {}", balance.total());
70-
71-
if balance.total() < SEND_AMOUNT {
72-
println!(
73-
"Please send at least {} to the receiving address",
74-
SEND_AMOUNT
75-
);
76-
std::process::exit(0);
77-
}
78-
79-
let mut tx_builder = wallet.build_tx();
80-
tx_builder.add_recipient(address.script_pubkey(), SEND_AMOUNT);
81-
82-
let mut psbt = tx_builder.finish()?;
83-
let finalized = wallet.sign(&mut psbt, SignOptions::default())?;
84-
assert!(finalized);
36+
let addr = wallet.reveal_next_default_address();
37+
wallet.persist(&mut conn)?;
8538

86-
let tx = psbt.extract_tx()?;
87-
client.broadcast(&tx)?;
88-
println!("Tx broadcasted! Txid: {}", tx.compute_txid());
39+
dbg!(&addr);
8940

9041
Ok(())
9142
}

examples/example_wallet_rpc/Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ edition = "2021"
66
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
77

88
[dependencies]
9-
bdk_wallet = { path = "../../wallet", features = ["file_store"] }
9+
# bdk_wallet = { path = "../../wallet", features = ["file_store"] }
10+
bdk_wallet = { version = "2.0.0-beta.0", features = ["file_store"] }
1011
bdk_bitcoind_rpc = { version = "0.20.0" }
1112

1213
anyhow = "1"

wallet/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ let mut wallet = match wallet_opt {
9393
};
9494
9595
// Get a new address to receive bitcoin.
96-
let receive_address = wallet.reveal_next_address(KeychainKind::External);
96+
let receive_address = wallet.reveal_next_default_address();
9797
// Persist staged wallet data changes to the file store.
9898
wallet.persist(&mut db).expect("persist");
9999
println!("Your new receive address is: {}", receive_address.address);

wallet/examples/compiler.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ fn main() -> Result<(), Box<dyn Error>> {
6363

6464
println!(
6565
"First derived address from the descriptor: \n{}",
66-
wallet.next_unused_address(KeychainKind::External),
66+
wallet.next_default_unused_address(),
6767
);
6868

6969
// BDK also has it's own `Policy` structure to represent the spending condition in a more

wallet/src/descriptor/error.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ pub enum Error {
4141
Miniscript(miniscript::Error),
4242
/// Hex decoding error
4343
Hex(bitcoin::hex::HexToBytesError),
44-
/// The provided wallet descriptors are identical
45-
ExternalAndInternalAreTheSame,
44+
/// Insert descriptor error
45+
InsertDescriptor(chain::keychain_txout::InsertDescriptorError<u32>),
4646
}
4747

4848
impl From<crate::keys::KeyError> for Error {
@@ -80,9 +80,7 @@ impl fmt::Display for Error {
8080
Self::Pk(err) => write!(f, "Key-related error: {}", err),
8181
Self::Miniscript(err) => write!(f, "Miniscript error: {}", err),
8282
Self::Hex(err) => write!(f, "Hex decoding error: {}", err),
83-
Self::ExternalAndInternalAreTheSame => {
84-
write!(f, "External and internal descriptors are the same")
85-
}
83+
Self::InsertDescriptor(e) => write!(f, "{e}"),
8684
}
8785
}
8886
}

wallet/src/descriptor/template.rs

Lines changed: 20 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,7 @@ impl<T: DescriptorTemplate> IntoWalletDescriptor for T {
8787
/// .create_wallet_no_persist()?;
8888
///
8989
/// assert_eq!(
90-
/// wallet
91-
/// .next_unused_address(KeychainKind::External)
92-
/// .to_string(),
90+
/// wallet.next_default_unused_address().to_string(),
9391
/// "mwJ8hxFYW19JLuc65RCTaP4v1rzVU8cVMT"
9492
/// );
9593
/// # Ok::<_, Box<dyn std::error::Error>>(())
@@ -122,9 +120,7 @@ impl<K: IntoDescriptorKey<Legacy>> DescriptorTemplate for P2Pkh<K> {
122120
/// .create_wallet_no_persist()?;
123121
///
124122
/// assert_eq!(
125-
/// wallet
126-
/// .next_unused_address(KeychainKind::External)
127-
/// .to_string(),
123+
/// wallet.next_default_unused_address().to_string(),
128124
/// "2NB4ox5VDRw1ecUv6SnT3VQHPXveYztRqk5"
129125
/// );
130126
/// # Ok::<_, Box<dyn std::error::Error>>(())
@@ -158,9 +154,7 @@ impl<K: IntoDescriptorKey<Segwitv0>> DescriptorTemplate for P2Wpkh_P2Sh<K> {
158154
/// .create_wallet_no_persist()?;
159155
///
160156
/// assert_eq!(
161-
/// wallet
162-
/// .next_unused_address(KeychainKind::External)
163-
/// .to_string(),
157+
/// wallet.next_default_unused_address().to_string(),
164158
/// "tb1q4525hmgw265tl3drrl8jjta7ayffu6jf68ltjd"
165159
/// );
166160
/// # Ok::<_, Box<dyn std::error::Error>>(())
@@ -193,9 +187,7 @@ impl<K: IntoDescriptorKey<Segwitv0>> DescriptorTemplate for P2Wpkh<K> {
193187
/// .create_wallet_no_persist()?;
194188
///
195189
/// assert_eq!(
196-
/// wallet
197-
/// .next_unused_address(KeychainKind::External)
198-
/// .to_string(),
190+
/// wallet.next_default_unused_address().to_string(),
199191
/// "tb1pvjf9t34fznr53u5tqhejz4nr69luzkhlvsdsdfq9pglutrpve2xq7hps46"
200192
/// );
201193
/// # Ok::<_, Box<dyn std::error::Error>>(())
@@ -229,8 +221,8 @@ impl<K: IntoDescriptorKey<Tap>> DescriptorTemplate for P2TR<K> {
229221
/// .network(Network::Testnet)
230222
/// .create_wallet_no_persist()?;
231223
///
232-
/// assert_eq!(wallet.next_unused_address(KeychainKind::External).to_string(), "mmogjc7HJEZkrLqyQYqJmxUqFaC7i4uf89");
233-
/// assert_eq!(wallet.public_descriptor(KeychainKind::External).to_string(), "pkh([c55b303f/44'/1'/0']tpubDCuorCpzvYS2LCD75BR46KHE8GdDeg1wsAgNZeNr6DaB5gQK1o14uErKwKLuFmeemkQ6N2m3rNgvctdJLyr7nwu2yia7413Hhg8WWE44cgT/0/*)#5wrnv0xt");
224+
/// assert_eq!(wallet.next_default_unused_address().to_string(), "mmogjc7HJEZkrLqyQYqJmxUqFaC7i4uf89");
225+
/// assert_eq!(wallet.default_descriptor().to_string(), "pkh([c55b303f/44'/1'/0']tpubDCuorCpzvYS2LCD75BR46KHE8GdDeg1wsAgNZeNr6DaB5gQK1o14uErKwKLuFmeemkQ6N2m3rNgvctdJLyr7nwu2yia7413Hhg8WWE44cgT/0/*)#5wrnv0xt");
234226
/// # Ok::<_, Box<dyn std::error::Error>>(())
235227
/// ```
236228
#[derive(Debug, Clone)]
@@ -269,8 +261,8 @@ impl<K: DerivableKey<Legacy>> DescriptorTemplate for Bip44<K> {
269261
/// .network(Network::Testnet)
270262
/// .create_wallet_no_persist()?;
271263
///
272-
/// assert_eq!(wallet.next_unused_address(KeychainKind::External).to_string(), "miNG7dJTzJqNbFS19svRdTCisC65dsubtR");
273-
/// assert_eq!(wallet.public_descriptor(KeychainKind::External).to_string(), "pkh([c55b303f/44'/1'/0']tpubDDDzQ31JkZB7VxUr9bjvBivDdqoFLrDPyLWtLapArAi51ftfmCb2DPxwLQzX65iNcXz1DGaVvyvo6JQ6rTU73r2gqdEo8uov9QKRb7nKCSU/0/*)#cfhumdqz");
264+
/// assert_eq!(wallet.next_default_unused_address().to_string(), "miNG7dJTzJqNbFS19svRdTCisC65dsubtR");
265+
/// assert_eq!(wallet.default_descriptor().to_string(), "pkh([c55b303f/44'/1'/0']tpubDDDzQ31JkZB7VxUr9bjvBivDdqoFLrDPyLWtLapArAi51ftfmCb2DPxwLQzX65iNcXz1DGaVvyvo6JQ6rTU73r2gqdEo8uov9QKRb7nKCSU/0/*)#cfhumdqz");
274266
/// # Ok::<_, Box<dyn std::error::Error>>(())
275267
/// ```
276268
#[derive(Debug, Clone)]
@@ -308,8 +300,8 @@ impl<K: DerivableKey<Legacy>> DescriptorTemplate for Bip44Public<K> {
308300
/// .network(Network::Testnet)
309301
/// .create_wallet_no_persist()?;
310302
///
311-
/// assert_eq!(wallet.next_unused_address(KeychainKind::External).to_string(), "2N4zkWAoGdUv4NXhSsU8DvS5MB36T8nKHEB");
312-
/// assert_eq!(wallet.public_descriptor(KeychainKind::External).to_string(), "sh(wpkh([c55b303f/49'/1'/0']tpubDDYr4kdnZgjjShzYNjZUZXUUtpXaofdkMaipyS8ThEh45qFmhT4hKYways7UXmg6V7het1QiFo9kf4kYUXyDvV4rHEyvSpys9pjCB3pukxi/0/*))#s9vxlc8e");
303+
/// assert_eq!(wallet.next_default_unused_address().to_string(), "2N4zkWAoGdUv4NXhSsU8DvS5MB36T8nKHEB");
304+
/// assert_eq!(wallet.default_descriptor().to_string(), "sh(wpkh([c55b303f/49'/1'/0']tpubDDYr4kdnZgjjShzYNjZUZXUUtpXaofdkMaipyS8ThEh45qFmhT4hKYways7UXmg6V7het1QiFo9kf4kYUXyDvV4rHEyvSpys9pjCB3pukxi/0/*))#s9vxlc8e");
313305
/// # Ok::<_, Box<dyn std::error::Error>>(())
314306
/// ```
315307
#[derive(Debug, Clone)]
@@ -348,8 +340,8 @@ impl<K: DerivableKey<Segwitv0>> DescriptorTemplate for Bip49<K> {
348340
/// .network(Network::Testnet)
349341
/// .create_wallet_no_persist()?;
350342
///
351-
/// assert_eq!(wallet.next_unused_address(KeychainKind::External).to_string(), "2N3K4xbVAHoiTQSwxkZjWDfKoNC27pLkYnt");
352-
/// assert_eq!(wallet.public_descriptor(KeychainKind::External).to_string(), "sh(wpkh([c55b303f/49'/1'/0']tpubDC49r947KGK52X5rBWS4BLs5m9SRY3pYHnvRrm7HcybZ3BfdEsGFyzCMzayi1u58eT82ZeyFZwH7DD6Q83E3fM9CpfMtmnTygnLfP59jL9L/0/*))#3tka9g0q");
343+
/// assert_eq!(wallet.next_default_unused_address().to_string(), "2N3K4xbVAHoiTQSwxkZjWDfKoNC27pLkYnt");
344+
/// assert_eq!(wallet.default_descriptor().to_string(), "sh(wpkh([c55b303f/49'/1'/0']tpubDC49r947KGK52X5rBWS4BLs5m9SRY3pYHnvRrm7HcybZ3BfdEsGFyzCMzayi1u58eT82ZeyFZwH7DD6Q83E3fM9CpfMtmnTygnLfP59jL9L/0/*))#3tka9g0q");
353345
/// # Ok::<_, Box<dyn std::error::Error>>(())
354346
/// ```
355347
#[derive(Debug, Clone)]
@@ -387,8 +379,8 @@ impl<K: DerivableKey<Segwitv0>> DescriptorTemplate for Bip49Public<K> {
387379
/// .network(Network::Testnet)
388380
/// .create_wallet_no_persist()?;
389381
///
390-
/// assert_eq!(wallet.next_unused_address(KeychainKind::External).to_string(), "tb1qhl85z42h7r4su5u37rvvw0gk8j2t3n9y7zsg4n");
391-
/// assert_eq!(wallet.public_descriptor(KeychainKind::External).to_string(), "wpkh([c55b303f/84'/1'/0']tpubDDc5mum24DekpNw92t6fHGp8Gr2JjF9J7i4TZBtN6Vp8xpAULG5CFaKsfugWa5imhrQQUZKXe261asP5koDHo5bs3qNTmf3U3o4v9SaB8gg/0/*)#6kfecsmr");
382+
/// assert_eq!(wallet.next_default_unused_address().to_string(), "tb1qhl85z42h7r4su5u37rvvw0gk8j2t3n9y7zsg4n");
383+
/// assert_eq!(wallet.default_descriptor().to_string(), "wpkh([c55b303f/84'/1'/0']tpubDDc5mum24DekpNw92t6fHGp8Gr2JjF9J7i4TZBtN6Vp8xpAULG5CFaKsfugWa5imhrQQUZKXe261asP5koDHo5bs3qNTmf3U3o4v9SaB8gg/0/*)#6kfecsmr");
392384
/// # Ok::<_, Box<dyn std::error::Error>>(())
393385
/// ```
394386
#[derive(Debug, Clone)]
@@ -427,8 +419,8 @@ impl<K: DerivableKey<Segwitv0>> DescriptorTemplate for Bip84<K> {
427419
/// .network(Network::Testnet)
428420
/// .create_wallet_no_persist()?;
429421
///
430-
/// assert_eq!(wallet.next_unused_address(KeychainKind::External).to_string(), "tb1qedg9fdlf8cnnqfd5mks6uz5w4kgpk2pr6y4qc7");
431-
/// assert_eq!(wallet.public_descriptor(KeychainKind::External).to_string(), "wpkh([c55b303f/84'/1'/0']tpubDC2Qwo2TFsaNC4ju8nrUJ9mqVT3eSgdmy1yPqhgkjwmke3PRXutNGRYAUo6RCHTcVQaDR3ohNU9we59brGHuEKPvH1ags2nevW5opEE9Z5Q/0/*)#dhu402yv");
422+
/// assert_eq!(wallet.next_default_unused_address().to_string(), "tb1qedg9fdlf8cnnqfd5mks6uz5w4kgpk2pr6y4qc7");
423+
/// assert_eq!(wallet.default_descriptor().to_string(), "wpkh([c55b303f/84'/1'/0']tpubDC2Qwo2TFsaNC4ju8nrUJ9mqVT3eSgdmy1yPqhgkjwmke3PRXutNGRYAUo6RCHTcVQaDR3ohNU9we59brGHuEKPvH1ags2nevW5opEE9Z5Q/0/*)#dhu402yv");
432424
/// # Ok::<_, Box<dyn std::error::Error>>(())
433425
/// ```
434426
#[derive(Debug, Clone)]
@@ -466,8 +458,8 @@ impl<K: DerivableKey<Segwitv0>> DescriptorTemplate for Bip84Public<K> {
466458
/// .network(Network::Testnet)
467459
/// .create_wallet_no_persist()?;
468460
///
469-
/// assert_eq!(wallet.next_unused_address(KeychainKind::External).to_string(), "tb1p5unlj09djx8xsjwe97269kqtxqpwpu2epeskgqjfk4lnf69v4tnqpp35qu");
470-
/// assert_eq!(wallet.public_descriptor(KeychainKind::External).to_string(), "tr([c55b303f/86'/1'/0']tpubDCiHofpEs47kx358bPdJmTZHmCDqQ8qw32upCSxHrSEdeeBs2T5Mq6QMB2ukeMqhNBiyhosBvJErteVhfURPGXPv3qLJPw5MVpHUewsbP2m/0/*)#dkgvr5hm");
461+
/// assert_eq!(wallet.next_default_unused_address().to_string(), "tb1p5unlj09djx8xsjwe97269kqtxqpwpu2epeskgqjfk4lnf69v4tnqpp35qu");
462+
/// assert_eq!(wallet.default_descriptor().to_string(), "tr([c55b303f/86'/1'/0']tpubDCiHofpEs47kx358bPdJmTZHmCDqQ8qw32upCSxHrSEdeeBs2T5Mq6QMB2ukeMqhNBiyhosBvJErteVhfURPGXPv3qLJPw5MVpHUewsbP2m/0/*)#dkgvr5hm");
471463
/// # Ok::<_, Box<dyn std::error::Error>>(())
472464
/// ```
473465
#[derive(Debug, Clone)]
@@ -506,8 +498,8 @@ impl<K: DerivableKey<Tap>> DescriptorTemplate for Bip86<K> {
506498
/// .network(Network::Testnet)
507499
/// .create_wallet_no_persist()?;
508500
///
509-
/// assert_eq!(wallet.next_unused_address(KeychainKind::External).to_string(), "tb1pwjp9f2k5n0xq73ecuu0c5njvgqr3vkh7yaylmpqvsuuaafymh0msvcmh37");
510-
/// assert_eq!(wallet.public_descriptor(KeychainKind::External).to_string(), "tr([c55b303f/86'/1'/0']tpubDC2Qwo2TFsaNC4ju8nrUJ9mqVT3eSgdmy1yPqhgkjwmke3PRXutNGRYAUo6RCHTcVQaDR3ohNU9we59brGHuEKPvH1ags2nevW5opEE9Z5Q/0/*)#2p65srku");
501+
/// assert_eq!(wallet.next_default_unused_address().to_string(), "tb1pwjp9f2k5n0xq73ecuu0c5njvgqr3vkh7yaylmpqvsuuaafymh0msvcmh37");
502+
/// assert_eq!(wallet.default_descriptor().to_string(), "tr([c55b303f/86'/1'/0']tpubDC2Qwo2TFsaNC4ju8nrUJ9mqVT3eSgdmy1yPqhgkjwmke3PRXutNGRYAUo6RCHTcVQaDR3ohNU9we59brGHuEKPvH1ags2nevW5opEE9Z5Q/0/*)#2p65srku");
511503
/// # Ok::<_, Box<dyn std::error::Error>>(())
512504
/// ```
513505
#[derive(Debug, Clone)]

wallet/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
)]
88
#![no_std]
99
#![warn(missing_docs)]
10+
#![allow(unused)]
1011

1112
#[cfg(feature = "std")]
1213
#[macro_use]

wallet/src/test_utils.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ fn new_funded_wallet(descriptor: &str, change_descriptor: Option<&str>) -> (Wall
3333
.create_wallet_no_persist()
3434
.expect("descriptors must be valid");
3535

36-
let receive_address = wallet.peek_address(KeychainKind::External, 0).address;
36+
// let receive_address = wallet.peek_address(KeychainKind::External, 0).address;
37+
let receive_address = wallet.peek_default_address(0).address;
3738
let sendto_address = Address::from_str("bcrt1q3qtze4ys45tgdvguj66zrk4fu6hq3a3v9pfly5")
3839
.expect("address")
3940
.require_network(Network::Regtest)
@@ -271,7 +272,8 @@ pub fn receive_output(
271272
value: Amount,
272273
receive_to: impl Into<ReceiveTo>,
273274
) -> OutPoint {
274-
let addr = wallet.next_unused_address(KeychainKind::External).address;
275+
// let addr = wallet.next_unused_address(KeychainKind::External).address;
276+
let addr = wallet.next_default_unused_address().address;
275277
receive_output_to_address(wallet, addr, value, receive_to)
276278
}
277279

wallet/src/types.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ pub struct LocalOutput {
6666
/// Transaction output
6767
pub txout: TxOut,
6868
/// Type of keychain
69-
pub keychain: KeychainKind,
69+
pub keychain: u32,
7070
/// Whether this UTXO is spent or not
7171
pub is_spent: bool,
7272
/// The derivation index for the script pubkey in the wallet

0 commit comments

Comments
 (0)