Skip to content

Commit 4ea10ad

Browse files
committed
fix(examples): update to use Psbt::sign
- updates `example_wallet_{electrum|esplora}` examples to use the `SignerWrapper` implementation from common module. - 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 ec80494 commit 4ea10ad

File tree

3 files changed

+55
-6
lines changed

3 files changed

+55
-6
lines changed

examples/electrum.rs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
1+
mod common;
2+
13
use bdk_electrum::electrum_client;
24
use bdk_electrum::BdkElectrumClient;
5+
use bdk_wallet::bitcoin::key::Secp256k1;
36
use bdk_wallet::bitcoin::Amount;
47
use bdk_wallet::bitcoin::FeeRate;
58
use bdk_wallet::bitcoin::Network;
69
use bdk_wallet::chain::collections::HashSet;
10+
use bdk_wallet::miniscript::Descriptor;
711
use bdk_wallet::psbt::PsbtUtils;
812
use bdk_wallet::rusqlite::Connection;
913
use bdk_wallet::Wallet;
@@ -89,7 +93,19 @@ fn main() -> Result<(), anyhow::Error> {
8993
tx_builder.fee_rate(target_fee_rate);
9094

9195
let mut psbt = tx_builder.finish()?;
92-
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+
// Using the signer implementation from the common module.
104+
// Note: This is temporary until miniscript 12.x is released with native KeyMap signing.
105+
let signer = common::SignerWrapper::new(key_map);
106+
let _ = psbt.sign(&signer, &secp);
107+
108+
let finalized = wallet.finalize_psbt(&mut psbt, SignOptions::default())?;
93109
assert!(finalized);
94110
let original_fee = psbt.fee_amount().unwrap();
95111
let tx_feerate = psbt.fee_rate().unwrap();
@@ -124,7 +140,8 @@ fn main() -> Result<(), anyhow::Error> {
124140
let mut builder = wallet.build_fee_bump(txid).expect("failed to bump tx");
125141
builder.fee_rate(feerate);
126142
let mut bumped_psbt = builder.finish().unwrap();
127-
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())?;
128145
assert!(finalize_btx);
129146
let new_fee = bumped_psbt.fee_amount().unwrap();
130147
let bumped_tx = bumped_psbt.extract_tx()?;

examples/esplora_async.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1+
mod common;
2+
13
use bdk_esplora::{esplora_client, EsploraAsyncExt};
24
use bdk_wallet::{
35
bitcoin::{Amount, FeeRate, Network},
6+
miniscript::Descriptor,
47
psbt::PsbtUtils,
58
rusqlite::Connection,
69
KeychainKind, SignOptions, Wallet,
@@ -83,7 +86,19 @@ async fn main() -> Result<(), anyhow::Error> {
8386
tx_builder.fee_rate(target_fee_rate);
8487

8588
let mut psbt = tx_builder.finish()?;
86-
let finalized = wallet.sign(&mut psbt, SignOptions::default())?;
89+
90+
let secp = bdk_wallet::bitcoin::key::Secp256k1::new();
91+
92+
let (_, external_keymap) = Descriptor::parse_descriptor(&secp, EXTERNAL_DESC)?;
93+
let (_, internal_keymap) = Descriptor::parse_descriptor(&secp, INTERNAL_DESC)?;
94+
let key_map = external_keymap.into_iter().chain(internal_keymap).collect();
95+
96+
// Using the signer implementation from the common module.
97+
// Note: This is temporary until miniscript 12.x is released with native KeyMap signing.
98+
let signer = common::SignerWrapper::new(key_map);
99+
let _ = psbt.sign(&signer, &secp);
100+
101+
let finalized = wallet.finalize_psbt(&mut psbt, SignOptions::default())?;
87102
assert!(finalized);
88103
let original_fee = psbt.fee_amount().unwrap();
89104
let tx_feerate = psbt.fee_rate().unwrap();
@@ -117,7 +132,8 @@ async fn main() -> Result<(), anyhow::Error> {
117132
let mut builder = wallet.build_fee_bump(txid).expect("failed to bump tx");
118133
builder.fee_rate(feerate);
119134
let mut bumped_psbt = builder.finish().unwrap();
120-
let finalize_btx = wallet.sign(&mut bumped_psbt, SignOptions::default())?;
135+
let _ = bumped_psbt.sign(&signer, &secp);
136+
let finalize_btx = wallet.finalize_psbt(&mut bumped_psbt, SignOptions::default())?;
121137
assert!(finalize_btx);
122138
let new_fee = bumped_psbt.fee_amount().unwrap();
123139
let bumped_tx = bumped_psbt.extract_tx()?;

examples/esplora_blocking.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1+
mod common;
2+
13
use bdk_esplora::{esplora_client, EsploraExt};
4+
use bdk_wallet::miniscript::Descriptor;
25
use bdk_wallet::rusqlite::Connection;
36
use bdk_wallet::{
47
bitcoin::{Amount, FeeRate, Network},
@@ -78,7 +81,19 @@ fn main() -> Result<(), anyhow::Error> {
7881
tx_builder.fee_rate(target_fee_rate);
7982

8083
let mut psbt = tx_builder.finish()?;
81-
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+
// Using the signer implementation from the common module.
92+
// Note: This is temporary until miniscript 12.x is released with native KeyMap signing.
93+
let signer = common::SignerWrapper::new(key_map);
94+
let _ = psbt.sign(&signer, &secp);
95+
96+
let finalized = wallet.finalize_psbt(&mut psbt, SignOptions::default())?;
8297
assert!(finalized);
8398
let original_fee = psbt.fee_amount().unwrap();
8499
let tx_feerate = psbt.fee_rate().unwrap();
@@ -113,7 +128,8 @@ fn main() -> Result<(), anyhow::Error> {
113128
let mut builder = wallet.build_fee_bump(txid).unwrap();
114129
builder.fee_rate(feerate);
115130
let mut new_psbt = builder.finish().unwrap();
116-
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())?;
117133
assert!(finalize_tx);
118134
let new_fee = new_psbt.fee_amount().unwrap();
119135
let bumped_tx = new_psbt.extract_tx()?;

0 commit comments

Comments
 (0)