Skip to content

Commit 0244e11

Browse files
committed
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 71c1443 commit 0244e11

File tree

6 files changed

+46
-6
lines changed

6 files changed

+46
-6
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.23.0" }
99
anyhow = "1"

examples/example_wallet_electrum/src/main.rs

Lines changed: 15 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,19 @@ 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
98+
// implementation for `KeyMap`.
99+
let signer = bdk_wallet::test_utils::SignerWrapper::new(key_map);
100+
let _ = psbt.sign(&signer, &secp);
101+
102+
let finalized = wallet.finalize_psbt(&mut psbt, SignOptions::default())?;
89103
assert!(finalized);
90104

91105
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.22.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: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use anyhow::Ok;
44
use bdk_esplora::{esplora_client, EsploraAsyncExt};
55
use bdk_wallet::{
66
bitcoin::{Amount, Network},
7+
miniscript::Descriptor,
78
rusqlite::Connection,
89
KeychainKind, SignOptions, Wallet,
910
};
@@ -80,7 +81,19 @@ async fn main() -> Result<(), anyhow::Error> {
8081
tx_builder.add_recipient(address.script_pubkey(), SEND_AMOUNT);
8182

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

8699
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.22.0", features = ["blocking"] }
1212
anyhow = "1"

examples/example_wallet_esplora_blocking/src/main.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use bdk_esplora::{esplora_client, EsploraExt};
44
use bdk_wallet::{
55
bitcoin::{Amount, Network},
66
file_store::Store,
7+
miniscript::Descriptor,
78
KeychainKind, SignOptions, Wallet,
89
};
910

@@ -80,7 +81,19 @@ fn main() -> Result<(), anyhow::Error> {
8081
tx_builder.add_recipient(address.script_pubkey(), SEND_AMOUNT);
8182

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

8699
let tx = psbt.extract_tx()?;

0 commit comments

Comments
 (0)