(work in progress - relies on the multi-address tracking feature from mempool/mempool#4137)
A utility library for efficiently syncing Bitcoin wallet history from an instance of The Mempool Open Source Project® backend.
Mwck uses websocket push notifications to discover new address transaction events, eliminating the need to constantly poll the REST API.
Aims to support both native and wasm32 targets.
use mwck::wallet::{address, Wallet, Options, Event};
let wallet = Wallet::new(&Options {
hostname: "localhost:4200",
network: bitcoin::Network::Bitcoin,
secure: false,
});
// connect to the websocket server
wallet.connect(true).await;
// start watching two addresses
wallet.watch(&[addressA.script_pubkey(), addressB.script_pubkey()]).await;
// stop watching one of the addresses
wallet.unwatch(&[addressB.script_pubkey()]).await;
// get the current state of addressA on demand (including balance & list of transactions)
let address_state = wallet.get_address_state(addressA.script_pubkey()).await;
// get a tokio::sync::broadcast receiver
let event_receiver = wallet.subscribe();
// consume events related to the currently watched addresses
loop {
match event_receiver.recv().await {
Ok(Event::AddressEvent(address::Event::Mempool(scriptpubkey, tx))) => {
// received unconfirmed tx related to scriptpubkey
}
Ok(Event::AddressEvent(address::Event::Confirmed(scriptpubkey, tx))) => {
// received confirmed tx related to scriptpubkey
}
Ok(Event::AddressEvent(address::Event::Removed(scriptpubkey, tx))) => {
// tx related to scriptpubkey dropped from mempool
}
Ok(Event::AddressReady(scriptpubkey)) => {
// finished syncing scriptpubkey with the server
}
...
}
}
Also check out the wasm_wallet_watcher
example crate.
The library exposes a MempoolAsync
struct, which wraps and extends the AsyncClient
from the esplora-client
crate, and is suitable for integration with BDK.
Check out the bdk_mempool
and bdk_mempool_wallet
example crates, which are analogous to https://github.com/bitcoindevkit/bdk/tree/master/crates/esplora and https://github.com/bitcoindevkit/bdk/tree/master/example-crates/wallet_esplora_async respectively.
(TODO)
(TODO)