Browse Source

Generate multiple addresses

taddr
Aditya Kulkarni 5 years ago
parent
commit
a0fb8bdb2b
  1. 4
      cli/Cargo.toml
  2. 37
      cli/src/main.rs
  3. 9
      lib/src/paper.rs

4
cli/Cargo.toml

@ -3,8 +3,8 @@ name = "zecpaperwallet"
version = "0.1.0"
authors = ["ZecWallet"]
edition = "2018"
[dependencies]
clap = "~2.33"
zecpaperlib = { path = "../lib" }
json = "0.11.14"
json = "0.11.14"

37
cli/src/main.rs

@ -1,12 +1,12 @@
extern crate clap;
extern crate clap;
extern crate zecpaperlib;
use clap::{Arg, App};
use zecpaperlib::paper::get_address;
use json::object;
use json::{array, object};
fn main() {
App::new("zecpaperwaller")
let matches = App::new("zecpaperwaller")
.version("1.0")
.about("A command line Zcash Sapling paper wallet generator")
.arg(Arg::with_name("testnet")
@ -25,13 +25,30 @@ fn main() {
.long("output")
.index(1)
.help("Name of output file."))
.get_matches();
.arg(Arg::with_name("num_addresses")
.short("n")
.long("num_addresses")
.help("Number of addresses to generate")
.takes_value(true)
.default_value("1")
.validator(|i:String| match i.parse::<i32>() {
Ok(_) => return Ok(()),
Err(_) => return Err(format!("Number of addresses '{}' is not a number", i))
}))
.get_matches();
let num_addresses = matches.value_of("num_addresses").unwrap().parse::<i32>().unwrap();
let mut ans = array![];
let (addr, pk) = get_address();
let ans = object!{
"address" => addr,
"private_key" => pk
};
for count in 0..num_addresses {
let (addr, pk) = get_address(true);
ans.push(object!{
"num" => count,
"address" => addr,
"private_key" => pk
}).unwrap();
}
println!("{}", json::stringify_pretty(ans, 2));
println!("{}", json::stringify_pretty(ans, 2));
}

9
lib/src/paper.rs

@ -3,7 +3,10 @@ use zip32::{ChildIndex, ExtendedSpendingKey};
use bech32::{Bech32, u5, ToBase32};
use rand::{OsRng, Rng};
pub fn get_address() -> (String, String) {
pub fn get_address(testnet: bool) -> (String, String) {
let addr_prefix = if testnet {"ztestsapling"} else {"zs"};
let pk_prefix = if testnet {"secret-extended-key-test"} else {"secret-extended-key-main"};
let mut rng = OsRng::new().expect("Error opening random number generator");
let mut seed:[u8; 32] = [0; 32];
@ -29,7 +32,7 @@ pub fn get_address() -> (String, String) {
let checked_data: Vec<u5> = v.to_base32();
let encoded = Bech32::new("zs".into(), checked_data).expect("bech32 failed").to_string();
let encoded = Bech32::new(addr_prefix.into(), checked_data).expect("bech32 failed").to_string();
//println!("{}", encoded);
// Private Key
@ -38,7 +41,7 @@ pub fn get_address() -> (String, String) {
//println!("Len {:?}", vp.len());
let c_d: Vec<u5> = vp.to_base32();
let encoded_pk = Bech32::new("secret-extended-key-main".into(), c_d).expect("bech32 failed").to_string();
let encoded_pk = Bech32::new(pk_prefix.into(), c_d).expect("bech32 failed").to_string();
//println!("{}", encoded_pk);

Loading…
Cancel
Save