use clap::{load_yaml, App};
use codec::Encode;
use sp_keyring::AccountKeyring;
use substrate_api_client::AccountInfo;
use substrate_api_client::Api;
fn main() {
env_logger::init();
let url = get_node_url_from_cli();
let mut api = Api::new(url).unwrap();
let result: u128 = api
.get_storage_value("Balances", "TotalIssuance", None)
.unwrap()
.unwrap()
.decode()
.unwrap();
println!("[+] TotalIssuance is {}", result);
let proof = api
.get_storage_value_proof("Balances", "TotalIssuance", None)
.unwrap();
println!("[+] StorageValueProof: {:?}", proof);
let account = AccountKeyring::Alice.public();
let result: AccountInfo = api
.get_storage_map("System", "Account", account.encode(), None)
.unwrap()
.unwrap()
.decode()
.unwrap();
println!("[+] AccountInfo for Alice is {:?}", result);
let result = api.get_storage_map_key_prefix("System", "Account").unwrap();
println!("[+] key prefix for System Account map is {:?}", result);
let result = api.get_storage_value("TemplateModule", "Something", None);
println!("[+] some double map (1,2) should be 3. Is {:?}", result);
let signer = AccountKeyring::Alice.pair();
api.signer = Some(signer);
println!("[+] Alice's Account Nonce is {}", api.get_nonce());
}
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
}