make btc address
This commit is contained in:
8
btc-address/Cargo.lock
generated
8
btc-address/Cargo.lock
generated
@@ -33,10 +33,18 @@ dependencies = [
|
|||||||
"byte-tools",
|
"byte-tools",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bs58"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b170cd256a3f9fa6b9edae3e44a7dfdfc77e8124dbc3e2612d75f9c3e2396dae"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "btc-address"
|
name = "btc-address"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"bs58",
|
||||||
|
"digest",
|
||||||
"hex",
|
"hex",
|
||||||
"rand",
|
"rand",
|
||||||
"ripemd160",
|
"ripemd160",
|
||||||
|
|||||||
@@ -8,10 +8,12 @@ edition = "2018"
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
hex = "0.4"
|
hex = "0.4"
|
||||||
|
bs58 = "0.3.0"
|
||||||
secp256k1 = { version = "0.17.2", features = ["rand"] }
|
secp256k1 = { version = "0.17.2", features = ["rand"] }
|
||||||
rand = "0.6"
|
rand = "0.6"
|
||||||
# elliptic-curve = "0.3.0"
|
# elliptic-curve = "0.3.0"
|
||||||
# k256 = "0.1.0"
|
# k256 = "0.1.0"
|
||||||
|
digest = "0.8.1"
|
||||||
ripemd160 = "0.8.0"
|
ripemd160 = "0.8.0"
|
||||||
sha2 = "0.8.1"
|
sha2 = "0.8.1"
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,50 @@
|
|||||||
use rand::rngs::OsRng;
|
use rand::rngs::OsRng;
|
||||||
use secp256k1::Secp256k1;
|
use secp256k1::{Secp256k1, key::PublicKey, };
|
||||||
|
use sha2::Sha256;
|
||||||
|
use ripemd160::Ripemd160;
|
||||||
|
use digest::{ Input, FixedOutput, };
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
println!("Hello, world!");
|
|
||||||
|
|
||||||
let secp = Secp256k1::new();
|
let secp = Secp256k1::new();
|
||||||
let mut rng = OsRng::new().expect("OsRng");
|
let mut rng = OsRng::new().expect("OsRng");
|
||||||
|
|
||||||
|
for i in 0..1_000_000 {
|
||||||
let (secret_key, public_key) = secp.generate_keypair(&mut rng);
|
let (secret_key, public_key) = secp.generate_keypair(&mut rng);
|
||||||
|
|
||||||
|
let s = make_btc_address(&public_key);
|
||||||
|
|
||||||
|
if i > 0 && i % 10000 == 0 {
|
||||||
|
println!("> {}", i);
|
||||||
|
}
|
||||||
|
if s.starts_with("100") {
|
||||||
|
println!("{}", s);
|
||||||
println!("{}", secret_key);
|
println!("{}", secret_key);
|
||||||
println!("{}", public_key);
|
}
|
||||||
println!("{}", hex::encode(public_key.serialize_uncompressed().to_vec()));
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn make_btc_address(public_key: &PublicKey) -> String {
|
||||||
|
let public_key_bytes = public_key.serialize_uncompressed().to_vec();
|
||||||
|
let riphemd160_sha256_pub_key = calc_ripemd160(&calc_sha256(&public_key_bytes));
|
||||||
|
|
||||||
|
let mut btc_addr = Vec::<u8>::with_capacity(25);
|
||||||
|
btc_addr.push(0x00 as u8);
|
||||||
|
btc_addr.extend_from_slice(&riphemd160_sha256_pub_key);
|
||||||
|
|
||||||
|
let chcksum = &calc_sha256(&calc_sha256(&btc_addr))[0..4];
|
||||||
|
btc_addr.extend_from_slice(chcksum);
|
||||||
|
|
||||||
|
bs58::encode(&btc_addr).into_string()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn calc_sha256(i: &[u8]) -> Vec<u8> {
|
||||||
|
let mut hasher = Sha256::default();
|
||||||
|
hasher.input(&i);
|
||||||
|
hasher.fixed_result().to_vec()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn calc_ripemd160(i: &[u8]) -> Vec<u8> {
|
||||||
|
let mut hasher = Ripemd160::default();
|
||||||
|
hasher.input(&i);
|
||||||
|
hasher.fixed_result().to_vec()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user