rustywallet_electrum/
lib.rs

1//! # rustywallet-electrum
2//!
3//! Electrum protocol client for Bitcoin balance checking and UTXO fetching.
4//!
5//! This crate provides an async client for communicating with Electrum servers,
6//! allowing you to query blockchain data without rate limits.
7//!
8//! ## Features
9//!
10//! - **Balance checking** - Get confirmed and unconfirmed balance for any address
11//! - **Batch queries** - Check multiple addresses efficiently in a single request
12//! - **UTXO listing** - Get unspent outputs for transaction building
13//! - **Transaction operations** - Get raw transactions and broadcast signed ones
14//! - **TLS support** - Secure connections to Electrum servers
15//!
16//! ## Quick Start
17//!
18//! ```no_run
19//! use rustywallet_electrum::{ElectrumClient, ClientConfig};
20//!
21//! #[tokio::main]
22//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
23//!     // Connect to a public Electrum server
24//!     let client = ElectrumClient::new("electrum.blockstream.info").await?;
25//!     
26//!     // Check server connection
27//!     let version = client.server_version().await?;
28//!     println!("Connected to: {}", version.server_software);
29//!     
30//!     // Get balance for an address
31//!     let balance = client.get_balance("1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa").await?;
32//!     println!("Confirmed: {} sats", balance.confirmed);
33//!     println!("Unconfirmed: {} sats", balance.unconfirmed);
34//!     
35//!     // Batch check multiple addresses
36//!     let addresses = vec![
37//!         "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",
38//!         "3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy",
39//!     ];
40//!     let balances = client.get_balances(&addresses).await?;
41//!     for (addr, bal) in addresses.iter().zip(balances.iter()) {
42//!         println!("{}: {} sats", addr, bal.confirmed);
43//!     }
44//!     
45//!     Ok(())
46//! }
47//! ```
48//!
49//! ## Address Support
50//!
51//! All Bitcoin address types are supported:
52//! - P2PKH (1...)
53//! - P2SH (3...)
54//! - P2WPKH (bc1q...)
55//! - P2WSH (bc1q... longer)
56//! - P2TR (bc1p...)
57//!
58//! ## Public Servers
59//!
60//! Built-in list of public Electrum servers:
61//! - `electrum.blockstream.info:50002` (SSL)
62//! - `electrum1.bluewallet.io:443` (SSL)
63//! - `bitcoin.aranguren.org:50002` (SSL)
64//!
65//! ## Custom Configuration
66//!
67//! ```no_run
68//! use rustywallet_electrum::{ElectrumClient, ClientConfig};
69//! use std::time::Duration;
70//!
71//! #[tokio::main]
72//! async fn main() -> Result<(), Box<dyn std::error::Error>> {
73//!     let config = ClientConfig::ssl("electrum.blockstream.info")
74//!         .with_port(50002)
75//!         .with_timeout(Duration::from_secs(60))
76//!         .with_retry(5, Duration::from_secs(2));
77//!     
78//!     let client = ElectrumClient::with_config(config).await?;
79//!     Ok(())
80//! }
81//! ```
82
83#![warn(missing_docs)]
84#![warn(rustdoc::missing_crate_level_docs)]
85
86pub mod client;
87pub mod error;
88pub mod scripthash;
89pub mod transport;
90pub mod types;
91
92// Re-exports
93pub use client::ElectrumClient;
94pub use error::{ElectrumError, Result};
95pub use scripthash::{address_to_scripthash, addresses_to_scripthashes};
96pub use types::{Balance, ClientConfig, ServerVersion, TxHistory, Utxo, DEFAULT_SERVERS};