diff --git a/Cargo.lock b/Cargo.lock index 55b25b2160f0040f036f0748530228a78dbe3811..da840617fd660609a1d57c45b6072a486abdad2c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1223,9 +1223,9 @@ dependencies = [ [[package]] name = "jsonrpsee" -version = "0.14.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11e017217fcd18da0a25296d3693153dd19c8a6aadab330b3595285d075385d1" +checksum = "8bd0d559d5e679b1ab2f869b486a11182923863b1b3ee8b421763cdd707b783a" dependencies = [ "jsonrpsee-client-transport", "jsonrpsee-core", @@ -1233,9 +1233,9 @@ dependencies = [ [[package]] name = "jsonrpsee-client-transport" -version = "0.14.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce395539a14d3ad4ec1256fde105abd36a2da25d578a291cabe98f45adfdb111" +checksum = "8752740ecd374bcbf8b69f3e80b0327942df76f793f8d4e60d3355650c31fb74" dependencies = [ "futures-util", "http", @@ -1254,9 +1254,9 @@ dependencies = [ [[package]] name = "jsonrpsee-core" -version = "0.14.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16efcd4477de857d4a2195a45769b2fe9ebb54f3ef5a4221d3b014a4fe33ec0b" +checksum = "f3dc3e9cf2ba50b7b1d7d76a667619f82846caa39e8e8daa8a4962d74acaddca" dependencies = [ "anyhow", "async-lock", @@ -1272,13 +1272,14 @@ dependencies = [ "thiserror", "tokio", "tracing", + "tracing-futures", ] [[package]] name = "jsonrpsee-types" -version = "0.14.0" +version = "0.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bcf76cd316f5d3ad48138085af1f45e2c58c98e02f0779783dbb034d43f7c86" +checksum = "e290bba767401b646812f608c099b922d8142603c9e73a50fb192d3ac86f4a0d" dependencies = [ "anyhow", "beef", @@ -2104,6 +2105,18 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" +[[package]] +name = "scale-decode" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c70dece385bc3e5918109830d9509806b5d4525fdf594e3463078c529122979e" +dependencies = [ + "bitvec", + "parity-scale-codec", + "scale-info", + "thiserror", +] + [[package]] name = "scale-info" version = "2.1.2" @@ -2130,6 +2143,23 @@ dependencies = [ "syn", ] +[[package]] +name = "scale-value" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eae8b296b3ebcb3425661e9b612ccc34cb1064483a61dc379c65e6b1463498f1" +dependencies = [ + "bitvec", + "either", + "frame-metadata", + "parity-scale-codec", + "scale-decode", + "scale-info", + "serde", + "thiserror", + "yap", +] + [[package]] name = "schannel" version = "0.1.20" @@ -2246,9 +2276,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.83" +version = "1.0.87" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38dd04e3c8279e75b31ef29dbdceebfe5ad89f4d0937213c53f7d49d01b3d5a7" +checksum = "6ce777b7b150d76b9cf60d28b55f5847135a003f7d7350c6be7a773508ce7d45" dependencies = [ "itoa 1.0.3", "ryu", @@ -2384,7 +2414,7 @@ dependencies = [ [[package]] name = "sp-application-crypto" version = "6.0.0" -source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.23#3c05363666a2e719807713830b7d6eee0a9598d2" +source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.26#16476332c7c5a6a6478c4072aa3cadb9b7c28c83" dependencies = [ "parity-scale-codec", "scale-info", @@ -2397,7 +2427,7 @@ dependencies = [ [[package]] name = "sp-arithmetic" version = "5.0.0" -source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.23#3c05363666a2e719807713830b7d6eee0a9598d2" +source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.26#16476332c7c5a6a6478c4072aa3cadb9b7c28c83" dependencies = [ "integer-sqrt", "num-traits", @@ -2412,7 +2442,7 @@ dependencies = [ [[package]] name = "sp-core" version = "6.0.0" -source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.23#3c05363666a2e719807713830b7d6eee0a9598d2" +source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.26#16476332c7c5a6a6478c4072aa3cadb9b7c28c83" dependencies = [ "base58", "bitflags", @@ -2458,7 +2488,7 @@ dependencies = [ [[package]] name = "sp-core-hashing" version = "4.0.0" -source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.23#3c05363666a2e719807713830b7d6eee0a9598d2" +source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.26#16476332c7c5a6a6478c4072aa3cadb9b7c28c83" dependencies = [ "blake2", "byteorder", @@ -2472,7 +2502,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "4.0.0" -source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.23#3c05363666a2e719807713830b7d6eee0a9598d2" +source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.26#16476332c7c5a6a6478c4072aa3cadb9b7c28c83" dependencies = [ "proc-macro2", "quote", @@ -2482,7 +2512,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.12.0" -source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.23#3c05363666a2e719807713830b7d6eee0a9598d2" +source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.26#16476332c7c5a6a6478c4072aa3cadb9b7c28c83" dependencies = [ "environmental", "parity-scale-codec", @@ -2493,7 +2523,7 @@ dependencies = [ [[package]] name = "sp-io" version = "6.0.0" -source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.23#3c05363666a2e719807713830b7d6eee0a9598d2" +source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.26#16476332c7c5a6a6478c4072aa3cadb9b7c28c83" dependencies = [ "futures", "hash-db", @@ -2518,7 +2548,7 @@ dependencies = [ [[package]] name = "sp-keystore" version = "0.12.0" -source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.23#3c05363666a2e719807713830b7d6eee0a9598d2" +source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.26#16476332c7c5a6a6478c4072aa3cadb9b7c28c83" dependencies = [ "async-trait", "futures", @@ -2534,7 +2564,7 @@ dependencies = [ [[package]] name = "sp-panic-handler" version = "4.0.0" -source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.23#3c05363666a2e719807713830b7d6eee0a9598d2" +source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.26#16476332c7c5a6a6478c4072aa3cadb9b7c28c83" dependencies = [ "backtrace", "lazy_static", @@ -2544,7 +2574,7 @@ dependencies = [ [[package]] name = "sp-runtime" version = "6.0.0" -source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.23#3c05363666a2e719807713830b7d6eee0a9598d2" +source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.26#16476332c7c5a6a6478c4072aa3cadb9b7c28c83" dependencies = [ "either", "hash256-std-hasher", @@ -2566,7 +2596,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface" version = "6.0.0" -source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.23#3c05363666a2e719807713830b7d6eee0a9598d2" +source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.26#16476332c7c5a6a6478c4072aa3cadb9b7c28c83" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -2583,7 +2613,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "5.0.0" -source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.23#3c05363666a2e719807713830b7d6eee0a9598d2" +source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.26#16476332c7c5a6a6478c4072aa3cadb9b7c28c83" dependencies = [ "Inflector", "proc-macro-crate", @@ -2595,7 +2625,7 @@ dependencies = [ [[package]] name = "sp-state-machine" version = "0.12.0" -source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.23#3c05363666a2e719807713830b7d6eee0a9598d2" +source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.26#16476332c7c5a6a6478c4072aa3cadb9b7c28c83" dependencies = [ "hash-db", "log", @@ -2617,12 +2647,12 @@ dependencies = [ [[package]] name = "sp-std" version = "4.0.0" -source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.23#3c05363666a2e719807713830b7d6eee0a9598d2" +source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.26#16476332c7c5a6a6478c4072aa3cadb9b7c28c83" [[package]] name = "sp-storage" version = "6.0.0" -source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.23#3c05363666a2e719807713830b7d6eee0a9598d2" +source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.26#16476332c7c5a6a6478c4072aa3cadb9b7c28c83" dependencies = [ "impl-serde", "parity-scale-codec", @@ -2635,7 +2665,7 @@ dependencies = [ [[package]] name = "sp-tracing" version = "5.0.0" -source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.23#3c05363666a2e719807713830b7d6eee0a9598d2" +source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.26#16476332c7c5a6a6478c4072aa3cadb9b7c28c83" dependencies = [ "parity-scale-codec", "sp-std", @@ -2647,7 +2677,7 @@ dependencies = [ [[package]] name = "sp-trie" version = "6.0.0" -source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.23#3c05363666a2e719807713830b7d6eee0a9598d2" +source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.26#16476332c7c5a6a6478c4072aa3cadb9b7c28c83" dependencies = [ "hash-db", "memory-db", @@ -2663,7 +2693,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "6.0.0" -source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.23#3c05363666a2e719807713830b7d6eee0a9598d2" +source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.26#16476332c7c5a6a6478c4072aa3cadb9b7c28c83" dependencies = [ "impl-trait-for-tuples", "log", @@ -2726,8 +2756,8 @@ checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" [[package]] name = "subxt" -version = "0.22.0" -source = "git+https://github.com/duniter/subxt.git?branch=duniter-substrate-v0.9.23#e0fcf196eb6192e905e1784580f64363e2213556" +version = "0.23.0" +source = "git+https://github.com/duniter/subxt.git?branch=duniter-substrate-v0.9.26#9ab601b10b4254d64368371f07e09934a0f55bf7" dependencies = [ "bitvec", "derivative", @@ -2737,7 +2767,9 @@ dependencies = [ "jsonrpsee", "parity-scale-codec", "parking_lot", + "scale-decode", "scale-info", + "scale-value", "serde", "serde_json", "sp-core", @@ -2750,8 +2782,8 @@ dependencies = [ [[package]] name = "subxt-codegen" -version = "0.22.0" -source = "git+https://github.com/duniter/subxt.git?branch=duniter-substrate-v0.9.23#e0fcf196eb6192e905e1784580f64363e2213556" +version = "0.23.0" +source = "git+https://github.com/duniter/subxt.git?branch=duniter-substrate-v0.9.26#9ab601b10b4254d64368371f07e09934a0f55bf7" dependencies = [ "darling", "frame-metadata", @@ -2767,8 +2799,8 @@ dependencies = [ [[package]] name = "subxt-macro" -version = "0.22.0" -source = "git+https://github.com/duniter/subxt.git?branch=duniter-substrate-v0.9.23#e0fcf196eb6192e905e1784580f64363e2213556" +version = "0.23.0" +source = "git+https://github.com/duniter/subxt.git?branch=duniter-substrate-v0.9.26#9ab601b10b4254d64368371f07e09934a0f55bf7" dependencies = [ "darling", "proc-macro-error", @@ -2778,8 +2810,8 @@ dependencies = [ [[package]] name = "subxt-metadata" -version = "0.22.0" -source = "git+https://github.com/duniter/subxt.git?branch=duniter-substrate-v0.9.23#e0fcf196eb6192e905e1784580f64363e2213556" +version = "0.23.0" +source = "git+https://github.com/duniter/subxt.git?branch=duniter-substrate-v0.9.26#9ab601b10b4254d64368371f07e09934a0f55bf7" dependencies = [ "frame-metadata", "parity-scale-codec", @@ -2921,16 +2953,15 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" [[package]] name = "tokio" -version = "1.20.1" +version = "1.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a8325f63a7d4774dd041e363b2409ed1c5cbbd0f867795e661df066b2b0a581" +checksum = "a9e03c497dc955702ba729190dc4aac6f2a0ce97f913e5b1b5912fc5039d9099" dependencies = [ "autocfg", "bytes", "libc", "memchr", "mio", - "once_cell", "pin-project-lite", "socket2", "tokio-macros", @@ -3032,6 +3063,16 @@ dependencies = [ "valuable", ] +[[package]] +name = "tracing-futures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" +dependencies = [ + "pin-project", + "tracing", +] + [[package]] name = "tracing-log" version = "0.1.3" @@ -3450,6 +3491,12 @@ dependencies = [ "tap", ] +[[package]] +name = "yap" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5fc77f52dc9e9b10d55d3f4462c3b7fc393c4f17975d641542833ab2d3bc26ef" + [[package]] name = "zeroize" version = "1.5.7" diff --git a/Cargo.toml b/Cargo.toml index 532712fc22be46f5204885b5c52c973b4076004a..14f68a20c91b60f4644a2e47f2334284bfcea1b8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,14 +9,14 @@ version = "0.1.0" [dependencies] anyhow = "1.0" clap = { version = "3.0", features = ["derive"] } +codec = { package = "parity-scale-codec", version = "3.1.5" } env_logger = "0.9.0" graphql_client = { version = "0.11.0", features = ["reqwest"] } hex = "0.4.3" logs = "0.5" -codec = { package = "parity-scale-codec", version = "3.1.5" } reqwest = "0.11.11" serde = { version = "1.0", features = ["derive"] } -serde_json = "1.0.64" -sp-core = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.23" } -subxt = { git = 'https://github.com/duniter/subxt.git', branch = 'duniter-substrate-v0.9.23' } -tokio = { version = "1.15.0", features = ["macros"] } +serde_json = "1.0.87" +sp-core = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.26" } +subxt = { git = "https://github.com/duniter/subxt.git", branch = "duniter-substrate-v0.9.26" } +tokio = { version = "1.21.1", features = ["macros"] } diff --git a/res/metadata.scale b/res/metadata.scale index 10f4232185e31dcb87b88cd33a9731c8efca1265..3ec2c111f3089edbf7b193d08cddc0ea353bec76 100644 Binary files a/res/metadata.scale and b/res/metadata.scale differ diff --git a/src/cache.rs b/src/cache.rs index 0a7d531ce9604eeeadf98239825de29a305fca29..16836c5c5392f557f058b346e92a67c302c1850c 100644 --- a/src/cache.rs +++ b/src/cache.rs @@ -1,19 +1,20 @@ +use crate::gdev_300; use crate::indexer::*; -use crate::Api; +use crate::Client; use anyhow::{anyhow, Result}; use std::collections::{hash_map, HashMap}; pub struct IdentityCache<'a> { - api: &'a Api, + client: &'a Client, identities: HashMap<u32, String>, indexer: Option<(&'a reqwest::Client, &'a str)>, } impl<'a> IdentityCache<'a> { - pub fn new(api: &'a Api, indexer: Option<(&'a reqwest::Client, &'a str)>) -> Self { + pub fn new(client: &'a Client, indexer: Option<(&'a reqwest::Client, &'a str)>) -> Self { Self { - api, + client, identities: HashMap::new(), indexer, } @@ -29,10 +30,12 @@ impl<'a> IdentityCache<'a> { hash_map::Entry::Vacant(entry) => entry .insert({ let pubkey = self - .api + .client .storage() - .identity() - .identities(&identity_id, Some(parent_hash)) + .fetch( + &gdev_300::storage().identity().identities(identity_id), + Some(parent_hash), + ) .await? .ok_or_else(|| anyhow!("Identity {} not found", identity_id))? .owner_key diff --git a/src/main.rs b/src/main.rs index d5ca0e320bc429776fd66844d2b9ccdfc44fe709..a177c96b4c0964f2ed10ffaf2a0c8fb75e70dc0a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,7 @@ mod cache; mod indexer; -use anyhow::{anyhow, Context, Result}; +use anyhow::{anyhow, Result}; use clap::Parser; use codec::Encode; use sp_core::{ @@ -10,17 +10,30 @@ use sp_core::{ }; use std::collections::BTreeMap; use std::str::FromStr; -use subxt::sp_runtime::MultiAddress; -use subxt::{ - extrinsic::{BaseExtrinsicParams, BaseExtrinsicParamsBuilder}, - ClientBuilder, DefaultConfig, PairSigner, -}; +use subxt::ext::sp_runtime::MultiAddress; +use subxt::tx::{BaseExtrinsicParamsBuilder, PairSigner}; #[subxt::subxt(runtime_metadata_path = "res/metadata.scale")] pub mod gdev_300 {} -pub type Api = gdev_300::RuntimeApi<DefaultConfig, BaseExtrinsicParams<DefaultConfig, Tip>>; -type Client = subxt::Client<DefaultConfig>; +pub type Client = subxt::OnlineClient<GdevConfig>; + +pub enum GdevConfig {} +impl subxt::config::Config for GdevConfig { + type Index = u32; + type BlockNumber = u32; + type Hash = sp_core::H256; + type Hashing = subxt::ext::sp_runtime::traits::BlakeTwo256; + type AccountId = subxt::ext::sp_runtime::AccountId32; + type Address = subxt::ext::sp_runtime::MultiAddress<Self::AccountId, u32>; + type Header = subxt::ext::sp_runtime::generic::Header< + Self::BlockNumber, + subxt::ext::sp_runtime::traits::BlakeTwo256, + >; + type Signature = subxt::ext::sp_runtime::MultiSignature; + type Extrinsic = subxt::ext::sp_runtime::OpaqueExtrinsic; + type ExtrinsicParams = subxt::tx::BaseExtrinsicParams<Self, Tip>; +} #[derive(Copy, Clone, Debug, Default, Encode)] pub struct Tip { @@ -150,19 +163,18 @@ async fn main() -> Result<()> { (None, None) => (None, None), }; - let client: Client = ClientBuilder::new() - .set_url(&args.url) - .build() - .await - .with_context(|| "fail to connect to node")?; - let api = client.clone().to_runtime_api::<Api>(); + let client = Client::new().await.unwrap(); let gql_client = reqwest::Client::builder() .user_agent("gcli/0.1.0") .build()?; if let Some(account_id) = &account_id { - let account = api.storage().system().account(account_id, None).await?; + let account = client + .storage() + .fetch(&gdev_300::storage().system().account(account_id), None) + .await? + .expect("Cannot fetch account"); logs::info!("Account free balance: {}", account.data.free); } @@ -170,10 +182,12 @@ async fn main() -> Result<()> { Subcommand::CreateOneshot { balance, dest } => { let pair = pair.expect("This subcommand needs a secret."); - api.tx() - .oneshot_account() - .create_oneshot_account(dest.into(), balance)? + client + .tx() .sign_and_submit_then_watch( + &gdev_300::tx() + .oneshot_account() + .create_oneshot_account(dest.into(), balance), &PairSigner::new(pair), BaseExtrinsicParamsBuilder::new(), ) @@ -182,8 +196,13 @@ async fn main() -> Result<()> { Subcommand::ConsumeOneshot { dest, dest_oneshot } => { let pair = pair.expect("This subcommand needs a secret."); - let number = api.storage().system().number(None).await?; - api.tx() + let number = client + .storage() + .fetch(&gdev_300::storage().system().number(), None) + .await? + .unwrap(); + client.tx() + .sign_and_submit_then_watch(&gdev_300::tx() .oneshot_account() .consume_oneshot_account( number, @@ -196,8 +215,7 @@ async fn main() -> Result<()> { dest.into(), ) }, - )? - .sign_and_submit_then_watch( + ), &PairSigner::new(pair), BaseExtrinsicParamsBuilder::new(), ) @@ -212,8 +230,13 @@ async fn main() -> Result<()> { } => { let pair = pair.expect("This subcommand needs a secret."); - let number = api.storage().system().number(None).await?; - api.tx() + let number = client + .storage() + .fetch(&gdev_300::storage().system().number(), None) + .await? + .unwrap(); + client.tx() + .sign_and_submit_then_watch(&gdev_300::tx() .oneshot_account() .consume_oneshot_account_with_remaining( number, @@ -236,26 +259,36 @@ async fn main() -> Result<()> { ) }, balance, - )? - .sign_and_submit_then_watch( + ), &PairSigner::new(pair), BaseExtrinsicParamsBuilder::new(), ) .await?; } Subcommand::Expire { blocks, sessions } => { - let parent_hash = api.storage().system().parent_hash(None).await?; - let current_block = api.storage().system().number(Some(parent_hash)).await?; - let current_session = api + let parent_hash = client .storage() - .session() - .current_index(Some(parent_hash)) - .await?; + .fetch(&gdev_300::storage().system().parent_hash(), None) + .await? + .unwrap(); + let current_block = client + .storage() + .fetch(&gdev_300::storage().system().number(), Some(parent_hash)) + .await? + .unwrap(); + let current_session = client + .storage() + .fetch( + &gdev_300::storage().session().current_index(), + Some(parent_hash), + ) + .await? + .unwrap(); let end_block = current_block + blocks; let end_session = current_session + sessions; let mut identity_cache = cache::IdentityCache::new( - &api, + &client, if args.no_indexer { None } else { @@ -266,9 +299,13 @@ async fn main() -> Result<()> { // Rotate keys let mut must_rotate_keys_before_iter = client .storage() - .iter::<gdev_300::authority_members::storage::MustRotateKeysBefore>(Some( - parent_hash, - )) + .iter( + gdev_300::storage() + .authority_members() + .must_rotate_keys_before(0), + 10, + Some(parent_hash), + ) .await?; let mut must_rotate_keys_before = BTreeMap::new(); while let Some((k, v)) = must_rotate_keys_before_iter.next().await? { @@ -296,7 +333,11 @@ async fn main() -> Result<()> { // Certifications let mut basic_certs_iter = client .storage() - .iter::<gdev_300::cert::storage::StorageCertsRemovableOn>(Some(parent_hash)) + .iter( + gdev_300::storage().cert().storage_certs_removable_on(0), + 10, + Some(parent_hash), + ) .await?; let mut basic_certs = BTreeMap::new(); while let Some((k, v)) = basic_certs_iter.next().await? { @@ -308,7 +349,13 @@ async fn main() -> Result<()> { let mut smith_certs_iter = client .storage() - .iter::<gdev_300::smiths_cert::storage::StorageCertsRemovableOn>(Some(parent_hash)) + .iter( + gdev_300::storage() + .smiths_cert() + .storage_certs_removable_on(0), + 10, + Some(parent_hash), + ) .await?; let mut smith_certs = BTreeMap::new(); while let Some((k, v)) = smith_certs_iter.next().await? { @@ -346,7 +393,11 @@ async fn main() -> Result<()> { // Memberships let mut basic_membership_iter = client .storage() - .iter::<gdev_300::membership::storage::MembershipsExpireOn>(Some(parent_hash)) + .iter( + gdev_300::storage().membership().memberships_expire_on(0), + 10, + Some(parent_hash), + ) .await?; let mut basic_memberships = BTreeMap::new(); while let Some((k, v)) = basic_membership_iter.next().await? { @@ -358,9 +409,13 @@ async fn main() -> Result<()> { let mut smith_membership_iter = client .storage() - .iter::<gdev_300::smiths_membership::storage::MembershipsExpireOn>(Some( - parent_hash, - )) + .iter( + gdev_300::storage() + .smiths_membership() + .memberships_expire_on(0), + 10, + Some(parent_hash), + ) .await?; let mut smith_memberships = BTreeMap::new(); while let Some((k, v)) = smith_membership_iter.next().await? { @@ -391,14 +446,19 @@ async fn main() -> Result<()> { } } Subcommand::GenRevocDoc => { - gen_revoc_doc(&api, &pair.expect("This subcommand needs a secret.")).await? + gen_revoc_doc(&client, &pair.expect("This subcommand needs a secret.")).await? } Subcommand::OneshotBalance { account } => { logs::info!( "{}", - api.storage() - .oneshot_account() - .oneshot_accounts(&account, None) + client + .storage() + .fetch( + &gdev_300::storage() + .oneshot_account() + .oneshot_accounts(&account), + None + ) .await? .unwrap_or(0) ); @@ -429,19 +489,25 @@ async fn main() -> Result<()> { .await?; signer.increment_nonce();*/ - let pair_i_account = api + if let Some(pair_i_account) = client .storage() - .system() - .account(&pair_i.public().into(), None) - .await?; - logs::info!("account //{} balance: {}", i, pair_i_account.data.free); + .fetch( + &gdev_300::storage() + .system() + .account(&pair_i.public().into()), + None, + ) + .await? + { + logs::info!("account //{} balance: {}", i, pair_i_account.data.free); + } } } Subcommand::SpamRoll { actual_repart } => { let pair = pair.expect("This subcommand needs a secret."); let mut pairs = - Vec::<(PairSigner<DefaultConfig, Pair>, AccountId32)>::with_capacity(actual_repart); + Vec::<(PairSigner<GdevConfig, Pair>, AccountId32)>::with_capacity(actual_repart); for i in 0..actual_repart { let pair_i = pair .derive(std::iter::once(DeriveJunction::hard::<u32>(i as u32)), None) @@ -455,22 +521,27 @@ async fn main() -> Result<()> { let mut watchers = Vec::with_capacity(actual_repart); for i in 0..(actual_repart - 1) { let dest: AccountId32 = pairs[i + 1].1.clone(); - let watcher = api + let watcher = client .tx() - .balances() - .transfer(MultiAddress::Id(dest), 1)? - .sign_and_submit_then_watch(&pairs[i].0, BaseExtrinsicParamsBuilder::new()) + .sign_and_submit_then_watch( + &gdev_300::tx() + .balances() + .transfer(MultiAddress::Id(dest), 1), + &pairs[i].0, + BaseExtrinsicParamsBuilder::new(), + ) .await?; pairs[i].0.increment_nonce(); logs::info!("send 1 cent from //{} to //{}", i, i + 1); watchers.push(watcher); } let dest: AccountId32 = pairs[0].1.clone(); - let watcher = api + let watcher = client .tx() - .balances() - .transfer(MultiAddress::Id(dest), 1)? .sign_and_submit_then_watch( + &gdev_300::tx() + .balances() + .transfer(MultiAddress::Id(dest), 1), &pairs[actual_repart - 1].0, BaseExtrinsicParamsBuilder::new(), ) @@ -493,19 +564,21 @@ async fn main() -> Result<()> { let pair = pair.expect("This subcommand needs a secret."); if keep_alive { - api.tx() - .balances() - .transfer(dest.into(), balance)? + client + .tx() .sign_and_submit_then_watch( + &gdev_300::tx().balances().transfer(dest.into(), balance), &PairSigner::new(pair), BaseExtrinsicParamsBuilder::new(), ) .await?; } else { - api.tx() - .balances() - .transfer_keep_alive(dest.into(), balance)? + client + .tx() .sign_and_submit_then_watch( + &gdev_300::tx() + .balances() + .transfer_keep_alive(dest.into(), balance), &PairSigner::new(pair), BaseExtrinsicParamsBuilder::new(), ) @@ -517,14 +590,26 @@ async fn main() -> Result<()> { Ok(()) } -async fn gen_revoc_doc(api: &Api, pair: &Pair) -> Result<()> { +async fn gen_revoc_doc(api: &Client, pair: &Pair) -> Result<()> { let account_id: sp_core::crypto::AccountId32 = pair.public().into(); - let genesis_hash = api.storage().system().block_hash(&0, None).await?; - let payload = (account_id, genesis_hash).encode(); + let idty_index = api + .storage() + .fetch( + &gdev_300::storage() + .identity() + .identity_index_of(&account_id), + None, + ) + .await?; + let genesis_hash = api + .storage() + .fetch(&gdev_300::storage().system().block_hash(0), None) + .await? + .unwrap(); + let payload = (b"revo", genesis_hash, idty_index).encode(); let signature = pair.sign(&payload); - println!("payload: 0x{}", hex::encode(payload)); - println!("signature: 0x{}", hex::encode(signature)); + println!("0x{}", hex::encode(signature)); Ok(()) }