Skip to content

Commit 4581dcb

Browse files
refactor: fix rust formatting in examples
1 parent c59628c commit 4581dcb

File tree

6 files changed

+164
-173
lines changed

6 files changed

+164
-173
lines changed

examples/rust/descriptors/src/main.rs

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,29 +5,26 @@ use bdk_wallet::bitcoin::Network;
55
use bdk_wallet::template::{Bip86, DescriptorTemplate};
66
use bdk_wallet::KeychainKind;
77

8-
// The codeblocks in https://bookofbdk.com pull their code from these examples. Since we do not want an indent on the
9-
// codeblocks on the website, we also remove the indents here.
10-
118
fn main() {
12-
// --8<-- [start:main]
13-
let mut seed: [u8; 32] = [0u8; 32];
14-
rand::thread_rng().fill_bytes(&mut seed);
9+
// --8<-- [start:main]
10+
let mut seed: [u8; 32] = [0u8; 32];
11+
rand::thread_rng().fill_bytes(&mut seed);
1512

16-
let network: Network = Network::Signet;
17-
let xprv: Xpriv = Xpriv::new_master(network, &seed).unwrap();
18-
println!("Generated Master Private Key:\n{}\nWarning: be very careful with private keys when using MainNet! We are logging these values for convenience only because this is an example on SigNet.\n", xprv);
13+
let network: Network = Network::Signet;
14+
let xprv: Xpriv = Xpriv::new_master(network, &seed).unwrap();
15+
println!("Generated Master Private Key:\n{}\nWarning: be very careful with private keys when using MainNet! We are logging these values for convenience only because this is an example on SigNet.\n", xprv);
1916

20-
let (descriptor, key_map, _) = Bip86(xprv, KeychainKind::External)
21-
.build(Network::Signet)
22-
.expect("Failed to build external descriptor");
17+
let (descriptor, key_map, _) = Bip86(xprv, KeychainKind::External)
18+
.build(Network::Signet)
19+
.expect("Failed to build external descriptor");
2320

24-
let (change_descriptor, change_key_map, _) = Bip86(xprv, KeychainKind::Internal)
25-
.build(Network::Signet)
26-
.expect("Failed to build internal descriptor");
21+
let (change_descriptor, change_key_map, _) = Bip86(xprv, KeychainKind::Internal)
22+
.build(Network::Signet)
23+
.expect("Failed to build internal descriptor");
2724

28-
let descriptor_string_priv = descriptor.to_string_with_secret(&key_map);
29-
let change_descriptor_string_priv = change_descriptor.to_string_with_secret(&change_key_map);
30-
// --8<-- [end:main]
25+
let descriptor_string_priv = descriptor.to_string_with_secret(&key_map);
26+
let change_descriptor_string_priv = change_descriptor.to_string_with_secret(&change_key_map);
27+
// --8<-- [end:main]
3128

3229
println!(
3330
"---------------- Descriptors ------------------------------\n# Private Key (External)\n{:?}\n\n# Private Key (Internal)\n{:?}\n\n# Public Key (External)\n{:?}\n\n# Public Key (Internal)\n{:?}\n",

examples/rust/persistence/memory/src/main.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,25 @@ const EXTERNAL_DESCRIPTOR: &str = "tr(tprv8ZgxMBicQKsPdJuLWWArdBsWjqDA3W5WoREnfd
99
const INTERNAL_DESCRIPTOR: &str = "tr(tprv8ZgxMBicQKsPdJuLWWArdBsWjqDA3W5WoREnfdgKEcCQB1FMKfSoaFz9JHZU71HwXAqTsjHripkLM62kUQar14SDD8brsmhFKqVUPXGrZLc/86'/1'/0'/1/*)#ccz2p7rj";
1010
// --8<-- [end:descriptors]
1111

12-
// The codeblocks in https://bookofbdk.com pull their code from these examples. Since we do not want an indent on the
12+
// The codeblocks in https://bookofbdk.com pull their code from these examples. Since we do not want an indent on the
1313
// codeblocks on the website, we also remove the indents here.
1414

1515
fn main() -> Result<(), anyhow::Error> {
16-
// --8<-- [start:create]
17-
let mut wallet = Wallet::create(EXTERNAL_DESCRIPTOR, INTERNAL_DESCRIPTOR)
18-
.network(Network::Signet)
19-
.create_wallet_no_persist()
20-
.expect("valid wallet");
21-
// --8<-- [end:create]
16+
// --8<-- [start:create]
17+
let mut wallet = Wallet::create(EXTERNAL_DESCRIPTOR, INTERNAL_DESCRIPTOR)
18+
.network(Network::Signet)
19+
.create_wallet_no_persist()
20+
.expect("valid wallet");
21+
// --8<-- [end:create]
2222

23-
// --8<-- [start:address]
24-
// Reveal a new address from your external keychain
25-
let address: AddressInfo = wallet.reveal_next_address(KeychainKind::External);
26-
println!(
27-
"Generated address {} at index {}",
28-
address.address, address.index
29-
);
30-
// --8<-- [end:address]
23+
// --8<-- [start:address]
24+
// Reveal a new address from your external keychain
25+
let address: AddressInfo = wallet.reveal_next_address(KeychainKind::External);
26+
println!(
27+
"Generated address {} at index {}",
28+
address.address, address.index
29+
);
30+
// --8<-- [end:address]
3131

3232
Ok(())
3333
}

examples/rust/persistence/sqlite/src/main.rs

Lines changed: 35 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -11,48 +11,45 @@ const EXTERNAL_DESCRIPTOR: &str = "tr(tprv8ZgxMBicQKsPdJuLWWArdBsWjqDA3W5WoREnfd
1111
const INTERNAL_DESCRIPTOR: &str = "tr(tprv8ZgxMBicQKsPdJuLWWArdBsWjqDA3W5WoREnfdgKEcCQB1FMKfSoaFz9JHZU71HwXAqTsjHripkLM62kUQar14SDD8brsmhFKqVUPXGrZLc/86'/1'/0'/1/*)#ccz2p7rj";
1212
// --8<-- [end:descriptors]
1313

14-
// The codeblocks in https://bookofbdk.com pull their code from these examples. Since we do not want an indent on the
15-
// codeblocks on the website, we also remove the indents here.
16-
1714
fn main() -> Result<(), anyhow::Error> {
18-
// --8<-- [start:load]
19-
let network = Network::Signet;
20-
let file_path = "test_wallet.sqlite3";
21-
let mut conn = rusqlite::Connection::open(file_path)?;
15+
// --8<-- [start:load]
16+
let network = Network::Signet;
17+
let file_path = "test_wallet.sqlite3";
18+
let mut conn = rusqlite::Connection::open(file_path)?;
2219

23-
let wallet_opt = Wallet::load()
24-
.descriptor(KeychainKind::External, Some(EXTERNAL_DESCRIPTOR))
25-
.descriptor(KeychainKind::Internal, Some(INTERNAL_DESCRIPTOR))
26-
.extract_keys() // only needed if using private key descriptors
27-
.check_network(network)
28-
.load_wallet(&mut conn)?;
29-
// --8<-- [end:load]
20+
let wallet_opt = Wallet::load()
21+
.descriptor(KeychainKind::External, Some(EXTERNAL_DESCRIPTOR))
22+
.descriptor(KeychainKind::Internal, Some(INTERNAL_DESCRIPTOR))
23+
.extract_keys() // only needed if using private key descriptors
24+
.check_network(network)
25+
.load_wallet(&mut conn)?;
26+
// --8<-- [end:load]
3027

31-
// --8<-- [start:create]
32-
let mut wallet = match wallet_opt {
33-
Some(wallet) => {
34-
println!("Loaded existing wallet database.");
35-
wallet
36-
}
37-
None => {
38-
println!("Creating new wallet database.");
39-
Wallet::create(EXTERNAL_DESCRIPTOR, INTERNAL_DESCRIPTOR)
40-
.network(network)
41-
.create_wallet(&mut conn)?
42-
}
43-
};
44-
// --8<-- [end:create]
28+
// --8<-- [start:create]
29+
let mut wallet = match wallet_opt {
30+
Some(wallet) => {
31+
println!("Loaded existing wallet database.");
32+
wallet
33+
}
34+
None => {
35+
println!("Creating new wallet database.");
36+
Wallet::create(EXTERNAL_DESCRIPTOR, INTERNAL_DESCRIPTOR)
37+
.network(network)
38+
.create_wallet(&mut conn)?
39+
}
40+
};
41+
// --8<-- [end:create]
4542

46-
// --8<-- [start:address]
47-
// Reveal a new address from your external keychain
48-
let address = wallet.reveal_next_address(KeychainKind::External);
49-
wallet.persist(&mut conn)?;
50-
// Only share new address with user after successfully persisting wallet
51-
println!(
52-
"Generated address {} at index {}",
53-
address.address, address.index
54-
);
55-
// --8<-- [end:address]
43+
// --8<-- [start:address]
44+
// Reveal a new address from your external keychain
45+
let address = wallet.reveal_next_address(KeychainKind::External);
46+
wallet.persist(&mut conn)?;
47+
// Only share new address with user after successfully persisting wallet
48+
println!(
49+
"Generated address {} at index {}",
50+
address.address, address.index
51+
);
52+
// --8<-- [end:address]
5653

5754
Ok(())
5855
}

examples/rust/recovery-phrases/src/main.rs

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,25 @@ use bdk_wallet::keys::bip39::Mnemonic;
44
use bdk_wallet::template::{Bip86, DescriptorTemplate};
55
use bdk_wallet::KeychainKind;
66

7-
// The codeblocks in https://bookofbdk.com pull their code from these examples. Since we do not want an indent on the
8-
// codeblocks on the website, we also remove the indents here.
9-
107
fn main() {
118
println!("\n-------- Book of BDK Recovery Phrases Example ------------------------");
129

13-
// --8<-- [start:main]
14-
let recovery_phrase: &str = "awesome awesome awesome awesome awesome awesome awesome awesome awesome awesome awesome awesome";
15-
let mnemonic = Mnemonic::parse(recovery_phrase).expect("Invalid seed! Be sure to replace the value of RECOVERY_PHRASE with your own 12 word seed phrase.");
16-
let seed = mnemonic.to_seed("");
17-
let xprv = Xpriv::new_master(Network::Signet, &seed).expect("Failed to create master key");
10+
// --8<-- [start:main]
11+
let recovery_phrase: &str = "awesome awesome awesome awesome awesome awesome awesome awesome awesome awesome awesome awesome";
12+
let mnemonic = Mnemonic::parse(recovery_phrase).expect("Invalid seed! Be sure to replace the value of RECOVERY_PHRASE with your own 12 word seed phrase.");
13+
let seed = mnemonic.to_seed("");
14+
let xprv = Xpriv::new_master(Network::Signet, &seed).expect("Failed to create master key");
1815

19-
println!("# Master Private Key\n{xprv}\nWarning: be very careful with seeds and private keys when using MainNet! We are logging these values for convenience and demonstration purposes only.\n");
16+
println!("# Master Private Key\n{xprv}\nWarning: be very careful with seeds and private keys when using MainNet! We are logging these values for convenience and demonstration purposes only.\n");
2017

21-
let (descriptor, key_map, _) = Bip86(xprv, KeychainKind::External)
22-
.build(Network::Signet)
23-
.expect("Failed to build external descriptor");
18+
let (descriptor, key_map, _) = Bip86(xprv, KeychainKind::External)
19+
.build(Network::Signet)
20+
.expect("Failed to build external descriptor");
2421

25-
let (change_descriptor, change_key_map, _) = Bip86(xprv, KeychainKind::Internal)
26-
.build(Network::Signet)
27-
.expect("Failed to build internal descriptor");
28-
// --8<-- [end:main]
22+
let (change_descriptor, change_key_map, _) = Bip86(xprv, KeychainKind::Internal)
23+
.build(Network::Signet)
24+
.expect("Failed to build internal descriptor");
25+
// --8<-- [end:main]
2926

3027
println!(
3128
"Private Key (External)\n{:?}\n\nPrivate Key (Internal)\n{:?}\n\nPublic Key (External)\n{:?}\n\nPublic Key (Internal)\n{:?}\n",

examples/rust/starter-example/src/main.rs

Lines changed: 83 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -17,96 +17,93 @@ const STOP_GAP: usize = 20;
1717
const PARALLEL_REQUESTS: usize = 1;
1818
const DB_PATH: &str = "starter.sqlite3";
1919

20-
// The codeblocks in https://bookofbdk.com pull their code from these examples. Since we do not want an indent on the
21-
// codeblocks on the website, we also remove the indents here.
22-
2320
#[allow(deprecated)]
2421
fn main() {
2522
println!("\nWelcome to the Book of BDK Starter Example Wallet!");
26-
// --8<-- [start:descriptors]
27-
let descriptor: &str = "tr([12071a7c/86'/1'/0']tpubDCaLkqfh67Qr7ZuRrUNrCYQ54sMjHfsJ4yQSGb3aBr1yqt3yXpamRBUwnGSnyNnxQYu7rqeBiPfw3mjBcFNX4ky2vhjj9bDrGstkfUbLB9T/0/*)#z3x5097m";
28-
let change_descriptor: &str = "tr([12071a7c/86'/1'/0']tpubDCaLkqfh67Qr7ZuRrUNrCYQ54sMjHfsJ4yQSGb3aBr1yqt3yXpamRBUwnGSnyNnxQYu7rqeBiPfw3mjBcFNX4ky2vhjj9bDrGstkfUbLB9T/1/*)#n9r4jswr";
29-
// --8<-- [end:descriptors]
30-
31-
// --8<-- [start:wallet]
32-
// Initiate the connection to the database
33-
let mut conn = Connection::open(DB_PATH).expect("Can't open database");
34-
35-
// Create the wallet
36-
let wallet_opt = Wallet::load()
37-
.descriptor(KeychainKind::External, Some(descriptor))
38-
.descriptor(KeychainKind::Internal, Some(change_descriptor))
39-
// .extract_keys() // uncomment this line when using private descriptors
40-
.check_network(Network::Signet)
41-
.load_wallet(&mut conn)
42-
.unwrap();
43-
44-
let mut wallet = if let Some(loaded_wallet) = wallet_opt {
45-
loaded_wallet
46-
} else {
47-
Wallet::create(descriptor, change_descriptor)
48-
.network(Network::Signet)
49-
.create_wallet(&mut conn)
50-
.unwrap()
51-
};
52-
// --8<-- [end:wallet]
53-
54-
// --8<-- [start:client]
55-
// Sync the wallet
56-
let client: esplora_client::BlockingClient =
57-
Builder::new("https://blockstream.info/signet/api/").build_blocking();
58-
59-
println!("Syncing wallet...");
60-
let full_scan_request: FullScanRequestBuilder<KeychainKind> = wallet.start_full_scan();
61-
let update: FullScanResponse<KeychainKind> = client
62-
.full_scan(full_scan_request, STOP_GAP, PARALLEL_REQUESTS)
63-
.unwrap();
64-
65-
// Apply the update from the full scan to the wallet
66-
wallet.apply_update(update).unwrap();
67-
68-
let balance = wallet.balance();
69-
println!("Wallet balance: {} sat", balance.total().to_sat());
70-
// --8<-- [end:client]
71-
72-
// --8<-- [start:address]
73-
if balance.total().to_sat() < 5000 {
74-
println!("Your wallet does not have sufficient balance for the following steps!");
75-
// Reveal a new address from your external keychain
76-
let address: AddressInfo = wallet.reveal_next_address(KeychainKind::External);
77-
println!(
78-
"Send Signet coins to {} (address generated at index {})",
79-
address.address, address.index
80-
);
81-
wallet.persist(&mut conn).expect("Cannot persist");
82-
exit(0)
83-
}
84-
// --8<-- [end:address]
85-
86-
// --8<-- [start:recipient]
87-
// Use a faucet return address
88-
let faucet_address =
89-
Address::from_str("tb1p4tp4l6glyr2gs94neqcpr5gha7344nfyznfkc8szkreflscsdkgqsdent4")
90-
.unwrap()
91-
.require_network(Network::Signet)
23+
// --8<-- [start:descriptors]
24+
let descriptor: &str = "tr([12071a7c/86'/1'/0']tpubDCaLkqfh67Qr7ZuRrUNrCYQ54sMjHfsJ4yQSGb3aBr1yqt3yXpamRBUwnGSnyNnxQYu7rqeBiPfw3mjBcFNX4ky2vhjj9bDrGstkfUbLB9T/0/*)#z3x5097m";
25+
let change_descriptor: &str = "tr([12071a7c/86'/1'/0']tpubDCaLkqfh67Qr7ZuRrUNrCYQ54sMjHfsJ4yQSGb3aBr1yqt3yXpamRBUwnGSnyNnxQYu7rqeBiPfw3mjBcFNX4ky2vhjj9bDrGstkfUbLB9T/1/*)#n9r4jswr";
26+
// --8<-- [end:descriptors]
27+
28+
// --8<-- [start:wallet]
29+
// Initiate the connection to the database
30+
let mut conn = Connection::open(DB_PATH).expect("Can't open database");
31+
32+
// Create the wallet
33+
let wallet_opt = Wallet::load()
34+
.descriptor(KeychainKind::External, Some(descriptor))
35+
.descriptor(KeychainKind::Internal, Some(change_descriptor))
36+
// .extract_keys() // uncomment this line when using private descriptors
37+
.check_network(Network::Signet)
38+
.load_wallet(&mut conn)
9239
.unwrap();
9340

94-
let send_amount: Amount = Amount::from_sat(1000);
95-
// --8<-- [end:recipient]
96-
97-
// --8<-- [start:transaction]
98-
let mut builder = wallet.build_tx();
99-
builder
100-
.fee_rate(FeeRate::from_sat_per_vb(4).unwrap())
101-
.add_recipient(faucet_address.script_pubkey(), send_amount);
102-
103-
let mut psbt: Psbt = builder.finish().unwrap();
104-
105-
let finalized = wallet.sign(&mut psbt, SignOptions::default()).unwrap();
106-
assert!(finalized);
41+
let mut wallet = if let Some(loaded_wallet) = wallet_opt {
42+
loaded_wallet
43+
} else {
44+
Wallet::create(descriptor, change_descriptor)
45+
.network(Network::Signet)
46+
.create_wallet(&mut conn)
47+
.unwrap()
48+
};
49+
// --8<-- [end:wallet]
50+
51+
// --8<-- [start:client]
52+
// Sync the wallet
53+
let client: esplora_client::BlockingClient =
54+
Builder::new("https://blockstream.info/signet/api/").build_blocking();
55+
56+
println!("Syncing wallet...");
57+
let full_scan_request: FullScanRequestBuilder<KeychainKind> = wallet.start_full_scan();
58+
let update: FullScanResponse<KeychainKind> = client
59+
.full_scan(full_scan_request, STOP_GAP, PARALLEL_REQUESTS)
60+
.unwrap();
10761

108-
let tx = psbt.extract_tx().unwrap();
109-
client.broadcast(&tx).unwrap();
110-
println!("Transaction broadcast! Txid: {}", tx.compute_txid());
111-
// --8<-- [end:transaction]
62+
// Apply the update from the full scan to the wallet
63+
wallet.apply_update(update).unwrap();
64+
65+
let balance = wallet.balance();
66+
println!("Wallet balance: {} sat", balance.total().to_sat());
67+
// --8<-- [end:client]
68+
69+
// --8<-- [start:address]
70+
if balance.total().to_sat() < 5000 {
71+
println!("Your wallet does not have sufficient balance for the following steps!");
72+
// Reveal a new address from your external keychain
73+
let address: AddressInfo = wallet.reveal_next_address(KeychainKind::External);
74+
println!(
75+
"Send Signet coins to {} (address generated at index {})",
76+
address.address, address.index
77+
);
78+
wallet.persist(&mut conn).expect("Cannot persist");
79+
exit(0)
80+
}
81+
// --8<-- [end:address]
82+
83+
// --8<-- [start:recipient]
84+
// Use a faucet return address
85+
let faucet_address =
86+
Address::from_str("tb1p4tp4l6glyr2gs94neqcpr5gha7344nfyznfkc8szkreflscsdkgqsdent4")
87+
.unwrap()
88+
.require_network(Network::Signet)
89+
.unwrap();
90+
91+
let send_amount: Amount = Amount::from_sat(1000);
92+
// --8<-- [end:recipient]
93+
94+
// --8<-- [start:transaction]
95+
let mut builder = wallet.build_tx();
96+
builder
97+
.fee_rate(FeeRate::from_sat_per_vb(4).unwrap())
98+
.add_recipient(faucet_address.script_pubkey(), send_amount);
99+
100+
let mut psbt: Psbt = builder.finish().unwrap();
101+
102+
let finalized = wallet.sign(&mut psbt, SignOptions::default()).unwrap();
103+
assert!(finalized);
104+
105+
let tx = psbt.extract_tx().unwrap();
106+
client.broadcast(&tx).unwrap();
107+
println!("Transaction broadcast! Txid: {}", tx.compute_txid());
108+
// --8<-- [end:transaction]
112109
}

0 commit comments

Comments
 (0)