use clap::{load_yaml, App};
use codec::Compact;
use sp_keyring::AccountKeyring;
use substrate_api_client::{
compose_extrinsic, 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();
let to = AccountKeyring::Bob.to_account_id();
#[allow(clippy::redundant_clone)]
let xt: UncheckedExtrinsicV4<_> = compose_extrinsic(
&api,
"Balances",
"transfer",
(GenericAddress::Id(to), Compact(42_u128)),
);
println!("[+] Composed Extrinsic:\n {:?}\n", xt);
let tx_hash = api
.send_extrinsic(xt.hex_encode(), XtStatus::InBlock)
.unwrap();
println!("[+] Transaction got included. Hash: {:?}", tx_hash);
}
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
}