1 unstable release
0.1.0 | Jan 11, 2024 |
---|
#16 in #mempool
64KB
1.5K
SLoC
Rust Mempool Wallet Connector Kit
(work in progress - relies on the multi-address tracking feature from https://github.com/mempool/mempool/pull/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.
Quick start
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.
BDK
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.
API
(TODO)
Types/Interfaces
(TODO)
Dependencies
~13–32MB
~423K SLoC