use clap::{load_yaml, App};
use codec::Decode;
use sp_core::sr25519;
use sp_runtime::AccountId32 as AccountId;
use std::thread;
use substrate_api_client::Api;
#[derive(Decode)]
struct TransferEventArgs {
from: AccountId,
to: AccountId,
value: u128,
}
fn when_events(module: String, variant: String, data: Vec<u8>) {
if module == "Balances" && variant == "Transfer" {
let args = TransferEventArgs::decode(&mut data.as_ref()).unwrap();
println!("Transactor: {:?}", args.from);
println!("Destination: {:?}", args.to);
println!("Value: {:?}", args.value);
} else {
println!("{}-{}:{:?}", module, variant, data);
}
}
fn main() {
env_logger::init();
let url = get_node_url_from_cli();
let api = Api::<sr25519::Pair>::new(url).unwrap();
println!("Subscribe to events");
api.subscribe_events(when_events).unwrap();
thread::park();
}
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
}