rustywallet_vanity/lib.rs
1//! # rustywallet-vanity
2//!
3//! High-performance vanity address generator for Bitcoin and Ethereum.
4//!
5//! This crate provides tools for generating cryptocurrency addresses that match
6//! specific patterns, such as addresses starting with "1Love" or "1BTC".
7//!
8//! ## Quick Start
9//!
10//! ```rust,no_run
11//! use rustywallet_vanity::prelude::*;
12//! use rustywallet_keys::prelude::Network;
13//!
14//! // Search for an address starting with "1A"
15//! let result = VanityGenerator::new()
16//! .pattern("1A")
17//! .search()
18//! .unwrap();
19//!
20//! println!("Address: {}", result.address);
21//! println!("Private Key (WIF): {}", result.private_key.to_wif(Network::Mainnet));
22//! println!("Attempts: {}", result.stats.attempts);
23//! ```
24//!
25//! ## Multi-Pattern Search
26//!
27//! ```rust,no_run
28//! use rustywallet_vanity::prelude::*;
29//!
30//! // Search for any of multiple patterns
31//! let result = VanityGenerator::new()
32//! .patterns(&["1Love", "1BTC", "1Coin"])
33//! .case_insensitive()
34//! .search_parallel()
35//! .unwrap();
36//!
37//! println!("Found: {} (matched {})", result.address, result.matched_pattern);
38//! ```
39//!
40//! ## Difficulty Estimation
41//!
42//! ```rust
43//! use rustywallet_vanity::prelude::*;
44//!
45//! let gen = VanityGenerator::new().pattern("1Love");
46//! let estimates = gen.estimate_difficulty();
47//!
48//! for est in estimates {
49//! println!("{}", est);
50//! if let Some(warning) = est.warning() {
51//! println!(" {}", warning);
52//! }
53//! }
54//! ```
55//!
56//! ## Address Types
57//!
58//! ```rust,no_run
59//! use rustywallet_vanity::prelude::*;
60//!
61//! // Legacy P2PKH (1...)
62//! let result = VanityGenerator::new()
63//! .pattern("1Love")
64//! .address_type(AddressType::P2PKH)
65//! .search();
66//!
67//! // Native SegWit (bc1q...)
68//! let result = VanityGenerator::new()
69//! .pattern("bc1qtest")
70//! .address_type(AddressType::P2WPKH)
71//! .search();
72//!
73//! // Ethereum (0x...)
74//! let result = VanityGenerator::new()
75//! .pattern("0xdead")
76//! .address_type(AddressType::Ethereum)
77//! .case_insensitive()
78//! .search();
79//! ```
80//!
81//! ## Progress Tracking
82//!
83//! ```rust,no_run
84//! use rustywallet_vanity::prelude::*;
85//!
86//! let result = VanityGenerator::new()
87//! .pattern("1Love")
88//! .search_with_progress(|progress| {
89//! println!(
90//! "Checked {} keys ({:.0} keys/sec)",
91//! progress.attempts,
92//! progress.rate
93//! );
94//! });
95//! ```
96
97pub mod address_type;
98pub mod config;
99pub mod difficulty;
100pub mod distributed;
101pub mod error;
102pub mod generator;
103pub mod pattern;
104pub mod prelude;
105pub mod regex_pattern;
106pub mod result;
107
108#[cfg(test)]
109mod tests;
110
111// Re-export main types
112pub use address_type::AddressType;
113pub use config::VanityConfig;
114pub use difficulty::{DifficultyEstimate, DifficultyLevel};
115pub use distributed::{
116 DistributedConfig, SearchCoordinator, SearchWorker, WorkResult, WorkUnit,
117 run_distributed_search,
118};
119pub use error::{PatternError, VanityError};
120pub use generator::VanityGenerator;
121pub use pattern::Pattern;
122pub use regex_pattern::{CommonPatterns, RegexPattern};
123pub use result::{SearchProgress, SearchStats, VanityResult};