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};