use clap::{load_yaml, App};
use codec::Compact;
use sp_keyring::AccountKeyring;
use sp_runtime::generic::Era;
use substrate_api_client::{
compose_call, compose_extrinsic_offline, Api, GenericAddress, UncheckedExtrinsicV4, XtStatus,
};
fn main() {
env_logger::init();
let url = get_node_url_from_cli();
let from = AccountKeyring::Alice.pair();
let api = Api::new(url)
.map(|api| api.set_signer(from).unwrap())
.unwrap();
println!("[+] Alice's Account Nonce is {}\n", api.get_nonce());
let to = AccountKeyring::Bob.to_account_id();
let mut nonce = api.get_nonce();
let first_nonce = nonce;
while nonce < first_nonce + 500 {
#[allow(clippy::redundant_clone)]
let call = compose_call(
&api.metadata,
"Balances",
"transfer",
(GenericAddress::Id(to.clone()), Compact(10_u128.pow(9))),
);
#[allow(clippy::redundant_clone)]
let xt: UncheckedExtrinsicV4<_> = compose_extrinsic_offline(
api.signer.as_ref().unwrap(),
call,
nonce,
Era::Immortal,
api.genesis_hash,
api.genesis_hash,
api.runtime_version.spec_version,
api.runtime_version.transaction_version,
);
println!("sending extrinsic with nonce {}", nonce);
let _blockh = api
.send_extrinsic(xt.hex_encode(), XtStatus::Ready)
.unwrap();
nonce += 1;
}
}
pub fn get_node_url_from_cli() -> String {
let yml = load_yaml!("./cli.yml");
let matches = App::from_yaml(yml).get_matches();
let node_ip = matches.value_of("node-server").unwrap_or("ws://127.0.0.1");
let node_port = matches.value_of("node-port").unwrap_or("9944");
let url = format!("{}:{}", node_ip, node_port);
println!("Interacting with node on {}\n", url);
url
}