mirror of
https://github.com/darkrenaissance/darkfi.git
synced 2026-01-09 14:48:08 -05:00
bin: Implement vanity address search tool as threadpool experiment.
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,5 +1,6 @@
|
||||
*.pyc
|
||||
*.sage.py
|
||||
.vscode/
|
||||
|
||||
/target/*
|
||||
/proof/*.bin
|
||||
@@ -11,4 +12,4 @@
|
||||
/gatewayd
|
||||
/ircd
|
||||
/map
|
||||
.vscode/
|
||||
/vanityaddr
|
||||
|
||||
53
Cargo.lock
generated
53
Cargo.lock
generated
@@ -792,7 +792,7 @@ dependencies = [
|
||||
"async-trait",
|
||||
"bdk",
|
||||
"bitcoin",
|
||||
"clap 3.0.7",
|
||||
"clap 3.1.6",
|
||||
"darkfi",
|
||||
"easy-parallel",
|
||||
"futures",
|
||||
@@ -897,9 +897,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "clap"
|
||||
version = "3.0.7"
|
||||
version = "3.1.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "12e8611f9ae4e068fa3e56931fded356ff745e70987ff76924a6e0ab1c8ef2e3"
|
||||
checksum = "d8c93436c21e4698bacadf42917db28b23017027a4deccb35dbe47a7e7840123"
|
||||
dependencies = [
|
||||
"atty",
|
||||
"bitflags",
|
||||
@@ -909,14 +909,14 @@ dependencies = [
|
||||
"os_str_bytes",
|
||||
"strsim 0.10.0",
|
||||
"termcolor",
|
||||
"textwrap 0.14.2",
|
||||
"textwrap 0.15.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "clap_derive"
|
||||
version = "3.0.6"
|
||||
version = "3.1.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "517358c28fcef6607bf6f76108e02afad7e82297d132a6b846dcc1fc3efcd153"
|
||||
checksum = "da95d038ede1a964ce99f49cbe27a7fb538d1da595e4b4f70b8c8f338d17bf16"
|
||||
dependencies = [
|
||||
"heck 0.4.0",
|
||||
"proc-macro-error",
|
||||
@@ -1346,7 +1346,7 @@ dependencies = [
|
||||
"async-executor",
|
||||
"async-std",
|
||||
"async-trait",
|
||||
"clap 3.0.7",
|
||||
"clap 3.1.6",
|
||||
"darkfi",
|
||||
"easy-parallel",
|
||||
"futures",
|
||||
@@ -1392,7 +1392,7 @@ dependencies = [
|
||||
"blake2b_simd 1.0.0",
|
||||
"bs58",
|
||||
"bytes",
|
||||
"clap 3.0.7",
|
||||
"clap 3.1.6",
|
||||
"crypto_api_chachapoly",
|
||||
"dirs 4.0.0",
|
||||
"fast-socks5",
|
||||
@@ -1437,7 +1437,7 @@ dependencies = [
|
||||
"async-executor",
|
||||
"async-std",
|
||||
"async-trait",
|
||||
"clap 3.0.7",
|
||||
"clap 3.1.6",
|
||||
"darkfi",
|
||||
"easy-parallel",
|
||||
"log",
|
||||
@@ -1674,7 +1674,7 @@ version = "0.3.0"
|
||||
dependencies = [
|
||||
"async-channel",
|
||||
"async-std",
|
||||
"clap 3.0.7",
|
||||
"clap 3.1.6",
|
||||
"darkfi",
|
||||
"easy-parallel",
|
||||
"log",
|
||||
@@ -1700,7 +1700,7 @@ name = "drk"
|
||||
version = "0.3.0"
|
||||
dependencies = [
|
||||
"async-std",
|
||||
"clap 3.0.7",
|
||||
"clap 3.1.6",
|
||||
"darkfi",
|
||||
"log",
|
||||
"prettytable-rs",
|
||||
@@ -2206,7 +2206,7 @@ dependencies = [
|
||||
"async-channel",
|
||||
"async-executor",
|
||||
"async-std",
|
||||
"clap 3.0.7",
|
||||
"clap 3.1.6",
|
||||
"darkfi",
|
||||
"easy-parallel",
|
||||
"log",
|
||||
@@ -2651,7 +2651,7 @@ dependencies = [
|
||||
"async-executor",
|
||||
"async-std",
|
||||
"async-trait",
|
||||
"clap 3.0.7",
|
||||
"clap 3.1.6",
|
||||
"darkfi",
|
||||
"easy-parallel",
|
||||
"futures",
|
||||
@@ -4208,9 +4208,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "serde_json"
|
||||
version = "1.0.75"
|
||||
version = "1.0.79"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "c059c05b48c5c0067d4b4b2b4f0732dd65feb52daf7e0ea09cd87e7dadc1af79"
|
||||
checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95"
|
||||
dependencies = [
|
||||
"itoa 1.0.1",
|
||||
"ryu",
|
||||
@@ -5282,7 +5282,7 @@ dependencies = [
|
||||
"async-std",
|
||||
"async-trait",
|
||||
"chrono",
|
||||
"clap 3.0.7",
|
||||
"clap 3.1.6",
|
||||
"darkfi",
|
||||
"easy-parallel",
|
||||
"futures",
|
||||
@@ -5303,7 +5303,7 @@ dependencies = [
|
||||
"async-std",
|
||||
"async-trait",
|
||||
"chrono",
|
||||
"clap 3.0.7",
|
||||
"clap 3.1.6",
|
||||
"darkfi",
|
||||
"futures",
|
||||
"log",
|
||||
@@ -5382,9 +5382,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "textwrap"
|
||||
version = "0.14.2"
|
||||
version = "0.15.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0066c8d12af8b5acd21e00547c3797fde4e8677254a7ee429176ccebbe93dd80"
|
||||
checksum = "b1141d4d61095b28419e22cb0bbf02755f5e54e0526f97f1e3d1d160e60885fb"
|
||||
|
||||
[[package]]
|
||||
name = "thiserror"
|
||||
@@ -5719,6 +5719,19 @@ dependencies = [
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "vanityaddr"
|
||||
version = "0.3.0"
|
||||
dependencies = [
|
||||
"bs58",
|
||||
"clap 3.1.6",
|
||||
"darkfi",
|
||||
"num_cpus",
|
||||
"rand 0.8.5",
|
||||
"rayon",
|
||||
"serde_json",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "vcpkg"
|
||||
version = "0.2.15"
|
||||
@@ -6071,7 +6084,7 @@ dependencies = [
|
||||
name = "zkas"
|
||||
version = "0.3.0"
|
||||
dependencies = [
|
||||
"clap 3.0.7",
|
||||
"clap 3.1.6",
|
||||
"darkfi",
|
||||
]
|
||||
|
||||
|
||||
@@ -23,7 +23,8 @@ members = [
|
||||
"bin/daod",
|
||||
"bin/dao-cli",
|
||||
"bin/taud",
|
||||
"bin/tau-cli"
|
||||
"bin/tau-cli",
|
||||
"bin/vanityaddr",
|
||||
]
|
||||
|
||||
[dependencies]
|
||||
|
||||
16
bin/vanityaddr/Cargo.toml
Normal file
16
bin/vanityaddr/Cargo.toml
Normal file
@@ -0,0 +1,16 @@
|
||||
[package]
|
||||
name = "vanityaddr"
|
||||
version = "0.3.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
clap = {version = "3.1.6", features = ["derive"]}
|
||||
bs58 = "0.4.0"
|
||||
num_cpus = "1.13.1"
|
||||
rand = "0.8.5"
|
||||
rayon = "1.5.1"
|
||||
serde_json = "1.0.79"
|
||||
|
||||
[dependencies.darkfi]
|
||||
path = "../../"
|
||||
features = ["crypto", "util"]
|
||||
79
bin/vanityaddr/src/main.rs
Normal file
79
bin/vanityaddr/src/main.rs
Normal file
@@ -0,0 +1,79 @@
|
||||
use clap::Parser;
|
||||
use darkfi::{
|
||||
crypto::{
|
||||
address::Address,
|
||||
keypair::{Keypair, SecretKey},
|
||||
},
|
||||
Error, Result,
|
||||
};
|
||||
use rand::rngs::OsRng;
|
||||
use rayon::prelude::*;
|
||||
use serde_json::json;
|
||||
|
||||
#[derive(Parser)]
|
||||
#[clap(version)]
|
||||
struct Args {
|
||||
/// Prefix to search (must start with 1)
|
||||
prefix: String,
|
||||
}
|
||||
|
||||
struct DrkAddr {
|
||||
pub secret: SecretKey,
|
||||
pub address: String,
|
||||
}
|
||||
|
||||
impl DrkAddr {
|
||||
pub fn new() -> Self {
|
||||
let kp = Keypair::random(&mut OsRng);
|
||||
let addr = Address::from(kp.public);
|
||||
|
||||
Self { secret: kp.secret, address: format!("{}", addr) }
|
||||
}
|
||||
|
||||
pub fn starts_with(&self, prefix: &str, is_case_sensitive: bool) -> bool {
|
||||
if is_case_sensitive {
|
||||
self.address.starts_with(prefix)
|
||||
} else {
|
||||
self.address.to_lowercase().starts_with(prefix.to_lowercase().as_str())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn main() -> Result<()> {
|
||||
let args = Args::parse();
|
||||
|
||||
if args.prefix.chars().next() != Some('1') {
|
||||
return Err(Error::ParseFailed("Address prefix must start with '1'"))
|
||||
}
|
||||
|
||||
let is_case_sensitive = false;
|
||||
|
||||
// Check if prefix is valid base58
|
||||
match bs58::decode(args.prefix.clone()).into_vec() {
|
||||
Ok(_) => {}
|
||||
Err(_) => return Err(Error::ParseFailed("Invalid base58 for prefix")),
|
||||
};
|
||||
|
||||
// Threadpool
|
||||
let num_threads = num_cpus::get();
|
||||
let rayon_pool = rayon::ThreadPoolBuilder::new()
|
||||
.num_threads(num_threads)
|
||||
.build()
|
||||
.expect("Unable to create threadpool");
|
||||
|
||||
let drkaddr: DrkAddr = rayon_pool.install(|| {
|
||||
rayon::iter::repeat(DrkAddr::new)
|
||||
.map(|create| create())
|
||||
.find_any(|address| address.starts_with(&args.prefix, is_case_sensitive))
|
||||
.expect("Failed to find an address match")
|
||||
});
|
||||
|
||||
let result = json!({
|
||||
"secret_key": format!("{:?}", drkaddr.secret.0),
|
||||
"address": drkaddr.address,
|
||||
});
|
||||
|
||||
println!("{}", result);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
Reference in New Issue
Block a user