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(())
 }