1
0
Fork 0
mirror of https://github.com/TransparentLC/opencl_vanity_gpg.git synced 2025-10-20 15:24:08 +00:00

chore: tidy up & make progress bar better

This commit is contained in:
GZTime 2025-01-09 02:30:10 +08:00
parent 0b6038d395
commit a50bbf356a
No known key found for this signature in database
GPG key ID: 373640C748EA3E19
6 changed files with 82 additions and 54 deletions

11
Cargo.lock generated
View file

@ -994,6 +994,16 @@ dependencies = [
"web-time", "web-time",
] ]
[[package]]
name = "indicatif-log-bridge"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "63703cf9069b85dbe6fe26e1c5230d013dee99d3559cd3d02ba39e099ef7ab02"
dependencies = [
"indicatif",
"log",
]
[[package]] [[package]]
name = "inout" name = "inout"
version = "0.1.3" version = "0.1.3"
@ -1289,6 +1299,7 @@ dependencies = [
"env_logger", "env_logger",
"hex", "hex",
"indicatif", "indicatif",
"indicatif-log-bridge",
"log", "log",
"ocl", "ocl",
"pgp", "pgp",

View file

@ -23,3 +23,4 @@ rand = "0.8"
smallvec = "1.13" smallvec = "1.13"
anyhow = "1.0" anyhow = "1.0"
indicatif = "0.17" indicatif = "0.17"
indicatif-log-bridge = "0.2"

View file

@ -1,11 +1,9 @@
use anyhow::bail; use anyhow::bail;
use indicatif::{ProgressBar, ProgressState, ProgressStyle}; use log::*;
use log::{debug, info, warn};
use ocl::{Buffer, Device, Platform, ProQue}; use ocl::{Buffer, Device, Platform, ProQue};
use pgp::types::PublicKeyTrait; use pgp::types::PublicKeyTrait;
use rand::thread_rng; use rand::thread_rng;
use std::{ use std::{
fmt::Write,
fs, fs,
path::Path, path::Path,
str::FromStr, str::FromStr,
@ -19,11 +17,7 @@ use utils::*;
mod utils; mod utils;
fn main() -> anyhow::Result<()> { fn main() -> anyhow::Result<()> {
env_logger::Builder::from_env( let bars = init_logger();
env_logger::Env::default().filter_or(env_logger::DEFAULT_FILTER_ENV, "info"),
)
.format_indent(None)
.init();
debug!("{:#?}", LazyLock::force(&ARGS)); debug!("{:#?}", LazyLock::force(&ARGS));
@ -126,7 +120,8 @@ fn main() -> anyhow::Result<()> {
thread::spawn(move || opencl_thread(buffer_result, pro_que, rx_hashdata, tx_result)); thread::spawn(move || opencl_thread(buffer_result, pro_que, rx_hashdata, tx_result));
let bench_size = (dimension * iteration) as u64; let bench_size = (dimension * iteration) as u64;
let bar = init_progress_bar(estimate); let bar = bars.add(init_progress_bar(estimate));
loop { loop {
debug!("Send key to OpenCL thread"); debug!("Send key to OpenCL thread");
tx_hashdata.send(hashdata)?; tx_hashdata.send(hashdata)?;
@ -178,6 +173,8 @@ fn main() -> anyhow::Result<()> {
} }
if ARGS.oneshot { if ARGS.oneshot {
bar.finish();
bars.clear()?;
break; break;
} }
@ -242,39 +239,3 @@ fn opencl_thread(
} }
debug!("OpenCL thread quit"); debug!("OpenCL thread quit");
} }
fn init_progress_bar(estimate: Option<f64>) -> ProgressBar {
let bar = match estimate {
Some(estimate) => ProgressBar::new(estimate as u64),
None => ProgressBar::new_spinner(),
};
bar.set_style(
ProgressStyle::default_spinner()
.template("[{elapsed_precise}] {bar:40.cyan/blue} {progress} {rate}")
.unwrap()
.progress_chars("##-")
.with_key("progress", |state: &ProgressState, w: &mut dyn Write| {
write!(
w,
"{}/{}",
format_number(state.pos() as f64),
match state.len() {
None => "???".to_string(),
Some(x) => format_number(x as f64),
}
)
.unwrap()
})
.with_key("rate", |state: &ProgressState, w: &mut dyn Write| {
write!(
w,
"{} hash/s",
format_number((state.pos() as f64) / state.elapsed().as_secs_f64()),
)
.unwrap()
}),
);
bar
}

View file

@ -1,14 +1,16 @@
mod args; mod args;
mod device; mod device;
mod hash_pattern; mod pattern;
mod vanity_secret_key; mod vanity_key;
use std::mem; use std::{fmt::Write, mem};
pub use args::*; pub use args::*;
pub use device::DeviceList; pub use device::DeviceList;
pub use hash_pattern::HashPattern; pub use pattern::HashPattern;
pub use vanity_secret_key::VanitySecretKey; use indicatif::*;
use indicatif_log_bridge::LogWrapper;
pub use vanity_key::VanitySecretKey;
/// Do SHA-1 padding manually /// Do SHA-1 padding manually
/// A SHA-1 block is 512 bit, so the output Vec<u32> length is a multiple of 16 /// A SHA-1 block is 512 bit, so the output Vec<u32> length is a multiple of 16
@ -44,19 +46,72 @@ pub fn manually_prepare_sha1(hashdata: Vec<u8>) -> Vec<u32> {
result_u32 result_u32
} }
pub fn init_logger() -> MultiProgress {
let logger = env_logger::Builder::from_env(
env_logger::Env::default().filter_or(env_logger::DEFAULT_FILTER_ENV, "info"),
)
.format_indent(None)
.build();
let level = logger.filter();
let multi = MultiProgress::new();
LogWrapper::new(multi.clone(), logger).try_init().unwrap();
log::set_max_level(level);
multi
}
pub fn init_progress_bar(estimate: Option<f64>) -> ProgressBar {
let bar = match estimate {
Some(estimate) => ProgressBar::new(estimate as u64),
None => ProgressBar::new_spinner(),
};
bar.set_style(
ProgressStyle::default_spinner()
.template("[{elapsed_precise}] {bar:50.cyan/blue} {progress} {rate} > {eta_precise}")
.unwrap()
.progress_chars("##-")
.with_key("progress", |state: &ProgressState, w: &mut dyn Write| {
write!(
w,
"{}/{}",
format_number(state.pos() as f64),
match state.len() {
None => "???".to_string(),
Some(x) => format_number(x as f64),
}
)
.unwrap()
})
.with_key("rate", |state: &ProgressState, w: &mut dyn Write| {
write!(
w,
"{} hash/s",
format_number((state.pos() as f64) / state.elapsed().as_secs_f64()),
)
.unwrap()
}),
);
bar
}
pub fn format_number(v: impl Into<f64>) -> String { pub fn format_number(v: impl Into<f64>) -> String {
match Into::<f64>::into(v) { match Into::<f64>::into(v) {
v if v >= 1e12f64 => { v if v >= 1e12f64 => {
format!("{:.02}t", v / 1e12f64) format!("{:.02}T", v / 1e12f64)
} }
v if v >= 1e9f64 => { v if v >= 1e9f64 => {
format!("{:.02}b", v / 1e9f64) format!("{:.02}B", v / 1e9f64)
} }
v if v >= 1e6f64 => { v if v >= 1e6f64 => {
format!("{:.02}m", v / 1e6f64) format!("{:.02}M", v / 1e6f64)
} }
v if v >= 1e3f64 => { v if v >= 1e3f64 => {
format!("{:.02}k", v / 1e3f64) format!("{:.02}K", v / 1e3f64)
} }
v => { v => {
format!("{v:.02}") format!("{v:.02}")