Crate rustywallet_electrum

Crate rustywallet_electrum 

Source
Expand description

§rustywallet-electrum

Electrum protocol client for Bitcoin balance checking and UTXO fetching.

This crate provides an async client for communicating with Electrum servers, allowing you to query blockchain data without rate limits.

§Features

  • Balance checking - Get confirmed and unconfirmed balance for any address
  • Batch queries - Check multiple addresses efficiently in a single request
  • UTXO listing - Get unspent outputs for transaction building
  • Transaction operations - Get raw transactions and broadcast signed ones
  • TLS support - Secure connections to Electrum servers

§Quick Start

use rustywallet_electrum::{ElectrumClient, ClientConfig};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Connect to a public Electrum server
    let client = ElectrumClient::new("electrum.blockstream.info").await?;
     
    // Check server connection
    let version = client.server_version().await?;
    println!("Connected to: {}", version.server_software);
     
    // Get balance for an address
    let balance = client.get_balance("1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa").await?;
    println!("Confirmed: {} sats", balance.confirmed);
    println!("Unconfirmed: {} sats", balance.unconfirmed);
     
    // Batch check multiple addresses
    let addresses = vec![
        "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",
        "3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy",
    ];
    let balances = client.get_balances(&addresses).await?;
    for (addr, bal) in addresses.iter().zip(balances.iter()) {
        println!("{}: {} sats", addr, bal.confirmed);
    }
     
    Ok(())
}

§Address Support

All Bitcoin address types are supported:

  • P2PKH (1…)
  • P2SH (3…)
  • P2WPKH (bc1q…)
  • P2WSH (bc1q… longer)
  • P2TR (bc1p…)

§Public Servers

Built-in list of public Electrum servers:

  • electrum.blockstream.info:50002 (SSL)
  • electrum1.bluewallet.io:443 (SSL)
  • bitcoin.aranguren.org:50002 (SSL)

§Custom Configuration

use rustywallet_electrum::{ElectrumClient, ClientConfig};
use std::time::Duration;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let config = ClientConfig::ssl("electrum.blockstream.info")
        .with_port(50002)
        .with_timeout(Duration::from_secs(60))
        .with_retry(5, Duration::from_secs(2));
     
    let client = ElectrumClient::with_config(config).await?;
    Ok(())
}

Re-exports§

pub use client::ElectrumClient;
pub use error::ElectrumError;
pub use error::Result;
pub use scripthash::address_to_scripthash;
pub use scripthash::addresses_to_scripthashes;
pub use types::Balance;
pub use types::ClientConfig;
pub use types::ServerVersion;
pub use types::TxHistory;
pub use types::Utxo;
pub use types::DEFAULT_SERVERS;

Modules§

client
Electrum client for blockchain queries.
error
Error types for Electrum client operations.
scripthash
Address to scripthash conversion utilities.
transport
Transport layer for Electrum protocol communication.
types
Data types for Electrum protocol responses.