|
| 1 | +use bdk_wallet::KeychainKind; |
| 2 | +use bitcoin::Network; |
| 3 | +use multi_keychain_wallet::multi_keychain::{KeyRing, Wallet}; |
| 4 | + |
| 5 | +use bdk_electrum::{electrum_client::Client, BdkElectrumClient}; |
| 6 | + |
| 7 | +const STOP_GAP: usize = 50; |
| 8 | +const BATCH_SIZE: usize = 5; |
| 9 | +const EXTERNAL_DESCRIPTOR: &str = "tr(tprv8ZgxMBicQKsPdrjwWCyXqqJ4YqcyG4DmKtjjsRt29v1PtD3r3PuFJAjWytzcvSTKnZAGAkPSmnrdnuHWxCAwy3i1iPhrtKAfXRH7dVCNGp6/86'/1'/0'/0/*)#g9xn7wf9"; |
| 10 | +const INTERNAL_DESCRIPTOR: &str = "tr(tprv8ZgxMBicQKsPdrjwWCyXqqJ4YqcyG4DmKtjjsRt29v1PtD3r3PuFJAjWytzcvSTKnZAGAkPSmnrdnuHWxCAwy3i1iPhrtKAfXRH7dVCNGp6/86'/1'/0'/1/*)#e3rjrmea"; |
| 11 | + |
| 12 | +fn main() { |
| 13 | + // Construct wallet |
| 14 | + let mut keyring = |
| 15 | + KeyRing::<KeychainKind>::new(Network::Signet, KeychainKind::External, EXTERNAL_DESCRIPTOR); |
| 16 | + keyring.add_descriptor(KeychainKind::Internal, INTERNAL_DESCRIPTOR, false); |
| 17 | + |
| 18 | + let mut wallet = Wallet::new(keyring); |
| 19 | + |
| 20 | + let balance = wallet.balance(); |
| 21 | + println!("Balance before syncing: {} sats", balance.total().to_sat()); |
| 22 | + |
| 23 | + // Reveal address |
| 24 | + let address = wallet.reveal_next_default_address_unwrap(); |
| 25 | + println!("Address revealed: {}", address.address); |
| 26 | + |
| 27 | + let client = BdkElectrumClient::new(Client::new("ssl://mempool.space:60602").unwrap()); |
| 28 | + |
| 29 | + // Perform sync |
| 30 | + let sync_request = wallet.start_sync_with_revealed_spks(); |
| 31 | + let update = client.sync(sync_request, BATCH_SIZE, true).unwrap(); |
| 32 | + |
| 33 | + wallet.apply_update(update); |
| 34 | + |
| 35 | + let balance = wallet.balance(); |
| 36 | + println!("Balance after sync: {} sats", balance.total().to_sat()); |
| 37 | + |
| 38 | + // Perform full scan |
| 39 | + let full_scan_request = wallet.start_full_scan(); |
| 40 | + let update = client |
| 41 | + .full_scan(full_scan_request, STOP_GAP, BATCH_SIZE, true) |
| 42 | + .unwrap(); |
| 43 | + |
| 44 | + wallet.apply_update(update); |
| 45 | + |
| 46 | + let balance = wallet.balance(); |
| 47 | + println!("Balance after full scan: {} sats", balance.total().to_sat()); |
| 48 | +} |
0 commit comments