diff --git a/Cargo.toml b/Cargo.toml index d7d18b7a..5abcc0f0 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -69,6 +69,9 @@ clap = "2.33" [[example]] name = "address_validator" +[[example]] +name = "compact_filters_balance" +required-features = ["compact_filters"] [[example]] name = "miniscriptc" diff --git a/examples/compact_filters_balance.rs b/examples/compact_filters_balance.rs new file mode 100644 index 00000000..4c8f38e2 --- /dev/null +++ b/examples/compact_filters_balance.rs @@ -0,0 +1,32 @@ +use bdk::blockchain::compact_filters::*; +use bdk::blockchain::noop_progress; +use bdk::database::MemoryDatabase; +use bdk::*; +use bitcoin::*; +use blockchain::compact_filters::CompactFiltersBlockchain; +use blockchain::compact_filters::CompactFiltersError; +use log::info; +use std::sync::Arc; + +/// This will return wallet balance using compact filters +/// Requires a synced local bitcoin node 0.21 running on testnet with blockfilterindex=1 and peerblockfilters=1 +fn main() -> Result<(), CompactFiltersError> { + env_logger::init(); + info!("start"); + + let num_threads = 4; + let mempool = Arc::new(Mempool::default()); + let peers = (0..num_threads) + .map(|_| Peer::connect("localhost:18333", Arc::clone(&mempool), Network::Testnet)) + .collect::>()?; + let blockchain = CompactFiltersBlockchain::new(peers, "./wallet-filters", Some(500_000))?; + info!("done {:?}", blockchain); + let descriptor = "wpkh(tpubD6NzVbkrYhZ4X2yy78HWrr1M9NT8dKeWfzNiQqDdMqqa9UmmGztGGz6TaLFGsLfdft5iu32gxq1T4eMNxExNNWzVCpf9Y6JZi5TnqoC9wJq/*)"; + + let database = MemoryDatabase::default(); + let wallet = + Arc::new(Wallet::new(descriptor, None, Network::Testnet, database, blockchain).unwrap()); + wallet.sync(noop_progress(), None).unwrap(); + info!("balance: {}", wallet.get_balance()?); + Ok(()) +}