|
|
|
@ -13,6 +13,7 @@ use solana_sdk::{ |
|
|
|
|
system_instruction, |
|
|
|
|
transaction::Transaction, |
|
|
|
|
}; |
|
|
|
|
use tokio::time::Instant; |
|
|
|
|
|
|
|
|
|
#[derive(Deserialize)] |
|
|
|
|
struct Cfg { |
|
|
|
@ -100,17 +101,20 @@ async fn main() -> Result<(), Box<dyn Error>> { |
|
|
|
|
print_balances(client.clone(), all_accounts.clone()).await?; |
|
|
|
|
|
|
|
|
|
let transfer_amount = LAMPORTS_PER_SOL / 100; |
|
|
|
|
println!( |
|
|
|
|
"sending {} SOL", |
|
|
|
|
transfer_amount as f64 / LAMPORTS_PER_SOL as f64 |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
let now = Instant::now(); |
|
|
|
|
let transactions = run_batch(config.transfers.iter().map(|tr| { |
|
|
|
|
let instruction = |
|
|
|
|
system_instruction::transfer(&tr.sender.pubkey(), &tr.receiver, transfer_amount); |
|
|
|
|
let mut transaction = |
|
|
|
|
Transaction::new_with_payer(&[instruction], Some(&tr.sender.pubkey())); |
|
|
|
|
let client = client.clone(); |
|
|
|
|
println!( |
|
|
|
|
"sending {} SOL from {} to {}", |
|
|
|
|
transfer_amount as f64 / LAMPORTS_PER_SOL as f64, |
|
|
|
|
tr.sender.pubkey(), |
|
|
|
|
tr.receiver |
|
|
|
|
); |
|
|
|
|
async move { |
|
|
|
|
let blockhash = client.get_latest_blockhash().await?; |
|
|
|
|
transaction.sign(&[&tr.sender], blockhash); |
|
|
|
@ -123,7 +127,7 @@ async fn main() -> Result<(), Box<dyn Error>> { |
|
|
|
|
println!("Waiting for confirmation..."); |
|
|
|
|
wait_for_confirmation(client.clone(), &transactions).await?; |
|
|
|
|
|
|
|
|
|
println!("Mass-transfer is done"); |
|
|
|
|
println!("Done in {}ms", now.elapsed().as_millis()); |
|
|
|
|
print_balances(client.clone(), all_accounts).await?; |
|
|
|
|
Ok(()) |
|
|
|
|
} |
|
|
|
|