Skip to content

Commit 9ca0134

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 5247571 commit 9ca0134

File tree

6 files changed

+52
-9
lines changed

6 files changed

+52
-9
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 = ["rusqlite"] }
7+
bdk_wallet = { path = "../../wallet", features = ["rusqlite", "test-utils"] }
88
bdk_electrum = { version = "0.23.1" }
99
anyhow = "1"

examples/example_wallet_electrum/src/main.rs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
use bdk_electrum::electrum_client;
22
use bdk_electrum::BdkElectrumClient;
3+
use bdk_wallet::bitcoin::key::Secp256k1;
34
use bdk_wallet::bitcoin::Amount;
45
use bdk_wallet::bitcoin::FeeRate;
56
use bdk_wallet::bitcoin::Network;
67
use bdk_wallet::chain::collections::HashSet;
8+
use bdk_wallet::miniscript::Descriptor;
79
use bdk_wallet::psbt::PsbtUtils;
810
use bdk_wallet::rusqlite::Connection;
911
use bdk_wallet::Wallet;
@@ -91,7 +93,19 @@ fn main() -> Result<(), anyhow::Error> {
9193
tx_builder.fee_rate(target_fee_rate);
9294

9395
let mut psbt = tx_builder.finish()?;
94-
let finalized = wallet.sign(&mut psbt, SignOptions::default())?;
96+
97+
let secp = Secp256k1::new();
98+
99+
let (_, external_keymap) = Descriptor::parse_descriptor(&secp, EXTERNAL_DESC)?;
100+
let (_, internal_keymap) = Descriptor::parse_descriptor(&secp, INTERNAL_DESC)?;
101+
let key_map = external_keymap.into_iter().chain(internal_keymap).collect();
102+
103+
// It's using the signer implementation from `test_utils`, you should implement your own signing
104+
// implementation for `KeyMap`.
105+
let signer = bdk_wallet::test_utils::SignerWrapper::new(key_map);
106+
let _ = psbt.sign(&signer, &secp);
107+
108+
let finalized = wallet.finalize_psbt(&mut psbt, SignOptions::default())?;
95109
assert!(finalized);
96110
let original_fee = psbt.fee_amount().unwrap();
97111
let tx_feerate = psbt.fee_rate().unwrap();
@@ -126,7 +140,8 @@ fn main() -> Result<(), anyhow::Error> {
126140
let mut builder = wallet.build_fee_bump(txid).expect("failed to bump tx");
127141
builder.fee_rate(feerate);
128142
let mut bumped_psbt = builder.finish().unwrap();
129-
let finalize_btx = wallet.sign(&mut bumped_psbt, SignOptions::default())?;
143+
let _ = bumped_psbt.sign(&signer, &secp);
144+
let finalize_btx = wallet.finalize_psbt(&mut bumped_psbt, SignOptions::default())?;
130145
assert!(finalize_btx);
131146
let new_fee = bumped_psbt.fee_amount().unwrap();
132147
let bumped_tx = bumped_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.1", 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: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ use anyhow::Ok;
22
use bdk_esplora::{esplora_client, EsploraAsyncExt};
33
use bdk_wallet::{
44
bitcoin::{Amount, FeeRate, Network},
5+
miniscript::Descriptor,
56
psbt::PsbtUtils,
67
rusqlite::Connection,
78
KeychainKind, SignOptions, Wallet,
@@ -86,7 +87,19 @@ async fn main() -> Result<(), anyhow::Error> {
8687
tx_builder.fee_rate(target_fee_rate);
8788

8889
let mut psbt = tx_builder.finish()?;
89-
let finalized = wallet.sign(&mut psbt, SignOptions::default())?;
90+
91+
let secp = bdk_wallet::bitcoin::key::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())?;
90103
assert!(finalized);
91104
let original_fee = psbt.fee_amount().unwrap();
92105
let tx_feerate = psbt.fee_rate().unwrap();
@@ -120,7 +133,8 @@ async fn main() -> Result<(), anyhow::Error> {
120133
let mut builder = wallet.build_fee_bump(txid).expect("failed to bump tx");
121134
builder.fee_rate(feerate);
122135
let mut bumped_psbt = builder.finish().unwrap();
123-
let finalize_btx = wallet.sign(&mut bumped_psbt, SignOptions::default())?;
136+
let _ = bumped_psbt.sign(&signer, &secp);
137+
let finalize_btx = wallet.finalize_psbt(&mut bumped_psbt, SignOptions::default())?;
124138
assert!(finalize_btx);
125139
let new_fee = bumped_psbt.fee_amount().unwrap();
126140
let bumped_tx = bumped_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 = ["rusqlite"] }
10+
bdk_wallet = { path = "../../wallet", features = ["rusqlite", "test-utils"] }
1111
bdk_esplora = { version = "0.22.1", features = ["blocking"] }
1212
anyhow = "1"

examples/example_wallet_esplora_blocking/src/main.rs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use bdk_esplora::{esplora_client, EsploraExt};
2+
use bdk_wallet::miniscript::Descriptor;
23
use bdk_wallet::rusqlite::Connection;
34
use bdk_wallet::{
45
bitcoin::{Amount, FeeRate, Network},
@@ -80,7 +81,19 @@ fn main() -> Result<(), anyhow::Error> {
8081
tx_builder.fee_rate(target_fee_rate);
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
let original_fee = psbt.fee_amount().unwrap();
8699
let tx_feerate = psbt.fee_rate().unwrap();
@@ -115,7 +128,8 @@ fn main() -> Result<(), anyhow::Error> {
115128
let mut builder = wallet.build_fee_bump(txid).unwrap();
116129
builder.fee_rate(feerate);
117130
let mut new_psbt = builder.finish().unwrap();
118-
let finalize_tx = wallet.sign(&mut new_psbt, SignOptions::default())?;
131+
let _ = new_psbt.sign(&signer, &secp);
132+
let finalize_tx = wallet.finalize_psbt(&mut new_psbt, SignOptions::default())?;
119133
assert!(finalize_tx);
120134
let new_fee = new_psbt.fee_amount().unwrap();
121135
let bumped_tx = new_psbt.extract_tx()?;

0 commit comments

Comments
 (0)