Skip to content

Commit 017dad1

Browse files
committed
wip(fix(examples)): update to use Psbt::sign
- updates `example_wallet_{electrum|esplora}` examples to use the `SignerWrapper` implementation from test utilities through `test-utils` feature. - update examples to parse the used descriptors into a `KeyMap`, and using `SignerWrapper` to sign the transaction with `Psbt::sign` method, it still uses the `Wallet::finalize_psbt` though.
1 parent 444a6d5 commit 017dad1

File tree

6 files changed

+43
-12
lines changed

6 files changed

+43
-12
lines changed

examples/example_wallet_electrum/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@ 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", "test-utils"] }
88
bdk_electrum = { version = "0.22.0" }
99
anyhow = "1"

examples/example_wallet_electrum/src/main.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
use bdk_wallet::bitcoin::key::Secp256k1;
12
use bdk_wallet::file_store::Store;
3+
use bdk_wallet::miniscript::Descriptor;
24
use bdk_wallet::Wallet;
35
use std::io::Write;
46

@@ -85,7 +87,18 @@ fn main() -> Result<(), anyhow::Error> {
8587
tx_builder.add_recipient(address.script_pubkey(), SEND_AMOUNT);
8688

8789
let mut psbt = tx_builder.finish()?;
88-
let finalized = wallet.sign(&mut psbt, SignOptions::default())?;
90+
91+
let secp = Secp256k1::new();
92+
93+
let (_, external_keymap) = Descriptor::parse_descriptor(&secp, EXTERNAL_DESC)?;
94+
let (_, internal_keymap) = Descriptor::parse_descriptor(&secp, INTERNAL_DESC)?;
95+
let key_map = external_keymap.into_iter().chain(internal_keymap).collect();
96+
97+
// It's using the signer implementation from `test_utils`, you should implement your own signing implementation for `KeyMap`.
98+
let signer = bdk_wallet::test_utils::SignerWrapper::new(key_map);
99+
let _ = psbt.sign(&signer, &secp);
100+
101+
let finalized = wallet.finalize_psbt(&mut psbt, SignOptions::default())?;
89102
assert!(finalized);
90103

91104
let tx = psbt.extract_tx()?;

examples/example_wallet_esplora_async/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ 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", "test-utils"] }
1010
bdk_esplora = { version = "0.21.0", features = ["async-https", "tokio"] }
1111
tokio = { version = "1.38.1", features = ["rt", "rt-multi-thread", "macros"] }
1212
anyhow = "1"

examples/example_wallet_esplora_async/src/main.rs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,7 @@ use std::{collections::BTreeSet, io::Write};
33
use anyhow::Ok;
44
use bdk_esplora::{esplora_client, EsploraAsyncExt};
55
use bdk_wallet::{
6-
bitcoin::{Amount, Network},
7-
rusqlite::Connection,
8-
KeychainKind, SignOptions, Wallet,
6+
bitcoin::{Amount, Network}, miniscript::Descriptor, rusqlite::Connection, KeychainKind, SignOptions, Wallet
97
};
108

119
const SEND_AMOUNT: Amount = Amount::from_sat(5000);
@@ -80,7 +78,18 @@ async fn main() -> Result<(), anyhow::Error> {
8078
tx_builder.add_recipient(address.script_pubkey(), SEND_AMOUNT);
8179

8280
let mut psbt = tx_builder.finish()?;
83-
let finalized = wallet.sign(&mut psbt, SignOptions::default())?;
81+
82+
let secp = bdk_wallet::bitcoin::key::Secp256k1::new();
83+
84+
let (_, external_keymap) = Descriptor::parse_descriptor(&secp, EXTERNAL_DESC)?;
85+
let (_, internal_keymap) = Descriptor::parse_descriptor(&secp, INTERNAL_DESC)?;
86+
let key_map = external_keymap.into_iter().chain(internal_keymap).collect();
87+
88+
// It's using the signer implementation from `test_utils`, you should implement your own signing implementation for `KeyMap`.
89+
let signer = bdk_wallet::test_utils::SignerWrapper::new(key_map);
90+
let _ = psbt.sign(&signer, &secp);
91+
92+
let finalized = wallet.finalize_psbt(&mut psbt, SignOptions::default())?;
8493
assert!(finalized);
8594

8695
let tx = psbt.extract_tx()?;

examples/example_wallet_esplora_blocking/Cargo.toml

Lines changed: 1 addition & 1 deletion
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"] }
10+
bdk_wallet = { path = "../../wallet", features = ["file_store", "test-utils"] }
1111
bdk_esplora = { version = "0.21.0", features = ["blocking"] }
1212
anyhow = "1"

examples/example_wallet_esplora_blocking/src/main.rs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@ use std::{collections::BTreeSet, io::Write};
22

33
use bdk_esplora::{esplora_client, EsploraExt};
44
use bdk_wallet::{
5-
bitcoin::{Amount, Network},
6-
file_store::Store,
7-
KeychainKind, SignOptions, Wallet,
5+
bitcoin::{Amount, Network}, file_store::Store, miniscript::Descriptor, KeychainKind, SignOptions, Wallet
86
};
97

108
const DB_MAGIC: &str = "bdk_wallet_esplora_example";
@@ -80,7 +78,18 @@ fn main() -> Result<(), anyhow::Error> {
8078
tx_builder.add_recipient(address.script_pubkey(), SEND_AMOUNT);
8179

8280
let mut psbt = tx_builder.finish()?;
83-
let finalized = wallet.sign(&mut psbt, SignOptions::default())?;
81+
82+
let secp = bdk_wallet::bitcoin::key::Secp256k1::new();
83+
84+
let (_, external_keymap) = Descriptor::parse_descriptor(&secp, EXTERNAL_DESC)?;
85+
let (_, internal_keymap) = Descriptor::parse_descriptor(&secp, INTERNAL_DESC)?;
86+
let key_map = external_keymap.into_iter().chain(internal_keymap).collect();
87+
88+
// It's using the signer implementation from `test_utils`, you should implement your own signing implementation for `KeyMap`.
89+
let signer = bdk_wallet::test_utils::SignerWrapper::new(key_map);
90+
let _ = psbt.sign(&signer, &secp);
91+
92+
let finalized = wallet.finalize_psbt(&mut psbt, SignOptions::default())?;
8493
assert!(finalized);
8594

8695
let tx = psbt.extract_tx()?;

0 commit comments

Comments
 (0)