From 8d038728158124b38ca66d816423700d2b81a5dc Mon Sep 17 00:00:00 2001
From: cgeek <cem.moreau@gmail.com>
Date: Fri, 11 Aug 2023 13:13:02 +0200
Subject: [PATCH] feat: dc-dump first commit

---
 Cargo.lock                                    |  305 +++--
 client/dump/Cargo.toml                        |  153 +++
 client/dump/src/assert.rs                     |   52 +
 client/dump/src/checker.rs                    |   74 ++
 client/dump/src/iterative.rs                  |  145 ++
 client/dump/src/key.rs                        | 1176 +++++++++++++++++
 client/dump/src/lib.rs                        |   25 +
 client/dump/src/private.rs                    |  131 ++
 client/dump/src/runtime.rs                    |   37 +
 client/dump/tests/simple_test.expected.txt    |  181 +++
 runtime/gdev/Cargo.toml                       |    1 +
 runtime/gdev/tests/integration_tests.rs       |   31 +
 ...storage_with_run_to_block.b.2.expected.txt |  244 ++++
 ...storage_with_run_to_block.b.3.expected.txt |  244 ++++
 ...storage_with_run_to_block.b.4.expected.txt |  251 ++++
 ...storage_with_run_to_block.b.5.expected.txt |  254 ++++
 16 files changed, 3216 insertions(+), 88 deletions(-)
 create mode 100644 client/dump/Cargo.toml
 create mode 100644 client/dump/src/assert.rs
 create mode 100644 client/dump/src/checker.rs
 create mode 100644 client/dump/src/iterative.rs
 create mode 100644 client/dump/src/key.rs
 create mode 100644 client/dump/src/lib.rs
 create mode 100644 client/dump/src/private.rs
 create mode 100644 client/dump/src/runtime.rs
 create mode 100644 client/dump/tests/simple_test.expected.txt
 create mode 100644 runtime/gdev/tests/values_storage_with_run_to_block.b.2.expected.txt
 create mode 100644 runtime/gdev/tests/values_storage_with_run_to_block.b.3.expected.txt
 create mode 100644 runtime/gdev/tests/values_storage_with_run_to_block.b.4.expected.txt
 create mode 100644 runtime/gdev/tests/values_storage_with_run_to_block.b.5.expected.txt

