Skip to content

Commit 1331193

Browse files
committed
Update psbt_signer example to use descriptor! macro
1 parent 7de8be4 commit 1331193

File tree

1 file changed

+24
-6
lines changed

1 file changed

+24
-6
lines changed

examples/psbt_signer.rs

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,38 @@
99
use bdk::blockchain::{Blockchain, ElectrumBlockchain};
1010
use bdk::database::MemoryDatabase;
1111
use bdk::wallet::AddressIndex;
12-
use bdk::SyncOptions;
12+
use bdk::{descriptor, SyncOptions};
1313
use bdk::{FeeRate, SignOptions, Wallet};
14+
use bitcoin::secp256k1::Secp256k1;
1415
use bitcoin::{Address, Network};
1516
use electrum_client::Client;
17+
use miniscript::descriptor::DescriptorSecretKey;
1618
use std::error::Error;
1719
use std::str::FromStr;
1820

21+
/// This example shows how to sign and broadcast the transaction for a PSBT (Partially Signed
22+
/// Bitcoin Transaction) for a single key, witness public key hash (WPKH) based descriptor wallet.
23+
/// The electrum protocol is used to sync blockchain data from the testnet bitcoin network and
24+
/// wallet data is stored in an ephemeral in-memory database. The process steps are:
25+
/// 1. Create a "signing" wallet and a "watch-only" wallet based on the same private keys.
26+
/// 2. Deposit testnet funds into the watch only wallet.
27+
/// 3. Sync the watch only wallet and create a spending transaction to return all funds to the testnet faucet.
28+
/// 4. Sync the signing wallet and sign and finalize the PSBT created by the watch only wallet.
29+
/// 5. Broadcast the transactions from the finalized PSBT.
1930
fn main() -> Result<(), Box<dyn Error>> {
20-
// test keys created with `bdk-cli key generate` and `bdk-cli key derive` commands
21-
let signing_external_descriptor = "wpkh([e9824965/84'/1'/0']tprv8fvem7qWxY3SGCQczQpRpqTKg455wf1zgixn6MZ4ze8gRfHjov5gXBQTadNfDgqs9ERbZZ3Bi1PNYrCCusFLucT39K525MWLpeURjHwUsfX/0/*)";
22-
let signing_internal_descriptor = "wpkh([e9824965/84'/1'/0']tprv8fvem7qWxY3SGCQczQpRpqTKg455wf1zgixn6MZ4ze8gRfHjov5gXBQTadNfDgqs9ERbZZ3Bi1PNYrCCusFLucT39K525MWLpeURjHwUsfX/1/*)";
31+
// test key created with `bdk-cli key generate` and `bdk-cli key derive` commands
32+
let external_secret_xkey = DescriptorSecretKey::from_str("[e9824965/84'/1'/0']tprv8fvem7qWxY3SGCQczQpRpqTKg455wf1zgixn6MZ4ze8gRfHjov5gXBQTadNfDgqs9ERbZZ3Bi1PNYrCCusFLucT39K525MWLpeURjHwUsfX/0/*").unwrap();
33+
let internal_secret_xkey = DescriptorSecretKey::from_str("[e9824965/84'/1'/0']tprv8fvem7qWxY3SGCQczQpRpqTKg455wf1zgixn6MZ4ze8gRfHjov5gXBQTadNfDgqs9ERbZZ3Bi1PNYrCCusFLucT39K525MWLpeURjHwUsfX/1/*").unwrap();
2334

24-
let watch_only_external_descriptor = "wpkh([e9824965/84'/1'/0']tpubDCcguXsm6uj79fSQt4V2EF7SF5b26zCuG2ZZNsbNQuw5G9YWSJuGhg2KknQBywRq4VGTu41zYTCh3QeVFyBdbsymgRX9Mrts94SW7obEdqs/0/*)";
25-
let watch_only_internal_descriptor = "wpkh([e9824965/84'/1'/0']tpubDCcguXsm6uj79fSQt4V2EF7SF5b26zCuG2ZZNsbNQuw5G9YWSJuGhg2KknQBywRq4VGTu41zYTCh3QeVFyBdbsymgRX9Mrts94SW7obEdqs/1/*)";
35+
let secp = Secp256k1::new();
36+
let external_public_xkey = external_secret_xkey.as_public(&secp).unwrap();
37+
let internal_public_xkey = internal_secret_xkey.as_public(&secp).unwrap();
38+
39+
let signing_external_descriptor = descriptor!(wpkh(external_secret_xkey)).unwrap();
40+
let signing_internal_descriptor = descriptor!(wpkh(internal_secret_xkey)).unwrap();
41+
42+
let watch_only_external_descriptor = descriptor!(wpkh(external_public_xkey)).unwrap();
43+
let watch_only_internal_descriptor = descriptor!(wpkh(internal_public_xkey)).unwrap();
2644

2745
// create client for Blockstream's testnet electrum server
2846
let blockchain =

0 commit comments

Comments
 (0)