Skip to content

Commit a470278

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 be2bf7a commit a470278

File tree

3 files changed

+49
-6
lines changed

3 files changed

+49
-6
lines changed

examples/electrum.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;
@@ -89,7 +91,19 @@ fn main() -> Result<(), anyhow::Error> {
8991
tx_builder.fee_rate(target_fee_rate);
9092

9193
let mut psbt = tx_builder.finish()?;
92-
let finalized = wallet.sign(&mut psbt, SignOptions::default())?;
94+
95+
let secp = Secp256k1::new();
96+
97+
let (_, external_keymap) = Descriptor::parse_descriptor(&secp, EXTERNAL_DESC)?;
98+
let (_, internal_keymap) = Descriptor::parse_descriptor(&secp, INTERNAL_DESC)?;
99+
let key_map = external_keymap.into_iter().chain(internal_keymap).collect();
100+
101+
// It's using the signer implementation from `test_utils`, you should implement your own signing
102+
// implementation for `KeyMap`.
103+
let signer = bdk_wallet::test_utils::SignerWrapper::new(key_map);
104+
let _ = psbt.sign(&signer, &secp);
105+
106+
let finalized = wallet.finalize_psbt(&mut psbt, SignOptions::default())?;
93107
assert!(finalized);
94108
let original_fee = psbt.fee_amount().unwrap();
95109
let tx_feerate = psbt.fee_rate().unwrap();
@@ -124,7 +138,8 @@ fn main() -> Result<(), anyhow::Error> {
124138
let mut builder = wallet.build_fee_bump(txid).expect("failed to bump tx");
125139
builder.fee_rate(feerate);
126140
let mut bumped_psbt = builder.finish().unwrap();
127-
let finalize_btx = wallet.sign(&mut bumped_psbt, SignOptions::default())?;
141+
let _ = bumped_psbt.sign(&signer, &secp);
142+
let finalize_btx = wallet.finalize_psbt(&mut bumped_psbt, SignOptions::default())?;
128143
assert!(finalize_btx);
129144
let new_fee = bumped_psbt.fee_amount().unwrap();
130145
let bumped_tx = bumped_psbt.extract_tx()?;

examples/esplora_async.rs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use bdk_esplora::{esplora_client, EsploraAsyncExt};
22
use bdk_wallet::{
33
bitcoin::{Amount, FeeRate, Network},
4+
miniscript::Descriptor,
45
psbt::PsbtUtils,
56
rusqlite::Connection,
67
KeychainKind, SignOptions, Wallet,
@@ -83,7 +84,19 @@ async fn main() -> Result<(), anyhow::Error> {
8384
tx_builder.fee_rate(target_fee_rate);
8485

8586
let mut psbt = tx_builder.finish()?;
86-
let finalized = wallet.sign(&mut psbt, SignOptions::default())?;
87+
88+
let secp = bdk_wallet::bitcoin::key::Secp256k1::new();
89+
90+
let (_, external_keymap) = Descriptor::parse_descriptor(&secp, EXTERNAL_DESC)?;
91+
let (_, internal_keymap) = Descriptor::parse_descriptor(&secp, INTERNAL_DESC)?;
92+
let key_map = external_keymap.into_iter().chain(internal_keymap).collect();
93+
94+
// It's using the signer implementation from `test_utils`, you should implement your own signing
95+
// implementation for `KeyMap`.
96+
let signer = bdk_wallet::test_utils::SignerWrapper::new(key_map);
97+
let _ = psbt.sign(&signer, &secp);
98+
99+
let finalized = wallet.finalize_psbt(&mut psbt, SignOptions::default())?;
87100
assert!(finalized);
88101
let original_fee = psbt.fee_amount().unwrap();
89102
let tx_feerate = psbt.fee_rate().unwrap();
@@ -117,7 +130,8 @@ async fn main() -> Result<(), anyhow::Error> {
117130
let mut builder = wallet.build_fee_bump(txid).expect("failed to bump tx");
118131
builder.fee_rate(feerate);
119132
let mut bumped_psbt = builder.finish().unwrap();
120-
let finalize_btx = wallet.sign(&mut bumped_psbt, SignOptions::default())?;
133+
let _ = bumped_psbt.sign(&signer, &secp);
134+
let finalize_btx = wallet.finalize_psbt(&mut bumped_psbt, SignOptions::default())?;
121135
assert!(finalize_btx);
122136
let new_fee = bumped_psbt.fee_amount().unwrap();
123137
let bumped_tx = bumped_psbt.extract_tx()?;

examples/esplora_blocking.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},
@@ -78,7 +79,19 @@ fn main() -> Result<(), anyhow::Error> {
7879
tx_builder.fee_rate(target_fee_rate);
7980

8081
let mut psbt = tx_builder.finish()?;
81-
let finalized = wallet.sign(&mut psbt, SignOptions::default())?;
82+
83+
let secp = bdk_wallet::bitcoin::key::Secp256k1::new();
84+
85+
let (_, external_keymap) = Descriptor::parse_descriptor(&secp, EXTERNAL_DESC)?;
86+
let (_, internal_keymap) = Descriptor::parse_descriptor(&secp, INTERNAL_DESC)?;
87+
let key_map = external_keymap.into_iter().chain(internal_keymap).collect();
88+
89+
// It's using the signer implementation from `test_utils`, you should implement your own signing
90+
// implementation for `KeyMap`.
91+
let signer = bdk_wallet::test_utils::SignerWrapper::new(key_map);
92+
let _ = psbt.sign(&signer, &secp);
93+
94+
let finalized = wallet.finalize_psbt(&mut psbt, SignOptions::default())?;
8295
assert!(finalized);
8396
let original_fee = psbt.fee_amount().unwrap();
8497
let tx_feerate = psbt.fee_rate().unwrap();
@@ -113,7 +126,8 @@ fn main() -> Result<(), anyhow::Error> {
113126
let mut builder = wallet.build_fee_bump(txid).unwrap();
114127
builder.fee_rate(feerate);
115128
let mut new_psbt = builder.finish().unwrap();
116-
let finalize_tx = wallet.sign(&mut new_psbt, SignOptions::default())?;
129+
let _ = new_psbt.sign(&signer, &secp);
130+
let finalize_tx = wallet.finalize_psbt(&mut new_psbt, SignOptions::default())?;
117131
assert!(finalize_tx);
118132
let new_fee = new_psbt.fee_amount().unwrap();
119133
let bumped_tx = new_psbt.extract_tx()?;

0 commit comments

Comments
 (0)