diff --git a/Cargo.lock b/Cargo.lock
index d00e4ff66..bc5e69343 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -319,7 +319,7 @@ checksum = "677d1d8ab452a3936018a687b20e6f7cf5363d713b732b8884001317b0e48aa3"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -791,11 +791,11 @@ version = "3.2.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ea0c8bce528c4be4da13ea6fead8965e95b6073585a2f05204bd8f4119f82a65"
 dependencies = [
- "heck 0.4.0",
+ "heck 0.4.1",
  "proc-macro-error",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -804,11 +804,11 @@ version = "4.0.21"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "0177313f9f02afc995627906bbd8967e2be069f5261954222dac78290c2b9014"
 dependencies = [
- "heck 0.4.0",
+ "heck 0.4.1",
  "proc-macro-error",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -858,8 +858,8 @@ version = "6.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e621e7e86c46fd8a14c32c6ae3cb95656621b4743a27d0cffedb831d46e7ad21"
 dependencies = [
- "strum",
- "strum_macros",
+ "strum 0.24.1",
+ "strum_macros 0.24.3",
  "unicode-width",
 ]
 
@@ -1201,7 +1201,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6d2301688392eb071b0bf1a37be05c469d3cc4dbbd95df672fe28ab021e6a096"
 dependencies = [
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -1260,7 +1260,7 @@ dependencies = [
  "proc-macro2",
  "quote",
  "regex",
- "syn",
+ "syn 1.0.107",
  "synthez",
 ]
 
@@ -1341,7 +1341,7 @@ dependencies = [
  "proc-macro2",
  "quote",
  "scratch",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -1358,7 +1358,7 @@ checksum = "3e7e2adeb6a0d4a282e581096b06e1791532b7d576dcde5ccd9382acf55db8e6"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -1382,7 +1382,7 @@ dependencies = [
  "proc-macro2",
  "quote",
  "strsim",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -1393,7 +1393,7 @@ checksum = "7618812407e9402654622dd402b0a89dff9ba93badd6540781526117b92aab7e"
 dependencies = [
  "darling_core",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -1419,7 +1419,83 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a5bbed42daaa95e780b60a50546aa345b8413a1e46f9a40a12907d3598f038db"
 dependencies = [
  "data-encoding",
- "syn",
+ "syn 1.0.107",
+]
+
+[[package]]
+name = "dc-dump"
+version = "1.0.0"
+dependencies = [
+ "bytes",
+ "common-runtime",
+ "frame-executive",
+ "frame-support",
+ "frame-system",
+ "frame-system-rpc-runtime-api",
+ "frame-try-runtime",
+ "gdev-runtime",
+ "hex-literal",
+ "log",
+ "maplit",
+ "pallet-atomic-swap",
+ "pallet-authority-discovery",
+ "pallet-authority-members",
+ "pallet-authorship",
+ "pallet-babe",
+ "pallet-balances",
+ "pallet-certification",
+ "pallet-collective",
+ "pallet-duniter-account",
+ "pallet-duniter-test-parameters",
+ "pallet-duniter-wot",
+ "pallet-grandpa",
+ "pallet-identity",
+ "pallet-im-online",
+ "pallet-membership",
+ "pallet-multisig",
+ "pallet-offences",
+ "pallet-oneshot-account",
+ "pallet-preimage",
+ "pallet-provide-randomness",
+ "pallet-proxy",
+ "pallet-scheduler",
+ "pallet-session",
+ "pallet-session-benchmarking",
+ "pallet-sudo",
+ "pallet-timestamp",
+ "pallet-transaction-payment",
+ "pallet-transaction-payment-rpc-runtime-api",
+ "pallet-treasury",
+ "pallet-universal-dividend",
+ "pallet-upgrade-origin",
+ "pallet-utility",
+ "parity-scale-codec",
+ "pretty_assertions",
+ "scale-info",
+ "serde",
+ "serde_derive",
+ "serde_json",
+ "sp-api",
+ "sp-arithmetic",
+ "sp-authority-discovery",
+ "sp-block-builder",
+ "sp-consensus-babe",
+ "sp-consensus-vrf",
+ "sp-core",
+ "sp-finality-grandpa",
+ "sp-inherents",
+ "sp-io",
+ "sp-keyring",
+ "sp-membership",
+ "sp-offchain",
+ "sp-runtime",
+ "sp-session",
+ "sp-std",
+ "sp-storage",
+ "sp-transaction-pool",
+ "sp-version",
+ "strum 0.25.0",
+ "strum_macros 0.25.2",
 ]
 
 [[package]]
@@ -1439,7 +1515,7 @@ checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -1450,9 +1526,15 @@ checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
+[[package]]
+name = "diff"
+version = "0.1.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8"
+
 [[package]]
 name = "difflib"
 version = "0.4.0"
@@ -1693,7 +1775,7 @@ checksum = "558e40ea573c374cf53507fd240b7ee2f5477df7cfebdb97323ec61c719399c5"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -1796,10 +1878,10 @@ version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116"
 dependencies = [
- "heck 0.4.0",
+ "heck 0.4.1",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -1885,7 +1967,7 @@ checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
  "synstructure",
 ]
 
@@ -2201,7 +2283,7 @@ dependencies = [
  "itertools",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -2213,7 +2295,7 @@ dependencies = [
  "proc-macro-crate",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -2223,7 +2305,7 @@ source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -2419,7 +2501,7 @@ checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -2553,6 +2635,7 @@ name = "gdev-runtime"
 version = "3.0.0"
 dependencies = [
  "common-runtime",
+ "dc-dump",
  "frame-benchmarking",
  "frame-executive",
  "frame-support",
@@ -2704,7 +2787,7 @@ dependencies = [
  "quote",
  "serde",
  "serde_json",
- "syn",
+ "syn 1.0.107",
  "textwrap 0.12.1",
  "thiserror",
  "typed-builder",
@@ -2718,7 +2801,7 @@ checksum = "41973d4c45f7a35af8753ba3457cc99d406d863941fd7f52663cff54a5ab99b3"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -2818,7 +2901,7 @@ dependencies = [
  "quote",
  "serde",
  "serde_json",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -2829,7 +2912,7 @@ checksum = "e56b093bfda71de1da99758b036f4cc811fd2511c8a76f75680e9ffbd2bb4251"
 dependencies = [
  "graphql_client_codegen",
  "proc-macro2",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -2981,9 +3064,9 @@ dependencies = [
 
 [[package]]
 name = "heck"
-version = "0.4.0"
+version = "0.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
 
 [[package]]
 name = "hermit-abi"
@@ -3273,7 +3356,7 @@ checksum = "11d7a9f6330b71fea57921c9b61c47ee6e84f72d394754eff6163ae67e7395eb"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -3605,7 +3688,7 @@ dependencies = [
  "proc-macro-crate",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -4024,9 +4107,9 @@ version = "0.30.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a0eddc4497a8b5a506013c40e8189864f9c3a00db2b25671f428ae9007f3ba32"
 dependencies = [
- "heck 0.4.0",
+ "heck 0.4.1",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -4480,7 +4563,7 @@ dependencies = [
  "cfg-if 1.0.0",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -4539,7 +4622,7 @@ dependencies = [
  "proc-macro-error",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
  "synstructure",
 ]
 
@@ -4589,7 +4672,7 @@ checksum = "01fcc0b8149b4632adc89ac3b7b31a12fb6099a0317a4eb2ebff574ef7de7218"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -4894,7 +4977,7 @@ checksum = "3b0498641e53dd6ac1a4f22547548caa6864cc4933784319cd1775271c5a46ce"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -4962,7 +5045,7 @@ checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -5185,7 +5268,7 @@ dependencies = [
  "num_enum",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -5628,7 +5711,7 @@ dependencies = [
  "proc-macro-crate",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -5659,7 +5742,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f557c32c6d268a07c921471619c0295f5efad3a0e76d4f97a05c091a51d110b2"
 dependencies = [
  "proc-macro2",
- "syn",
+ "syn 1.0.107",
  "synstructure",
 ]
 
@@ -5819,7 +5902,7 @@ dependencies = [
  "pest_meta",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -5860,7 +5943,7 @@ checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -6002,6 +6085,16 @@ dependencies = [
  "termtree",
 ]
 
+[[package]]
+name = "pretty_assertions"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "af7cee1a6c8a5b9208b3cb1061f10c0cb689087b3d8ce85fb9d2dd7a29b6ba66"
+dependencies = [
+ "diff",
+ "yansi",
+]
+
 [[package]]
 name = "prettyplease"
 version = "0.1.22"
@@ -6009,7 +6102,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "2c8992a85d8e93a28bdf76137db888d3874e3b230dee5ed8bebac4c9f7617773"
 dependencies = [
  "proc-macro2",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -6045,7 +6138,7 @@ dependencies = [
  "proc-macro-error-attr",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
  "version_check",
 ]
 
@@ -6062,9 +6155,9 @@ dependencies = [
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.49"
+version = "1.0.66"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5"
+checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
 dependencies = [
  "unicode-ident",
 ]
@@ -6103,7 +6196,7 @@ checksum = "66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -6123,7 +6216,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "cb5320c680de74ba083512704acb90fe00f28f79207286a848e730c45dd73ed6"
 dependencies = [
  "bytes",
- "heck 0.4.0",
+ "heck 0.4.1",
  "itertools",
  "lazy_static",
  "log",
@@ -6133,7 +6226,7 @@ dependencies = [
  "prost",
  "prost-types",
  "regex",
- "syn",
+ "syn 1.0.107",
  "tempfile",
  "which",
 ]
@@ -6161,7 +6254,7 @@ dependencies = [
  "itertools",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -6202,9 +6295,9 @@ dependencies = [
 
 [[package]]
 name = "quote"
-version = "1.0.23"
+version = "1.0.32"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b"
+checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965"
 dependencies = [
  "proc-macro2",
 ]
@@ -6380,7 +6473,7 @@ checksum = "9f9c0c92af03644e4806106281fe2e068ac5bc0ae74a707266d06ea27bccee5f"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -6772,7 +6865,7 @@ dependencies = [
  "proc-macro-crate",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -7674,7 +7767,7 @@ dependencies = [
  "proc-macro-crate",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -7777,7 +7870,7 @@ dependencies = [
  "proc-macro-crate",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -7856,7 +7949,7 @@ dependencies = [
  "heck 0.3.3",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -7868,7 +7961,7 @@ dependencies = [
  "heck 0.3.3",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -7975,14 +8068,14 @@ checksum = "255abe9a125a985c05190d687b320c12f9b1f0b99445e608c21ba0782c719ad8"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
 name = "serde_json"
-version = "1.0.91"
+version = "1.0.99"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883"
+checksum = "46266871c240a00b8f503b877622fe33430b3c7d963bdc0f2adc511e54a1eae3"
 dependencies = [
  "itoa",
  "ryu",
@@ -8227,7 +8320,7 @@ dependencies = [
  "proc-macro-crate",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -8468,7 +8561,7 @@ dependencies = [
  "proc-macro2",
  "quote",
  "sp-core-hashing",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -8487,7 +8580,7 @@ source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -8567,7 +8660,7 @@ dependencies = [
  "lazy_static",
  "sp-core",
  "sp-runtime",
- "strum",
+ "strum 0.24.1",
 ]
 
 [[package]]
@@ -8688,7 +8781,7 @@ dependencies = [
  "proc-macro-crate",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -8884,7 +8977,7 @@ dependencies = [
  "parity-scale-codec",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -8984,7 +9077,7 @@ dependencies = [
  "memchr",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -9012,20 +9105,39 @@ version = "0.24.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f"
 dependencies = [
- "strum_macros",
+ "strum_macros 0.24.3",
 ]
 
+[[package]]
+name = "strum"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125"
+
 [[package]]
 name = "strum_macros"
 version = "0.24.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59"
 dependencies = [
- "heck 0.4.0",
+ "heck 0.4.1",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn 1.0.107",
+]
+
+[[package]]
+name = "strum_macros"
+version = "0.25.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ad8d03b598d3d0fff69bf533ee3ef19b8eeb342729596df84bcc7e1f96ec4059"
+dependencies = [
+ "heck 0.4.1",
  "proc-macro2",
  "quote",
  "rustversion",
- "syn",
+ "syn 2.0.28",
 ]
 
 [[package]]
@@ -9106,7 +9218,7 @@ dependencies = [
  "cargo_metadata",
  "filetime",
  "sp-maybe-compressed-blob",
- "strum",
+ "strum 0.24.1",
  "tempfile",
  "toml",
  "walkdir",
@@ -9153,7 +9265,7 @@ source = "git+https://github.com/duniter/subxt.git?branch=duniter-substrate-v0.9
 dependencies = [
  "darling",
  "frame-metadata",
- "heck 0.4.0",
+ "heck 0.4.1",
  "hex",
  "jsonrpsee 0.16.2",
  "parity-scale-codec",
@@ -9162,7 +9274,7 @@ dependencies = [
  "quote",
  "scale-info",
  "subxt-metadata",
- "syn",
+ "syn 1.0.107",
  "tokio",
 ]
 
@@ -9174,7 +9286,7 @@ dependencies = [
  "darling",
  "proc-macro-error",
  "subxt-codegen",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -9199,6 +9311,17 @@ dependencies = [
  "unicode-ident",
 ]
 
+[[package]]
+name = "syn"
+version = "2.0.28"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "04361975b3f5e348b2189d8dc55bc942f278b2d482a6a0365de5bdd62d351567"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
 [[package]]
 name = "synstructure"
 version = "0.12.6"
@@ -9207,7 +9330,7 @@ checksum = "f36bdaa60a83aca3921b5259d5400cbf5e90fc51931376a9bd4a0eb79aa7210f"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
  "unicode-xid",
 ]
 
@@ -9217,7 +9340,7 @@ version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "033178d0acccffc5490021657006e6a8dd586ee9dc6f7c24e7608b125e568cb1"
 dependencies = [
- "syn",
+ "syn 1.0.107",
  "synthez-codegen",
  "synthez-core",
 ]
@@ -9228,7 +9351,7 @@ version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "69263462a40e46960f070618e20094ce69e783a41f86e54bc75545136afd597a"
 dependencies = [
- "syn",
+ "syn 1.0.107",
  "synthez-core",
 ]
 
@@ -9241,7 +9364,7 @@ dependencies = [
  "proc-macro2",
  "quote",
  "sealed 0.3.0",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -9364,7 +9487,7 @@ checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -9464,7 +9587,7 @@ checksum = "d266c00fde287f55d3f1c3e96c500c362a2b8c695076ec180f27918820bc6df8"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -9549,7 +9672,7 @@ checksum = "4017f8f45139870ca7e672686113917c71c7a6e02d4924eda67186083c03081a"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -9740,7 +9863,7 @@ checksum = "f85f4270f4f449a3f2c0cf2aecc8415e388a597aeacc7d55fc749c5c968c8533"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
 ]
 
 [[package]]
@@ -10029,7 +10152,7 @@ dependencies = [
  "once_cell",
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
  "wasm-bindgen-shared",
 ]
 
@@ -10063,7 +10186,7 @@ checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
  "wasm-bindgen-backend",
  "wasm-bindgen-shared",
 ]
@@ -10638,6 +10761,12 @@ dependencies = [
  "static_assertions",
 ]
 
+[[package]]
+name = "yansi"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "09041cd90cf85f7f8b2df60c646f853b7f535ce68f85244eb6731cf89fa498ec"
+
 [[package]]
 name = "yap"
 version = "0.7.2"
@@ -10661,7 +10790,7 @@ checksum = "44bf07cb3e50ea2003396695d58bf46bc9887a1f362260446fad6bc4e79bd36c"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn",
+ "syn 1.0.107",
  "synstructure",
 ]
 
diff --git a/client/dump/Cargo.toml b/client/dump/Cargo.toml
new file mode 100644
index 000000000..7f079820a
--- /dev/null
+++ b/client/dump/Cargo.toml
@@ -0,0 +1,153 @@
+[package]
+authors = ['cgeek <cem.moreau@gmail.com>']
+description = 'Duniter client dumper of Storage'
+edition = '2021'
+homepage = 'https://duniter.org'
+license = 'AGPL-3.0'
+name = 'dc-dump'
+readme = 'README.md'
+repository = 'https://git.duniter.org/nodes/rust/duniter-v2s'
+version = '1.0.0'
+
+[features]
+default = ['std']
+std = [
+    'codec/std',
+    'common-runtime/std',
+    'frame-executive/std',
+    'frame-support/std',
+    'frame-system-rpc-runtime-api/std',
+    'frame-system/std',
+    "frame-try-runtime/std",
+    'log/std',
+    'pallet-atomic-swap/std',
+    'pallet-authority-discovery/std',
+    'pallet-authority-members/std',
+    'pallet-babe/std',
+    'pallet-balances/std',
+    'pallet-certification/std',
+    'pallet-collective/std',
+    'pallet-duniter-test-parameters/std',
+    'pallet-duniter-account/std',
+    'pallet-duniter-wot/std',
+    'pallet-grandpa/std',
+    'pallet-identity/std',
+    'pallet-membership/std',
+    'pallet-oneshot-account/std',
+    'pallet-provide-randomness/std',
+    'pallet-im-online/std',
+    'pallet-multisig/std',
+    "pallet-offences/std",
+    'pallet-preimage/std',
+    'pallet-proxy/std',
+    "pallet-scheduler/std",
+    'pallet-session/std',
+    'pallet-sudo/std',
+    'pallet-universal-dividend/std',
+    'pallet-upgrade-origin/std',
+    'pallet-timestamp/std',
+    'pallet-transaction-payment-rpc-runtime-api/std',
+    'pallet-transaction-payment/std',
+    'pallet-treasury/std',
+    'pallet-utility/std',
+    "serde/std",
+    "serde_derive",
+    'sp-api/std',
+    'sp-arithmetic/std',
+    'sp-authority-discovery/std',
+    'sp-block-builder/std',
+    'sp-consensus-babe/std',
+    'sp-core/std',
+    'sp-inherents/std',
+    'sp-offchain/std',
+    'sp-membership/std',
+    'sp-runtime/std',
+    'sp-session/std',
+    'sp-std/std',
+    'sp-transaction-pool/std',
+    'sp-version/std',
+]
+
+[dependencies]
+# local
+common-runtime = { path = "../../runtime/common", default-features = false }
+pallet-authority-members = { path = '../../pallets/authority-members', default-features = false }
+pallet-certification = { path = '../../pallets/certification', default-features = false }
+pallet-duniter-test-parameters = { path = '../../pallets/duniter-test-parameters', default-features = false }
+pallet-duniter-account = { path = '../../pallets/duniter-account', default-features = false }
+pallet-duniter-wot = { path = '../../pallets/duniter-wot', default-features = false }
+pallet-identity = { path = '../../pallets/identity', default-features = false }
+pallet-membership = { path = '../../pallets/membership', default-features = false }
+pallet-offences = { path = '../../pallets/offences', default-features = false }
+pallet-oneshot-account = { path = '../../pallets/oneshot-account', default-features = false }
+pallet-provide-randomness = { path = '../../pallets/provide-randomness', default-features = false }
+pallet-universal-dividend = { path = '../../pallets/universal-dividend', default-features = false }
+pallet-session-benchmarking = { path = '../../pallets/session-benchmarking', default-features = false }
+pallet-upgrade-origin = { path = '../../pallets/upgrade-origin', default-features = false }
+sp-membership = { path = '../../primitives/membership', default-features = false }
+
+# crates.io
+codec = { package = "parity-scale-codec", version = "3.1.5", features = ["derive"], default-features = false }
+log = { version = "0.4.17", default-features = false }
+hex-literal = { version = '0.3.1', optional = true }
+scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
+serde = { version = "1.0.101", default-features = false }
+serde_derive = { version = "1.0.101", optional = true }
+
+# substrate
+frame-try-runtime = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false, optional = true }
+frame-executive = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+frame-support = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+frame-system = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+frame-system-rpc-runtime-api = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false}
+pallet-atomic-swap = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+pallet-authority-discovery = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+pallet-authorship = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+pallet-babe = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+pallet-balances = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+pallet-collective = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+pallet-grandpa = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+pallet-im-online = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+pallet-multisig = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+pallet-preimage = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+pallet-proxy = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+pallet-scheduler = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+pallet-session = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+pallet-sudo = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+pallet-timestamp = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+pallet-transaction-payment = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+pallet-transaction-payment-rpc-runtime-api = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+pallet-treasury = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+pallet-utility = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+sp-api = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+sp-arithmetic = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+sp-authority-discovery = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+sp-block-builder = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+sp-consensus-babe = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+sp-core = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+sp-inherents = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+sp-offchain = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+sp-runtime = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+sp-session = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+sp-std = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+sp-transaction-pool = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+sp-version = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32', default-features = false }
+
+# Other
+bytes = { version = "1.1.0", default-features = false }
+pretty_assertions = "1.2.1"
+maplit = "1.0.2"
+sp-consensus-vrf = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32' }
+sp-finality-grandpa = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32' }
+sp-io = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32' }
+sp-keyring = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32' }
+sp-storage = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32' }
+serde_json = "1.0.99"
+strum = "0.25.0"
+strum_macros = "0.25.0"
+gdev-runtime = { path = "../../runtime/gdev" }
+
+### DOC ###
+
+[package.metadata.docs.rs]
+targets = ['x86_64-unknown-linux-gnu']
diff --git a/client/dump/src/assert.rs b/client/dump/src/assert.rs
new file mode 100644
index 000000000..3c59295e5
--- /dev/null
+++ b/client/dump/src/assert.rs
@@ -0,0 +1,52 @@
+use crate::checker::Checker;
+use bytes::Bytes;
+use codec::Decode;
+use common_runtime::entities::IdtyData;
+use common_runtime::{AccountId, BlockNumber};
+use frame_support::metadata::StorageEntryType;
+use frame_support::storage::{KeyPrefixIterator, PrefixIterator};
+use frame_support::{Blake2_128Concat, ReversibleStorageHasher, Twox64Concat};
+use log::info;
+use pallet_identity::IdtyValue;
+use pretty_assertions::assert_eq;
+use scale_info::form::PortableForm;
+use std::fs;
+use std::string::FromUtf8Error;
+
+pub fn compare_with_storage(tested: Vec<Checker>, expected_file: String) {
+    let in_file = format!("tests/{}", expected_file.clone());
+    let out_file = format!("tests/{}.actual", expected_file.clone());
+    let expected_str = fs::read_to_string(in_file).expect(
+        format!(
+            "file {} must exist in tests/{}",
+            expected_file.clone().as_str(),
+            std::env::current_dir().unwrap().display()
+        )
+        .as_str(),
+    );
+    let mut actual = String::new();
+    for t in tested.into_iter() {
+        let dotted_name = t.to_dotted_form();
+        let (single, map) = t.into_values();
+        if let Some(kvs) = map {
+            actual.push_str(format!("{} = [\n", dotted_name.clone()).as_str());
+            for kv in kvs {
+                actual.push_str(format!("\t{} = {:?}\n", kv.0, kv.1).as_str());
+            }
+            actual.push_str("]\n");
+        } else if let Some(v) = single {
+            actual.push_str(format!("{} = {:?}\n", dotted_name.clone(), v).as_str());
+        } else {
+            actual.push_str(format!("{} = <unreadable>\n", dotted_name.clone()).as_str());
+        }
+    }
+    if expected_str.clone() != actual.clone() {
+        fs::write(out_file, actual.clone()).expect("should be able to store actual storage dump");
+    }
+    assert_eq!(expected_str, actual);
+}
+
+fn read_storage(t: &Checker) -> Option<Bytes> {
+    let key = t.get_prefix();
+    sp_io::storage::get(key.as_slice())
+}
diff --git a/client/dump/src/checker.rs b/client/dump/src/checker.rs
new file mode 100644
index 000000000..561aeeb96
--- /dev/null
+++ b/client/dump/src/checker.rs
@@ -0,0 +1,74 @@
+use crate::key::Key;
+use bytes::Bytes;
+use codec::Decode;
+use frame_support::metadata::StorageEntryMetadata;
+use frame_support::storage::PrefixIterator;
+use scale_info::form::PortableForm;
+use std::collections::BTreeMap;
+use std::fmt::Debug;
+
+/// A concrete Checker for any type `T` to be read from storage.
+pub struct Checker {
+    pallet_name: String,
+    storage_name: String,
+    single_value: Option<Box<dyn Debug>>,
+    map_key_values: Option<BTreeMap<Box<String>, Box<dyn Debug>>>,
+}
+
+impl Checker {
+    pub fn new(
+        pallet_name: &str,
+        storage_name: &str,
+        single_value: Option<Box<dyn Debug>>,
+        map_key_values: Option<BTreeMap<Box<String>, Box<dyn Debug>>>,
+    ) -> Checker {
+        Checker {
+            pallet_name: pallet_name.into(),
+            storage_name: storage_name.into(),
+            single_value,
+            map_key_values,
+        }
+    }
+}
+
+impl Checker {
+    pub fn default(pallet_name: &str, storage_name: &str) -> Box<Checker> {
+        Box::new(Checker {
+            pallet_name: pallet_name.into(),
+            storage_name: storage_name.into(),
+            single_value: None,
+            map_key_values: None,
+        })
+    }
+}
+
+/// What is expected to make a storage check
+impl Checker {
+    pub fn pallet_name(&self) -> String {
+        self.pallet_name.clone()
+    }
+
+    pub fn storage_name(&self) -> String {
+        self.storage_name.clone()
+    }
+
+    pub fn to_dotted_form(&self) -> String {
+        format!("{}.{}", self.pallet_name, self.storage_name)
+    }
+
+    pub fn into_values(
+        self,
+    ) -> (
+        Option<Box<dyn Debug>>,
+        Option<BTreeMap<Box<String>, Box<dyn Debug>>>,
+    ) {
+        (self.single_value, self.map_key_values)
+    }
+
+    pub fn get_prefix(&self) -> [u8; 32] {
+        frame_support::storage::storage_prefix(
+            self.pallet_name().as_bytes(),
+            self.storage_name().as_bytes(),
+        )
+    }
+}
diff --git a/client/dump/src/iterative.rs b/client/dump/src/iterative.rs
new file mode 100644
index 000000000..7642c4ccb
--- /dev/null
+++ b/client/dump/src/iterative.rs
@@ -0,0 +1,145 @@
+use crate::assert::compare_with_storage;
+use crate::checker::Checker;
+use crate::key::Key;
+use crate::runtime::extract_storage_entries_normalized;
+use codec::{Decode, Error};
+use common_runtime::entities::IdtyData;
+use frame_support::instances::{Instance1, Instance2};
+use frame_support::metadata::{RuntimeMetadata, StorageEntryType};
+use frame_support::storage::storage_prefix;
+use gdev_runtime::opaque::SessionKeys;
+use gdev_runtime::Runtime;
+use maplit::btreemap;
+use pallet_identity::{IdtyStatus, IdtyValue};
+use pallet_universal_dividend::FirstEligibleUd;
+use pretty_assertions::assert_eq;
+use scale_info::form::PortableForm;
+use sp_api::{AsTrieBackend, StateBackend};
+use sp_consensus_babe::{AuthorityId, BabeAuthorityWeight};
+use sp_core::bounded::WeakBoundedVec;
+use sp_core::{map, sr25519};
+use sp_io::TestExternalities;
+use sp_runtime::RuntimeString;
+use std::collections::HashMap;
+use std::fmt::{format, Debug};
+use std::fs::metadata;
+use std::iter::Map;
+use std::marker::PhantomData;
+use std::ops::Add;
+use std::str::FromStr;
+
+/// A struct to ease the testing of extrinsics' impact on the Storage, using the following techniques:
+///
+/// - always check *all keys and values of the current state in the Storage* (`test_storage()`)
+/// - first define a starting state (`new()` or `new_default()`)
+///
+/// Useful for extrinsic testing where we start from a known Storage state, and just want to check
+/// the differences after we applied some extrinsics.
+pub struct StorageChecker<T> {
+    get_metadata: fn() -> RuntimeMetadata,
+    phantom: PhantomData<T>,
+}
+
+impl<T> StorageChecker<T>
+where
+    T: frame_system::Config,
+    <T as frame_system::Config>::AccountId: std::hash::Hash,
+    T: pallet_babe::Config,
+    T: pallet_im_online::Config,
+    T: pallet_certification::Config<Instance1>,
+    T: pallet_certification::Config<Instance2>,
+    T: pallet_universal_dividend::Config,
+    T: pallet_authorship::Config,
+    T: pallet_duniter_test_parameters::Config,
+    T: pallet_authority_members::Config,
+    T: pallet_session::Config,
+    T: pallet_balances::Config,
+    T: pallet_provide_randomness::Config,
+    T: pallet_treasury::Config,
+    T: pallet_identity::Config,
+    T: pallet_offences::Config,
+    T: pallet_scheduler::Config,
+    T: pallet_oneshot_account::Config,
+    T: pallet_atomic_swap::Config,
+    T: pallet_proxy::Config,
+    T: pallet_multisig::Config,
+    T: pallet_duniter_account::Config,
+    <T as pallet_identity::Config>::IdtyIndex: std::hash::Hash,
+    <T as pallet_identity::Config>::IdtyData: std::fmt::Debug,
+    <T as pallet_authority_members::Config>::MemberId: std::hash::Hash,
+    <T as pallet_session::Config>::ValidatorId: std::hash::Hash,
+{
+    pub fn new_default(get_metadata: fn() -> RuntimeMetadata) -> StorageChecker<T> {
+        StorageChecker {
+            get_metadata,
+            phantom: PhantomData,
+        }
+    }
+
+    /// Test our currently expected state against the real state in the Storage.
+    /// **Must be tested under an externalities-provided environment.**
+    /// `expected_keys_count` is the number of storage items that we expect to find in the Runtime.
+    pub fn test_storage(&self, expected_keys_count: u32, expected_file: &str) {
+        self.expect_storage(
+            self.get_metadata,
+            expected_keys_count,
+            expected_file.to_string(),
+        );
+    }
+
+    /// Test static keys of Substrate
+    pub fn test_well_known_keys(&self, externalities: &mut TestExternalities) {
+        let binding = externalities.as_backend();
+        let backend = binding.as_trie_backend();
+        let keys_in_trie = backend.keys(&[]);
+        let mut well_known: Vec<String> = vec![];
+        for x in &keys_in_trie {
+            if let Ok(v) = String::from_utf8(x.clone()) {
+                well_known.push(format!("{}", v));
+            }
+        }
+        assert_eq!(well_known[0], ":code");
+        // TODO: assert_eq!(well_known[1], ":extrinsic_index");
+        // TODO: assert_eq!(well_known[2], ":grandpa_authorities");
+        // assert_eq!(well_known.len(), 1);
+    }
+
+    /// Explores the Runtime to retrive all storage entries (pallet.storage_name) and compare the values
+    /// against our expected values in golden testing format.
+    fn expect_storage(
+        &self,
+        get_metadata: fn() -> RuntimeMetadata,
+        expected_keys_count: u32,
+        expected_file: String,
+    ) {
+        // Golden testing part
+        let meta = get_metadata();
+        let mut entries_count = 0u32;
+        // Explore the Runtime to fetch the storage entries
+        let mut tested: Vec<Checker> = extract_storage_entries_normalized(&meta)
+            .unwrap()
+            .into_iter()
+            .map(|se| {
+                entries_count = entries_count.add(1);
+                let e = format!("{}.{}", se.pallet_name, se.storage_name);
+                if let Ok(key) = Key::try_from(e.clone()) {
+                    // Specific
+                    key.to_checker::<T>()
+                } else {
+                    panic!(
+                        "{}.{} must implement TryFrom",
+                        se.pallet_name.as_str(),
+                        se.storage_name.as_str()
+                    );
+                }
+            })
+            .collect();
+        tested.sort_by_key(|c| c.to_dotted_form());
+        let tested_len = *(&tested.len()) as u32;
+        // The golden comparison
+        compare_with_storage(tested, expected_file);
+        // Check the quantities
+        assert_eq!(expected_keys_count, entries_count);
+        assert_eq!(expected_keys_count, tested_len);
+    }
+}
diff --git a/client/dump/src/key.rs b/client/dump/src/key.rs
new file mode 100644
index 000000000..02f047fef
--- /dev/null
+++ b/client/dump/src/key.rs
@@ -0,0 +1,1176 @@
+use crate::checker::Checker;
+use crate::private::*;
+use bytes::Bytes;
+use codec::{Decode, Error, FullCodec};
+use common_runtime::entities::IdtyData;
+use common_runtime::{AccountId, BlockNumber, IdtyIndex};
+use frame_support::instances::{Instance1, Instance2};
+use frame_support::metadata::RuntimeMetadata;
+use frame_support::storage::{storage_prefix, KeyPrefixIterator, PrefixIterator};
+use frame_support::traits::schedule::v3::TaskName;
+use frame_support::traits::{Currency, Len, WrapperOpaque};
+use frame_support::{
+    Blake2_128Concat, Hashable, Identity, ReversibleStorageHasher, StorageHasher, Twox64Concat,
+};
+use frame_system::{AccountInfo, ConsumedWeight, EventRecord, Phase};
+use gdev_runtime::opaque::SessionKeys;
+use gdev_runtime::Runtime;
+use maplit::btreemap;
+use pallet_authority_members::MemberData;
+use pallet_balances::{AccountData, ReserveData};
+use pallet_certification::IdtyCertMeta;
+use pallet_collective::Votes;
+use pallet_grandpa::BoundedAuthorityList;
+use pallet_identity::{IdtyName, IdtyValue};
+use pallet_im_online::{AuthIndex, ValidatorId};
+use pallet_offences::Config;
+use pallet_preimage::RequestStatus;
+use pallet_provide_randomness::RequestId;
+use pallet_scheduler::{ScheduledOf, TaskAddress};
+use pretty_assertions::assert_eq;
+use sp_api::{AsTrieBackend, StateBackend};
+use sp_arithmetic::traits::UniqueSaturatedInto;
+use sp_consensus_babe::digests::{NextConfigDescriptor, PreDigest};
+use sp_consensus_babe::{AuthorityId, BabeAuthorityWeight, BabeEpochConfiguration};
+use sp_consensus_vrf::schnorrkel;
+use sp_core::bounded::{BoundedVec, WeakBoundedVec};
+use sp_core::crypto::{AccountId32, KeyTypeId};
+use sp_core::{ConstU32, Get, TypedGet};
+use sp_finality_grandpa::SetId;
+use sp_io::TestExternalities;
+use sp_runtime::{generic, RuntimeString};
+use sp_std::map;
+use std::collections::{BTreeMap, HashMap};
+use std::fmt::{format, Debug, Formatter};
+use std::iter::Map;
+use std::ops::Add;
+use std::ptr::read;
+use std::str::FromStr;
+use std::string::FromUtf8Error;
+
+/// A convenient enum to represent the expected Storage keys for GDev.
+/// For each key we can fetch the storage without static typing notation.
+#[derive(strum_macros::EnumString)]
+pub enum Key {
+    SystemNumber,
+    SystemParentHash,
+    SystemLastRuntimeUpgrade,
+    SystemUpgradedToU32RefCount,
+    SystemUpgradedToTripleRefCount,
+    SystemAccount,
+    SystemBlockHash,
+    SystemExtrinsicData,
+    SystemEventTopics,
+    SystemAllExtrinsicsLen,
+    SystemExtrinsicCount,
+    SystemBlockWeight,
+    SystemDigest,
+    SystemEvents,
+    SystemEventCount,
+    SystemExecutionPhase,
+    SudoKey,
+    UniversalDividendCurrentUd,
+    UniversalDividendCurrentUdIndex,
+    UniversalDividendMonetaryMass,
+    UniversalDividendNextReeval,
+    UniversalDividendPastReevals,
+    IdentityCounterForIdentities,
+    IdentityNextIdtyIndex,
+    IdentityIdentitiesNames,
+    IdentityIdentities,
+    MembershipCounterForMembership,
+    SmithMembershipCounterForMembership,
+    ProvideRandomnessNexEpochHookIn,
+    ProvideRandomnessRequestsReadyAtEpoch,
+    ProvideRandomnessRequestsIds,
+    ProvideRandomnessCounterForRequestsIds,
+    ProvideRandomnessRequestIdProvider,
+    ProvideRandomnessRequestsReadyAtNextBlock,
+    TransactionPaymentNextFeeMultiplier,
+    TransactionPaymentStorageVersion,
+    AuthorshipAuthor,
+    AuthorshipUncles,
+    AuthorshipDidSetUncles,
+    BabeInitialized,
+    BabeAuthorities,
+    BabeNextAuthorities,
+    BabeAuthorVrfRandomness,
+    BabeCurrentSlot,
+    BabeEpochConfig,
+    BabeEpochIndex,
+    BabeEpochStart,
+    BabeGenesisSlot,
+    BabeLateness,
+    BabeNextEpochConfig,
+    BabeNextRandomness,
+    BabePendingEpochConfigChange,
+    BabeRandomness,
+    BabeSegmentIndex,
+    ParametersParametersStorage,
+    AuthorityMembersAuthoritiesCounter,
+    AuthorityMembersOnlineAuthorities,
+    AuthorityMembersOutgoingAuthorities,
+    AuthorityMembersIncomingAuthorities,
+    AuthorityMembersBlackList,
+    SessionCurrentIndex,
+    SessionDisabledValidators,
+    SessionKeyOwner,
+    SessionNextKeys,
+    SessionQueuedChanged,
+    SessionQueuedKeys,
+    SessionValidators,
+    ImOnlineKeys,
+    ImOnlineHeartbeatAfter,
+    AccountPendingRandomIdAssignments,
+    AccountPendingNewAccounts,
+    SchedulerAgenda,
+    SchedulerIncompleteSince,
+    SchedulerLookup,
+    BabeUnderConstruction,
+    BalancesAccount,
+    BalancesLocks,
+    BalancesReserves,
+    BalancesStorageVersion,
+    BalancesTotalIssuance,
+    OneshotAccountOneshotAccounts,
+    AuthorityMembersAccountIdOf,
+    AuthorityMembersMembers,
+    AuthorityMembersMembersExpireOn,
+    AuthorityMembersMustRotateKeysBefore,
+    OffencesReports,
+    OffencesConcurrentReportsIndex,
+    GrandpaCurrentSetId,
+    GrandpaSetIdSession,
+    GrandpaNextForced,
+    GrandpaPendingChange,
+    GrandpaStalled,
+    GrandpaState,
+    ImOnlineReceivedHeartbeats,
+    ImOnlineAuthoredBlocks,
+    PreimageStatusFor,
+    PreimagePreimageFor,
+    TechnicalCommitteeProposalOf,
+    TechnicalCommitteeVoting,
+    TechnicalCommitteeProposals,
+    TechnicalCommitteeMembers,
+    TechnicalCommitteePrime,
+    TechnicalCommitteeProposalCount,
+    IdentityIdentityIndexOf,
+    IdentityIdentitiesRemovableOn,
+    MembershipMembership,
+    MembershipMembershipsExpireOn,
+    MembershipPendingMembership,
+    MembershipPendingMembershipsExpireOn,
+    CertStorageIdtyCertMeta,
+    CertCertsByReceiver,
+    CertStorageCertsRemovableOn,
+    SmithMembershipMembership,
+    SmithMembershipMembershipsExpireOn,
+    SmithMembershipPendingMembership,
+    SmithMembershipPendingMembershipsExpireOn,
+    SmithCertStorageIdtyCertMeta,
+    SmithCertCertsByReceiver,
+    SmithCertStorageCertsRemovableOn,
+    AtomicSwapPendingSwaps,
+    MultisigMultisigs,
+    ProxyProxies,
+    ProxyAnnouncements,
+    TreasuryProposals,
+    TreasuryProposalCount,
+    TreasuryApprovals,
+    TimestampDidUpdate,
+    TimestampNow,
+}
+
+trait RuntimeCompliant: frame_system::Config {}
+
+impl Key {
+    pub fn to_checker<T>(self) -> Checker
+    where
+        T: frame_system::Config,
+        <T as frame_system::Config>::AccountId: std::hash::Hash,
+        T: pallet_babe::Config,
+        T: pallet_im_online::Config,
+        T: pallet_certification::Config<Instance1>,
+        T: pallet_certification::Config<Instance2>,
+        T: pallet_universal_dividend::Config,
+        T: pallet_authorship::Config,
+        T: pallet_duniter_test_parameters::Config,
+        T: pallet_authority_members::Config,
+        T: pallet_session::Config,
+        T: pallet_balances::Config,
+        T: pallet_provide_randomness::Config,
+        T: pallet_treasury::Config,
+        T: pallet_identity::Config,
+        T: pallet_offences::Config,
+        T: pallet_scheduler::Config,
+        T: pallet_oneshot_account::Config,
+        T: pallet_atomic_swap::Config,
+        T: pallet_proxy::Config,
+        T: pallet_multisig::Config,
+        T: pallet_duniter_account::Config,
+        <T as pallet_identity::Config>::IdtyIndex: std::hash::Hash,
+        <T as pallet_identity::Config>::IdtyData: std::fmt::Debug,
+        <T as pallet_authority_members::Config>::MemberId: std::hash::Hash,
+        <T as pallet_session::Config>::ValidatorId: std::hash::Hash,
+    {
+        let k = self.name();
+        let single_value = self.to_value::<T>();
+        let map_key_values = self.to_map_value::<T>();
+        Checker::new(
+            k.pallet.as_str(),
+            k.storage.as_str(),
+            single_value,
+            map_key_values,
+        )
+    }
+
+    /// Provides the KeyName of a known Storage Key
+    pub(crate) fn name(&self) -> KeyName {
+        match self {
+            Key::SystemNumber => KeyName::new("System", "Number"),
+            Key::SystemParentHash => KeyName::new("System", "ParentHash"),
+            Key::SystemLastRuntimeUpgrade => KeyName::new("System", "LastRuntimeUpgrade"),
+            Key::SystemUpgradedToU32RefCount => KeyName::new("System", "UpgradedToU32RefCount"),
+            Key::SystemUpgradedToTripleRefCount => {
+                KeyName::new("System", "UpgradedToTripleRefCount")
+            }
+            Key::SystemAccount => KeyName::new("System", "Account"),
+            Key::SystemBlockHash => KeyName::new("System", "BlockHash"),
+            Key::SystemExtrinsicData => KeyName::new("System", "ExtrinsicData"),
+            Key::SystemEventTopics => KeyName::new("System", "EventTopics"),
+            Key::SystemAllExtrinsicsLen => KeyName::new("System", "AllExtrinsicsLen"),
+            Key::SystemExtrinsicCount => KeyName::new("System", "ExtrinsicCount"),
+            Key::SystemBlockWeight => KeyName::new("System", "BlockWeight"),
+            Key::SystemDigest => KeyName::new("System", "Digest"),
+            Key::SystemEvents => KeyName::new("System", "Events"),
+            Key::SystemEventCount => KeyName::new("System", "EventCount"),
+            Key::SystemExecutionPhase => KeyName::new("System", "ExecutionPhase"),
+            Key::SudoKey => KeyName::new("Sudo", "Key"),
+            Key::UniversalDividendCurrentUd => KeyName::new("UniversalDividend", "CurrentUd"),
+            Key::UniversalDividendCurrentUdIndex => {
+                KeyName::new("UniversalDividend", "CurrentUdIndex")
+            }
+            Key::UniversalDividendMonetaryMass => KeyName::new("UniversalDividend", "MonetaryMass"),
+            Key::UniversalDividendNextReeval => KeyName::new("UniversalDividend", "NextReeval"),
+            Key::UniversalDividendPastReevals => KeyName::new("UniversalDividend", "PastReevals"),
+            Key::IdentityCounterForIdentities => KeyName::new("Identity", "CounterForIdentities"),
+            Key::IdentityNextIdtyIndex => KeyName::new("Identity", "NextIdtyIndex"),
+            Key::IdentityIdentities => KeyName::new("Identity", "Identities"),
+            Key::IdentityIdentitiesNames => KeyName::new("Identity", "IdentitiesNames"),
+            Key::MembershipCounterForMembership => {
+                KeyName::new("Membership", "CounterForMembership")
+            }
+            Key::SmithMembershipCounterForMembership => {
+                KeyName::new("SmithMembership", "CounterForMembership")
+            }
+            Key::ProvideRandomnessNexEpochHookIn => {
+                KeyName::new("ProvideRandomness", "NexEpochHookIn")
+            }
+            Key::ProvideRandomnessCounterForRequestsIds => {
+                KeyName::new("ProvideRandomness", "CounterForRequestsIds")
+            }
+            Key::ProvideRandomnessRequestIdProvider => {
+                KeyName::new("ProvideRandomness", "RequestIdProvider")
+            }
+            Key::ProvideRandomnessRequestsReadyAtNextBlock => {
+                KeyName::new("ProvideRandomness", "RequestsReadyAtNextBlock")
+            }
+            Key::TransactionPaymentNextFeeMultiplier => {
+                KeyName::new("TransactionPayment", "NextFeeMultiplier")
+            }
+            Key::TransactionPaymentStorageVersion => {
+                KeyName::new("TransactionPayment", "StorageVersion")
+            }
+            Key::AuthorshipAuthor => KeyName::new("Authorship", "Author"),
+            Key::AuthorshipUncles => KeyName::new("Authorship", "Uncles"),
+            Key::AuthorshipDidSetUncles => KeyName::new("Authorship", "DidSetUncles"),
+            Key::BabeInitialized => KeyName::new("Babe", "Initialized"),
+            Key::BabeAuthorities => KeyName::new("Babe", "Authorities"),
+            Key::BabeNextAuthorities => KeyName::new("Babe", "NextAuthorities"),
+            Key::BabeAuthorVrfRandomness => KeyName::new("Babe", "AuthorVrfRandomness"),
+            Key::BabeCurrentSlot => KeyName::new("Babe", "CurrentSlot"),
+            Key::BabeEpochConfig => KeyName::new("Babe", "EpochConfig"),
+            Key::BabeEpochIndex => KeyName::new("Babe", "EpochIndex"),
+            Key::BabeEpochStart => KeyName::new("Babe", "EpochStart"),
+            Key::BabeGenesisSlot => KeyName::new("Babe", "GenesisSlot"),
+            Key::BabeLateness => KeyName::new("Babe", "Lateness"),
+            Key::BabeNextEpochConfig => KeyName::new("Babe", "NextEpochConfig"),
+            Key::BabeNextRandomness => KeyName::new("Babe", "NextRandomness"),
+            Key::BabePendingEpochConfigChange => KeyName::new("Babe", "PendingEpochConfigChange"),
+            Key::BabeRandomness => KeyName::new("Babe", "Randomness"),
+            Key::BabeSegmentIndex => KeyName::new("Babe", "SegmentIndex"),
+            Key::ParametersParametersStorage => KeyName::new("Parameters", "ParametersStorage"),
+            Key::AuthorityMembersAuthoritiesCounter => {
+                KeyName::new("AuthorityMembers", "AuthoritiesCounter")
+            }
+            Key::AuthorityMembersOnlineAuthorities => {
+                KeyName::new("AuthorityMembers", "OnlineAuthorities")
+            }
+            Key::AuthorityMembersOutgoingAuthorities => {
+                KeyName::new("AuthorityMembers", "OutgoingAuthorities")
+            }
+            Key::AuthorityMembersIncomingAuthorities => {
+                KeyName::new("AuthorityMembers", "IncomingAuthorities")
+            }
+            Key::AuthorityMembersBlackList => KeyName::new("AuthorityMembers", "BlackList"),
+            Key::SessionCurrentIndex => KeyName::new("Session", "CurrentIndex"),
+            Key::SessionDisabledValidators => KeyName::new("Session", "DisabledValidators"),
+            Key::SessionKeyOwner => KeyName::new("Session", "KeyOwner"),
+            Key::SessionNextKeys => KeyName::new("Session", "NextKeys"),
+            Key::SessionQueuedChanged => KeyName::new("Session", "QueuedChanged"),
+            Key::SessionQueuedKeys => KeyName::new("Session", "QueuedKeys"),
+            Key::SessionValidators => KeyName::new("Session", "Validators"),
+            Key::ImOnlineKeys => KeyName::new("ImOnline", "Keys"),
+            Key::ImOnlineHeartbeatAfter => KeyName::new("ImOnline", "HeartbeatAfter"),
+            Key::AccountPendingRandomIdAssignments => {
+                KeyName::new("Account", "PendingRandomIdAssignments")
+            }
+            Key::AccountPendingNewAccounts => KeyName::new("Account", "PendingNewAccounts"),
+            Key::SchedulerAgenda => KeyName::new("Scheduler", "Agenda"),
+            Key::SchedulerIncompleteSince => KeyName::new("Scheduler", "IncompleteSince"),
+            Key::SchedulerLookup => KeyName::new("Scheduler", "Lookup"),
+            Key::BabeUnderConstruction => KeyName::new("Babe", "UnderConstruction"),
+            Key::BalancesAccount => KeyName::new("Balances", "Account"),
+            Key::BalancesLocks => KeyName::new("Balances", "Locks"),
+            Key::BalancesReserves => KeyName::new("Balances", "Reserves"),
+            Key::BalancesStorageVersion => KeyName::new("Balances", "StorageVersion"),
+            Key::BalancesTotalIssuance => KeyName::new("Balances", "TotalIssuance"),
+            Key::OneshotAccountOneshotAccounts => KeyName::new("OneshotAccount", "OneshotAccounts"),
+            Key::AuthorityMembersAccountIdOf => KeyName::new("AuthorityMembers", "AccountIdOf"),
+            Key::AuthorityMembersMembers => KeyName::new("AuthorityMembers", "Members"),
+            Key::AuthorityMembersMembersExpireOn => {
+                KeyName::new("AuthorityMembersMembers", "ExpireOn")
+            }
+            Key::AuthorityMembersMustRotateKeysBefore => {
+                KeyName::new("AuthorityMembers", "MustRotateKeysBefore")
+            }
+            Key::OffencesReports => KeyName::new("Offences", "Reports"),
+            Key::OffencesConcurrentReportsIndex => {
+                KeyName::new("Offences", "ConcurrentReportsIndex")
+            }
+            Key::GrandpaCurrentSetId => KeyName::new("Grandpa", "CurrentSetId"),
+            Key::GrandpaSetIdSession => KeyName::new("Grandpa", "SetIdSession"),
+            Key::GrandpaNextForced => KeyName::new("Grandpa", "NextForced"),
+            Key::GrandpaPendingChange => KeyName::new("Grandpa", "PendingChange"),
+            Key::GrandpaStalled => KeyName::new("Grandpa", "Stalled"),
+            Key::GrandpaState => KeyName::new("Grandpa", "State"),
+            Key::ImOnlineReceivedHeartbeats => KeyName::new("ImOnline", "ReceivedHeartbeats"),
+            Key::ImOnlineAuthoredBlocks => KeyName::new("ImOnline", "AuthoredBlocks"),
+            Key::PreimageStatusFor => KeyName::new("Preimage", "StatusFor"),
+            Key::PreimagePreimageFor => KeyName::new("Preimage", "PreimageFor"),
+            Key::TechnicalCommitteeProposalOf => KeyName::new("TechnicalCommittee", "ProposalOf"),
+            Key::TechnicalCommitteeVoting => KeyName::new("TechnicalCommittee", "Voting"),
+            Key::TechnicalCommitteeProposals => KeyName::new("TechnicalCommittee", "Proposals"),
+            Key::TechnicalCommitteeMembers => KeyName::new("TechnicalCommittee", "Members"),
+            Key::TechnicalCommitteePrime => KeyName::new("TechnicalCommittee", "Prime"),
+            Key::TechnicalCommitteeProposalCount => {
+                KeyName::new("TechnicalCommittee", "ProposalCount")
+            }
+            Key::IdentityIdentityIndexOf => KeyName::new("Identity", "IdentityIndexOf"),
+            Key::IdentityIdentitiesRemovableOn => KeyName::new("Identity", "IdentitiesRemovableOn"),
+            Key::MembershipMembership => KeyName::new("Membership", "Membership"),
+            Key::MembershipMembershipsExpireOn => KeyName::new("Membership", "MembershipsExpireOn"),
+            Key::MembershipPendingMembership => KeyName::new("Membership", "PendingMembership"),
+            Key::MembershipPendingMembershipsExpireOn => {
+                KeyName::new("Membership", "PendingMembershipsExpireOn")
+            }
+            Key::CertStorageIdtyCertMeta => KeyName::new("Cert", "StorageIdtyCertMeta"),
+            Key::CertCertsByReceiver => KeyName::new("Cert", "CertsByReceiver"),
+            Key::CertStorageCertsRemovableOn => KeyName::new("Cert", "StorageCertsRemovableOn"),
+            Key::SmithMembershipMembership => KeyName::new("SmithMembership", "Membership"),
+            Key::SmithMembershipMembershipsExpireOn => {
+                KeyName::new("SmithMembership", "MembershipsExpireOn")
+            }
+            Key::SmithMembershipPendingMembership => {
+                KeyName::new("SmithMembership", "PendingMembership")
+            }
+            Key::SmithMembershipPendingMembershipsExpireOn => {
+                KeyName::new("SmithMembership", "PendingMembershipsExpireOn")
+            }
+            Key::SmithCertStorageIdtyCertMeta => KeyName::new("SmithCert", "StorageIdtyCertMeta"),
+            Key::SmithCertCertsByReceiver => KeyName::new("SmithCertCert", "sByReceiver"),
+            Key::SmithCertStorageCertsRemovableOn => {
+                KeyName::new("SmithCert", "StorageCertsRemovableOn")
+            }
+            Key::AtomicSwapPendingSwaps => KeyName::new("AtomicSwap", "PendingSwaps"),
+            Key::MultisigMultisigs => KeyName::new("Multisig", "Multisigs"),
+            Key::ProvideRandomnessRequestsReadyAtEpoch => {
+                KeyName::new("ProvideRandomness", "RequestsReadyAtEpoch")
+            }
+            Key::ProvideRandomnessRequestsIds => KeyName::new("ProvideRandomness", "RequestsIds"),
+            Key::ProxyProxies => KeyName::new("Proxy", "Proxies"),
+            Key::ProxyAnnouncements => KeyName::new("Proxy", "Announcements"),
+            Key::TreasuryProposals => KeyName::new("Treasury", "Proposals"),
+            Key::TreasuryProposalCount => KeyName::new("Treasury", "ProposalCount"),
+            Key::TreasuryApprovals => KeyName::new("Treasury", "Approvals"),
+            Key::TimestampDidUpdate => KeyName::new("Timestamp", "DidUpdate"),
+            Key::TimestampNow => KeyName::new("Timestamp", "Now"),
+        }
+    }
+
+    pub fn to_value<T>(&self) -> Option<Box<dyn Debug>>
+    where
+        T: frame_system::Config,
+        T: pallet_babe::Config,
+        T: pallet_im_online::Config,
+        T: pallet_universal_dividend::Config,
+        T: pallet_authorship::Config,
+        T: pallet_duniter_test_parameters::Config,
+        T: pallet_authority_members::Config,
+        T: pallet_session::Config,
+        T: pallet_balances::Config,
+        T: pallet_provide_randomness::Config,
+        T: pallet_treasury::Config,
+        T: pallet_scheduler::Config,
+    {
+        match self {
+            // Maps
+            Key::SystemNumber => {
+                // Box::new(frame_system::Number::<T>::get())
+                self.read_storage::<<T as frame_system::Config>::BlockNumber>()
+            }
+            Key::SystemParentHash => {
+                // Box::new(frame_system::ParentHash::<T>::get())
+                self.read_storage::<<T as frame_system::Config>::Hash>()
+            }
+            Key::SystemLastRuntimeUpgrade => {
+                Some(Box::new(frame_system::LastRuntimeUpgrade::<T>::get()))
+            }
+            Key::SystemUpgradedToU32RefCount => {
+                // Box::new(frame_system::UpgradedToU32RefCount::<T>::get())
+                self.read_storage::<bool>()
+            }
+            Key::SystemUpgradedToTripleRefCount => {
+                // Box::new(frame_system::UpgradedToTripleRefCount::<T>::get())
+                self.read_storage::<bool>()
+            }
+            Key::SystemExtrinsicData => None,
+            Key::SystemEventTopics => None,
+            Key::SystemAccount => None,
+            Key::SystemBlockHash => None,
+            Key::SystemAllExtrinsicsLen => {
+                // Box::new(frame_system::AllExtrinsicsLen::<T>::get())
+                self.read_storage::<u32>()
+            }
+            Key::SystemExtrinsicCount => {
+                // Box::new(frame_system::ExtrinsicCount::<T>::get())
+                self.read_storage::<u32>()
+            }
+            Key::SystemBlockWeight => {
+                // Box::new(frame_system::BlockWeight::<T>::get())
+                self.read_storage::<ConsumedWeight>()
+            }
+            Key::SystemDigest => {
+                // Box::new(frame_system::Digest::<T>::get())
+                self.read_storage::<generic::Digest>()
+            }
+            Key::SystemEvents => {
+                // Box::new(frame_system::Events::<T>::get())
+                self.read_storage::<Vec<
+                    Box<
+                        EventRecord<
+                            <T as frame_system::Config>::RuntimeEvent,
+                            <T as frame_system::Config>::Hash,
+                        >,
+                    >,
+                >>()
+            }
+            Key::SystemEventCount => {
+                // Box::new(frame_system::EventCount::<T>::get())
+                self.read_storage::<u32>()
+            }
+            Key::SystemExecutionPhase => {
+                // Box::new(frame_system::ExecutionPhase::<T>::get())
+                self.read_storage::<Phase>()
+            }
+            Key::SudoKey => {
+                // Box::new(pallet_sudo::Key::<T>::get())
+                self.read_storage::<<T as frame_system::Config>::AccountId>()
+            }
+            Key::UniversalDividendCurrentUd => {
+                Some(Box::new(pallet_universal_dividend::CurrentUd::<T>::get()))
+            }
+            Key::UniversalDividendCurrentUdIndex => Some(Box::new(
+                pallet_universal_dividend::CurrentUdIndex::<T>::get(),
+            )),
+            Key::UniversalDividendMonetaryMass => {
+                Some(Box::new(pallet_universal_dividend::MonetaryMass::<T>::get()))
+            }
+            Key::UniversalDividendNextReeval => {
+                Some(Box::new(pallet_universal_dividend::NextReeval::<T>::get()))
+            }
+            Key::UniversalDividendPastReevals => {
+                Some(Box::new(pallet_universal_dividend::PastReevals::<T>::get()))
+            }
+            Key::IdentityCounterForIdentities => self.read_storage::<u32>(),
+            Key::IdentityNextIdtyIndex => {
+                // Box::new(pallet_identity::NextIdtyIndex::<T>::get())
+                self.read_storage::<u32>()
+            }
+            Key::IdentityIdentitiesNames => None,
+            Key::IdentityIdentities => None,
+            Key::MembershipCounterForMembership => self.read_storage::<u32>(),
+            Key::SmithMembershipCounterForMembership => self.read_storage::<u32>(),
+            Key::ProvideRandomnessNexEpochHookIn => {
+                // Box::new(pallet_provide_randomness::NexEpochHookIn::<T>::get())
+                self.read_storage::<u8>()
+            }
+            Key::ProvideRandomnessCounterForRequestsIds => self.read_storage::<u32>(),
+            Key::ProvideRandomnessRequestIdProvider => {
+                // Box::new(pallet_provide_randomness::RequestIdProvider::<T>::get())
+                self.read_storage::<RequestId>()
+            }
+            Key::ProvideRandomnessRequestsReadyAtNextBlock => Some(Box::new(
+                pallet_provide_randomness::RequestsReadyAtNextBlock::<T>::get(),
+            )),
+            Key::TransactionPaymentNextFeeMultiplier => {
+                Some(Box::new(pallet_transaction_payment::NextFeeMultiplier::<
+                    Runtime,
+                >::get()))
+            }
+            Key::TransactionPaymentStorageVersion => self.read_storage::<Releases>(),
+            Key::AuthorshipAuthor => {
+                // Box::new(pallet_authorship::Author::<T>::get())
+                self.read_storage::<Option<PreDigest>>()
+            }
+            Key::AuthorshipUncles => {
+                // Box::new(pallet_authorship::Uncles::<T>::get())
+                self.read_storage::<BoundedVec<
+                    UncleEntryItem<
+                        <T as frame_system::Config>::BlockNumber,
+                        <T as frame_system::Config>::Hash,
+                        <T as frame_system::Config>::AccountId,
+                    >,
+                    MaxUncleEntryItems<T>,
+                >>()
+            }
+            Key::AuthorshipDidSetUncles => {
+                // Box::new(pallet_authorship::DidSetUncles::<T>::get())
+                self.read_storage::<bool>()
+            }
+            Key::BabeInitialized => {
+                // Box::new(pallet_babe::Initialized::<T>::get())
+                self.read_storage::<Option<PreDigest>>()
+            }
+            Key::BabeAuthorities => Some(Box::new(pallet_babe::Authorities::<T>::get())),
+            Key::BabeNextAuthorities => {
+                // Box::new(pallet_babe::NextAuthorities::<T>::get())
+                self.read_storage::<WeakBoundedVec<
+                    (AuthorityId, BabeAuthorityWeight),
+                    <T as pallet_babe::Config>::MaxAuthorities,
+                >>()
+            }
+            Key::BabeAuthorVrfRandomness => {
+                // Box::new(pallet_babe::AuthorVrfRandomness::<T>::get())
+                self.read_storage::<Option<schnorrkel::Randomness>>()
+            }
+            Key::BabeCurrentSlot => Some(Box::new(pallet_babe::CurrentSlot::<T>::get())),
+            Key::BabeEpochConfig => {
+                // Box::new(pallet_babe::EpochConfig::<T>::get())
+                self.read_storage::<BabeEpochConfiguration>()
+            }
+            Key::BabeEpochIndex => Some(Box::new(pallet_babe::EpochIndex::<T>::get())),
+            Key::BabeEpochStart => {
+                // Box::new(pallet_babe::EpochStart::<T>::get())
+                self.read_storage::<(
+                    <T as frame_system::Config>::BlockNumber,
+                    <T as frame_system::Config>::BlockNumber,
+                )>()
+            }
+            Key::BabeGenesisSlot => Some(Box::new(pallet_babe::GenesisSlot::<T>::get())),
+            Key::BabeLateness => {
+                // Box::new(pallet_babe::Lateness::<T>::get())
+                self.read_storage::<<T as frame_system::Config>::BlockNumber>()
+            }
+            Key::BabeNextEpochConfig => {
+                // Box::new(pallet_babe::NextEpochConfig::<T>::get())
+                self.read_storage::<BabeEpochConfiguration>()
+            }
+            Key::BabeNextRandomness => {
+                // Box::new(pallet_babe::NextRandomness::<T>::get())
+                self.read_storage::<schnorrkel::Randomness>()
+            }
+            Key::BabePendingEpochConfigChange => {
+                // Box::new(pallet_babe::PendingEpochConfigChange::<T>::get())
+                self.read_storage::<NextConfigDescriptor>()
+            }
+            Key::BabeRandomness => Some(Box::new(pallet_babe::Randomness::<T>::get())),
+            Key::BabeSegmentIndex => {
+                // Box::new(pallet_babe::SegmentIndex::<T>::get())
+                self.read_storage::<u32>()
+            }
+            Key::ParametersParametersStorage => Some(Box::new(
+                pallet_duniter_test_parameters::ParametersStorage::<T>::get(),
+            )),
+            Key::AuthorityMembersAuthoritiesCounter => {
+                Some(Box::new(pallet_authority_members::AuthoritiesCounter::<
+                    Runtime,
+                >::get()))
+            }
+            Key::AuthorityMembersOnlineAuthorities => {
+                Some(Box::new(pallet_authority_members::OnlineAuthorities::<
+                    Runtime,
+                >::get()))
+            }
+            Key::AuthorityMembersOutgoingAuthorities => {
+                Some(Box::new(pallet_authority_members::OutgoingAuthorities::<
+                    Runtime,
+                >::get()))
+            }
+            Key::AuthorityMembersIncomingAuthorities => {
+                Some(Box::new(pallet_authority_members::IncomingAuthorities::<
+                    Runtime,
+                >::get()))
+            }
+            Key::AuthorityMembersBlackList => {
+                Some(Box::new(pallet_authority_members::BlackList::<T>::get()))
+            }
+            Key::SessionCurrentIndex => Some(Box::new(pallet_session::CurrentIndex::<T>::get())),
+            Key::SessionDisabledValidators => Some(Box::new(pallet_session::DisabledValidators::<
+                Runtime,
+            >::get())),
+            Key::SessionQueuedChanged => Some(Box::new(pallet_session::QueuedChanged::<T>::get())),
+            Key::SessionKeyOwner => None,
+            Key::SessionNextKeys => None,
+            Key::SessionQueuedKeys => Some(Box::new(pallet_session::QueuedKeys::<T>::get())),
+            Key::SessionValidators => Some(Box::new(pallet_session::Validators::<T>::get())),
+            Key::ImOnlineKeys => {
+                // Box::new(pallet_im_online::Keys::<T>::get())
+                self.read_storage::<WeakBoundedVec<
+                    <T as pallet_im_online::Config>::AuthorityId,
+                    <T as pallet_im_online::Config>::MaxKeys,
+                >>()
+            }
+            Key::ImOnlineHeartbeatAfter => {
+                // Box::new(pallet_im_online::HeartbeatAfter::<T>::get())
+                self.read_storage::<<T as frame_system::Config>::BlockNumber>()
+            }
+            Key::AccountPendingRandomIdAssignments => None,
+            Key::AccountPendingNewAccounts => None,
+            Key::SchedulerAgenda => None,
+            Key::SchedulerIncompleteSince => {
+                Some(Box::new(pallet_scheduler::IncompleteSince::<T>::get()))
+            }
+            Key::SchedulerLookup => None,
+            Key::BabeUnderConstruction => None,
+            Key::BalancesAccount => None,
+            Key::BalancesLocks => None,
+            Key::BalancesReserves => None,
+            Key::BalancesStorageVersion => {
+                // Box::new(pallet_balances::StorageVersion::<T>::get())
+                self.read_storage::<Releases>()
+            }
+            Key::BalancesTotalIssuance => {
+                Some(Box::new(pallet_balances::TotalIssuance::<T>::get()))
+            }
+            Key::OneshotAccountOneshotAccounts => None,
+            Key::AuthorityMembersAccountIdOf => None,
+            Key::AuthorityMembersMembers => None,
+            Key::AuthorityMembersMembersExpireOn => None,
+            Key::AuthorityMembersMustRotateKeysBefore => None,
+            Key::OffencesReports => None,
+            Key::OffencesConcurrentReportsIndex => None,
+            Key::GrandpaCurrentSetId => {
+                // Box::new(pallet_grandpa::CurrentSetId::<T>::get())
+                self.read_storage::<SetId>()
+            }
+            Key::GrandpaSetIdSession => None,
+            Key::GrandpaNextForced => {
+                // Box::new(pallet_grandpa::NextForced::<T>::get())
+                self.read_storage::<<T as frame_system::Config>::BlockNumber>()
+            }
+            Key::GrandpaPendingChange => {
+                // Box::new(pallet_grandpa::PendingChange::<T>::get())
+                self.read_storage::<StoredPendingChange<
+                    <T as frame_system::Config>::BlockNumber,
+                    MyConstU32<32>,
+                >>()
+            }
+            Key::GrandpaStalled => {
+                // Box::new(pallet_grandpa::Stalled::<T>::get())
+                self.read_storage::<(
+                    <T as frame_system::Config>::BlockNumber,
+                    <T as frame_system::Config>::BlockNumber,
+                )>()
+            }
+            Key::GrandpaState => {
+                // Box::new(pallet_grandpa::State::<T>::get())
+                self.read_storage::<StoredState<<T as frame_system::Config>::BlockNumber>>()
+            }
+            Key::ImOnlineReceivedHeartbeats => None,
+            Key::ImOnlineAuthoredBlocks => None,
+            Key::PreimageStatusFor => None,
+            Key::PreimagePreimageFor => None,
+            Key::TechnicalCommitteeProposalOf => None,
+            Key::TechnicalCommitteeVoting => None,
+            Key::TechnicalCommitteeProposals => Some(Box::new(pallet_collective::Proposals::<
+                Runtime,
+                Instance2,
+            >::get())),
+            Key::TechnicalCommitteeMembers => Some(Box::new(pallet_collective::Members::<
+                Runtime,
+                Instance2,
+            >::get())),
+            Key::TechnicalCommitteePrime => Some(Box::new(pallet_collective::Prime::<
+                Runtime,
+                Instance2,
+            >::get())),
+            Key::TechnicalCommitteeProposalCount => {
+                Some(Box::new(pallet_collective::ProposalCount::<
+                    Runtime,
+                    Instance2,
+                >::get()))
+            }
+            Key::IdentityIdentityIndexOf => None,
+            Key::IdentityIdentitiesRemovableOn => None,
+            Key::MembershipMembership => None,
+            Key::MembershipMembershipsExpireOn => None,
+            Key::MembershipPendingMembership => None,
+            Key::MembershipPendingMembershipsExpireOn => None,
+            Key::CertStorageIdtyCertMeta => None,
+            Key::CertCertsByReceiver => None,
+            Key::CertStorageCertsRemovableOn => None,
+            Key::SmithMembershipMembership => None,
+            Key::SmithMembershipMembershipsExpireOn => None,
+            Key::SmithMembershipPendingMembership => None,
+            Key::SmithMembershipPendingMembershipsExpireOn => None,
+            Key::SmithCertStorageIdtyCertMeta => None,
+            Key::SmithCertCertsByReceiver => None,
+            Key::SmithCertStorageCertsRemovableOn => None,
+            Key::AtomicSwapPendingSwaps => None,
+            Key::MultisigMultisigs => None,
+            Key::ProvideRandomnessRequestsReadyAtEpoch => None,
+            Key::ProvideRandomnessRequestsIds => None,
+            Key::ProxyProxies => None,
+            Key::ProxyAnnouncements => None,
+            Key::TreasuryProposals => None,
+            Key::TreasuryProposalCount => Some(Box::new(
+                pallet_treasury::Proposals::<T>::iter_keys().count(),
+            )),
+            Key::TreasuryApprovals => Some(Box::new(pallet_treasury::Approvals::<T>::get())),
+            Key::TimestampDidUpdate => {
+                // Box::new(pallet_timestamp::DidUpdate::<T>::iter_keys().count())
+                self.read_storage::<bool>()
+            }
+            Key::TimestampNow => Some(Box::new(pallet_timestamp::Now::<T>::get())),
+        }
+    }
+
+    pub fn to_map_value<T>(&self) -> Option<BTreeMap<Box<String>, Box<dyn Debug>>>
+    where
+        T: frame_system::Config,
+        <T as frame_system::Config>::AccountId: std::hash::Hash,
+        T: pallet_certification::Config<Instance1>,
+        T: pallet_certification::Config<Instance2>,
+        T: pallet_identity::Config,
+        T: pallet_session::Config,
+        T: pallet_scheduler::Config,
+        T: pallet_balances::Config,
+        T: pallet_oneshot_account::Config,
+        T: pallet_authority_members::Config,
+        T: pallet_offences::Config,
+        T: pallet_atomic_swap::Config,
+        T: pallet_treasury::Config,
+        T: pallet_proxy::Config,
+        T: pallet_multisig::Config,
+        T: pallet_im_online::Config,
+        T: pallet_provide_randomness::Config,
+        T: pallet_duniter_account::Config,
+        <T as pallet_identity::Config>::IdtyIndex: std::hash::Hash,
+        <T as pallet_identity::Config>::IdtyData: std::fmt::Debug,
+        <T as pallet_authority_members::Config>::MemberId: std::hash::Hash,
+        <T as pallet_session::Config>::ValidatorId: std::hash::Hash,
+    {
+        let data: Option<BTreeMap<Box<String>, Box<dyn Debug>>> = match self {
+            Key::SystemNumber => None,
+            Key::SystemParentHash => None,
+            Key::SystemLastRuntimeUpgrade => None,
+            Key::SystemUpgradedToU32RefCount => None,
+            Key::SystemUpgradedToTripleRefCount => None,
+            Key::SystemAccount => to_kv(frame_system::Account::<T>::iter().collect()),
+            Key::SystemBlockHash => to_kv(frame_system::BlockHash::<T>::iter().collect()),
+            Key::SystemExtrinsicData => {
+                self.read_map::<u32, Vec<u8>, Twox64Concat>()
+            }
+            Key::SystemEventTopics => self.read_map::<
+                <T as frame_system::Config>::Hash,
+                Vec<(<T as frame_system::Config>::BlockNumber, u32)>,
+                Blake2_128Concat,
+            >(),
+            Key::SystemAllExtrinsicsLen => None,
+            Key::SystemExtrinsicCount => None,
+            Key::SystemBlockWeight => None,
+            Key::SystemDigest => None,
+            Key::SystemEvents => None,
+            Key::SystemEventCount => None,
+            Key::SystemExecutionPhase => None,
+            Key::SudoKey => None,
+            Key::UniversalDividendCurrentUd => None,
+            Key::UniversalDividendCurrentUdIndex => None,
+            Key::UniversalDividendMonetaryMass => None,
+            Key::UniversalDividendNextReeval => None,
+            Key::UniversalDividendPastReevals => None,
+            Key::IdentityCounterForIdentities => None,
+            Key::IdentityNextIdtyIndex => None,
+            Key::IdentityIdentities => {
+                to_kv(pallet_identity::Identities::<T>::iter().collect())
+            }
+            Key::IdentityIdentitiesNames => to_kv(
+                pallet_identity::IdentitiesNames::<T>::iter()
+                    .map(|(k, v)| (String::from_utf8(k.0).unwrap(), v))
+                    .collect(),
+            ),
+            Key::MembershipCounterForMembership => None,
+            Key::SmithMembershipCounterForMembership => None,
+            Key::TransactionPaymentNextFeeMultiplier => None,
+            Key::TransactionPaymentStorageVersion => None,
+            Key::AuthorshipAuthor => None,
+            Key::AuthorshipUncles => None,
+            Key::AuthorshipDidSetUncles => None,
+            Key::BabeInitialized => None,
+            Key::BabeAuthorities => None,
+            Key::BabeNextAuthorities => None,
+            Key::BabeAuthorVrfRandomness => None,
+            Key::BabeCurrentSlot => None,
+            Key::BabeEpochConfig => None,
+            Key::BabeEpochIndex => None,
+            Key::BabeEpochStart => None,
+            Key::BabeGenesisSlot => None,
+            Key::BabeLateness => None,
+            Key::BabeNextEpochConfig => None,
+            Key::BabeNextRandomness => None,
+            Key::BabePendingEpochConfigChange => None,
+            Key::BabeRandomness => None,
+            Key::BabeSegmentIndex => None,
+            Key::ParametersParametersStorage => None,
+            Key::AuthorityMembersAuthoritiesCounter => None,
+            Key::AuthorityMembersOnlineAuthorities => None,
+            Key::AuthorityMembersOutgoingAuthorities => None,
+            Key::AuthorityMembersIncomingAuthorities => None,
+            Key::AuthorityMembersBlackList => None,
+            Key::SessionValidators => None,
+            Key::SessionQueuedKeys => None,
+            Key::SessionCurrentIndex => None,
+            Key::SessionDisabledValidators => None,
+            Key::SessionQueuedChanged => None,
+            Key::SessionKeyOwner => to_kv(pallet_session::KeyOwner::<T>::iter().collect()),
+            Key::SessionNextKeys => to_kv(pallet_session::NextKeys::<T>::iter().collect()),
+            Key::ImOnlineKeys => None,
+            Key::ImOnlineHeartbeatAfter => None,
+            Key::AccountPendingRandomIdAssignments => to_kv(
+                pallet_duniter_account::PendingRandomIdAssignments::<T>::iter().collect(),
+            ),
+            Key::AccountPendingNewAccounts => {
+                to_kv(pallet_duniter_account::PendingNewAccounts::<T>::iter().collect())
+            }
+            Key::SchedulerAgenda => to_kv(pallet_scheduler::Agenda::<T>::iter().collect()),
+            Key::SchedulerIncompleteSince => None,
+            Key::ProvideRandomnessNexEpochHookIn => None,
+            Key::ProvideRandomnessCounterForRequestsIds => None,
+            Key::ProvideRandomnessRequestIdProvider => None,
+            Key::ProvideRandomnessRequestsReadyAtNextBlock => None,
+            Key::ProvideRandomnessRequestsReadyAtEpoch => {
+                to_kv(pallet_provide_randomness::RequestsReadyAtEpoch::<T>::iter().collect())
+            }
+            Key::ProvideRandomnessRequestsIds => {
+                to_kv(pallet_provide_randomness::RequestsIds::<T>::iter().collect())
+            }
+            Key::SchedulerLookup => self.read_map::<
+                TaskName,
+                TaskAddress<<T as frame_system::Config>::BlockNumber>,
+                Twox64Concat,
+            >(),
+            Key::BabeUnderConstruction => self.read_map::<
+                u32,
+                BoundedVec<schnorrkel::Randomness, ConstU32<UNDER_CONSTRUCTION_SEGMENT_LENGTH>>,
+                Twox64Concat,
+            >(),
+            Key::BalancesAccount => to_kv(pallet_balances::Account::<T>::iter().collect()),
+            Key::BalancesLocks => to_kv(pallet_balances::Locks::<T>::iter().collect()),
+            Key::BalancesReserves => to_kv(pallet_balances::Reserves::<T>::iter().collect()),
+            Key::BalancesStorageVersion => None,
+            Key::BalancesTotalIssuance => None,
+            Key::OneshotAccountOneshotAccounts => {
+                to_kv(pallet_oneshot_account::OneshotAccounts::<T>::iter().collect())
+            }
+            Key::AuthorityMembersAccountIdOf => {
+                to_kv(pallet_authority_members::AccountIdOf::<T>::iter().collect())
+            }
+            Key::AuthorityMembersMembers => {
+                to_kv(pallet_authority_members::Members::<T>::iter().collect())
+            }
+            Key::AuthorityMembersMembersExpireOn => {
+                to_kv(pallet_authority_members::MembersExpireOn::<T>::iter().collect())
+            }
+            Key::AuthorityMembersMustRotateKeysBefore => {
+                to_kv(pallet_authority_members::MustRotateKeysBefore::<T>::iter().collect())
+            }
+            Key::OffencesReports => to_kv(pallet_offences::Reports::<T>::iter().collect()),
+            Key::OffencesConcurrentReportsIndex => to_kv(
+                pallet_offences::ConcurrentReportsIndex::<T>::iter()
+                    .map(to_simple_map)
+                    .collect(),
+            ),
+            Key::GrandpaCurrentSetId => None,
+            Key::GrandpaSetIdSession => self.read_map::<SetId, SessionIndex, Twox64Concat>(),
+            Key::GrandpaNextForced => None,
+            Key::GrandpaPendingChange => None,
+            Key::GrandpaStalled => None,
+            Key::GrandpaState => None,
+            Key::ImOnlineReceivedHeartbeats => self.read_double_map::<
+                SessionIndex,
+                AuthIndex,
+                CustomBoundedOpaqueNetworkState<Get32, Get32, Get32>,
+                Twox64Concat,
+                Twox64Concat,
+            >(),
+            Key::ImOnlineAuthoredBlocks => self.read_double_map::<
+                SessionIndex,
+                ValidatorId<T>,
+                u32,
+                Twox64Concat,
+                Twox64Concat,
+            >(),
+            Key::PreimageStatusFor => self.read_map::<
+                <T as frame_system::Config>::Hash,
+                RequestStatus<<T as frame_system::Config>::AccountId, BalanceOf<Runtime>>,
+                Identity,
+            >(),
+            Key::PreimagePreimageFor => self.read_map::<
+                (<T as frame_system::Config>::Hash, u32),
+                BoundedVec<u8, ConstU32<MAX_SIZE>>,
+                Identity,
+            >(),
+            Key::TechnicalCommitteeProposalOf => {
+                to_kv(pallet_collective::ProposalOf::<Runtime, Instance2>::iter().collect())
+            }
+            Key::TechnicalCommitteeVoting => {
+                to_kv(pallet_collective::Voting::<Runtime, Instance2>::iter().collect())
+            }
+            Key::TechnicalCommitteeProposals => None,
+            Key::TechnicalCommitteeMembers => None,
+            Key::TechnicalCommitteePrime => None,
+            Key::TechnicalCommitteeProposalCount => None,
+            Key::IdentityIdentityIndexOf => {
+                to_kv(pallet_identity::IdentityIndexOf::<T>::iter().collect())
+            }
+            Key::IdentityIdentitiesRemovableOn => {
+                to_kv(pallet_identity::IdentitiesRemovableOn::<T>::iter().collect())
+            }
+            Key::MembershipMembership => {
+                to_kv(pallet_membership::Membership::<Runtime, Instance1>::iter().collect())
+            }
+            Key::MembershipMembershipsExpireOn => to_kv(
+                pallet_membership::MembershipsExpireOn::<Runtime, Instance1>::iter().collect(),
+            ),
+            Key::MembershipPendingMembership => {
+                to_kv(pallet_membership::PendingMembership::<Runtime, Instance1>::iter().collect())
+            }
+            Key::MembershipPendingMembershipsExpireOn => to_kv(
+                pallet_membership::PendingMembershipsExpireOn::<Runtime, Instance1>::iter()
+                    .collect(),
+            ),
+            Key::CertStorageIdtyCertMeta => {
+                self.read_map::<
+                    <T as pallet_certification::Config<Instance1>>::IdtyIndex,
+                    IdtyCertMeta<<T as frame_system::Config>::BlockNumber>,
+                    Twox64Concat,
+                >()
+            }
+            Key::CertCertsByReceiver => {
+                to_kv(pallet_certification::CertsByReceiver::<Runtime, Instance1>::iter().collect())
+            }
+            Key::CertStorageCertsRemovableOn => to_kv(
+                pallet_certification::StorageCertsRemovableOn::<Runtime, Instance1>::iter()
+                    .collect(),
+            ),
+            Key::SmithMembershipMembership => {
+                to_kv(pallet_membership::Membership::<Runtime, Instance2>::iter().collect())
+            }
+            Key::SmithMembershipMembershipsExpireOn => to_kv(
+                pallet_membership::MembershipsExpireOn::<Runtime, Instance2>::iter().collect(),
+            ),
+            Key::SmithMembershipPendingMembership => {
+                to_kv(pallet_membership::PendingMembership::<Runtime, Instance2>::iter().collect())
+            }
+            Key::SmithMembershipPendingMembershipsExpireOn => to_kv(
+                pallet_membership::PendingMembershipsExpireOn::<Runtime, Instance2>::iter()
+                    .collect(),
+            ),
+            Key::SmithCertStorageIdtyCertMeta => {
+                self.read_map::<
+                    <T as pallet_certification::Config<Instance2>>::IdtyIndex,
+                    IdtyCertMeta<<T as frame_system::Config>::BlockNumber>,
+                    Twox64Concat,
+                >()
+            }
+            Key::SmithCertCertsByReceiver => {
+                to_kv(pallet_certification::CertsByReceiver::<Runtime, Instance2>::iter().collect())
+            }
+            Key::SmithCertStorageCertsRemovableOn => to_kv(
+                pallet_certification::StorageCertsRemovableOn::<Runtime, Instance2>::iter()
+                    .collect(),
+            ),
+            Key::AtomicSwapPendingSwaps => to_kv(
+                pallet_atomic_swap::PendingSwaps::<T>::iter()
+                    .map(to_simple_map)
+                    .collect(),
+            ),
+            Key::MultisigMultisigs => to_kv(
+                pallet_multisig::Multisigs::<T>::iter()
+                    .map(to_simple_map)
+                    .collect(),
+            ),
+            Key::ProxyProxies => to_kv(pallet_proxy::Proxies::<T>::iter().collect()),
+            Key::ProxyAnnouncements => {
+                to_kv(pallet_proxy::Announcements::<T>::iter().collect())
+            }
+            Key::TreasuryProposals => {
+                to_kv(pallet_treasury::Proposals::<T>::iter().collect())
+            }
+            Key::TreasuryProposalCount => None,
+            Key::TreasuryApprovals => None,
+            Key::TimestampDidUpdate => None,
+            Key::TimestampNow => None,
+        };
+        if let Some(c) = data {
+            return Some(c);
+        }
+        None
+    }
+
+    // TODO: remove Box
+    fn read_storage<T: Decode + Debug + 'static>(&self) -> Option<Box<dyn Debug>> {
+        let k = self.name();
+        let key = frame_support::storage::storage_prefix(k.pallet.as_bytes(), k.storage.as_bytes());
+        if let Some(v) = sp_io::storage::get(key.as_slice()) {
+            let v = T::decode(&mut &v[..]);
+            if let Ok(v) = v {
+                return Some(Box::new(Some(v)));
+            } else {
+                eprintln!("Error for {}.{}", k.pallet, k.storage);
+                v.unwrap();
+            }
+        }
+        Some(Box::new(None::<T>))
+    }
+
+    fn read_map<K, V, H>(&self) -> Option<BTreeMap<Box<String>, Box<dyn Debug>>>
+    where
+        K: FullCodec + Debug + 'static,
+        V: FullCodec + Debug + 'static,
+        H: StorageHasher + ReversibleStorageHasher,
+    {
+        let key_name = self.name();
+        let prefix: Vec<u8> = frame_support::storage::storage_prefix(
+            key_name.pallet.as_bytes(),
+            key_name.storage.as_bytes(),
+        )
+        .into();
+        let iterator: PrefixIterator<(Result<K, codec::Error>, Result<V, codec::Error>), ()> =
+            PrefixIterator::new(
+                prefix.clone(),
+                prefix,
+                |raw_key_without_prefix, mut raw_value| {
+                    let mut key_material = H::reverse(raw_key_without_prefix);
+                    let k: Result<K, codec::Error> = codec::Decode::decode(&mut key_material);
+                    let v: Result<V, codec::Error> = codec::Decode::decode(&mut raw_value);
+                    Ok((k, v))
+                },
+            );
+        let mut kvs: BTreeMap<Box<String>, Box<dyn Debug>> = btreemap![];
+        for (k, v) in iterator {
+            kvs.insert(Box::new(format!("{:?}", k.unwrap())), Box::new(v.unwrap()));
+        }
+        Some(kvs)
+    }
+
+    fn read_double_map<K1, K2, V, H1, H2>(&self) -> Option<BTreeMap<Box<String>, Box<dyn Debug>>>
+    where
+        K1: FullCodec + Debug + 'static,
+        K2: FullCodec + Debug + 'static,
+        V: FullCodec + Debug + 'static,
+        H1: StorageHasher + ReversibleStorageHasher,
+        H2: StorageHasher + ReversibleStorageHasher,
+    {
+        let key_name = self.name();
+        let prefix: Vec<u8> = frame_support::storage::storage_prefix(
+            key_name.pallet.as_bytes(),
+            key_name.storage.as_bytes(),
+        )
+        .into();
+        let iterator: PrefixIterator<(K1, K2, V)> = PrefixIterator::new(
+            prefix.clone(),
+            prefix,
+            |raw_key_without_prefix, mut raw_value| {
+                let mut k1_k2_material = H1::reverse(raw_key_without_prefix);
+                let k1 = K1::decode(&mut k1_k2_material).unwrap();
+                let mut k2_material = H2::reverse(k1_k2_material);
+                let k2 = K2::decode(&mut k2_material).unwrap();
+                let v = V::decode(&mut raw_value).unwrap();
+                Ok((k1, k2, v))
+            },
+        );
+        let mut kvs: BTreeMap<Box<String>, Box<dyn Debug>> = btreemap![];
+        for (k1, k2, v) in iterator {
+            kvs.insert(Box::new(format!("{:?} => {:?}", k1, k2)), Box::new(v));
+        }
+        Some(kvs)
+    }
+}
+
+fn to_simple_map<K1, K2, V>((k1, k2, v): (K1, K2, V)) -> (String, V)
+where
+    K1: Debug + 'static,
+    K2: Debug + 'static,
+    V: Debug + 'static,
+{
+    (format!("{:?} => {:?}", k1, k2), v)
+}
+
+fn to_kv<K: Debug + 'static, V: Debug + 'static>(
+    hm: HashMap<K, V>,
+) -> Option<BTreeMap<Box<String>, Box<dyn Debug>>> {
+    let mut res: BTreeMap<Box<String>, Box<dyn Debug>> = btreemap! {};
+    hm.into_iter().for_each(|(k, v)| {
+        res.insert(Box::new(format!("{:?}", k)), Box::new(v));
+    });
+    Some(res)
+}
+
+impl TryFrom<String> for Key {
+    type Error = String;
+    fn try_from(value: String) -> Result<Self, Self::Error> {
+        Key::from_str(value.clone().replace(".", "").as_str()).or(Err(format!(
+            "Storage key '{}' could not be parsed",
+            value.clone()
+        )
+        .to_string()))
+    }
+}
+
+fn get_prefix(t: &Checker) -> [u8; 32] {
+    frame_support::storage::storage_prefix(t.pallet_name().as_bytes(), t.storage_name().as_bytes())
+}
+
+/// Structured Key name.
+/// Composed of two fields which are the same used by Substrate #[pallet::storage] macro as described
+/// in [Substrate doc](https://docs.substrate.io/learn/state-transitions-and-storage/#storage-value-keys):
+/// - a pallet name
+/// - a storage name
+#[derive(Eq, Hash, PartialEq, Clone, Debug)]
+pub(crate) struct KeyName {
+    pallet: String,
+    storage: String,
+}
+
+/// Construtor
+impl KeyName {
+    fn new(pallet: &str, storage: &str) -> KeyName {
+        KeyName {
+            pallet: pallet.to_string(),
+            storage: storage.to_string(),
+        }
+    }
+}
diff --git a/client/dump/src/lib.rs b/client/dump/src/lib.rs
new file mode 100644
index 000000000..daf4ae8ef
--- /dev/null
+++ b/client/dump/src/lib.rs
@@ -0,0 +1,25 @@
+pub mod assert;
+pub mod checker;
+pub mod iterative;
+pub mod key;
+mod private;
+pub mod runtime;
+
+#[cfg(test)]
+mod tests {
+    use super::*;
+    use crate::iterative::StorageChecker;
+    use sp_io::TestExternalities;
+
+    #[test]
+    fn simple_test() {
+        let mut externalities = TestExternalities::default();
+        let storage_checker = StorageChecker::<gdev_runtime::Runtime>::new_default(|| {
+            gdev_runtime::Runtime::metadata().1
+        });
+        externalities.execute_with(|| {
+            storage_checker.test_storage(128, "simple_test.expected.txt");
+        });
+        storage_checker.test_well_known_keys(&mut externalities);
+    }
+}
diff --git a/client/dump/src/private.rs b/client/dump/src/private.rs
new file mode 100644
index 000000000..d16ae56ff
--- /dev/null
+++ b/client/dump/src/private.rs
@@ -0,0 +1,131 @@
+use frame_support::traits::Currency;
+use sp_arithmetic::traits::UniqueSaturatedInto;
+use sp_core::bounded::WeakBoundedVec;
+use sp_core::{Get, TypedGet};
+
+/// Stuff required by golden testing but is private in the pallets.
+/// So it had to be copied here.
+
+pub type SessionIndex = u32;
+pub const UNDER_CONSTRUCTION_SEGMENT_LENGTH: u32 = 256;
+type ReportIdOf<T> = <T as frame_system::Config>::Hash;
+/// A binary blob which represents a SCALE codec-encoded `O::TimeSlot`.
+type OpaqueTimeSlot = Vec<u8>;
+pub type BalanceOf<T> = <<T as pallet_preimage::Config>::Currency as Currency<
+    <T as frame_system::Config>::AccountId,
+>>::Balance;
+/// Maximum size of preimage we can store is 4mb.
+pub const MAX_SIZE: u32 = 4 * 1024 * 1024;
+// #[derive(Debug)]
+// type Custom<P, M, A> = BoundedOpaqueNetworkState<P, M, A>;
+
+// impl Debug for BoundedOpaqueNetworkState<P, M, A> {
+//     fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
+//         todo!()
+//     }
+// }
+
+#[doc = "Const getter for a basic type."]
+#[derive(frame_support::RuntimeDebug, PartialEq, Clone)]
+pub struct MyConstU32<const T: u32>;
+impl<const T: u32> Get<u32> for MyConstU32<T> {
+    fn get() -> u32 {
+        T
+    }
+}
+impl<const T: u32> Get<Option<u32>> for MyConstU32<T> {
+    fn get() -> Option<u32> {
+        Some(T)
+    }
+}
+impl<const T: u32> TypedGet for MyConstU32<T> {
+    type Type = u32;
+    fn get() -> u32 {
+        T
+    }
+}
+pub type Get32 = MyConstU32<100>;
+
+#[derive(Debug, codec::Encode, codec::Decode, PartialEq, Clone)]
+pub struct CustomBoundedOpaqueNetworkState<
+    PeerIdEncodingLimit,
+    MultiAddrEncodingLimit,
+    AddressesLimit,
+> where
+    PeerIdEncodingLimit: Get<u32>,
+    MultiAddrEncodingLimit: Get<u32>,
+    AddressesLimit: Get<u32>,
+{
+    /// PeerId of the local node in SCALE encoded.
+    pub peer_id: WeakBoundedVec<u8, PeerIdEncodingLimit>,
+    /// List of addresses the node knows it can be reached as.
+    pub external_addresses:
+        WeakBoundedVec<WeakBoundedVec<u8, MultiAddrEncodingLimit>, AddressesLimit>,
+}
+
+#[derive(codec::Encode, codec::Decode, Clone, Copy, PartialEq, Eq, Debug)]
+pub enum Releases {
+    /// Original version of the pallet.
+    V1Ancient,
+    /// One that bumps the usage to FixedU128 from FixedI128.
+    V2,
+}
+
+#[derive(codec::Encode, codec::Decode, Debug)]
+pub struct StoredPendingChange<N, Limit: sp_core::Get<u32>> {
+    /// The block number this was scheduled at.
+    pub scheduled_at: N,
+    /// The delay in blocks until it will be applied.
+    pub delay: N,
+    /// The next authority set, weakly bounded in size by `Limit`.
+    pub next_authorities: pallet_grandpa::BoundedAuthorityList<Limit>,
+    /// If defined it means the change was forced and the given block number
+    /// indicates the median last finalized block when the change was signaled.
+    pub forced: Option<N>,
+}
+
+#[derive(codec::Decode, codec::Encode, Debug, PartialEq)]
+pub enum StoredState<N> {
+    /// The current authority set is live, and GRANDPA is enabled.
+    Live,
+    /// There is a pending pause event which will be enacted at the given block
+    /// height.
+    PendingPause {
+        /// Block at which the intention to pause was scheduled.
+        scheduled_at: N,
+        /// Number of blocks after which the change will be enacted.
+        delay: N,
+    },
+    /// The current GRANDPA authority set is paused.
+    Paused,
+    /// There is a pending resume event which will be enacted at the given block
+    /// height.
+    PendingResume {
+        /// Block at which the intention to resume was scheduled.
+        scheduled_at: N,
+        /// Number of blocks after which the change will be enacted.
+        delay: N,
+    },
+}
+
+#[derive(codec::Decode, codec::Encode, Debug, PartialEq)]
+pub enum UncleEntryItem<BlockNumber, Hash, Author> {
+    InclusionHeight(BlockNumber),
+    Uncle(Hash, Option<Author>),
+}
+
+const MAX_UNCLES: usize = 10;
+pub struct MaxUncleEntryItems<T>(core::marker::PhantomData<T>);
+impl<T: pallet_authorship::Config> Get<u32> for MaxUncleEntryItems<T> {
+    fn get() -> u32 {
+        // There can be at most `MAX_UNCLES` of `UncleEntryItem::Uncle` and
+        // one `UncleEntryItem::InclusionHeight` per one `UncleGenerations`,
+        // so this gives us `MAX_UNCLES + 1` entries per one generation.
+        //
+        // There can be one extra generation worth of uncles (e.g. even
+        // if `UncleGenerations` is zero the pallet will still hold
+        // one generation worth of uncles).
+        let max_generations: u32 = T::UncleGenerations::get().unique_saturated_into();
+        (MAX_UNCLES as u32 + 1) * (max_generations + 1)
+    }
+}
diff --git a/client/dump/src/runtime.rs b/client/dump/src/runtime.rs
new file mode 100644
index 000000000..33628a0f6
--- /dev/null
+++ b/client/dump/src/runtime.rs
@@ -0,0 +1,37 @@
+use frame_support::metadata::{RuntimeMetadata, StorageEntryMetadata};
+use scale_info::form::PortableForm;
+
+pub fn extract_storage_entries_normalized(
+    meta: &RuntimeMetadata,
+) -> Result<Vec<StorageEntry>, String> {
+    if let RuntimeMetadata::V14(meta) = meta {
+        assert_eq!(35, meta.pallets.len());
+        Ok(meta
+            .pallets
+            .iter()
+            .filter(|p| p.storage.is_some())
+            .flat_map(|p| {
+                p.storage
+                    .clone()
+                    .unwrap()
+                    .entries
+                    .iter()
+                    .map(|e| (p.name.clone(), e.clone()))
+                    .collect::<Vec<_>>()
+            })
+            .map(|(pallet_name, metadata)| StorageEntry {
+                pallet_name,
+                storage_name: metadata.name.clone(),
+                metadata,
+            })
+            .collect::<Vec<_>>())
+    } else {
+        Err("Not a V14 RuntimeMetadata".into())
+    }
+}
+
+pub struct StorageEntry {
+    pub pallet_name: String,
+    pub storage_name: String,
+    pub metadata: StorageEntryMetadata<PortableForm>,
+}
diff --git a/client/dump/tests/simple_test.expected.txt b/client/dump/tests/simple_test.expected.txt
new file mode 100644
index 000000000..208f4c2fd
--- /dev/null
+++ b/client/dump/tests/simple_test.expected.txt
@@ -0,0 +1,181 @@
+Account.PendingNewAccounts = [
+]
+Account.PendingRandomIdAssignments = [
+]
+AtomicSwap.PendingSwaps = [
+]
+AuthorityMembers.AccountIdOf = [
+]
+AuthorityMembers.AuthoritiesCounter = 0
+AuthorityMembers.BlackList = []
+AuthorityMembers.IncomingAuthorities = []
+AuthorityMembers.Members = [
+]
+AuthorityMembers.MustRotateKeysBefore = [
+]
+AuthorityMembers.OnlineAuthorities = []
+AuthorityMembers.OutgoingAuthorities = []
+AuthorityMembersMembers.ExpireOn = [
+]
+Authorship.Author = None
+Authorship.DidSetUncles = None
+Authorship.Uncles = None
+Babe.AuthorVrfRandomness = None
+Babe.Authorities = WeakBoundedVec([], 32)
+Babe.CurrentSlot = Slot(0)
+Babe.EpochConfig = None
+Babe.EpochIndex = 0
+Babe.EpochStart = None
+Babe.GenesisSlot = Slot(0)
+Babe.Initialized = None
+Babe.Lateness = None
+Babe.NextAuthorities = None
+Babe.NextEpochConfig = None
+Babe.NextRandomness = None
+Babe.PendingEpochConfigChange = None
+Babe.Randomness = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+Babe.SegmentIndex = None
+Babe.UnderConstruction = [
+]
+Balances.Account = [
+]
+Balances.Locks = [
+]
+Balances.Reserves = [
+]
+Balances.StorageVersion = None
+Balances.TotalIssuance = 0
+Cert.CertsByReceiver = [
+]
+Cert.StorageCertsRemovableOn = [
+]
+Cert.StorageIdtyCertMeta = [
+]
+Grandpa.CurrentSetId = None
+Grandpa.NextForced = None
+Grandpa.PendingChange = None
+Grandpa.SetIdSession = [
+]
+Grandpa.Stalled = None
+Grandpa.State = None
+Identity.CounterForIdentities = None
+Identity.Identities = [
+]
+Identity.IdentitiesNames = [
+]
+Identity.IdentitiesRemovableOn = [
+]
+Identity.IdentityIndexOf = [
+]
+Identity.NextIdtyIndex = None
+ImOnline.AuthoredBlocks = [
+]
+ImOnline.HeartbeatAfter = None
+ImOnline.Keys = None
+ImOnline.ReceivedHeartbeats = [
+]
+Membership.CounterForMembership = None
+Membership.Membership = [
+]
+Membership.MembershipsExpireOn = [
+]
+Membership.PendingMembership = [
+]
+Membership.PendingMembershipsExpireOn = [
+]
+Multisig.Multisigs = [
+]
+Offences.ConcurrentReportsIndex = [
+]
+Offences.Reports = [
+]
+OneshotAccount.OneshotAccounts = [
+]
+Parameters.ParametersStorage = Parameters { babe_epoch_duration: 0, cert_period: 0, cert_max_by_issuer: 0, cert_min_received_cert_to_issue_cert: 0, cert_validity_period: 0, idty_confirm_period: 0, idty_creation_period: 0, membership_period: 0, pending_membership_period: 0, ud_creation_period: 0, ud_reeval_period: 0, smith_cert_period: 0, smith_cert_max_by_issuer: 0, smith_cert_min_received_cert_to_issue_cert: 0, smith_cert_validity_period: 0, smith_membership_period: 0, smith_pending_membership_period: 0, smith_wot_first_cert_issuable_on: 0, smith_wot_min_cert_for_membership: 0, wot_first_cert_issuable_on: 0, wot_min_cert_for_create_idty_right: 0, wot_min_cert_for_membership: 0 }
+Preimage.PreimageFor = [
+]
+Preimage.StatusFor = [
+]
+ProvideRandomness.CounterForRequestsIds = None
+ProvideRandomness.NexEpochHookIn = None
+ProvideRandomness.RequestIdProvider = None
+ProvideRandomness.RequestsIds = [
+]
+ProvideRandomness.RequestsReadyAtEpoch = [
+]
+ProvideRandomness.RequestsReadyAtNextBlock = []
+Proxy.Announcements = [
+]
+Proxy.Proxies = [
+]
+Scheduler.Agenda = [
+]
+Scheduler.IncompleteSince = None
+Scheduler.Lookup = [
+]
+Session.CurrentIndex = 0
+Session.DisabledValidators = []
+Session.KeyOwner = [
+]
+Session.NextKeys = [
+]
+Session.QueuedChanged = false
+Session.QueuedKeys = []
+Session.Validators = []
+SmithCert.StorageCertsRemovableOn = [
+]
+SmithCert.StorageIdtyCertMeta = [
+]
+SmithCertCert.sByReceiver = [
+]
+SmithMembership.CounterForMembership = None
+SmithMembership.Membership = [
+]
+SmithMembership.MembershipsExpireOn = [
+]
+SmithMembership.PendingMembership = [
+]
+SmithMembership.PendingMembershipsExpireOn = [
+]
+Sudo.Key = None
+System.Account = [
+]
+System.AllExtrinsicsLen = None
+System.BlockHash = [
+]
+System.BlockWeight = None
+System.Digest = None
+System.EventCount = None
+System.EventTopics = [
+]
+System.Events = None
+System.ExecutionPhase = None
+System.ExtrinsicCount = None
+System.ExtrinsicData = [
+]
+System.LastRuntimeUpgrade = None
+System.Number = None
+System.ParentHash = None
+System.UpgradedToTripleRefCount = None
+System.UpgradedToU32RefCount = None
+TechnicalCommittee.Members = []
+TechnicalCommittee.Prime = None
+TechnicalCommittee.ProposalCount = 0
+TechnicalCommittee.ProposalOf = [
+]
+TechnicalCommittee.Proposals = BoundedVec([], 20)
+TechnicalCommittee.Voting = [
+]
+Timestamp.DidUpdate = None
+Timestamp.Now = 0
+TransactionPayment.NextFeeMultiplier = FixedU128(1.000000000000000000)
+TransactionPayment.StorageVersion = None
+Treasury.Approvals = BoundedVec([], 100)
+Treasury.ProposalCount = 0
+Treasury.Proposals = [
+]
+UniversalDividend.CurrentUd = 0
+UniversalDividend.CurrentUdIndex = 1
+UniversalDividend.MonetaryMass = 0
+UniversalDividend.NextReeval = 0
+UniversalDividend.PastReevals = BoundedVec([], 4)
diff --git a/runtime/gdev/Cargo.toml b/runtime/gdev/Cargo.toml
index 8c8fd7788..1aedfed06 100644
--- a/runtime/gdev/Cargo.toml
+++ b/runtime/gdev/Cargo.toml
@@ -128,6 +128,7 @@ try-runtime = [
 ]
 
 [dev-dependencies]
+dc-dump = { path = "../../client/dump" }
 sp-consensus-vrf = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32' }
 sp-finality-grandpa = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32' }
 sp-io = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.32' }
diff --git a/runtime/gdev/tests/integration_tests.rs b/runtime/gdev/tests/integration_tests.rs
index 22d1fb056..d3806c7c9 100644
--- a/runtime/gdev/tests/integration_tests.rs
+++ b/runtime/gdev/tests/integration_tests.rs
@@ -17,6 +17,7 @@
 mod common;
 
 use common::*;
+use dc_dump::iterative::StorageChecker;
 use frame_support::traits::{Get, PalletInfo, StorageInfo, StorageInfoTrait};
 use frame_support::{assert_noop, assert_ok};
 use frame_support::{StorageHasher, Twox128};
@@ -29,6 +30,36 @@ fn verify_treasury_account() {
     // println!("{}", Treasury::account_id());
 }
 
+#[test]
+fn values_storage_with_run_to_block() {
+    let mut externalities = ExtBuilder::new(1, 3, 4).build();
+    let storage_checker = StorageChecker::<Runtime>::new_default(|| Runtime::metadata().1);
+    externalities.execute_with(|| {
+        run_to_block(2);
+        storage_checker.test_storage(128, "values_storage_with_run_to_block.b.2.expected.txt");
+        run_to_block(3);
+        storage_checker.test_storage(128, "values_storage_with_run_to_block.b.3.expected.txt");
+
+        // alice create identity for Eve
+        assert_ok!(Identity::create_identity(
+            frame_system::RawOrigin::Signed(AccountKeyring::Alice.to_account_id()).into(),
+            AccountKeyring::Eve.to_account_id(),
+        ));
+        run_to_block(4);
+        storage_checker.test_storage(128, "values_storage_with_run_to_block.b.4.expected.txt");
+
+        // eve confirms her identity
+        assert_ok!(Identity::confirm_identity(
+            frame_system::RawOrigin::Signed(AccountKeyring::Eve.to_account_id()).into(),
+            "Eeeeeveeeee".into(),
+        ));
+
+        run_to_block(5);
+        storage_checker.test_storage(128, "values_storage_with_run_to_block.b.5.expected.txt");
+    });
+    storage_checker.test_well_known_keys(&mut externalities);
+}
+
 #[test]
 fn verify_pallet_prefixes() {
     let prefix = |pallet_name, storage_name| {
diff --git a/runtime/gdev/tests/values_storage_with_run_to_block.b.2.expected.txt b/runtime/gdev/tests/values_storage_with_run_to_block.b.2.expected.txt
new file mode 100644
index 000000000..5f27e0977
--- /dev/null
+++ b/runtime/gdev/tests/values_storage_with_run_to_block.b.2.expected.txt
@@ -0,0 +1,244 @@
+Account.PendingNewAccounts = [
+]
+Account.PendingRandomIdAssignments = [
+]
+AtomicSwap.PendingSwaps = [
+]
+AuthorityMembers.AccountIdOf = [
+]
+AuthorityMembers.AuthoritiesCounter = 1
+AuthorityMembers.BlackList = []
+AuthorityMembers.IncomingAuthorities = []
+AuthorityMembers.Members = [
+	1 = MemberData { expire_on_session: 0, must_rotate_keys_before: 1500, owner_key: d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...) }
+	2 = MemberData { expire_on_session: 0, must_rotate_keys_before: 1500, owner_key: 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...) }
+	3 = MemberData { expire_on_session: 0, must_rotate_keys_before: 1500, owner_key: 90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...) }
+]
+AuthorityMembers.MustRotateKeysBefore = [
+	1500 = [1]
+]
+AuthorityMembers.OnlineAuthorities = [1]
+AuthorityMembers.OutgoingAuthorities = []
+AuthorityMembersMembers.ExpireOn = [
+]
+Authorship.Author = None
+Authorship.DidSetUncles = Some(false)
+Authorship.Uncles = Some(BoundedVec([], 11))
+Babe.AuthorVrfRandomness = None
+Babe.Authorities = WeakBoundedVec([(Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)), 1)], 32)
+Babe.CurrentSlot = Slot(0)
+Babe.EpochConfig = None
+Babe.EpochIndex = 0
+Babe.EpochStart = None
+Babe.GenesisSlot = Slot(0)
+Babe.Initialized = Some(None)
+Babe.Lateness = None
+Babe.NextAuthorities = Some(WeakBoundedVec([(Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)), 1)], 32))
+Babe.NextEpochConfig = None
+Babe.NextRandomness = None
+Babe.PendingEpochConfigChange = None
+Babe.Randomness = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+Babe.SegmentIndex = None
+Babe.UnderConstruction = [
+]
+Balances.Account = [
+]
+Balances.Locks = [
+]
+Balances.Reserves = [
+]
+Balances.StorageVersion = None
+Balances.TotalIssuance = 0
+Cert.CertsByReceiver = [
+	1 = [(2, 10000), (3, 10000), (4, 10000)]
+	2 = [(1, 10000), (3, 10000), (4, 10000)]
+	3 = [(1, 10000), (2, 10000), (4, 10000)]
+	4 = [(1, 10000), (2, 10000), (3, 10000)]
+]
+Cert.StorageCertsRemovableOn = [
+	10000 = [(2, 1), (3, 1), (4, 1), (1, 2), (3, 2), (4, 2), (1, 3), (2, 3), (4, 3), (1, 4), (2, 4), (3, 4)]
+]
+Cert.StorageIdtyCertMeta = [
+	1 = IdtyCertMeta { issued_count: 3, next_issuable_on: 0, received_count: 3 }
+	2 = IdtyCertMeta { issued_count: 3, next_issuable_on: 0, received_count: 3 }
+	3 = IdtyCertMeta { issued_count: 3, next_issuable_on: 0, received_count: 3 }
+	4 = IdtyCertMeta { issued_count: 3, next_issuable_on: 0, received_count: 3 }
+]
+Grandpa.CurrentSetId = None
+Grandpa.NextForced = None
+Grandpa.PendingChange = None
+Grandpa.SetIdSession = [
+	0 = 0
+]
+Grandpa.Stalled = None
+Grandpa.State = None
+Identity.CounterForIdentities = Some(4)
+Identity.Identities = [
+	1 = IdtyValue { data: IdtyData { first_eligible_ud: FirstEligibleUd(Some(1)) }, next_creatable_identity_on: 0, old_owner_key: None, owner_key: d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...), removable_on: 0, status: IdtyStatus::Validated }
+	2 = IdtyValue { data: IdtyData { first_eligible_ud: FirstEligibleUd(Some(1)) }, next_creatable_identity_on: 0, old_owner_key: None, owner_key: 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...), removable_on: 0, status: IdtyStatus::Validated }
+	3 = IdtyValue { data: IdtyData { first_eligible_ud: FirstEligibleUd(Some(1)) }, next_creatable_identity_on: 0, old_owner_key: None, owner_key: 90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...), removable_on: 0, status: IdtyStatus::Validated }
+	4 = IdtyValue { data: IdtyData { first_eligible_ud: FirstEligibleUd(Some(1)) }, next_creatable_identity_on: 0, old_owner_key: None, owner_key: 306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20 (5DAAnrj7...), removable_on: 0, status: IdtyStatus::Validated }
+]
+Identity.IdentitiesNames = [
+	"Alice" = ()
+	"Bob" = ()
+	"Charlie" = ()
+	"Dave" = ()
+]
+Identity.IdentitiesRemovableOn = [
+]
+Identity.IdentityIndexOf = [
+	306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20 (5DAAnrj7...) = 4
+	8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...) = 2
+	90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...) = 3
+	d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...) = 1
+]
+Identity.NextIdtyIndex = Some(5)
+ImOnline.AuthoredBlocks = [
+]
+ImOnline.HeartbeatAfter = None
+ImOnline.Keys = Some(WeakBoundedVec([Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...))], 32))
+ImOnline.ReceivedHeartbeats = [
+]
+Membership.CounterForMembership = Some(4)
+Membership.Membership = [
+	1 = MembershipData { expire_on: 100 }
+	2 = MembershipData { expire_on: 100 }
+	3 = MembershipData { expire_on: 100 }
+	4 = MembershipData { expire_on: 100 }
+]
+Membership.MembershipsExpireOn = [
+	100 = [1, 2, 3, 4]
+]
+Membership.PendingMembership = [
+]
+Membership.PendingMembershipsExpireOn = [
+]
+Multisig.Multisigs = [
+]
+Offences.ConcurrentReportsIndex = [
+]
+Offences.Reports = [
+]
+OneshotAccount.OneshotAccounts = [
+]
+Parameters.ParametersStorage = Parameters { babe_epoch_duration: 25, cert_period: 15, cert_max_by_issuer: 10, cert_min_received_cert_to_issue_cert: 2, cert_validity_period: 10000, idty_confirm_period: 40, idty_creation_period: 50, membership_period: 100, pending_membership_period: 500, ud_creation_period: 10, ud_reeval_period: 200, smith_cert_period: 15, smith_cert_max_by_issuer: 8, smith_cert_min_received_cert_to_issue_cert: 2, smith_cert_validity_period: 1000, smith_membership_period: 1000, smith_pending_membership_period: 500, smith_wot_first_cert_issuable_on: 20, smith_wot_min_cert_for_membership: 2, wot_first_cert_issuable_on: 20, wot_min_cert_for_create_idty_right: 2, wot_min_cert_for_membership: 2 }
+Preimage.PreimageFor = [
+]
+Preimage.StatusFor = [
+]
+ProvideRandomness.CounterForRequestsIds = None
+ProvideRandomness.NexEpochHookIn = Some(5)
+ProvideRandomness.RequestIdProvider = None
+ProvideRandomness.RequestsIds = [
+]
+ProvideRandomness.RequestsReadyAtEpoch = [
+]
+ProvideRandomness.RequestsReadyAtNextBlock = []
+Proxy.Announcements = [
+]
+Proxy.Proxies = [
+]
+Scheduler.Agenda = [
+]
+Scheduler.IncompleteSince = None
+Scheduler.Lookup = [
+]
+Session.CurrentIndex = 0
+Session.DisabledValidators = []
+Session.KeyOwner = [
+	(KeyTypeId([103, 114, 97, 110]), [136, 220, 52, 23, 213, 5, 142, 196, 180, 80, 62, 12, 18, 234, 26, 10, 137, 190, 32, 15, 233, 137, 34, 66, 61, 67, 52, 1, 79, 166, 176, 238]) = d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)
+	(KeyTypeId([103, 114, 97, 110]), [209, 124, 45, 120, 35, 235, 242, 96, 253, 19, 143, 45, 126, 39, 209, 20, 192, 20, 93, 150, 139, 95, 245, 0, 97, 37, 242, 65, 79, 173, 174, 105]) = 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)
+	(KeyTypeId([103, 114, 97, 110]), [67, 150, 96, 179, 108, 108, 3, 175, 175, 202, 2, 123, 145, 11, 79, 236, 249, 152, 1, 131, 76, 98, 165, 230, 0, 111, 39, 217, 120, 222, 35, 79]) = 90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)
+	(KeyTypeId([105, 109, 111, 110]), [142, 175, 4, 21, 22, 135, 115, 99, 38, 201, 254, 161, 126, 37, 252, 82, 135, 97, 54, 147, 201, 18, 144, 156, 178, 38, 170, 71, 148, 242, 106, 72]) = 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)
+	(KeyTypeId([105, 109, 111, 110]), [144, 181, 171, 32, 92, 105, 116, 201, 234, 132, 27, 230, 136, 134, 70, 51, 220, 156, 168, 163, 87, 132, 62, 234, 207, 35, 20, 100, 153, 101, 254, 34]) = 90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)
+	(KeyTypeId([105, 109, 111, 110]), [212, 53, 147, 199, 21, 253, 211, 28, 97, 20, 26, 189, 4, 169, 159, 214, 130, 44, 133, 88, 133, 76, 205, 227, 154, 86, 132, 231, 165, 109, 162, 125]) = d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)
+	(KeyTypeId([97, 117, 100, 105]), [142, 175, 4, 21, 22, 135, 115, 99, 38, 201, 254, 161, 126, 37, 252, 82, 135, 97, 54, 147, 201, 18, 144, 156, 178, 38, 170, 71, 148, 242, 106, 72]) = 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)
+	(KeyTypeId([97, 117, 100, 105]), [144, 181, 171, 32, 92, 105, 116, 201, 234, 132, 27, 230, 136, 134, 70, 51, 220, 156, 168, 163, 87, 132, 62, 234, 207, 35, 20, 100, 153, 101, 254, 34]) = 90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)
+	(KeyTypeId([97, 117, 100, 105]), [212, 53, 147, 199, 21, 253, 211, 28, 97, 20, 26, 189, 4, 169, 159, 214, 130, 44, 133, 88, 133, 76, 205, 227, 154, 86, 132, 231, 165, 109, 162, 125]) = d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)
+	(KeyTypeId([98, 97, 98, 101]), [142, 175, 4, 21, 22, 135, 115, 99, 38, 201, 254, 161, 126, 37, 252, 82, 135, 97, 54, 147, 201, 18, 144, 156, 178, 38, 170, 71, 148, 242, 106, 72]) = 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)
+	(KeyTypeId([98, 97, 98, 101]), [144, 181, 171, 32, 92, 105, 116, 201, 234, 132, 27, 230, 136, 134, 70, 51, 220, 156, 168, 163, 87, 132, 62, 234, 207, 35, 20, 100, 153, 101, 254, 34]) = 90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)
+	(KeyTypeId([98, 97, 98, 101]), [212, 53, 147, 199, 21, 253, 211, 28, 97, 20, 26, 189, 4, 169, 159, 214, 130, 44, 133, 88, 133, 76, 205, 227, 154, 86, 132, 231, 165, 109, 162, 125]) = d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)
+]
+Session.NextKeys = [
+	8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...) = SessionKeys { grandpa: Public(d17c2d7823ebf260fd138f2d7e27d114c0145d968b5ff5006125f2414fadae69 (5GoNkf6W...)), babe: Public(8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)), im_online: Public(8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)), authority_discovery: Public(8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)) }
+	90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...) = SessionKeys { grandpa: Public(439660b36c6c03afafca027b910b4fecf99801834c62a5e6006f27d978de234f (5DbKjhNL...)), babe: Public(90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)), im_online: Public(90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)), authority_discovery: Public(90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)) }
+	d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...) = SessionKeys { grandpa: Public(88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee (5FA9nQDV...)), babe: Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)), im_online: Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)), authority_discovery: Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)) }
+]
+Session.QueuedChanged = false
+Session.QueuedKeys = [(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...), SessionKeys { grandpa: Public(88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee (5FA9nQDV...)), babe: Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)), im_online: Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)), authority_discovery: Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)) })]
+Session.Validators = [d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)]
+SmithCert.StorageCertsRemovableOn = [
+	1000 = [(2, 1), (3, 1), (1, 2), (3, 2), (1, 3), (2, 3)]
+]
+SmithCert.StorageIdtyCertMeta = [
+	1 = IdtyCertMeta { issued_count: 2, next_issuable_on: 0, received_count: 2 }
+	2 = IdtyCertMeta { issued_count: 2, next_issuable_on: 0, received_count: 2 }
+	3 = IdtyCertMeta { issued_count: 2, next_issuable_on: 0, received_count: 2 }
+]
+SmithCertCert.sByReceiver = [
+	1 = [(2, 1000), (3, 1000)]
+	2 = [(1, 1000), (3, 1000)]
+	3 = [(1, 1000), (2, 1000)]
+]
+SmithMembership.CounterForMembership = Some(3)
+SmithMembership.Membership = [
+	1 = MembershipData { expire_on: 1000 }
+	2 = MembershipData { expire_on: 1000 }
+	3 = MembershipData { expire_on: 1000 }
+]
+SmithMembership.MembershipsExpireOn = [
+	1000 = [1, 2, 3]
+]
+SmithMembership.PendingMembership = [
+]
+SmithMembership.PendingMembershipsExpireOn = [
+]
+Sudo.Key = None
+System.Account = [
+	306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20 (5DAAnrj7...) = AccountInfo { nonce: 0, consumers: 0, providers: 0, sufficients: 1, data: AccountData { random_id: Some(0x0303030303030303030303030303030303030303030303030303030303030303), free: 0, reserved: 0, fee_frozen: 0 } }
+	6d6f646c70792f74727372790000000000000000000000000000000000000000 (5EYCAe5i...) = AccountInfo { nonce: 0, consumers: 0, providers: 1, sufficients: 0, data: AccountData { random_id: None, free: 200, reserved: 0, fee_frozen: 0 } }
+	8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...) = AccountInfo { nonce: 0, consumers: 0, providers: 1, sufficients: 1, data: AccountData { random_id: Some(0x0101010101010101010101010101010101010101010101010101010101010101), free: 0, reserved: 0, fee_frozen: 0 } }
+	90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...) = AccountInfo { nonce: 0, consumers: 0, providers: 1, sufficients: 1, data: AccountData { random_id: Some(0x0202020202020202020202020202020202020202020202020202020202020202), free: 0, reserved: 0, fee_frozen: 0 } }
+	d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...) = AccountInfo { nonce: 0, consumers: 0, providers: 1, sufficients: 1, data: AccountData { random_id: Some(0x0000000000000000000000000000000000000000000000000000000000000000), free: 0, reserved: 0, fee_frozen: 0 } }
+]
+System.AllExtrinsicsLen = None
+System.BlockHash = [
+	0 = 0x4545454545454545454545454545454545454545454545454545454545454545
+]
+System.BlockWeight = None
+System.Digest = None
+System.EventCount = None
+System.EventTopics = [
+]
+System.Events = None
+System.ExecutionPhase = None
+System.ExtrinsicCount = None
+System.ExtrinsicData = [
+]
+System.LastRuntimeUpgrade = Some(LastRuntimeUpgradeInfo { spec_version: 400, spec_name: RuntimeString::Owned("gdev") })
+System.Number = Some(2)
+System.ParentHash = Some(0x4545454545454545454545454545454545454545454545454545454545454545)
+System.UpgradedToTripleRefCount = Some(true)
+System.UpgradedToU32RefCount = Some(true)
+TechnicalCommittee.Members = []
+TechnicalCommittee.Prime = None
+TechnicalCommittee.ProposalCount = 0
+TechnicalCommittee.ProposalOf = [
+]
+TechnicalCommittee.Proposals = BoundedVec([], 20)
+TechnicalCommittee.Voting = [
+]
+Timestamp.DidUpdate = None
+Timestamp.Now = 0
+TransactionPayment.NextFeeMultiplier = FixedU128(0.000000000000000000)
+TransactionPayment.StorageVersion = None
+Treasury.Approvals = BoundedVec([], 100)
+Treasury.ProposalCount = 0
+Treasury.Proposals = [
+]
+UniversalDividend.CurrentUd = 1000
+UniversalDividend.CurrentUdIndex = 1
+UniversalDividend.MonetaryMass = 0
+UniversalDividend.NextReeval = 100
+UniversalDividend.PastReevals = BoundedVec([(1, 1000)], 4)
diff --git a/runtime/gdev/tests/values_storage_with_run_to_block.b.3.expected.txt b/runtime/gdev/tests/values_storage_with_run_to_block.b.3.expected.txt
new file mode 100644
index 000000000..b1509750a
--- /dev/null
+++ b/runtime/gdev/tests/values_storage_with_run_to_block.b.3.expected.txt
@@ -0,0 +1,244 @@
+Account.PendingNewAccounts = [
+]
+Account.PendingRandomIdAssignments = [
+]
+AtomicSwap.PendingSwaps = [
+]
+AuthorityMembers.AccountIdOf = [
+]
+AuthorityMembers.AuthoritiesCounter = 1
+AuthorityMembers.BlackList = []
+AuthorityMembers.IncomingAuthorities = []
+AuthorityMembers.Members = [
+	1 = MemberData { expire_on_session: 0, must_rotate_keys_before: 1500, owner_key: d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...) }
+	2 = MemberData { expire_on_session: 0, must_rotate_keys_before: 1500, owner_key: 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...) }
+	3 = MemberData { expire_on_session: 0, must_rotate_keys_before: 1500, owner_key: 90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...) }
+]
+AuthorityMembers.MustRotateKeysBefore = [
+	1500 = [1]
+]
+AuthorityMembers.OnlineAuthorities = [1]
+AuthorityMembers.OutgoingAuthorities = []
+AuthorityMembersMembers.ExpireOn = [
+]
+Authorship.Author = None
+Authorship.DidSetUncles = Some(false)
+Authorship.Uncles = Some(BoundedVec([], 11))
+Babe.AuthorVrfRandomness = None
+Babe.Authorities = WeakBoundedVec([(Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)), 1)], 32)
+Babe.CurrentSlot = Slot(0)
+Babe.EpochConfig = None
+Babe.EpochIndex = 0
+Babe.EpochStart = None
+Babe.GenesisSlot = Slot(0)
+Babe.Initialized = Some(None)
+Babe.Lateness = None
+Babe.NextAuthorities = Some(WeakBoundedVec([(Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)), 1)], 32))
+Babe.NextEpochConfig = None
+Babe.NextRandomness = None
+Babe.PendingEpochConfigChange = None
+Babe.Randomness = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+Babe.SegmentIndex = None
+Babe.UnderConstruction = [
+]
+Balances.Account = [
+]
+Balances.Locks = [
+]
+Balances.Reserves = [
+]
+Balances.StorageVersion = None
+Balances.TotalIssuance = 0
+Cert.CertsByReceiver = [
+	1 = [(2, 10000), (3, 10000), (4, 10000)]
+	2 = [(1, 10000), (3, 10000), (4, 10000)]
+	3 = [(1, 10000), (2, 10000), (4, 10000)]
+	4 = [(1, 10000), (2, 10000), (3, 10000)]
+]
+Cert.StorageCertsRemovableOn = [
+	10000 = [(2, 1), (3, 1), (4, 1), (1, 2), (3, 2), (4, 2), (1, 3), (2, 3), (4, 3), (1, 4), (2, 4), (3, 4)]
+]
+Cert.StorageIdtyCertMeta = [
+	1 = IdtyCertMeta { issued_count: 3, next_issuable_on: 0, received_count: 3 }
+	2 = IdtyCertMeta { issued_count: 3, next_issuable_on: 0, received_count: 3 }
+	3 = IdtyCertMeta { issued_count: 3, next_issuable_on: 0, received_count: 3 }
+	4 = IdtyCertMeta { issued_count: 3, next_issuable_on: 0, received_count: 3 }
+]
+Grandpa.CurrentSetId = None
+Grandpa.NextForced = None
+Grandpa.PendingChange = None
+Grandpa.SetIdSession = [
+	0 = 0
+]
+Grandpa.Stalled = None
+Grandpa.State = None
+Identity.CounterForIdentities = Some(4)
+Identity.Identities = [
+	1 = IdtyValue { data: IdtyData { first_eligible_ud: FirstEligibleUd(Some(1)) }, next_creatable_identity_on: 0, old_owner_key: None, owner_key: d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...), removable_on: 0, status: IdtyStatus::Validated }
+	2 = IdtyValue { data: IdtyData { first_eligible_ud: FirstEligibleUd(Some(1)) }, next_creatable_identity_on: 0, old_owner_key: None, owner_key: 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...), removable_on: 0, status: IdtyStatus::Validated }
+	3 = IdtyValue { data: IdtyData { first_eligible_ud: FirstEligibleUd(Some(1)) }, next_creatable_identity_on: 0, old_owner_key: None, owner_key: 90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...), removable_on: 0, status: IdtyStatus::Validated }
+	4 = IdtyValue { data: IdtyData { first_eligible_ud: FirstEligibleUd(Some(1)) }, next_creatable_identity_on: 0, old_owner_key: None, owner_key: 306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20 (5DAAnrj7...), removable_on: 0, status: IdtyStatus::Validated }
+]
+Identity.IdentitiesNames = [
+	"Alice" = ()
+	"Bob" = ()
+	"Charlie" = ()
+	"Dave" = ()
+]
+Identity.IdentitiesRemovableOn = [
+]
+Identity.IdentityIndexOf = [
+	306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20 (5DAAnrj7...) = 4
+	8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...) = 2
+	90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...) = 3
+	d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...) = 1
+]
+Identity.NextIdtyIndex = Some(5)
+ImOnline.AuthoredBlocks = [
+]
+ImOnline.HeartbeatAfter = None
+ImOnline.Keys = Some(WeakBoundedVec([Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...))], 32))
+ImOnline.ReceivedHeartbeats = [
+]
+Membership.CounterForMembership = Some(4)
+Membership.Membership = [
+	1 = MembershipData { expire_on: 100 }
+	2 = MembershipData { expire_on: 100 }
+	3 = MembershipData { expire_on: 100 }
+	4 = MembershipData { expire_on: 100 }
+]
+Membership.MembershipsExpireOn = [
+	100 = [1, 2, 3, 4]
+]
+Membership.PendingMembership = [
+]
+Membership.PendingMembershipsExpireOn = [
+]
+Multisig.Multisigs = [
+]
+Offences.ConcurrentReportsIndex = [
+]
+Offences.Reports = [
+]
+OneshotAccount.OneshotAccounts = [
+]
+Parameters.ParametersStorage = Parameters { babe_epoch_duration: 25, cert_period: 15, cert_max_by_issuer: 10, cert_min_received_cert_to_issue_cert: 2, cert_validity_period: 10000, idty_confirm_period: 40, idty_creation_period: 50, membership_period: 100, pending_membership_period: 500, ud_creation_period: 10, ud_reeval_period: 200, smith_cert_period: 15, smith_cert_max_by_issuer: 8, smith_cert_min_received_cert_to_issue_cert: 2, smith_cert_validity_period: 1000, smith_membership_period: 1000, smith_pending_membership_period: 500, smith_wot_first_cert_issuable_on: 20, smith_wot_min_cert_for_membership: 2, wot_first_cert_issuable_on: 20, wot_min_cert_for_create_idty_right: 2, wot_min_cert_for_membership: 2 }
+Preimage.PreimageFor = [
+]
+Preimage.StatusFor = [
+]
+ProvideRandomness.CounterForRequestsIds = None
+ProvideRandomness.NexEpochHookIn = Some(5)
+ProvideRandomness.RequestIdProvider = None
+ProvideRandomness.RequestsIds = [
+]
+ProvideRandomness.RequestsReadyAtEpoch = [
+]
+ProvideRandomness.RequestsReadyAtNextBlock = []
+Proxy.Announcements = [
+]
+Proxy.Proxies = [
+]
+Scheduler.Agenda = [
+]
+Scheduler.IncompleteSince = None
+Scheduler.Lookup = [
+]
+Session.CurrentIndex = 0
+Session.DisabledValidators = []
+Session.KeyOwner = [
+	(KeyTypeId([103, 114, 97, 110]), [136, 220, 52, 23, 213, 5, 142, 196, 180, 80, 62, 12, 18, 234, 26, 10, 137, 190, 32, 15, 233, 137, 34, 66, 61, 67, 52, 1, 79, 166, 176, 238]) = d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)
+	(KeyTypeId([103, 114, 97, 110]), [209, 124, 45, 120, 35, 235, 242, 96, 253, 19, 143, 45, 126, 39, 209, 20, 192, 20, 93, 150, 139, 95, 245, 0, 97, 37, 242, 65, 79, 173, 174, 105]) = 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)
+	(KeyTypeId([103, 114, 97, 110]), [67, 150, 96, 179, 108, 108, 3, 175, 175, 202, 2, 123, 145, 11, 79, 236, 249, 152, 1, 131, 76, 98, 165, 230, 0, 111, 39, 217, 120, 222, 35, 79]) = 90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)
+	(KeyTypeId([105, 109, 111, 110]), [142, 175, 4, 21, 22, 135, 115, 99, 38, 201, 254, 161, 126, 37, 252, 82, 135, 97, 54, 147, 201, 18, 144, 156, 178, 38, 170, 71, 148, 242, 106, 72]) = 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)
+	(KeyTypeId([105, 109, 111, 110]), [144, 181, 171, 32, 92, 105, 116, 201, 234, 132, 27, 230, 136, 134, 70, 51, 220, 156, 168, 163, 87, 132, 62, 234, 207, 35, 20, 100, 153, 101, 254, 34]) = 90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)
+	(KeyTypeId([105, 109, 111, 110]), [212, 53, 147, 199, 21, 253, 211, 28, 97, 20, 26, 189, 4, 169, 159, 214, 130, 44, 133, 88, 133, 76, 205, 227, 154, 86, 132, 231, 165, 109, 162, 125]) = d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)
+	(KeyTypeId([97, 117, 100, 105]), [142, 175, 4, 21, 22, 135, 115, 99, 38, 201, 254, 161, 126, 37, 252, 82, 135, 97, 54, 147, 201, 18, 144, 156, 178, 38, 170, 71, 148, 242, 106, 72]) = 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)
+	(KeyTypeId([97, 117, 100, 105]), [144, 181, 171, 32, 92, 105, 116, 201, 234, 132, 27, 230, 136, 134, 70, 51, 220, 156, 168, 163, 87, 132, 62, 234, 207, 35, 20, 100, 153, 101, 254, 34]) = 90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)
+	(KeyTypeId([97, 117, 100, 105]), [212, 53, 147, 199, 21, 253, 211, 28, 97, 20, 26, 189, 4, 169, 159, 214, 130, 44, 133, 88, 133, 76, 205, 227, 154, 86, 132, 231, 165, 109, 162, 125]) = d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)
+	(KeyTypeId([98, 97, 98, 101]), [142, 175, 4, 21, 22, 135, 115, 99, 38, 201, 254, 161, 126, 37, 252, 82, 135, 97, 54, 147, 201, 18, 144, 156, 178, 38, 170, 71, 148, 242, 106, 72]) = 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)
+	(KeyTypeId([98, 97, 98, 101]), [144, 181, 171, 32, 92, 105, 116, 201, 234, 132, 27, 230, 136, 134, 70, 51, 220, 156, 168, 163, 87, 132, 62, 234, 207, 35, 20, 100, 153, 101, 254, 34]) = 90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)
+	(KeyTypeId([98, 97, 98, 101]), [212, 53, 147, 199, 21, 253, 211, 28, 97, 20, 26, 189, 4, 169, 159, 214, 130, 44, 133, 88, 133, 76, 205, 227, 154, 86, 132, 231, 165, 109, 162, 125]) = d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)
+]
+Session.NextKeys = [
+	8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...) = SessionKeys { grandpa: Public(d17c2d7823ebf260fd138f2d7e27d114c0145d968b5ff5006125f2414fadae69 (5GoNkf6W...)), babe: Public(8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)), im_online: Public(8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)), authority_discovery: Public(8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)) }
+	90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...) = SessionKeys { grandpa: Public(439660b36c6c03afafca027b910b4fecf99801834c62a5e6006f27d978de234f (5DbKjhNL...)), babe: Public(90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)), im_online: Public(90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)), authority_discovery: Public(90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)) }
+	d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...) = SessionKeys { grandpa: Public(88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee (5FA9nQDV...)), babe: Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)), im_online: Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)), authority_discovery: Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)) }
+]
+Session.QueuedChanged = false
+Session.QueuedKeys = [(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...), SessionKeys { grandpa: Public(88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee (5FA9nQDV...)), babe: Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)), im_online: Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)), authority_discovery: Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)) })]
+Session.Validators = [d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)]
+SmithCert.StorageCertsRemovableOn = [
+	1000 = [(2, 1), (3, 1), (1, 2), (3, 2), (1, 3), (2, 3)]
+]
+SmithCert.StorageIdtyCertMeta = [
+	1 = IdtyCertMeta { issued_count: 2, next_issuable_on: 0, received_count: 2 }
+	2 = IdtyCertMeta { issued_count: 2, next_issuable_on: 0, received_count: 2 }
+	3 = IdtyCertMeta { issued_count: 2, next_issuable_on: 0, received_count: 2 }
+]
+SmithCertCert.sByReceiver = [
+	1 = [(2, 1000), (3, 1000)]
+	2 = [(1, 1000), (3, 1000)]
+	3 = [(1, 1000), (2, 1000)]
+]
+SmithMembership.CounterForMembership = Some(3)
+SmithMembership.Membership = [
+	1 = MembershipData { expire_on: 1000 }
+	2 = MembershipData { expire_on: 1000 }
+	3 = MembershipData { expire_on: 1000 }
+]
+SmithMembership.MembershipsExpireOn = [
+	1000 = [1, 2, 3]
+]
+SmithMembership.PendingMembership = [
+]
+SmithMembership.PendingMembershipsExpireOn = [
+]
+Sudo.Key = None
+System.Account = [
+	306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20 (5DAAnrj7...) = AccountInfo { nonce: 0, consumers: 0, providers: 0, sufficients: 1, data: AccountData { random_id: Some(0x0303030303030303030303030303030303030303030303030303030303030303), free: 0, reserved: 0, fee_frozen: 0 } }
+	6d6f646c70792f74727372790000000000000000000000000000000000000000 (5EYCAe5i...) = AccountInfo { nonce: 0, consumers: 0, providers: 1, sufficients: 0, data: AccountData { random_id: None, free: 200, reserved: 0, fee_frozen: 0 } }
+	8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...) = AccountInfo { nonce: 0, consumers: 0, providers: 1, sufficients: 1, data: AccountData { random_id: Some(0x0101010101010101010101010101010101010101010101010101010101010101), free: 0, reserved: 0, fee_frozen: 0 } }
+	90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...) = AccountInfo { nonce: 0, consumers: 0, providers: 1, sufficients: 1, data: AccountData { random_id: Some(0x0202020202020202020202020202020202020202020202020202020202020202), free: 0, reserved: 0, fee_frozen: 0 } }
+	d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...) = AccountInfo { nonce: 0, consumers: 0, providers: 1, sufficients: 1, data: AccountData { random_id: Some(0x0000000000000000000000000000000000000000000000000000000000000000), free: 0, reserved: 0, fee_frozen: 0 } }
+]
+System.AllExtrinsicsLen = None
+System.BlockHash = [
+	0 = 0x4545454545454545454545454545454545454545454545454545454545454545
+]
+System.BlockWeight = None
+System.Digest = None
+System.EventCount = None
+System.EventTopics = [
+]
+System.Events = None
+System.ExecutionPhase = None
+System.ExtrinsicCount = None
+System.ExtrinsicData = [
+]
+System.LastRuntimeUpgrade = Some(LastRuntimeUpgradeInfo { spec_version: 400, spec_name: RuntimeString::Owned("gdev") })
+System.Number = Some(3)
+System.ParentHash = Some(0x4545454545454545454545454545454545454545454545454545454545454545)
+System.UpgradedToTripleRefCount = Some(true)
+System.UpgradedToU32RefCount = Some(true)
+TechnicalCommittee.Members = []
+TechnicalCommittee.Prime = None
+TechnicalCommittee.ProposalCount = 0
+TechnicalCommittee.ProposalOf = [
+]
+TechnicalCommittee.Proposals = BoundedVec([], 20)
+TechnicalCommittee.Voting = [
+]
+Timestamp.DidUpdate = None
+Timestamp.Now = 0
+TransactionPayment.NextFeeMultiplier = FixedU128(0.000000000000000000)
+TransactionPayment.StorageVersion = None
+Treasury.Approvals = BoundedVec([], 100)
+Treasury.ProposalCount = 0
+Treasury.Proposals = [
+]
+UniversalDividend.CurrentUd = 1000
+UniversalDividend.CurrentUdIndex = 1
+UniversalDividend.MonetaryMass = 0
+UniversalDividend.NextReeval = 100
+UniversalDividend.PastReevals = BoundedVec([(1, 1000)], 4)
diff --git a/runtime/gdev/tests/values_storage_with_run_to_block.b.4.expected.txt b/runtime/gdev/tests/values_storage_with_run_to_block.b.4.expected.txt
new file mode 100644
index 000000000..b4971a26e
--- /dev/null
+++ b/runtime/gdev/tests/values_storage_with_run_to_block.b.4.expected.txt
@@ -0,0 +1,251 @@
+Account.PendingNewAccounts = [
+]
+Account.PendingRandomIdAssignments = [
+]
+AtomicSwap.PendingSwaps = [
+]
+AuthorityMembers.AccountIdOf = [
+]
+AuthorityMembers.AuthoritiesCounter = 1
+AuthorityMembers.BlackList = []
+AuthorityMembers.IncomingAuthorities = []
+AuthorityMembers.Members = [
+	1 = MemberData { expire_on_session: 0, must_rotate_keys_before: 1500, owner_key: d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...) }
+	2 = MemberData { expire_on_session: 0, must_rotate_keys_before: 1500, owner_key: 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...) }
+	3 = MemberData { expire_on_session: 0, must_rotate_keys_before: 1500, owner_key: 90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...) }
+]
+AuthorityMembers.MustRotateKeysBefore = [
+	1500 = [1]
+]
+AuthorityMembers.OnlineAuthorities = [1]
+AuthorityMembers.OutgoingAuthorities = []
+AuthorityMembersMembers.ExpireOn = [
+]
+Authorship.Author = None
+Authorship.DidSetUncles = Some(false)
+Authorship.Uncles = Some(BoundedVec([], 11))
+Babe.AuthorVrfRandomness = None
+Babe.Authorities = WeakBoundedVec([(Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)), 1)], 32)
+Babe.CurrentSlot = Slot(0)
+Babe.EpochConfig = None
+Babe.EpochIndex = 0
+Babe.EpochStart = None
+Babe.GenesisSlot = Slot(0)
+Babe.Initialized = Some(None)
+Babe.Lateness = None
+Babe.NextAuthorities = Some(WeakBoundedVec([(Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)), 1)], 32))
+Babe.NextEpochConfig = None
+Babe.NextRandomness = None
+Babe.PendingEpochConfigChange = None
+Babe.Randomness = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+Babe.SegmentIndex = None
+Babe.UnderConstruction = [
+]
+Balances.Account = [
+]
+Balances.Locks = [
+]
+Balances.Reserves = [
+]
+Balances.StorageVersion = None
+Balances.TotalIssuance = 0
+Cert.CertsByReceiver = [
+	1 = [(2, 10000), (3, 10000), (4, 10000)]
+	2 = [(1, 10000), (3, 10000), (4, 10000)]
+	3 = [(1, 10000), (2, 10000), (4, 10000)]
+	4 = [(1, 10000), (2, 10000), (3, 10000)]
+	5 = [(1, 10003)]
+]
+Cert.StorageCertsRemovableOn = [
+	10000 = [(2, 1), (3, 1), (4, 1), (1, 2), (3, 2), (4, 2), (1, 3), (2, 3), (4, 3), (1, 4), (2, 4), (3, 4)]
+	10003 = [(1, 5)]
+]
+Cert.StorageIdtyCertMeta = [
+	1 = IdtyCertMeta { issued_count: 4, next_issuable_on: 18, received_count: 3 }
+	2 = IdtyCertMeta { issued_count: 3, next_issuable_on: 0, received_count: 3 }
+	3 = IdtyCertMeta { issued_count: 3, next_issuable_on: 0, received_count: 3 }
+	4 = IdtyCertMeta { issued_count: 3, next_issuable_on: 0, received_count: 3 }
+	5 = IdtyCertMeta { issued_count: 0, next_issuable_on: 0, received_count: 1 }
+]
+Grandpa.CurrentSetId = None
+Grandpa.NextForced = None
+Grandpa.PendingChange = None
+Grandpa.SetIdSession = [
+	0 = 0
+]
+Grandpa.Stalled = None
+Grandpa.State = None
+Identity.CounterForIdentities = Some(5)
+Identity.Identities = [
+	1 = IdtyValue { data: IdtyData { first_eligible_ud: FirstEligibleUd(Some(1)) }, next_creatable_identity_on: 53, old_owner_key: None, owner_key: d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...), removable_on: 0, status: IdtyStatus::Validated }
+	2 = IdtyValue { data: IdtyData { first_eligible_ud: FirstEligibleUd(Some(1)) }, next_creatable_identity_on: 0, old_owner_key: None, owner_key: 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...), removable_on: 0, status: IdtyStatus::Validated }
+	3 = IdtyValue { data: IdtyData { first_eligible_ud: FirstEligibleUd(Some(1)) }, next_creatable_identity_on: 0, old_owner_key: None, owner_key: 90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...), removable_on: 0, status: IdtyStatus::Validated }
+	4 = IdtyValue { data: IdtyData { first_eligible_ud: FirstEligibleUd(Some(1)) }, next_creatable_identity_on: 0, old_owner_key: None, owner_key: 306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20 (5DAAnrj7...), removable_on: 0, status: IdtyStatus::Validated }
+	5 = IdtyValue { data: IdtyData { first_eligible_ud: FirstEligibleUd(None) }, next_creatable_identity_on: 0, old_owner_key: None, owner_key: e659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e (5HGjWAeF...), removable_on: 43, status: IdtyStatus::Created }
+]
+Identity.IdentitiesNames = [
+	"Alice" = ()
+	"Bob" = ()
+	"Charlie" = ()
+	"Dave" = ()
+]
+Identity.IdentitiesRemovableOn = [
+	43 = [(5, IdtyStatus::Created)]
+]
+Identity.IdentityIndexOf = [
+	306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20 (5DAAnrj7...) = 4
+	8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...) = 2
+	90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...) = 3
+	d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...) = 1
+	e659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e (5HGjWAeF...) = 5
+]
+Identity.NextIdtyIndex = Some(6)
+ImOnline.AuthoredBlocks = [
+]
+ImOnline.HeartbeatAfter = None
+ImOnline.Keys = Some(WeakBoundedVec([Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...))], 32))
+ImOnline.ReceivedHeartbeats = [
+]
+Membership.CounterForMembership = Some(4)
+Membership.Membership = [
+	1 = MembershipData { expire_on: 100 }
+	2 = MembershipData { expire_on: 100 }
+	3 = MembershipData { expire_on: 100 }
+	4 = MembershipData { expire_on: 100 }
+]
+Membership.MembershipsExpireOn = [
+	100 = [1, 2, 3, 4]
+]
+Membership.PendingMembership = [
+]
+Membership.PendingMembershipsExpireOn = [
+]
+Multisig.Multisigs = [
+]
+Offences.ConcurrentReportsIndex = [
+]
+Offences.Reports = [
+]
+OneshotAccount.OneshotAccounts = [
+]
+Parameters.ParametersStorage = Parameters { babe_epoch_duration: 25, cert_period: 15, cert_max_by_issuer: 10, cert_min_received_cert_to_issue_cert: 2, cert_validity_period: 10000, idty_confirm_period: 40, idty_creation_period: 50, membership_period: 100, pending_membership_period: 500, ud_creation_period: 10, ud_reeval_period: 200, smith_cert_period: 15, smith_cert_max_by_issuer: 8, smith_cert_min_received_cert_to_issue_cert: 2, smith_cert_validity_period: 1000, smith_membership_period: 1000, smith_pending_membership_period: 500, smith_wot_first_cert_issuable_on: 20, smith_wot_min_cert_for_membership: 2, wot_first_cert_issuable_on: 20, wot_min_cert_for_create_idty_right: 2, wot_min_cert_for_membership: 2 }
+Preimage.PreimageFor = [
+]
+Preimage.StatusFor = [
+]
+ProvideRandomness.CounterForRequestsIds = None
+ProvideRandomness.NexEpochHookIn = Some(5)
+ProvideRandomness.RequestIdProvider = None
+ProvideRandomness.RequestsIds = [
+]
+ProvideRandomness.RequestsReadyAtEpoch = [
+]
+ProvideRandomness.RequestsReadyAtNextBlock = []
+Proxy.Announcements = [
+]
+Proxy.Proxies = [
+]
+Scheduler.Agenda = [
+]
+Scheduler.IncompleteSince = None
+Scheduler.Lookup = [
+]
+Session.CurrentIndex = 0
+Session.DisabledValidators = []
+Session.KeyOwner = [
+	(KeyTypeId([103, 114, 97, 110]), [136, 220, 52, 23, 213, 5, 142, 196, 180, 80, 62, 12, 18, 234, 26, 10, 137, 190, 32, 15, 233, 137, 34, 66, 61, 67, 52, 1, 79, 166, 176, 238]) = d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)
+	(KeyTypeId([103, 114, 97, 110]), [209, 124, 45, 120, 35, 235, 242, 96, 253, 19, 143, 45, 126, 39, 209, 20, 192, 20, 93, 150, 139, 95, 245, 0, 97, 37, 242, 65, 79, 173, 174, 105]) = 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)
+	(KeyTypeId([103, 114, 97, 110]), [67, 150, 96, 179, 108, 108, 3, 175, 175, 202, 2, 123, 145, 11, 79, 236, 249, 152, 1, 131, 76, 98, 165, 230, 0, 111, 39, 217, 120, 222, 35, 79]) = 90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)
+	(KeyTypeId([105, 109, 111, 110]), [142, 175, 4, 21, 22, 135, 115, 99, 38, 201, 254, 161, 126, 37, 252, 82, 135, 97, 54, 147, 201, 18, 144, 156, 178, 38, 170, 71, 148, 242, 106, 72]) = 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)
+	(KeyTypeId([105, 109, 111, 110]), [144, 181, 171, 32, 92, 105, 116, 201, 234, 132, 27, 230, 136, 134, 70, 51, 220, 156, 168, 163, 87, 132, 62, 234, 207, 35, 20, 100, 153, 101, 254, 34]) = 90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)
+	(KeyTypeId([105, 109, 111, 110]), [212, 53, 147, 199, 21, 253, 211, 28, 97, 20, 26, 189, 4, 169, 159, 214, 130, 44, 133, 88, 133, 76, 205, 227, 154, 86, 132, 231, 165, 109, 162, 125]) = d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)
+	(KeyTypeId([97, 117, 100, 105]), [142, 175, 4, 21, 22, 135, 115, 99, 38, 201, 254, 161, 126, 37, 252, 82, 135, 97, 54, 147, 201, 18, 144, 156, 178, 38, 170, 71, 148, 242, 106, 72]) = 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)
+	(KeyTypeId([97, 117, 100, 105]), [144, 181, 171, 32, 92, 105, 116, 201, 234, 132, 27, 230, 136, 134, 70, 51, 220, 156, 168, 163, 87, 132, 62, 234, 207, 35, 20, 100, 153, 101, 254, 34]) = 90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)
+	(KeyTypeId([97, 117, 100, 105]), [212, 53, 147, 199, 21, 253, 211, 28, 97, 20, 26, 189, 4, 169, 159, 214, 130, 44, 133, 88, 133, 76, 205, 227, 154, 86, 132, 231, 165, 109, 162, 125]) = d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)
+	(KeyTypeId([98, 97, 98, 101]), [142, 175, 4, 21, 22, 135, 115, 99, 38, 201, 254, 161, 126, 37, 252, 82, 135, 97, 54, 147, 201, 18, 144, 156, 178, 38, 170, 71, 148, 242, 106, 72]) = 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)
+	(KeyTypeId([98, 97, 98, 101]), [144, 181, 171, 32, 92, 105, 116, 201, 234, 132, 27, 230, 136, 134, 70, 51, 220, 156, 168, 163, 87, 132, 62, 234, 207, 35, 20, 100, 153, 101, 254, 34]) = 90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)
+	(KeyTypeId([98, 97, 98, 101]), [212, 53, 147, 199, 21, 253, 211, 28, 97, 20, 26, 189, 4, 169, 159, 214, 130, 44, 133, 88, 133, 76, 205, 227, 154, 86, 132, 231, 165, 109, 162, 125]) = d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)
+]
+Session.NextKeys = [
+	8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...) = SessionKeys { grandpa: Public(d17c2d7823ebf260fd138f2d7e27d114c0145d968b5ff5006125f2414fadae69 (5GoNkf6W...)), babe: Public(8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)), im_online: Public(8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)), authority_discovery: Public(8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)) }
+	90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...) = SessionKeys { grandpa: Public(439660b36c6c03afafca027b910b4fecf99801834c62a5e6006f27d978de234f (5DbKjhNL...)), babe: Public(90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)), im_online: Public(90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)), authority_discovery: Public(90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)) }
+	d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...) = SessionKeys { grandpa: Public(88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee (5FA9nQDV...)), babe: Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)), im_online: Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)), authority_discovery: Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)) }
+]
+Session.QueuedChanged = false
+Session.QueuedKeys = [(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...), SessionKeys { grandpa: Public(88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee (5FA9nQDV...)), babe: Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)), im_online: Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)), authority_discovery: Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)) })]
+Session.Validators = [d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)]
+SmithCert.StorageCertsRemovableOn = [
+	1000 = [(2, 1), (3, 1), (1, 2), (3, 2), (1, 3), (2, 3)]
+]
+SmithCert.StorageIdtyCertMeta = [
+	1 = IdtyCertMeta { issued_count: 2, next_issuable_on: 0, received_count: 2 }
+	2 = IdtyCertMeta { issued_count: 2, next_issuable_on: 0, received_count: 2 }
+	3 = IdtyCertMeta { issued_count: 2, next_issuable_on: 0, received_count: 2 }
+]
+SmithCertCert.sByReceiver = [
+	1 = [(2, 1000), (3, 1000)]
+	2 = [(1, 1000), (3, 1000)]
+	3 = [(1, 1000), (2, 1000)]
+]
+SmithMembership.CounterForMembership = Some(3)
+SmithMembership.Membership = [
+	1 = MembershipData { expire_on: 1000 }
+	2 = MembershipData { expire_on: 1000 }
+	3 = MembershipData { expire_on: 1000 }
+]
+SmithMembership.MembershipsExpireOn = [
+	1000 = [1, 2, 3]
+]
+SmithMembership.PendingMembership = [
+]
+SmithMembership.PendingMembershipsExpireOn = [
+]
+Sudo.Key = None
+System.Account = [
+	306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20 (5DAAnrj7...) = AccountInfo { nonce: 0, consumers: 0, providers: 0, sufficients: 1, data: AccountData { random_id: Some(0x0303030303030303030303030303030303030303030303030303030303030303), free: 0, reserved: 0, fee_frozen: 0 } }
+	6d6f646c70792f74727372790000000000000000000000000000000000000000 (5EYCAe5i...) = AccountInfo { nonce: 0, consumers: 0, providers: 1, sufficients: 0, data: AccountData { random_id: None, free: 200, reserved: 0, fee_frozen: 0 } }
+	8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...) = AccountInfo { nonce: 0, consumers: 0, providers: 1, sufficients: 1, data: AccountData { random_id: Some(0x0101010101010101010101010101010101010101010101010101010101010101), free: 0, reserved: 0, fee_frozen: 0 } }
+	90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...) = AccountInfo { nonce: 0, consumers: 0, providers: 1, sufficients: 1, data: AccountData { random_id: Some(0x0202020202020202020202020202020202020202020202020202020202020202), free: 0, reserved: 0, fee_frozen: 0 } }
+	d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...) = AccountInfo { nonce: 0, consumers: 0, providers: 1, sufficients: 1, data: AccountData { random_id: Some(0x0000000000000000000000000000000000000000000000000000000000000000), free: 0, reserved: 0, fee_frozen: 0 } }
+	e659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e (5HGjWAeF...) = AccountInfo { nonce: 0, consumers: 0, providers: 0, sufficients: 1, data: AccountData { random_id: None, free: 0, reserved: 0, fee_frozen: 0 } }
+]
+System.AllExtrinsicsLen = None
+System.BlockHash = [
+	0 = 0x4545454545454545454545454545454545454545454545454545454545454545
+]
+System.BlockWeight = None
+System.Digest = None
+System.EventCount = None
+System.EventTopics = [
+]
+System.Events = None
+System.ExecutionPhase = None
+System.ExtrinsicCount = None
+System.ExtrinsicData = [
+]
+System.LastRuntimeUpgrade = Some(LastRuntimeUpgradeInfo { spec_version: 400, spec_name: RuntimeString::Owned("gdev") })
+System.Number = Some(4)
+System.ParentHash = Some(0x4545454545454545454545454545454545454545454545454545454545454545)
+System.UpgradedToTripleRefCount = Some(true)
+System.UpgradedToU32RefCount = Some(true)
+TechnicalCommittee.Members = []
+TechnicalCommittee.Prime = None
+TechnicalCommittee.ProposalCount = 0
+TechnicalCommittee.ProposalOf = [
+]
+TechnicalCommittee.Proposals = BoundedVec([], 20)
+TechnicalCommittee.Voting = [
+]
+Timestamp.DidUpdate = None
+Timestamp.Now = 0
+TransactionPayment.NextFeeMultiplier = FixedU128(0.000000000000000000)
+TransactionPayment.StorageVersion = None
+Treasury.Approvals = BoundedVec([], 100)
+Treasury.ProposalCount = 0
+Treasury.Proposals = [
+]
+UniversalDividend.CurrentUd = 1000
+UniversalDividend.CurrentUdIndex = 1
+UniversalDividend.MonetaryMass = 0
+UniversalDividend.NextReeval = 100
+UniversalDividend.PastReevals = BoundedVec([(1, 1000)], 4)
diff --git a/runtime/gdev/tests/values_storage_with_run_to_block.b.5.expected.txt b/runtime/gdev/tests/values_storage_with_run_to_block.b.5.expected.txt
new file mode 100644
index 000000000..0aa23d4f5
--- /dev/null
+++ b/runtime/gdev/tests/values_storage_with_run_to_block.b.5.expected.txt
@@ -0,0 +1,254 @@
+Account.PendingNewAccounts = [
+]
+Account.PendingRandomIdAssignments = [
+]
+AtomicSwap.PendingSwaps = [
+]
+AuthorityMembers.AccountIdOf = [
+]
+AuthorityMembers.AuthoritiesCounter = 1
+AuthorityMembers.BlackList = []
+AuthorityMembers.IncomingAuthorities = []
+AuthorityMembers.Members = [
+	1 = MemberData { expire_on_session: 0, must_rotate_keys_before: 1500, owner_key: d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...) }
+	2 = MemberData { expire_on_session: 0, must_rotate_keys_before: 1500, owner_key: 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...) }
+	3 = MemberData { expire_on_session: 0, must_rotate_keys_before: 1500, owner_key: 90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...) }
+]
+AuthorityMembers.MustRotateKeysBefore = [
+	1500 = [1]
+]
+AuthorityMembers.OnlineAuthorities = [1]
+AuthorityMembers.OutgoingAuthorities = []
+AuthorityMembersMembers.ExpireOn = [
+]
+Authorship.Author = None
+Authorship.DidSetUncles = Some(false)
+Authorship.Uncles = Some(BoundedVec([], 11))
+Babe.AuthorVrfRandomness = None
+Babe.Authorities = WeakBoundedVec([(Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)), 1)], 32)
+Babe.CurrentSlot = Slot(0)
+Babe.EpochConfig = None
+Babe.EpochIndex = 0
+Babe.EpochStart = None
+Babe.GenesisSlot = Slot(0)
+Babe.Initialized = Some(None)
+Babe.Lateness = None
+Babe.NextAuthorities = Some(WeakBoundedVec([(Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)), 1)], 32))
+Babe.NextEpochConfig = None
+Babe.NextRandomness = None
+Babe.PendingEpochConfigChange = None
+Babe.Randomness = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+Babe.SegmentIndex = None
+Babe.UnderConstruction = [
+]
+Balances.Account = [
+]
+Balances.Locks = [
+]
+Balances.Reserves = [
+]
+Balances.StorageVersion = None
+Balances.TotalIssuance = 0
+Cert.CertsByReceiver = [
+	1 = [(2, 10000), (3, 10000), (4, 10000)]
+	2 = [(1, 10000), (3, 10000), (4, 10000)]
+	3 = [(1, 10000), (2, 10000), (4, 10000)]
+	4 = [(1, 10000), (2, 10000), (3, 10000)]
+	5 = [(1, 10003)]
+]
+Cert.StorageCertsRemovableOn = [
+	10000 = [(2, 1), (3, 1), (4, 1), (1, 2), (3, 2), (4, 2), (1, 3), (2, 3), (4, 3), (1, 4), (2, 4), (3, 4)]
+	10003 = [(1, 5)]
+]
+Cert.StorageIdtyCertMeta = [
+	1 = IdtyCertMeta { issued_count: 4, next_issuable_on: 18, received_count: 3 }
+	2 = IdtyCertMeta { issued_count: 3, next_issuable_on: 0, received_count: 3 }
+	3 = IdtyCertMeta { issued_count: 3, next_issuable_on: 0, received_count: 3 }
+	4 = IdtyCertMeta { issued_count: 3, next_issuable_on: 0, received_count: 3 }
+	5 = IdtyCertMeta { issued_count: 0, next_issuable_on: 0, received_count: 1 }
+]
+Grandpa.CurrentSetId = None
+Grandpa.NextForced = None
+Grandpa.PendingChange = None
+Grandpa.SetIdSession = [
+	0 = 0
+]
+Grandpa.Stalled = None
+Grandpa.State = None
+Identity.CounterForIdentities = Some(5)
+Identity.Identities = [
+	1 = IdtyValue { data: IdtyData { first_eligible_ud: FirstEligibleUd(Some(1)) }, next_creatable_identity_on: 53, old_owner_key: None, owner_key: d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...), removable_on: 0, status: IdtyStatus::Validated }
+	2 = IdtyValue { data: IdtyData { first_eligible_ud: FirstEligibleUd(Some(1)) }, next_creatable_identity_on: 0, old_owner_key: None, owner_key: 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...), removable_on: 0, status: IdtyStatus::Validated }
+	3 = IdtyValue { data: IdtyData { first_eligible_ud: FirstEligibleUd(Some(1)) }, next_creatable_identity_on: 0, old_owner_key: None, owner_key: 90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...), removable_on: 0, status: IdtyStatus::Validated }
+	4 = IdtyValue { data: IdtyData { first_eligible_ud: FirstEligibleUd(Some(1)) }, next_creatable_identity_on: 0, old_owner_key: None, owner_key: 306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20 (5DAAnrj7...), removable_on: 0, status: IdtyStatus::Validated }
+	5 = IdtyValue { data: IdtyData { first_eligible_ud: FirstEligibleUd(None) }, next_creatable_identity_on: 0, old_owner_key: None, owner_key: e659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e (5HGjWAeF...), removable_on: 43, status: IdtyStatus::ConfirmedByOwner }
+]
+Identity.IdentitiesNames = [
+	"Alice" = ()
+	"Bob" = ()
+	"Charlie" = ()
+	"Dave" = ()
+	"Eeeeeveeeee" = ()
+]
+Identity.IdentitiesRemovableOn = [
+	43 = [(5, IdtyStatus::Created)]
+]
+Identity.IdentityIndexOf = [
+	306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20 (5DAAnrj7...) = 4
+	8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...) = 2
+	90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...) = 3
+	d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...) = 1
+	e659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e (5HGjWAeF...) = 5
+]
+Identity.NextIdtyIndex = Some(6)
+ImOnline.AuthoredBlocks = [
+]
+ImOnline.HeartbeatAfter = None
+ImOnline.Keys = Some(WeakBoundedVec([Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...))], 32))
+ImOnline.ReceivedHeartbeats = [
+]
+Membership.CounterForMembership = Some(4)
+Membership.Membership = [
+	1 = MembershipData { expire_on: 100 }
+	2 = MembershipData { expire_on: 100 }
+	3 = MembershipData { expire_on: 100 }
+	4 = MembershipData { expire_on: 100 }
+]
+Membership.MembershipsExpireOn = [
+	100 = [1, 2, 3, 4]
+]
+Membership.PendingMembership = [
+	5 = ()
+]
+Membership.PendingMembershipsExpireOn = [
+	504 = [5]
+]
+Multisig.Multisigs = [
+]
+Offences.ConcurrentReportsIndex = [
+]
+Offences.Reports = [
+]
+OneshotAccount.OneshotAccounts = [
+]
+Parameters.ParametersStorage = Parameters { babe_epoch_duration: 25, cert_period: 15, cert_max_by_issuer: 10, cert_min_received_cert_to_issue_cert: 2, cert_validity_period: 10000, idty_confirm_period: 40, idty_creation_period: 50, membership_period: 100, pending_membership_period: 500, ud_creation_period: 10, ud_reeval_period: 200, smith_cert_period: 15, smith_cert_max_by_issuer: 8, smith_cert_min_received_cert_to_issue_cert: 2, smith_cert_validity_period: 1000, smith_membership_period: 1000, smith_pending_membership_period: 500, smith_wot_first_cert_issuable_on: 20, smith_wot_min_cert_for_membership: 2, wot_first_cert_issuable_on: 20, wot_min_cert_for_create_idty_right: 2, wot_min_cert_for_membership: 2 }
+Preimage.PreimageFor = [
+]
+Preimage.StatusFor = [
+]
+ProvideRandomness.CounterForRequestsIds = None
+ProvideRandomness.NexEpochHookIn = Some(5)
+ProvideRandomness.RequestIdProvider = None
+ProvideRandomness.RequestsIds = [
+]
+ProvideRandomness.RequestsReadyAtEpoch = [
+]
+ProvideRandomness.RequestsReadyAtNextBlock = []
+Proxy.Announcements = [
+]
+Proxy.Proxies = [
+]
+Scheduler.Agenda = [
+]
+Scheduler.IncompleteSince = None
+Scheduler.Lookup = [
+]
+Session.CurrentIndex = 0
+Session.DisabledValidators = []
+Session.KeyOwner = [
+	(KeyTypeId([103, 114, 97, 110]), [136, 220, 52, 23, 213, 5, 142, 196, 180, 80, 62, 12, 18, 234, 26, 10, 137, 190, 32, 15, 233, 137, 34, 66, 61, 67, 52, 1, 79, 166, 176, 238]) = d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)
+	(KeyTypeId([103, 114, 97, 110]), [209, 124, 45, 120, 35, 235, 242, 96, 253, 19, 143, 45, 126, 39, 209, 20, 192, 20, 93, 150, 139, 95, 245, 0, 97, 37, 242, 65, 79, 173, 174, 105]) = 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)
+	(KeyTypeId([103, 114, 97, 110]), [67, 150, 96, 179, 108, 108, 3, 175, 175, 202, 2, 123, 145, 11, 79, 236, 249, 152, 1, 131, 76, 98, 165, 230, 0, 111, 39, 217, 120, 222, 35, 79]) = 90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)
+	(KeyTypeId([105, 109, 111, 110]), [142, 175, 4, 21, 22, 135, 115, 99, 38, 201, 254, 161, 126, 37, 252, 82, 135, 97, 54, 147, 201, 18, 144, 156, 178, 38, 170, 71, 148, 242, 106, 72]) = 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)
+	(KeyTypeId([105, 109, 111, 110]), [144, 181, 171, 32, 92, 105, 116, 201, 234, 132, 27, 230, 136, 134, 70, 51, 220, 156, 168, 163, 87, 132, 62, 234, 207, 35, 20, 100, 153, 101, 254, 34]) = 90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)
+	(KeyTypeId([105, 109, 111, 110]), [212, 53, 147, 199, 21, 253, 211, 28, 97, 20, 26, 189, 4, 169, 159, 214, 130, 44, 133, 88, 133, 76, 205, 227, 154, 86, 132, 231, 165, 109, 162, 125]) = d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)
+	(KeyTypeId([97, 117, 100, 105]), [142, 175, 4, 21, 22, 135, 115, 99, 38, 201, 254, 161, 126, 37, 252, 82, 135, 97, 54, 147, 201, 18, 144, 156, 178, 38, 170, 71, 148, 242, 106, 72]) = 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)
+	(KeyTypeId([97, 117, 100, 105]), [144, 181, 171, 32, 92, 105, 116, 201, 234, 132, 27, 230, 136, 134, 70, 51, 220, 156, 168, 163, 87, 132, 62, 234, 207, 35, 20, 100, 153, 101, 254, 34]) = 90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)
+	(KeyTypeId([97, 117, 100, 105]), [212, 53, 147, 199, 21, 253, 211, 28, 97, 20, 26, 189, 4, 169, 159, 214, 130, 44, 133, 88, 133, 76, 205, 227, 154, 86, 132, 231, 165, 109, 162, 125]) = d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)
+	(KeyTypeId([98, 97, 98, 101]), [142, 175, 4, 21, 22, 135, 115, 99, 38, 201, 254, 161, 126, 37, 252, 82, 135, 97, 54, 147, 201, 18, 144, 156, 178, 38, 170, 71, 148, 242, 106, 72]) = 8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)
+	(KeyTypeId([98, 97, 98, 101]), [144, 181, 171, 32, 92, 105, 116, 201, 234, 132, 27, 230, 136, 134, 70, 51, 220, 156, 168, 163, 87, 132, 62, 234, 207, 35, 20, 100, 153, 101, 254, 34]) = 90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)
+	(KeyTypeId([98, 97, 98, 101]), [212, 53, 147, 199, 21, 253, 211, 28, 97, 20, 26, 189, 4, 169, 159, 214, 130, 44, 133, 88, 133, 76, 205, 227, 154, 86, 132, 231, 165, 109, 162, 125]) = d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)
+]
+Session.NextKeys = [
+	8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...) = SessionKeys { grandpa: Public(d17c2d7823ebf260fd138f2d7e27d114c0145d968b5ff5006125f2414fadae69 (5GoNkf6W...)), babe: Public(8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)), im_online: Public(8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)), authority_discovery: Public(8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...)) }
+	90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...) = SessionKeys { grandpa: Public(439660b36c6c03afafca027b910b4fecf99801834c62a5e6006f27d978de234f (5DbKjhNL...)), babe: Public(90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)), im_online: Public(90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)), authority_discovery: Public(90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...)) }
+	d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...) = SessionKeys { grandpa: Public(88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee (5FA9nQDV...)), babe: Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)), im_online: Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)), authority_discovery: Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)) }
+]
+Session.QueuedChanged = false
+Session.QueuedKeys = [(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...), SessionKeys { grandpa: Public(88dc3417d5058ec4b4503e0c12ea1a0a89be200fe98922423d4334014fa6b0ee (5FA9nQDV...)), babe: Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)), im_online: Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)), authority_discovery: Public(d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)) })]
+Session.Validators = [d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...)]
+SmithCert.StorageCertsRemovableOn = [
+	1000 = [(2, 1), (3, 1), (1, 2), (3, 2), (1, 3), (2, 3)]
+]
+SmithCert.StorageIdtyCertMeta = [
+	1 = IdtyCertMeta { issued_count: 2, next_issuable_on: 0, received_count: 2 }
+	2 = IdtyCertMeta { issued_count: 2, next_issuable_on: 0, received_count: 2 }
+	3 = IdtyCertMeta { issued_count: 2, next_issuable_on: 0, received_count: 2 }
+]
+SmithCertCert.sByReceiver = [
+	1 = [(2, 1000), (3, 1000)]
+	2 = [(1, 1000), (3, 1000)]
+	3 = [(1, 1000), (2, 1000)]
+]
+SmithMembership.CounterForMembership = Some(3)
+SmithMembership.Membership = [
+	1 = MembershipData { expire_on: 1000 }
+	2 = MembershipData { expire_on: 1000 }
+	3 = MembershipData { expire_on: 1000 }
+]
+SmithMembership.MembershipsExpireOn = [
+	1000 = [1, 2, 3]
+]
+SmithMembership.PendingMembership = [
+]
+SmithMembership.PendingMembershipsExpireOn = [
+]
+Sudo.Key = None
+System.Account = [
+	306721211d5404bd9da88e0204360a1a9ab8b87c66c1bc2fcdd37f3c2222cc20 (5DAAnrj7...) = AccountInfo { nonce: 0, consumers: 0, providers: 0, sufficients: 1, data: AccountData { random_id: Some(0x0303030303030303030303030303030303030303030303030303030303030303), free: 0, reserved: 0, fee_frozen: 0 } }
+	6d6f646c70792f74727372790000000000000000000000000000000000000000 (5EYCAe5i...) = AccountInfo { nonce: 0, consumers: 0, providers: 1, sufficients: 0, data: AccountData { random_id: None, free: 200, reserved: 0, fee_frozen: 0 } }
+	8eaf04151687736326c9fea17e25fc5287613693c912909cb226aa4794f26a48 (5FHneW46...) = AccountInfo { nonce: 0, consumers: 0, providers: 1, sufficients: 1, data: AccountData { random_id: Some(0x0101010101010101010101010101010101010101010101010101010101010101), free: 0, reserved: 0, fee_frozen: 0 } }
+	90b5ab205c6974c9ea841be688864633dc9ca8a357843eeacf2314649965fe22 (5FLSigC9...) = AccountInfo { nonce: 0, consumers: 0, providers: 1, sufficients: 1, data: AccountData { random_id: Some(0x0202020202020202020202020202020202020202020202020202020202020202), free: 0, reserved: 0, fee_frozen: 0 } }
+	d43593c715fdd31c61141abd04a99fd6822c8558854ccde39a5684e7a56da27d (5GrwvaEF...) = AccountInfo { nonce: 0, consumers: 0, providers: 1, sufficients: 1, data: AccountData { random_id: Some(0x0000000000000000000000000000000000000000000000000000000000000000), free: 0, reserved: 0, fee_frozen: 0 } }
+	e659a7a1628cdd93febc04a4e0646ea20e9f5f0ce097d9a05290d4a9e054df4e (5HGjWAeF...) = AccountInfo { nonce: 0, consumers: 0, providers: 0, sufficients: 1, data: AccountData { random_id: None, free: 0, reserved: 0, fee_frozen: 0 } }
+]
+System.AllExtrinsicsLen = None
+System.BlockHash = [
+	0 = 0x4545454545454545454545454545454545454545454545454545454545454545
+]
+System.BlockWeight = None
+System.Digest = None
+System.EventCount = None
+System.EventTopics = [
+]
+System.Events = None
+System.ExecutionPhase = None
+System.ExtrinsicCount = None
+System.ExtrinsicData = [
+]
+System.LastRuntimeUpgrade = Some(LastRuntimeUpgradeInfo { spec_version: 400, spec_name: RuntimeString::Owned("gdev") })
+System.Number = Some(5)
+System.ParentHash = Some(0x4545454545454545454545454545454545454545454545454545454545454545)
+System.UpgradedToTripleRefCount = Some(true)
+System.UpgradedToU32RefCount = Some(true)
+TechnicalCommittee.Members = []
+TechnicalCommittee.Prime = None
+TechnicalCommittee.ProposalCount = 0
+TechnicalCommittee.ProposalOf = [
+]
+TechnicalCommittee.Proposals = BoundedVec([], 20)
+TechnicalCommittee.Voting = [
+]
+Timestamp.DidUpdate = None
+Timestamp.Now = 0
+TransactionPayment.NextFeeMultiplier = FixedU128(0.000000000000000000)
+TransactionPayment.StorageVersion = None
+Treasury.Approvals = BoundedVec([], 100)
+Treasury.ProposalCount = 0
+Treasury.Proposals = [
+]
+UniversalDividend.CurrentUd = 1000
+UniversalDividend.CurrentUdIndex = 1
+UniversalDividend.MonetaryMass = 0
+UniversalDividend.NextReeval = 100
+UniversalDividend.PastReevals = BoundedVec([(1, 1000)], 4)
-- 
GitLab