use std::sync::mpsc::channel;
use clap::{load_yaml, App};
use codec::Decode;
use sp_core::sr25519;
use sp_runtime::AccountId32 as AccountId;
use substrate_api_client::Api;
#[derive(Decode)]
struct TransferEventArgs {
from: AccountId,
to: AccountId,
value: u128,
}
fn main() {
env_logger::init();
let url = get_node_url_from_cli();
let api = Api::<sr25519::Pair>::new(url).unwrap();
println!("Subscribe to events");
let (events_in, events_out) = channel();
api.subscribe_events(events_in).unwrap();
let args: TransferEventArgs = api
.wait_for_event("Balances", "Transfer", None, &events_out)
.unwrap();
println!("Transactor: {:?}", args.from);
println!("Destination: {:?}", args.to);
println!("Value: {:?}", args.value);
}
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 {}", url);
url
}