[BREAKGLASS] Append-only mirror of github.com/mempool/mwck-rs
Go to file
2024-01-11 23:37:13 +00:00
examples Add BDK integration examples 2023-10-14 02:10:45 +00:00
src Use regular tokio::task::spawn in native context 2023-10-14 01:44:37 +00:00
.gitignore Fix .gitignore 2024-01-11 23:22:13 +00:00
Cargo.toml Fix Cargo license identifier 2024-01-11 23:37:13 +00:00
LICENSE Add LICENSE 2024-01-11 23:20:48 +00:00
README.md Add BDK integration examples 2023-10-14 02:10:45 +00:00

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)