[BREAKGLASS] Append-only mirror of github.com/mempool/mwck-rs
Go to file
2023-10-14 01:42:46 +00:00
examples/wasm_wallet_watcher Add delegating wrapper for esplora_client 2023-10-14 00:17:09 +00:00
src Better error structure 2023-10-14 01:42:46 +00:00
.gitignore Initial mwck prototype 2023-10-10 19:39:13 +00:00
Cargo.toml Enable tls for native websockets 2023-10-14 01:42:02 +00:00
README.md Add README.md 2023-10-10 20:00:48 +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.

API

(TODO)

Types/Interfaces

(TODO)