use clap::{load_yaml, App};
use codec::Compact;
use sp_keyring::AccountKeyring;
use substrate_api_client::{
compose_call, compose_extrinsic, Api, GenericAddress, UncheckedExtrinsicV4, XtStatus,
};
fn main() {
env_logger::init();
let url = get_node_url_from_cli();
let sudoer = AccountKeyring::Alice.pair();
let api = Api::new(url)
.map(|api| api.set_signer(sudoer).unwrap())
.unwrap();
let to = AccountKeyring::Bob.to_account_id();
#[allow(clippy::redundant_clone)]
let call = compose_call(
&api.metadata,
"Balances",
"set_balance",
(GenericAddress::Id(to), Compact(42_u128), Compact(42_u128)),
);
#[allow(clippy::redundant_clone)]
let xt: UncheckedExtrinsicV4<_> = compose_extrinsic(&api, "Sudo", "sudo", call);
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
}