Turn simple-client-demo into a simpler wallet
This commit is contained in:
parent
ee200d8fa0
commit
c05416e27d
|
@ -18,8 +18,8 @@ name = "solana-client-demo"
|
||||||
path = "src/bin/client-demo.rs"
|
path = "src/bin/client-demo.rs"
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "solana-simple-client-demo"
|
name = "solana-wallet"
|
||||||
path = "src/bin/simple-client-demo.rs"
|
path = "src/bin/wallet.rs"
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "solana-fullnode"
|
name = "solana-fullnode"
|
||||||
|
|
|
@ -43,8 +43,8 @@ apps:
|
||||||
command: solana-mint
|
command: solana-mint
|
||||||
client-demo:
|
client-demo:
|
||||||
command: solana-client-demo
|
command: solana-client-demo
|
||||||
simple-client-demo:
|
wallet:
|
||||||
command: solana-simple-client-demo
|
command: solana-wallet
|
||||||
|
|
||||||
daemon-validator:
|
daemon-validator:
|
||||||
daemon: simple
|
daemon: simple
|
||||||
|
|
|
@ -1,18 +1,15 @@
|
||||||
extern crate bincode;
|
extern crate bincode;
|
||||||
extern crate env_logger;
|
extern crate env_logger;
|
||||||
extern crate getopts;
|
extern crate getopts;
|
||||||
extern crate rayon;
|
|
||||||
extern crate serde_json;
|
extern crate serde_json;
|
||||||
extern crate solana;
|
extern crate solana;
|
||||||
|
|
||||||
use bincode::serialize;
|
use bincode::serialize;
|
||||||
use getopts::Options;
|
use getopts::Options;
|
||||||
use rayon::prelude::*;
|
|
||||||
use solana::crdt::{get_ip_addr, ReplicatedData};
|
use solana::crdt::{get_ip_addr, ReplicatedData};
|
||||||
use solana::drone::DroneRequest;
|
use solana::drone::DroneRequest;
|
||||||
use solana::signature::{GenKeys, KeyPair, KeyPairUtil, PublicKey};
|
use solana::signature::{KeyPair, KeyPairUtil, PublicKey};
|
||||||
use solana::thin_client::ThinClient;
|
use solana::thin_client::ThinClient;
|
||||||
use solana::timing::{duration_as_ms, duration_as_s};
|
|
||||||
use solana::transaction::Transaction;
|
use solana::transaction::Transaction;
|
||||||
use std::env;
|
use std::env;
|
||||||
use std::fs::File;
|
use std::fs::File;
|
||||||
|
@ -20,12 +17,11 @@ use std::io::prelude::*;
|
||||||
use std::net::{IpAddr, Ipv4Addr, SocketAddr, TcpStream, UdpSocket};
|
use std::net::{IpAddr, Ipv4Addr, SocketAddr, TcpStream, UdpSocket};
|
||||||
use std::process::exit;
|
use std::process::exit;
|
||||||
use std::thread::sleep;
|
use std::thread::sleep;
|
||||||
use std::time::{Duration, Instant};
|
use std::time::Duration;
|
||||||
|
|
||||||
fn print_usage(program: &str, opts: Options) {
|
fn print_usage(program: &str, opts: Options) {
|
||||||
//TODO: Edit this!!!!
|
|
||||||
let mut brief = format!("Usage: {} [options]\n\n", program);
|
let mut brief = format!("Usage: {} [options]\n\n", program);
|
||||||
brief += " Solana simple client demo allows you to perform basic actions, including\n";
|
brief += " solana-wallet allows you to perform basic actions, including\n";
|
||||||
brief += " requesting an airdrop, checking your balance, and spending tokens.";
|
brief += " requesting an airdrop, checking your balance, and spending tokens.";
|
||||||
brief += " Takes json formatted mint file to stdin.";
|
brief += " Takes json formatted mint file to stdin.";
|
||||||
|
|
||||||
|
@ -120,32 +116,14 @@ fn main() {
|
||||||
println!("You don't have any tokens!");
|
println!("You don't have any tokens!");
|
||||||
}
|
}
|
||||||
Ok(balance) => {
|
Ok(balance) => {
|
||||||
println!("Spending tokens in {:?} transactions...", balance);
|
println!("Sending {:?} tokens to self...", balance);
|
||||||
let mut seed = [0u8; 32];
|
let tx = Transaction::new(
|
||||||
seed.copy_from_slice(&client_keypair.public_key_bytes()[..32]);
|
&client_keypair,
|
||||||
let rnd = GenKeys::new(seed);
|
client_pubkey,
|
||||||
let txs = balance.clone();
|
balance,
|
||||||
let keypairs = rnd.gen_n_keypairs(balance);
|
last_id,
|
||||||
let transactions: Vec<_> = keypairs
|
|
||||||
.par_iter()
|
|
||||||
.map(|keypair| {
|
|
||||||
Transaction::new(
|
|
||||||
&client_keypair,
|
|
||||||
keypair.pubkey(),
|
|
||||||
1,
|
|
||||||
last_id,
|
|
||||||
)
|
|
||||||
})
|
|
||||||
.collect();
|
|
||||||
let transfer_start = Instant::now();
|
|
||||||
for tx in transactions {
|
|
||||||
client.transfer_signed(tx.clone()).unwrap();
|
|
||||||
}
|
|
||||||
println!(
|
|
||||||
"Transactions complete. {:?} ms {} tps",
|
|
||||||
duration_as_ms(&transfer_start.elapsed()),
|
|
||||||
txs as f32 / (duration_as_s(&transfer_start.elapsed()))
|
|
||||||
);
|
);
|
||||||
|
client.transfer_signed(tx.clone()).unwrap();
|
||||||
}
|
}
|
||||||
Err(ref e) if e.kind() == std::io::ErrorKind::Other => {
|
Err(ref e) if e.kind() == std::io::ErrorKind::Other => {
|
||||||
println!("No account found! Request an airdrop to get started.");
|
println!("No account found! Request an airdrop to get started.");
|
Loading…
Reference in New Issue