removed includes

added ends-with and starts-and-ends-with
updated help messages
added expected number of values
updated .value_name for each option
This commit is contained in:
Jon-Eric Cook
2020-01-22 16:36:33 -08:00
committed by Michael Vines
parent 932ae86d47
commit 4d8ab45c56

View File

@ -148,25 +148,13 @@ fn main() -> Result<(), Box<dyn error::Error>> {
.arg( .arg(
Arg::with_name("ignore_case") Arg::with_name("ignore_case")
.long("ignore-case") .long("ignore-case")
.help("Perform case insensitive matches"), .help("Performs case insensitive matches"),
)
.arg(
Arg::with_name("includes")
.long("includes")
.value_name("BASE58")
.takes_value(true)
.multiple(true)
.validator(|value| {
bs58::decode(&value).into_vec()
.map(|_| ())
.map_err(|err| format!("{}: {:?}", value, err))
})
.help("Save keypair if its public key includes this string\n(may be specified multiple times)"),
) )
.arg( .arg(
Arg::with_name("starts_with") Arg::with_name("starts_with")
.long("starts-with") .long("starts-with")
.value_name("BASE58 PREFIX") .value_name("PREFIX COUNT")
.number_of_values(2)
.takes_value(true) .takes_value(true)
.multiple(true) .multiple(true)
.validator(|value| { .validator(|value| {
@ -174,7 +162,35 @@ fn main() -> Result<(), Box<dyn error::Error>> {
.map(|_| ()) .map(|_| ())
.map_err(|err| format!("{}: {:?}", value, err)) .map_err(|err| format!("{}: {:?}", value, err))
}) })
.help("Save keypair if its public key starts with this prefix\n(may be specified multiple times)"), .help("Saves specified number of keypairs whos public key starts with the indicated prefix\nExample: --starts-with sol 4"),
)
.arg(
Arg::with_name("ends_with")
.long("ends-with")
.value_name("SUFFIX COUNT")
.number_of_values(2)
.takes_value(true)
.multiple(true)
.validator(|value| {
bs58::decode(&value).into_vec()
.map(|_| ())
.map_err(|err| format!("{}: {:?}", value, err))
})
.help("Saves specified number of keypairs whos public key ends with the indicated suffix\nExample: --ends-with ana 4"),
)
.arg(
Arg::with_name("starts_and_ends_with")
.long("starts-and-ends-with")
.value_name("PREFIX SUFFIX COUNT")
.number_of_values(3)
.takes_value(true)
.multiple(true)
.validator(|value| {
bs58::decode(&value).into_vec()
.map(|_| ())
.map_err(|err| format!("{}: {:?}", value, err))
})
.help("Saves specified number of keypairs whos public key starts and ends with the indicated perfix and suffix\nExample: --starts-and-ends-with sol ana 4"),
), ),
) )
.subcommand( .subcommand(
@ -311,14 +327,7 @@ fn main() -> Result<(), Box<dyn error::Error>> {
} }
("grind", Some(matches)) => { ("grind", Some(matches)) => {
let ignore_case = matches.is_present("ignore_case"); let ignore_case = matches.is_present("ignore_case");
let includes = if matches.is_present("includes") {
values_t_or_exit!(matches, "includes", String)
.into_iter()
.map(|s| if ignore_case { s.to_lowercase() } else { s })
.collect()
} else {
HashSet::new()
};
let starts_with = if matches.is_present("starts_with") { let starts_with = if matches.is_present("starts_with") {
values_t_or_exit!(matches, "starts_with", String) values_t_or_exit!(matches, "starts_with", String)
@ -329,29 +338,21 @@ fn main() -> Result<(), Box<dyn error::Error>> {
HashSet::new() HashSet::new()
}; };
if includes.is_empty() && starts_with.is_empty() {
eprintln!(
"Error: No keypair search criteria provided (--includes or --starts-with)"
);
exit(1);
}
let attempts = Arc::new(AtomicU64::new(1)); let attempts = Arc::new(AtomicU64::new(1));
let found = Arc::new(AtomicU64::new(0)); let found = Arc::new(AtomicU64::new(0));
let start = Instant::now(); let start = Instant::now();
println!( // println!(
"Searching with {} threads for a pubkey containing {:?} or starting with {:?}", // "Searching with {} threads for a pubkey containing {:?} or starting with {:?}",
num_cpus::get(), // num_cpus::get(),
includes, // includes,
starts_with // starts_with
); // );
let _threads = (0..num_cpus::get()) let _threads = (0..num_cpus::get())
.map(|_| { .map(|_| {
let attempts = attempts.clone(); let attempts = attempts.clone();
let found = found.clone(); let found = found.clone();
let includes = includes.clone();
let starts_with = starts_with.clone(); let starts_with = starts_with.clone();
thread::spawn(move || loop { thread::spawn(move || loop {
@ -372,9 +373,7 @@ fn main() -> Result<(), Box<dyn error::Error>> {
pubkey = pubkey.to_lowercase(); pubkey = pubkey.to_lowercase();
} }
if starts_with.iter().any(|s| pubkey.starts_with(s)) if starts_with.iter().any(|s| pubkey.starts_with(s)) {
|| includes.iter().any(|s| pubkey.contains(s))
{
let found = found.fetch_add(1, Ordering::Relaxed); let found = found.fetch_add(1, Ordering::Relaxed);
output_keypair( output_keypair(
&keypair, &keypair,