From 93853b2dd678270caedf39fbc328d7af9a77ccd5 Mon Sep 17 00:00:00 2001
From: Benjamin Gallois <business@gallois.cc>
Date: Tue, 30 Jan 2024 23:43:51 +0100
Subject: [PATCH] Upgrade to polkadot-v1.6.0 (nodes/rust/duniter-v2s!229)

* check live tests

* cargo check benchmarks after rebase

* cargo check tests after rebase

* update metadata after rebase

* cargo check after rebase

* cargo fmt after rebase

* upgrade runtime to polkadot v1.6.0

upgrade node to polkadot v1.6.0

upgrade distance oracle to polkadot v1.6.0

upgrade end2end tests

upgrade xtask to polkadot v1.6.0

update repository paths to duniter polkadot v1.6.0

fix https://git.duniter.org/nodes/rust/duniter-v2s/-/issues/131

optimize end2end test

fix review errors

update subxt branch

update test comment
---
 Cargo.lock                                    | 5691 +++++++++--------
 Cargo.toml                                    |  188 +-
 client/distance/Cargo.toml                    |   33 +-
 distance-oracle/Cargo.toml                    |   32 +-
 distance-oracle/src/api.rs                    |   47 +-
 distance-oracle/src/lib.rs                    |   20 +-
 docs/api/runtime-calls.md                     | 1145 +---
 docs/api/runtime-errors.md                    |  129 +-
 docs/api/runtime-events.md                    |  169 +-
 end2end-tests/Cargo.toml                      |   14 +-
 .../cucumber-features/oneshot_account.feature |   15 +-
 end2end-tests/cucumber-genesis/default.json   |    2 +-
 end2end-tests/tests/common/balances.rs        |   32 +-
 end2end-tests/tests/common/cert.rs            |    9 +-
 end2end-tests/tests/common/distance.rs        |   22 +-
 end2end-tests/tests/common/identity.rs        |   20 +-
 end2end-tests/tests/common/mod.rs             |   56 +-
 end2end-tests/tests/common/oneshot.rs         |   21 +-
 end2end-tests/tests/cucumber_tests.rs         |   53 +-
 live-tests/Cargo.toml                         |    8 +-
 live-tests/tests/sanity_gdev.rs               |   37 +-
 node/src/chain_spec/gdev.rs                   |   37 +-
 node/src/chain_spec/gtest.rs                  |   20 +-
 node/src/command.rs                           |   57 +-
 node/src/service.rs                           |  301 +-
 node/src/service/client.rs                    |   76 +-
 pallets/authority-members/Cargo.toml          |   85 +-
 pallets/authority-members/src/lib.rs          |   24 +-
 pallets/authority-members/src/mock.rs         |   73 +-
 pallets/authority-members/src/weights.rs      |    4 +
 pallets/certification/Cargo.toml              |   71 +-
 pallets/certification/src/benchmarking.rs     |    8 +-
 pallets/certification/src/lib.rs              |   54 +-
 pallets/certification/src/mock.rs             |   53 +-
 pallets/certification/src/weights.rs          |    6 +
 pallets/distance/Cargo.toml                   |   96 +-
 pallets/distance/src/benchmarking.rs          |    5 +-
 pallets/distance/src/lib.rs                   |    2 +
 pallets/distance/src/mock.rs                  |  109 +-
 pallets/duniter-account/Cargo.toml            |   92 +-
 pallets/duniter-account/src/benchmarking.rs   |    6 +-
 pallets/duniter-account/src/lib.rs            |    7 +-
 pallets/duniter-account/src/types.rs          |   16 +-
 pallets/duniter-account/src/weights.rs        |    5 +
 pallets/duniter-test-parameters/Cargo.toml    |   63 +-
 .../duniter-test-parameters/macro/Cargo.toml  |    8 +-
 pallets/duniter-test-parameters/src/lib.rs    |   19 +-
 pallets/duniter-wot/Cargo.toml                |   84 +-
 pallets/duniter-wot/src/lib.rs                |    2 +-
 pallets/duniter-wot/src/mock.rs               |   91 +-
 pallets/identity/Cargo.toml                   |   74 +-
 pallets/identity/src/benchmarking.rs          |   30 +-
 pallets/identity/src/lib.rs                   |   60 +-
 pallets/identity/src/mock.rs                  |   67 +-
 pallets/identity/src/types.rs                 |   61 +-
 pallets/identity/src/weights.rs               |   14 +
 pallets/membership/Cargo.toml                 |   72 +-
 pallets/membership/src/benchmarking.rs        |    4 +-
 pallets/membership/src/lib.rs                 |   41 +-
 pallets/membership/src/mock.rs                |   52 +-
 pallets/membership/src/weights.rs             |    1 +
 pallets/offences/Cargo.toml                   |   41 +-
 pallets/offences/src/mock.rs                  |   54 +-
 pallets/oneshot-account/Cargo.toml            |   77 +-
 pallets/oneshot-account/src/benchmarking.rs   |    4 +-
 pallets/oneshot-account/src/check_nonce.rs    |    3 +-
 pallets/oneshot-account/src/lib.rs            |    8 +-
 pallets/oneshot-account/src/mock.rs           |   69 +-
 pallets/oneshot-account/src/weights.rs        |    2 +
 pallets/provide-randomness/Cargo.toml         |   56 +-
 .../provide-randomness/src/benchmarking.rs    |    5 +-
 pallets/provide-randomness/src/lib.rs         |    9 +-
 pallets/provide-randomness/src/weights.rs     |    2 +
 pallets/quota/Cargo.toml                      |   63 +-
 pallets/quota/src/benchmarking.rs             |    8 +-
 pallets/quota/src/lib.rs                      |   17 +-
 pallets/quota/src/mock.rs                     |   81 +-
 pallets/quota/src/weights.rs                  |    5 +
 pallets/session-benchmarking/Cargo.toml       |   67 +-
 pallets/smith-members/Cargo.toml              |   58 +-
 pallets/smith-members/src/lib.rs              |    9 +-
 pallets/smith-members/src/mock.rs             |   58 +-
 pallets/smith-members/src/weights.rs          |    2 +
 pallets/universal-dividend/Cargo.toml         |   90 +-
 pallets/universal-dividend/src/lib.rs         |    5 +-
 pallets/universal-dividend/src/mock.rs        |   71 +-
 pallets/universal-dividend/src/types.rs       |    8 +-
 pallets/universal-dividend/src/weights.rs     |    3 +
 pallets/upgrade-origin/Cargo.toml             |   53 +-
 pallets/upgrade-origin/src/lib.rs             |    6 +-
 primitives/distance/Cargo.toml                |   44 +-
 primitives/distance/src/lib.rs                |    2 +-
 primitives/duniter/Cargo.toml                 |   23 +-
 primitives/duniter/src/lib.rs                 |    1 +
 primitives/membership/Cargo.toml              |   38 +-
 primitives/membership/src/lib.rs              |   19 +-
 primitives/membership/src/traits.rs           |    1 +
 resources/metadata.scale                      |  Bin 128583 -> 112080 bytes
 resources/weight_analyzer/Cargo.toml          |    2 +-
 resources/weight_analyzer/src/lib.rs          |    1 +
 runtime/common/Cargo.toml                     |  157 +-
 runtime/common/src/apis.rs                    |   11 +-
 runtime/common/src/entities.rs                |   32 +-
 runtime/common/src/fees.rs                    |    1 +
 runtime/common/src/handlers.rs                |    2 +-
 runtime/common/src/pallets_config.rs          |   40 +-
 runtime/common/src/providers.rs               |    2 +
 runtime/common/src/weights.rs                 |    2 +
 runtime/common/src/weights/block_weights.rs   |   19 +-
 .../common/src/weights/extrinsic_weights.rs   |   19 +-
 .../weights/frame_benchmarking_baseline.rs    |    1 -
 runtime/common/src/weights/frame_system.rs    |   62 +-
 .../src/weights/pallet_authority_members.rs   |  113 +-
 runtime/common/src/weights/pallet_babe.rs     |    2 +-
 runtime/common/src/weights/pallet_balances.rs |   67 +-
 .../src/weights/pallet_certification.rs       |    1 -
 .../common/src/weights/pallet_collective.rs   |  141 +-
 runtime/common/src/weights/pallet_distance.rs |   41 +-
 .../src/weights/pallet_duniter_account.rs     |   83 +-
 runtime/common/src/weights/pallet_grandpa.rs  |    2 +-
 runtime/common/src/weights/pallet_identity.rs |  211 +-
 .../common/src/weights/pallet_im_online.rs    |   58 +-
 .../common/src/weights/pallet_membership.rs   |   57 +-
 runtime/common/src/weights/pallet_multisig.rs |   29 +-
 .../src/weights/pallet_oneshot_account.rs     |   29 +-
 runtime/common/src/weights/pallet_preimage.rs |  141 +-
 .../src/weights/pallet_provide_randomness.rs  |   87 +-
 runtime/common/src/weights/pallet_proxy.rs    |   69 +-
 runtime/common/src/weights/pallet_quota.rs    |   41 +-
 .../common/src/weights/pallet_scheduler.rs    |   51 +-
 runtime/common/src/weights/pallet_session.rs  |   17 +-
 .../src/weights/pallet_smith_members.rs       |   49 +-
 runtime/common/src/weights/pallet_sudo.rs     |   96 +
 .../common/src/weights/pallet_timestamp.rs    |   17 +-
 runtime/common/src/weights/pallet_treasury.rs |  103 +-
 .../src/weights/pallet_universal_dividend.rs  |  108 +-
 .../src/weights/pallet_upgrade_origin.rs      |    1 -
 runtime/common/src/weights/pallet_utility.rs  |    1 -
 .../common/src/weights/paritydb_weights.rs    |   45 +-
 runtime/g1/Cargo.toml                         |  222 +-
 runtime/g1/build.rs                           |   15 +-
 runtime/g1/src/lib.rs                         |   88 +-
 runtime/gdev/Cargo.toml                       |  221 +-
 runtime/gdev/build.rs                         |   15 +-
 runtime/gdev/src/lib.rs                       |   85 +-
 runtime/gdev/tests/common/mod.rs              |   18 +-
 runtime/gdev/tests/integration_tests.rs       |   16 +-
 runtime/gdev/tests/xt_tests.rs                |    2 +-
 runtime/gtest/Cargo.toml                      |  214 +-
 runtime/gtest/build.rs                        |   15 +-
 runtime/gtest/src/lib.rs                      |   84 +-
 rust-toolchain.toml                           |    4 +-
 rustfmt.toml                                  |    1 +
 scripts/run_all_benchmarks.sh                 |    5 +
 xtask/Cargo.toml                              |   10 +-
 xtask/src/gen_doc.rs                          |   48 +-
 156 files changed, 7479 insertions(+), 6350 deletions(-)
 create mode 100644 runtime/common/src/weights/pallet_sudo.rs
 create mode 100644 rustfmt.toml
 create mode 100755 scripts/run_all_benchmarks.sh

diff --git a/Cargo.lock b/Cargo.lock
index 27af27b79..026013d64 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -14,11 +14,11 @@ dependencies = [
 
 [[package]]
 name = "addr2line"
-version = "0.17.0"
+version = "0.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b"
+checksum = "a76fd60b23679b7d19bd066031410fb7e458ccc5e958eb5c325888ce4baedc97"
 dependencies = [
- "gimli 0.26.2",
+ "gimli 0.27.3",
 ]
 
 [[package]]
@@ -27,7 +27,7 @@ version = "0.21.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
 dependencies = [
- "gimli 0.28.0",
+ "gimli 0.28.1",
 ]
 
 [[package]]
@@ -36,25 +36,6 @@ version = "1.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
 
-[[package]]
-name = "aead"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fc95d1bdb8e6666b2b217308eeeb09f2d6728d104be3e31916cc74d15420331"
-dependencies = [
- "generic-array 0.14.7",
-]
-
-[[package]]
-name = "aead"
-version = "0.4.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b613b8e1e3cf911a086f53f03bf286f52fd7a7258e4fa606f0ef220d39d8877"
-dependencies = [
- "generic-array 0.14.7",
- "rand_core 0.6.4",
-]
-
 [[package]]
 name = "aead"
 version = "0.5.2"
@@ -65,29 +46,6 @@ dependencies = [
  "generic-array 0.14.7",
 ]
 
-[[package]]
-name = "aes"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "884391ef1066acaa41e766ba8f596341b96e93ce34f9a43e7d24bf0a0eaf0561"
-dependencies = [
- "aes-soft",
- "aesni",
- "cipher 0.2.5",
-]
-
-[[package]]
-name = "aes"
-version = "0.7.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e8b47f52ea9bae42228d07ec09eb676433d7c4ed1ebdf0f1d1c29ed446f1ab8"
-dependencies = [
- "cfg-if 1.0.0",
- "cipher 0.3.0",
- "cpufeatures",
- "opaque-debug 0.3.0",
-]
-
 [[package]]
 name = "aes"
 version = "0.8.3"
@@ -99,52 +57,18 @@ dependencies = [
  "cpufeatures",
 ]
 
-[[package]]
-name = "aes-gcm"
-version = "0.9.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df5f85a83a7d8b0442b6aa7b504b8212c1733da07b98aae43d4bc21b2cb3cdf6"
-dependencies = [
- "aead 0.4.3",
- "aes 0.7.5",
- "cipher 0.3.0",
- "ctr 0.8.0",
- "ghash 0.4.4",
- "subtle",
-]
-
 [[package]]
 name = "aes-gcm"
 version = "0.10.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "831010a0f742e1209b3bcea8fab6a8e149051ba6099432c8cb2cc117dec3ead1"
 dependencies = [
- "aead 0.5.2",
- "aes 0.8.3",
+ "aead",
+ "aes",
  "cipher 0.4.4",
- "ctr 0.9.2",
- "ghash 0.5.0",
- "subtle",
-]
-
-[[package]]
-name = "aes-soft"
-version = "0.6.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be14c7498ea50828a38d0e24a765ed2effe92a705885b57d029cd67d45744072"
-dependencies = [
- "cipher 0.2.5",
- "opaque-debug 0.3.0",
-]
-
-[[package]]
-name = "aesni"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ea2e11f5e94c2f7d386164cc2aa1f97823fed6f259e486940a71c174dd01b0ce"
-dependencies = [
- "cipher 0.2.5",
- "opaque-debug 0.3.0",
+ "ctr",
+ "ghash",
+ "subtle 2.5.0",
 ]
 
 [[package]]
@@ -153,19 +77,19 @@ version = "0.7.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "5a824f2aa7e75a0c98c5a504fceb80649e9c35265d44525b5f94de4771a395cd"
 dependencies = [
- "getrandom 0.2.11",
+ "getrandom 0.2.12",
  "once_cell",
  "version_check",
 ]
 
 [[package]]
 name = "ahash"
-version = "0.8.6"
+version = "0.8.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a"
+checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01"
 dependencies = [
  "cfg-if 1.0.0",
- "getrandom 0.2.11",
+ "getrandom 0.2.12",
  "once_cell",
  "version_check",
  "zerocopy",
@@ -180,6 +104,12 @@ dependencies = [
  "memchr",
 ]
 
+[[package]]
+name = "allocator-api2"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
+
 [[package]]
 name = "android-tzdata"
 version = "0.1.1"
@@ -206,9 +136,9 @@ dependencies = [
 
 [[package]]
 name = "anstream"
-version = "0.6.4"
+version = "0.6.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44"
+checksum = "6e2e1ebcb11de5c03c67de28a7df593d32191b44939c482e97702baaaa6ab6a5"
 dependencies = [
  "anstyle",
  "anstyle-parse",
@@ -220,43 +150,43 @@ dependencies = [
 
 [[package]]
 name = "anstyle"
-version = "1.0.4"
+version = "1.0.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87"
+checksum = "2faccea4cc4ab4a667ce676a30e8ec13922a692c99bb8f5b11f1502c72e04220"
 
 [[package]]
 name = "anstyle-parse"
-version = "0.2.2"
+version = "0.2.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140"
+checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c"
 dependencies = [
  "utf8parse",
 ]
 
 [[package]]
 name = "anstyle-query"
-version = "1.0.0"
+version = "1.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b"
+checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648"
 dependencies = [
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
 name = "anstyle-wincon"
-version = "3.0.1"
+version = "3.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628"
+checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7"
 dependencies = [
  "anstyle",
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
 name = "anyhow"
-version = "1.0.75"
+version = "1.0.79"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6"
+checksum = "080e9890a082662b09c1ad45f567faeeb47f22b5fb23895fbe1e651e718e25ca"
 
 [[package]]
 name = "approx"
@@ -268,10 +198,305 @@ dependencies = [
 ]
 
 [[package]]
-name = "arc-swap"
-version = "1.6.0"
+name = "aquamarine"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21cc1548309245035eb18aa7f0967da6bc65587005170c56e6ef2788a4cf3f4e"
+dependencies = [
+ "include_dir",
+ "itertools 0.10.5",
+ "proc-macro-error",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "ark-bls12-377"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb00293ba84f51ce3bd026bd0de55899c4e68f0a39a5728cebae3a73ffdc0a4f"
+dependencies = [
+ "ark-ec",
+ "ark-ff",
+ "ark-std",
+]
+
+[[package]]
+name = "ark-bls12-377-ext"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "20c7021f180a0cbea0380eba97c2af3c57074cdaffe0eef7e840e1c9f2841e55"
+dependencies = [
+ "ark-bls12-377",
+ "ark-ec",
+ "ark-models-ext",
+ "ark-std",
+]
+
+[[package]]
+name = "ark-bls12-381"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488"
+dependencies = [
+ "ark-ec",
+ "ark-ff",
+ "ark-serialize",
+ "ark-std",
+]
+
+[[package]]
+name = "ark-bls12-381-ext"
+version = "0.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bddcadddf5e9015d310179a59bb28c4d4b9920ad0f11e8e14dbadf654890c9a6"
+checksum = "b1dc4b3d08f19e8ec06e949712f95b8361e43f1391d94f65e4234df03480631c"
+dependencies = [
+ "ark-bls12-381",
+ "ark-ec",
+ "ark-ff",
+ "ark-models-ext",
+ "ark-serialize",
+ "ark-std",
+]
+
+[[package]]
+name = "ark-bw6-761"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2e0605daf0cc5aa2034b78d008aaf159f56901d92a52ee4f6ecdfdac4f426700"
+dependencies = [
+ "ark-bls12-377",
+ "ark-ec",
+ "ark-ff",
+ "ark-std",
+]
+
+[[package]]
+name = "ark-bw6-761-ext"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ccee5fba47266f460067588ee1bf070a9c760bf2050c1c509982c5719aadb4f2"
+dependencies = [
+ "ark-bw6-761",
+ "ark-ec",
+ "ark-ff",
+ "ark-models-ext",
+ "ark-std",
+]
+
+[[package]]
+name = "ark-ec"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba"
+dependencies = [
+ "ark-ff",
+ "ark-poly",
+ "ark-serialize",
+ "ark-std",
+ "derivative",
+ "hashbrown 0.13.2",
+ "itertools 0.10.5",
+ "num-traits 0.2.17",
+ "rayon",
+ "zeroize",
+]
+
+[[package]]
+name = "ark-ed-on-bls12-377"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b10d901b9ac4b38f9c32beacedfadcdd64e46f8d7f8e88c1ae1060022cf6f6c6"
+dependencies = [
+ "ark-bls12-377",
+ "ark-ec",
+ "ark-ff",
+ "ark-std",
+]
+
+[[package]]
+name = "ark-ed-on-bls12-377-ext"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "524a4fb7540df2e1a8c2e67a83ba1d1e6c3947f4f9342cc2359fc2e789ad731d"
+dependencies = [
+ "ark-ec",
+ "ark-ed-on-bls12-377",
+ "ark-ff",
+ "ark-models-ext",
+ "ark-std",
+]
+
+[[package]]
+name = "ark-ed-on-bls12-381-bandersnatch"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f9cde0f2aa063a2a5c28d39b47761aa102bda7c13c84fc118a61b87c7b2f785c"
+dependencies = [
+ "ark-bls12-381",
+ "ark-ec",
+ "ark-ff",
+ "ark-std",
+]
+
+[[package]]
+name = "ark-ed-on-bls12-381-bandersnatch-ext"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d15185f1acb49a07ff8cbe5f11a1adc5a93b19e211e325d826ae98e98e124346"
+dependencies = [
+ "ark-ec",
+ "ark-ed-on-bls12-381-bandersnatch",
+ "ark-ff",
+ "ark-models-ext",
+ "ark-std",
+]
+
+[[package]]
+name = "ark-ff"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec847af850f44ad29048935519032c33da8aa03340876d351dfab5660d2966ba"
+dependencies = [
+ "ark-ff-asm",
+ "ark-ff-macros",
+ "ark-serialize",
+ "ark-std",
+ "derivative",
+ "digest 0.10.7",
+ "itertools 0.10.5",
+ "num-bigint",
+ "num-traits 0.2.17",
+ "paste",
+ "rustc_version",
+ "zeroize",
+]
+
+[[package]]
+name = "ark-ff-asm"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ed4aa4fe255d0bc6d79373f7e31d2ea147bcf486cba1be5ba7ea85abdb92348"
+dependencies = [
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "ark-ff-macros"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7abe79b0e4288889c4574159ab790824d0033b9fdcb2a112a3182fac2e514565"
+dependencies = [
+ "num-bigint",
+ "num-traits 0.2.17",
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "ark-models-ext"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3e9eab5d4b5ff2f228b763d38442adc9b084b0a465409b059fac5c2308835ec2"
+dependencies = [
+ "ark-ec",
+ "ark-ff",
+ "ark-serialize",
+ "ark-std",
+ "derivative",
+]
+
+[[package]]
+name = "ark-poly"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d320bfc44ee185d899ccbadfa8bc31aab923ce1558716e1997a1e74057fe86bf"
+dependencies = [
+ "ark-ff",
+ "ark-serialize",
+ "ark-std",
+ "derivative",
+ "hashbrown 0.13.2",
+]
+
+[[package]]
+name = "ark-scale"
+version = "0.0.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f69c00b3b529be29528a6f2fd5fa7b1790f8bed81b9cdca17e326538545a179"
+dependencies = [
+ "ark-ec",
+ "ark-ff",
+ "ark-serialize",
+ "ark-std",
+ "parity-scale-codec",
+ "scale-info",
+]
+
+[[package]]
+name = "ark-secret-scalar"
+version = "0.0.2"
+source = "git+https://github.com/w3f/ring-vrf?rev=e9782f9#e9782f938629c90f3adb3fff2358bc8d1386af3e"
+dependencies = [
+ "ark-ec",
+ "ark-ff",
+ "ark-serialize",
+ "ark-std",
+ "ark-transcript",
+ "digest 0.10.7",
+ "getrandom_or_panic",
+ "zeroize",
+]
+
+[[package]]
+name = "ark-serialize"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5"
+dependencies = [
+ "ark-serialize-derive",
+ "ark-std",
+ "digest 0.10.7",
+ "num-bigint",
+]
+
+[[package]]
+name = "ark-serialize-derive"
+version = "0.4.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae3281bc6d0fd7e549af32b52511e1302185bd688fd3359fa36423346ff682ea"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "ark-std"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94893f1e0c6eeab764ade8dc4c0db24caf4fe7cbbaafc0eba0a9030f447b5185"
+dependencies = [
+ "num-traits 0.2.17",
+ "rand 0.8.5",
+ "rayon",
+]
+
+[[package]]
+name = "ark-transcript"
+version = "0.0.2"
+source = "git+https://github.com/w3f/ring-vrf?rev=e9782f9#e9782f938629c90f3adb3fff2358bc8d1386af3e"
+dependencies = [
+ "ark-ff",
+ "ark-serialize",
+ "ark-std",
+ "digest 0.10.7",
+ "rand_core 0.6.4",
+ "sha3",
+]
 
 [[package]]
 name = "array-bytes"
@@ -279,12 +504,27 @@ version = "4.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f52f63c5c1316a16a4b35eaac8b76a98248961a533f061684cb2a7cb0eafb6c6"
 
+[[package]]
+name = "array-bytes"
+version = "6.2.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6f840fb7195bcfc5e17ea40c26e5ce6d5b9ce5d584466e17703209657e459ae0"
+
 [[package]]
 name = "arrayref"
 version = "0.3.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545"
 
+[[package]]
+name = "arrayvec"
+version = "0.4.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9"
+dependencies = [
+ "nodrop",
+]
+
 [[package]]
 name = "arrayvec"
 version = "0.5.2"
@@ -303,29 +543,13 @@ version = "0.9.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e"
 
-[[package]]
-name = "asn1-rs"
-version = "0.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30ff05a702273012438132f449575dbc804e27b2f3cbe3069aa237d26c98fa33"
-dependencies = [
- "asn1-rs-derive 0.1.0",
- "asn1-rs-impl",
- "displaydoc",
- "nom",
- "num-traits 0.2.17",
- "rusticata-macros",
- "thiserror",
- "time",
-]
-
 [[package]]
 name = "asn1-rs"
 version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0"
 dependencies = [
- "asn1-rs-derive 0.4.0",
+ "asn1-rs-derive",
  "asn1-rs-impl",
  "displaydoc",
  "nom",
@@ -335,18 +559,6 @@ dependencies = [
  "time",
 ]
 
-[[package]]
-name = "asn1-rs-derive"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "db8b7511298d5b7784b40b092d9e9dcd3a627a5707e4b5e507931ab0d44eeebf"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn 1.0.109",
- "synstructure",
-]
-
 [[package]]
 name = "asn1-rs-derive"
 version = "0.4.0"
@@ -370,12 +582,6 @@ dependencies = [
  "syn 1.0.109",
 ]
 
-[[package]]
-name = "asn1_der"
-version = "0.7.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "155a5a185e42c6b77ac7b88a15143d930a9e9727a5b7b77eed417404ab15c247"
-
 [[package]]
 name = "assert_matches"
 version = "1.5.0"
@@ -394,43 +600,60 @@ dependencies = [
 ]
 
 [[package]]
-name = "async-io"
-version = "1.13.0"
+name = "async-channel"
+version = "2.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af"
+checksum = "1ca33f4bc4ed1babef42cad36cc1f51fa88be00420404e5b1e80ab1b18f7678c"
 dependencies = [
- "async-lock 2.8.0",
- "autocfg",
- "cfg-if 1.0.0",
  "concurrent-queue",
- "futures-lite 1.13.0",
- "log",
- "parking",
- "polling 2.8.0",
- "rustix 0.37.27",
+ "event-listener 4.0.3",
+ "event-listener-strategy",
+ "futures-core",
+ "pin-project-lite 0.2.13",
+]
+
+[[package]]
+name = "async-executor"
+version = "1.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c"
+dependencies = [
+ "async-lock 3.3.0",
+ "async-task",
+ "concurrent-queue",
+ "fastrand",
+ "futures-lite",
  "slab",
- "socket2 0.4.10",
- "waker-fn",
+]
+
+[[package]]
+name = "async-fs"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd1f344136bad34df1f83a47f3fd7f2ab85d75cb8a940af4ccf6d482a84ea01b"
+dependencies = [
+ "async-lock 3.3.0",
+ "blocking",
+ "futures-lite",
 ]
 
 [[package]]
 name = "async-io"
-version = "2.2.0"
+version = "2.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "41ed9d5715c2d329bf1b4da8d60455b99b187f27ba726df2883799af9af60997"
+checksum = "8f97ab0c5b00a7cdbe5a371b9a782ee7be1316095885c8a4ea1daf490eb0ef65"
 dependencies = [
- "async-lock 3.1.1",
+ "async-lock 3.3.0",
  "cfg-if 1.0.0",
  "concurrent-queue",
  "futures-io",
- "futures-lite 2.0.1",
+ "futures-lite",
  "parking",
- "polling 3.3.0",
- "rustix 0.38.25",
+ "polling",
+ "rustix 0.38.30",
  "slab",
  "tracing",
- "waker-fn",
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
@@ -444,35 +667,77 @@ dependencies = [
 
 [[package]]
 name = "async-lock"
-version = "3.1.1"
+version = "3.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "655b9c7fe787d3b25cc0f804a1a8401790f0c5bc395beb5a64dc77d8de079105"
+checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b"
 dependencies = [
- "event-listener 3.1.0",
+ "event-listener 4.0.3",
  "event-listener-strategy",
  "pin-project-lite 0.2.13",
 ]
 
 [[package]]
-name = "async-recursion"
-version = "1.0.5"
+name = "async-net"
+version = "2.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5fd55a5ba1179988837d24ab4c7cc8ed6efdeff578ede0416b4225a5fca35bd0"
+checksum = "b948000fad4873c1c9339d60f2623323a0cfd3816e5181033c6a5cb68b2accf7"
 dependencies = [
- "proc-macro2",
- "quote",
- "syn 2.0.39",
+ "async-io",
+ "blocking",
+ "futures-lite",
 ]
 
+[[package]]
+name = "async-process"
+version = "2.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "15c1cd5d253ecac3d3cf15e390fd96bd92a13b1d14497d81abf077304794fb04"
+dependencies = [
+ "async-channel 2.1.1",
+ "async-io",
+ "async-lock 3.3.0",
+ "async-signal",
+ "blocking",
+ "cfg-if 1.0.0",
+ "event-listener 4.0.3",
+ "futures-lite",
+ "rustix 0.38.30",
+ "windows-sys 0.52.0",
+]
+
+[[package]]
+name = "async-signal"
+version = "0.2.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e47d90f65a225c4527103a8d747001fc56e375203592b25ad103e1ca13124c5"
+dependencies = [
+ "async-io",
+ "async-lock 2.8.0",
+ "atomic-waker",
+ "cfg-if 1.0.0",
+ "futures-core",
+ "futures-io",
+ "rustix 0.38.30",
+ "signal-hook-registry",
+ "slab",
+ "windows-sys 0.48.0",
+]
+
+[[package]]
+name = "async-task"
+version = "4.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fbb36e985947064623dbd357f727af08ffd077f93d696782f3c56365fa2e2799"
+
 [[package]]
 name = "async-trait"
-version = "0.1.74"
+version = "0.1.77"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9"
+checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -488,6 +753,12 @@ dependencies = [
  "pin-project-lite 0.2.13",
 ]
 
+[[package]]
+name = "atomic-take"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8ab6b55fe97976e46f91ddbed8d147d966475dc29b2032757ba47e02376fbc3"
+
 [[package]]
 name = "atomic-waker"
 version = "1.1.2"
@@ -522,22 +793,39 @@ dependencies = [
  "cfg-if 1.0.0",
  "libc",
  "miniz_oxide",
- "object 0.32.1",
+ "object 0.32.2",
  "rustc-demangle",
 ]
 
+[[package]]
+name = "bandersnatch_vrfs"
+version = "0.0.4"
+source = "git+https://github.com/w3f/ring-vrf?rev=e9782f9#e9782f938629c90f3adb3fff2358bc8d1386af3e"
+dependencies = [
+ "ark-bls12-381",
+ "ark-ec",
+ "ark-ed-on-bls12-381-bandersnatch",
+ "ark-ff",
+ "ark-serialize",
+ "ark-std",
+ "dleq_vrf",
+ "fflonk",
+ "merlin 3.0.0",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+ "ring 0.1.0",
+ "sha2 0.10.8",
+ "sp-ark-bls12-381",
+ "sp-ark-ed-on-bls12-381-bandersnatch",
+ "zeroize",
+]
+
 [[package]]
 name = "base-x"
 version = "0.2.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "4cbbc9d0964165b47557570cce6c952866c2678457aca742aafc9fb771d30270"
 
-[[package]]
-name = "base16ct"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "349a06037c7bf932dd7e7d1f653678b2038b9ad46a74102f1fc7bd7872678cce"
-
 [[package]]
 name = "base16ct"
 version = "0.2.0"
@@ -558,9 +846,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
 
 [[package]]
 name = "base64"
-version = "0.21.5"
+version = "0.21.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9"
+checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
 
 [[package]]
 name = "base64ct"
@@ -586,6 +874,40 @@ dependencies = [
  "serde",
 ]
 
+[[package]]
+name = "bindgen"
+version = "0.65.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cfdf7b466f9a4903edc73f95d6d2bcd5baf8ae620638762244d3f60143643cc5"
+dependencies = [
+ "bitflags 1.3.2",
+ "cexpr",
+ "clang-sys",
+ "lazy_static",
+ "lazycell",
+ "peeking_take_while",
+ "prettyplease 0.2.16",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "rustc-hash",
+ "shlex",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "bip39"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "93f2635620bf0b9d4576eb7bb9a38a55df78bd1205d26fa994b25911a69f212f"
+dependencies = [
+ "bitcoin_hashes",
+ "rand 0.8.5",
+ "rand_core 0.6.4",
+ "serde",
+ "unicode-normalization",
+]
+
 [[package]]
 name = "bit-set"
 version = "0.5.3"
@@ -601,6 +923,12 @@ version = "0.6.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb"
 
+[[package]]
+name = "bitcoin_hashes"
+version = "0.11.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "90064b8dee6815a6470d60bad07bbbaee885c0e12d04177138fa3291a01b7bc4"
+
 [[package]]
 name = "bitflags"
 version = "1.3.2"
@@ -609,9 +937,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
 
 [[package]]
 name = "bitflags"
-version = "2.4.1"
+version = "2.4.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07"
+checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf"
 
 [[package]]
 name = "bitvec"
@@ -625,6 +953,18 @@ dependencies = [
  "wyz",
 ]
 
+[[package]]
+name = "blake2"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "94cb07b0da6a73955f8fb85d24c466778e70cda767a568229b104f0264089330"
+dependencies = [
+ "byte-tools",
+ "crypto-mac 0.7.0",
+ "digest 0.8.1",
+ "opaque-debug 0.2.3",
+]
+
 [[package]]
 name = "blake2"
 version = "0.10.6"
@@ -634,6 +974,16 @@ dependencies = [
  "digest 0.10.7",
 ]
 
+[[package]]
+name = "blake2-rfc"
+version = "0.2.18"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5d6d530bdd2d52966a6d03b7a964add7ae1a288d25214066fd4b600f0f796400"
+dependencies = [
+ "arrayvec 0.4.12",
+ "constant_time_eq 0.1.5",
+]
+
 [[package]]
 name = "blake2b_simd"
 version = "1.0.2"
@@ -642,7 +992,7 @@ checksum = "23285ad32269793932e830392f2fe2f83e26488fd3ec778883a93c8323735780"
 dependencies = [
  "arrayref",
  "arrayvec 0.7.4",
- "constant_time_eq",
+ "constant_time_eq 0.3.0",
 ]
 
 [[package]]
@@ -653,7 +1003,7 @@ checksum = "94230421e395b9920d23df13ea5d77a20e1725331f90fbbf6df6040b33f756ae"
 dependencies = [
  "arrayref",
  "arrayvec 0.7.4",
- "constant_time_eq",
+ "constant_time_eq 0.3.0",
 ]
 
 [[package]]
@@ -666,7 +1016,7 @@ dependencies = [
  "arrayvec 0.7.4",
  "cc",
  "cfg-if 1.0.0",
- "constant_time_eq",
+ "constant_time_eq 0.3.0",
 ]
 
 [[package]]
@@ -675,7 +1025,7 @@ version = "0.7.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
 dependencies = [
- "block-padding 0.1.5",
+ "block-padding",
  "byte-tools",
  "byteorder",
  "generic-array 0.12.4",
@@ -699,16 +1049,6 @@ dependencies = [
  "generic-array 0.14.7",
 ]
 
-[[package]]
-name = "block-modes"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57a0e8073e8baa88212fb5823574c02ebccb395136ba9a164ab89379ec6072f0"
-dependencies = [
- "block-padding 0.2.1",
- "cipher 0.2.5",
-]
-
 [[package]]
 name = "block-padding"
 version = "0.1.5"
@@ -719,10 +1059,20 @@ dependencies = [
 ]
 
 [[package]]
-name = "block-padding"
-version = "0.2.1"
+name = "blocking"
+version = "1.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae"
+checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118"
+dependencies = [
+ "async-channel 2.1.1",
+ "async-lock 3.3.0",
+ "async-task",
+ "fastrand",
+ "futures-io",
+ "futures-lite",
+ "piper",
+ "tracing",
+]
 
 [[package]]
 name = "bounded-collections"
@@ -753,9 +1103,9 @@ dependencies = [
 
 [[package]]
 name = "bstr"
-version = "1.8.0"
+version = "1.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "542f33a8835a0884b006a0c3df3dadd99c0c3f296ed26c2fdc8028e01ad6230c"
+checksum = "c48f0051a4b4c5e0b6d365cd04af53aeaa209e3cc15ec2cdb69e73cc87fbd0dc"
 dependencies = [
  "memchr",
  "serde",
@@ -796,9 +1146,9 @@ checksum = "e1e5f035d16fc623ae5f74981db80a439803888314e3a555fd6f04acd51a3205"
 
 [[package]]
 name = "bytemuck"
-version = "1.14.0"
+version = "1.14.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "374d28ec25809ee0e23827c2ab573d729e293f281dfe393500e7ad618baa61c6"
+checksum = "ed2490600f404f2b94c167e31d3ed1d5f3c225a0f3b80230053b3e0b7b962bd9"
 
 [[package]]
 name = "byteorder"
@@ -812,6 +1162,27 @@ version = "1.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223"
 
+[[package]]
+name = "bzip2-sys"
+version = "0.1.11+1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+]
+
+[[package]]
+name = "c2-chacha"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d27dae93fe7b1e0424dc57179ac396908c26b035a87234809f5c4dfd1b47dc80"
+dependencies = [
+ "cipher 0.2.5",
+ "ppv-lite86",
+]
+
 [[package]]
 name = "camino"
 version = "1.1.6"
@@ -823,9 +1194,9 @@ dependencies = [
 
 [[package]]
 name = "cargo-platform"
-version = "0.1.5"
+version = "0.1.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e34637b3140142bdf929fb439e8aa4ebad7651ebf7b1080b3930aa16ac1459ff"
+checksum = "ceed8ef69d8518a5dda55c07425450b58a4e1946f4951eab6d7191ee86c2443d"
 dependencies = [
  "serde",
 ]
@@ -838,7 +1209,7 @@ checksum = "eee4243f1f26fc7a42710e7439c149e2b10b05472f88090acce52632f231a73a"
 dependencies = [
  "camino",
  "cargo-platform",
- "semver 1.0.20",
+ "semver 1.0.21",
  "serde",
  "serde_json",
  "thiserror",
@@ -855,21 +1226,19 @@ dependencies = [
 ]
 
 [[package]]
-name = "ccm"
-version = "0.3.0"
+name = "cexpr"
+version = "0.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5aca1a8fbc20b50ac9673ff014abfb2b5f4085ee1a850d408f14a159c5853ac7"
+checksum = "6fac387a98bb7c37292057cffc56d62ecb629900026402633ae9160df93a8766"
 dependencies = [
- "aead 0.3.2",
- "cipher 0.2.5",
- "subtle",
+ "nom",
 ]
 
 [[package]]
 name = "cfg-expr"
-version = "0.10.3"
+version = "0.15.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0aacacf4d96c24b2ad6eb8ee6df040e4f27b0d0b39a5710c30091baa830485db"
+checksum = "6100bc57b6209840798d95cb2775684849d332f7bd788db2a8c8caf7ef82a41a"
 dependencies = [
  "smallvec",
 ]
@@ -892,6 +1261,16 @@ version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
 
+[[package]]
+name = "chacha"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddf3c081b5fba1e5615640aae998e0fbd10c24cbd897ee39ed754a77601a4862"
+dependencies = [
+ "byteorder",
+ "keystream",
+]
+
 [[package]]
 name = "chacha20"
 version = "0.9.1"
@@ -909,7 +1288,7 @@ version = "0.10.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "10cd79432192d1c0f4e1a0fef9527696cc039165d729fb41b3f4f4f354c2dc35"
 dependencies = [
- "aead 0.5.2",
+ "aead",
  "chacha20",
  "cipher 0.4.4",
  "poly1305",
@@ -918,16 +1297,16 @@ dependencies = [
 
 [[package]]
 name = "chrono"
-version = "0.4.31"
+version = "0.4.33"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
+checksum = "9f13690e35a5e4ace198e7beea2895d29f3a9cc55015fcebe6336bd2010af9eb"
 dependencies = [
  "android-tzdata",
  "iana-time-zone",
  "js-sys",
  "num-traits 0.2.17",
  "wasm-bindgen",
- "windows-targets 0.48.5",
+ "windows-targets 0.52.0",
 ]
 
 [[package]]
@@ -941,13 +1320,13 @@ dependencies = [
 
 [[package]]
 name = "cid"
-version = "0.8.6"
+version = "0.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f6ed9c8b2d17acb8110c46f1da5bf4a696d745e1474a16db0cd2b49cd0249bf2"
+checksum = "b9b68e3193982cd54187d71afdb2a271ad4cf8af157858e9cb911b91321de143"
 dependencies = [
  "core2",
  "multibase",
- "multihash 0.16.3",
+ "multihash",
  "serde",
  "unsigned-varint",
 ]
@@ -961,15 +1340,6 @@ dependencies = [
  "generic-array 0.14.7",
 ]
 
-[[package]]
-name = "cipher"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ee52072ec15386f770805afd189a01c8841be8696bed250fa2f13c4c0d6dfb7"
-dependencies = [
- "generic-array 0.14.7",
-]
-
 [[package]]
 name = "cipher"
 version = "0.4.4"
@@ -981,6 +1351,17 @@ dependencies = [
  "zeroize",
 ]
 
+[[package]]
+name = "clang-sys"
+version = "1.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "67523a3b4be3ce1989d607a828d036249522dd9c1c8de7f4dd2dae43a37369d1"
+dependencies = [
+ "glob",
+ "libc",
+ "libloading",
+]
+
 [[package]]
 name = "clap"
 version = "3.2.25"
@@ -1000,9 +1381,9 @@ dependencies = [
 
 [[package]]
 name = "clap"
-version = "4.4.11"
+version = "4.4.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bfaff671f6b22ca62406885ece523383b9b64022e341e53e009a62ebc47a45f2"
+checksum = "1e578d6ec4194633722ccf9544794b71b1385c3c027efe0c55db226fc880865c"
 dependencies = [
  "clap_builder",
  "clap_derive 4.4.7",
@@ -1010,23 +1391,24 @@ dependencies = [
 
 [[package]]
 name = "clap_builder"
-version = "4.4.11"
+version = "4.4.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a216b506622bb1d316cd51328dce24e07bdff4a6128a47c7e7fad11878d5adbb"
+checksum = "4df4df40ec50c46000231c914968278b1eb05098cf8f1b3a518a95030e71d1c7"
 dependencies = [
  "anstream",
  "anstyle",
  "clap_lex 0.6.0",
  "strsim",
+ "terminal_size",
 ]
 
 [[package]]
 name = "clap_complete"
-version = "4.4.4"
+version = "4.4.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bffe91f06a11b4b9420f62103854e90867812cd5d01557f853c5ee8e791b12ae"
+checksum = "df631ae429f6613fcd3a7c1adbdb65f637271e561b03680adaa6573015dfb106"
 dependencies = [
- "clap 4.4.11",
+ "clap 4.4.18",
 ]
 
 [[package]]
@@ -1051,7 +1433,7 @@ dependencies = [
  "heck 0.4.1",
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -1096,11 +1478,10 @@ checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7"
 
 [[package]]
 name = "colored"
-version = "2.0.4"
+version = "2.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2674ec482fbc38012cf31e6c42ba0177b431a0cb6f15fe40efa5aab1bda516f6"
+checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8"
 dependencies = [
- "is-terminal",
  "lazy_static",
  "windows-sys 0.48.0",
 ]
@@ -1120,15 +1501,37 @@ dependencies = [
 
 [[package]]
 name = "comfy-table"
-version = "6.2.0"
+version = "7.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7e959d788268e3bf9d35ace83e81b124190378e4c91c9067524675e33394b8ba"
+checksum = "7c64043d6c7b7a4c58e39e7efccfdea7b93d885a795d0c054a69dbbf4dd52686"
 dependencies = [
- "strum",
- "strum_macros",
+ "strum 0.25.0",
+ "strum_macros 0.25.3",
  "unicode-width",
 ]
 
+[[package]]
+name = "common"
+version = "0.1.0"
+source = "git+https://github.com/w3f/ring-proof#b273d33f9981e2bb3375ab45faeb537f7ee35224"
+dependencies = [
+ "ark-ec",
+ "ark-ff",
+ "ark-poly",
+ "ark-serialize",
+ "ark-std",
+ "fflonk",
+ "getrandom_or_panic",
+ "merlin 3.0.0",
+ "rand_chacha 0.3.1",
+]
+
+[[package]]
+name = "common-path"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2382f75942f4b3be3690fe4f86365e9c853c1587d6ee58212cebf6e2a9ccd101"
+
 [[package]]
 name = "common-runtime"
 version = "0.8.0-dev"
@@ -1138,7 +1541,7 @@ dependencies = [
  "frame-support",
  "frame-system",
  "frame-system-benchmarking",
- "log",
+ "node-primitives",
  "pallet-authority-members",
  "pallet-babe",
  "pallet-balances",
@@ -1152,6 +1555,7 @@ dependencies = [
  "pallet-im-online",
  "pallet-membership",
  "pallet-multisig",
+ "pallet-offences",
  "pallet-oneshot-account",
  "pallet-preimage",
  "pallet-provide-randomness",
@@ -1159,8 +1563,8 @@ dependencies = [
  "pallet-quota",
  "pallet-scheduler",
  "pallet-session",
- "pallet-session-benchmarking",
  "pallet-smith-members",
+ "pallet-sudo",
  "pallet-timestamp",
  "pallet-treasury",
  "pallet-universal-dividend",
@@ -1169,47 +1573,70 @@ dependencies = [
  "parity-scale-codec",
  "scale-info",
  "serde",
- "serde_derive",
  "smallvec",
  "sp-arithmetic",
  "sp-consensus-babe",
- "sp-consensus-grandpa",
  "sp-core",
- "sp-distance",
  "sp-membership",
  "sp-runtime",
  "sp-staking",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
  "sp-weights",
 ]
 
 [[package]]
 name = "concurrent-queue"
-version = "2.3.0"
+version = "2.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f057a694a54f12365049b0958a1685bb52d567f5593b355fbf685838e873d400"
+checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363"
 dependencies = [
  "crossbeam-utils",
 ]
 
 [[package]]
 name = "console"
-version = "0.15.7"
+version = "0.15.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8"
+checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb"
 dependencies = [
  "encode_unicode",
  "lazy_static",
  "libc",
  "unicode-width",
- "windows-sys 0.45.0",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
 name = "const-oid"
-version = "0.9.5"
+version = "0.9.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8"
+
+[[package]]
+name = "const-random"
+version = "0.1.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5aaf16c9c2c612020bcfd042e170f6e32de9b9d75adb5277cdbbd2e2c8c8299a"
+dependencies = [
+ "const-random-macro",
+]
+
+[[package]]
+name = "const-random-macro"
+version = "0.1.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28c122c3980598d243d63d9a704629a2d748d101f278052ff068be5a4423ab6f"
+checksum = "f9d839f2a20b0aee515dc581a6172f2321f96cab76c1a38a4c584a194955390e"
+dependencies = [
+ "getrandom 0.2.12",
+ "once_cell",
+ "tiny-keccak",
+]
+
+[[package]]
+name = "constant_time_eq"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
 
 [[package]]
 name = "constant_time_eq"
@@ -1217,6 +1644,18 @@ version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2"
 
+[[package]]
+name = "constcat"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd7e35aee659887cbfb97aaf227ac12cad1a9d7c71e55ff3376839ed4e282d08"
+
+[[package]]
+name = "convert_case"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
+
 [[package]]
 name = "convert_case"
 version = "0.6.0"
@@ -1228,9 +1667,9 @@ dependencies = [
 
 [[package]]
 name = "core-foundation"
-version = "0.9.3"
+version = "0.9.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146"
+checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f"
 dependencies = [
  "core-foundation-sys",
  "libc",
@@ -1238,9 +1677,9 @@ dependencies = [
 
 [[package]]
 name = "core-foundation-sys"
-version = "0.8.4"
+version = "0.8.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
+checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f"
 
 [[package]]
 name = "core2"
@@ -1271,37 +1710,36 @@ dependencies = [
 
 [[package]]
 name = "cpufeatures"
-version = "0.2.11"
+version = "0.2.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0"
+checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504"
 dependencies = [
  "libc",
 ]
 
 [[package]]
 name = "cranelift-bforest"
-version = "0.93.2"
+version = "0.95.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2bc42ba2e232e5b20ff7dc299a812d53337dadce9a7e39a238e6a5cb82d2e57b"
+checksum = "1277fbfa94bc82c8ec4af2ded3e639d49ca5f7f3c7eeab2c66accd135ece4e70"
 dependencies = [
  "cranelift-entity",
 ]
 
 [[package]]
 name = "cranelift-codegen"
-version = "0.93.2"
+version = "0.95.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "253531aca9b6f56103c9420369db3263e784df39aa1c90685a1f69cfbba0623e"
+checksum = "c6e8c31ad3b2270e9aeec38723888fe1b0ace3bea2b06b3f749ccf46661d3220"
 dependencies = [
- "arrayvec 0.7.4",
  "bumpalo",
  "cranelift-bforest",
  "cranelift-codegen-meta",
  "cranelift-codegen-shared",
  "cranelift-entity",
  "cranelift-isle",
- "gimli 0.26.2",
- "hashbrown 0.12.3",
+ "gimli 0.27.3",
+ "hashbrown 0.13.2",
  "log",
  "regalloc2",
  "smallvec",
@@ -1310,33 +1748,33 @@ dependencies = [
 
 [[package]]
 name = "cranelift-codegen-meta"
-version = "0.93.2"
+version = "0.95.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "72f2154365e2bff1b1b8537a7181591fdff50d8e27fa6e40d5c69c3bad0ca7c8"
+checksum = "c8ac5ac30d62b2d66f12651f6b606dbdfd9c2cfd0908de6b387560a277c5c9da"
 dependencies = [
  "cranelift-codegen-shared",
 ]
 
 [[package]]
 name = "cranelift-codegen-shared"
-version = "0.93.2"
+version = "0.95.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "687e14e3f5775248930e0d5a84195abef8b829958e9794bf8d525104993612b4"
+checksum = "dd82b8b376247834b59ed9bdc0ddeb50f517452827d4a11bccf5937b213748b8"
 
 [[package]]
 name = "cranelift-entity"
-version = "0.93.2"
+version = "0.95.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f42ea692c7b450ad18b8c9889661505d51c09ec4380cf1c2d278dbb2da22cae1"
+checksum = "40099d38061b37e505e63f89bab52199037a72b931ad4868d9089ff7268660b0"
 dependencies = [
  "serde",
 ]
 
 [[package]]
 name = "cranelift-frontend"
-version = "0.93.2"
+version = "0.95.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8483c2db6f45fe9ace984e5adc5d058102227e4c62e5aa2054e16b0275fd3a6e"
+checksum = "64a25d9d0a0ae3079c463c34115ec59507b4707175454f0eee0891e83e30e82d"
 dependencies = [
  "cranelift-codegen",
  "log",
@@ -1346,15 +1784,15 @@ dependencies = [
 
 [[package]]
 name = "cranelift-isle"
-version = "0.93.2"
+version = "0.95.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e9793158837678902446c411741d87b43f57dadfb944f2440db4287cda8cbd59"
+checksum = "80de6a7d0486e4acbd5f9f87ec49912bf4c8fb6aea00087b989685460d4469ba"
 
 [[package]]
 name = "cranelift-native"
-version = "0.93.2"
+version = "0.95.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "72668c7755f2b880665cb422c8ad2d56db58a88b9bebfef0b73edc2277c13c49"
+checksum = "bb6b03e0e03801c4b3fd8ce0758a94750c07a44e7944cc0ffbf0d3f2e7c79b00"
 dependencies = [
  "cranelift-codegen",
  "libc",
@@ -1363,35 +1801,20 @@ dependencies = [
 
 [[package]]
 name = "cranelift-wasm"
-version = "0.93.2"
+version = "0.95.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3852ce4b088b44ac4e29459573943009a70d1b192c8d77ef949b4e814f656fc1"
+checksum = "ff3220489a3d928ad91e59dd7aeaa8b3de18afb554a6211213673a71c90737ac"
 dependencies = [
  "cranelift-codegen",
  "cranelift-entity",
  "cranelift-frontend",
- "itertools",
+ "itertools 0.10.5",
  "log",
  "smallvec",
  "wasmparser",
  "wasmtime-types",
 ]
 
-[[package]]
-name = "crc"
-version = "3.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "86ec7a15cbe22e59248fc7eadb1907dab5ba09372595da4d73dd805ed4417dfe"
-dependencies = [
- "crc-catalog",
-]
-
-[[package]]
-name = "crc-catalog"
-version = "2.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5"
-
 [[package]]
 name = "crc32fast"
 version = "1.3.2"
@@ -1403,54 +1826,43 @@ dependencies = [
 
 [[package]]
 name = "crossbeam-deque"
-version = "0.8.3"
+version = "0.8.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
+checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d"
 dependencies = [
- "cfg-if 1.0.0",
  "crossbeam-epoch",
  "crossbeam-utils",
 ]
 
 [[package]]
 name = "crossbeam-epoch"
-version = "0.9.15"
+version = "0.9.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
+checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e"
 dependencies = [
- "autocfg",
- "cfg-if 1.0.0",
  "crossbeam-utils",
- "memoffset 0.9.0",
- "scopeguard",
 ]
 
 [[package]]
-name = "crossbeam-utils"
-version = "0.8.17"
+name = "crossbeam-queue"
+version = "0.3.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c06d96137f14f244c37f989d9fff8f95e6c18b918e71f36638f8c49112e4c78f"
+checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35"
 dependencies = [
- "cfg-if 1.0.0",
+ "crossbeam-utils",
 ]
 
 [[package]]
-name = "crunchy"
-version = "0.2.2"
+name = "crossbeam-utils"
+version = "0.8.19"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
+checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345"
 
 [[package]]
-name = "crypto-bigint"
-version = "0.4.9"
+name = "crunchy"
+version = "0.2.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef2b4b23cddf68b89b8f8069890e8c270d54e2d5fe1b143820234805e4cb17ef"
-dependencies = [
- "generic-array 0.14.7",
- "rand_core 0.6.4",
- "subtle",
- "zeroize",
-]
+checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
 
 [[package]]
 name = "crypto-bigint"
@@ -1460,7 +1872,7 @@ checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76"
 dependencies = [
  "generic-array 0.14.7",
  "rand_core 0.6.4",
- "subtle",
+ "subtle 2.5.0",
  "zeroize",
 ]
 
@@ -1475,6 +1887,16 @@ dependencies = [
  "typenum",
 ]
 
+[[package]]
+name = "crypto-mac"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4434400df11d95d556bac068ddfedd482915eb18fe8bea89bc80b6e4b1c179e5"
+dependencies = [
+ "generic-array 0.12.4",
+ "subtle 1.0.0",
+]
+
 [[package]]
 name = "crypto-mac"
 version = "0.8.0"
@@ -1482,17 +1904,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab"
 dependencies = [
  "generic-array 0.14.7",
- "subtle",
+ "subtle 2.5.0",
 ]
 
 [[package]]
 name = "crypto-mac"
-version = "0.11.1"
+version = "0.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714"
+checksum = "25fab6889090c8133f3deb8f73ba3c65a7f456f66436fc012a1b1e272b1e103e"
 dependencies = [
  "generic-array 0.14.7",
- "subtle",
+ "subtle 2.5.0",
 ]
 
 [[package]]
@@ -1505,15 +1927,6 @@ dependencies = [
  "syn 1.0.109",
 ]
 
-[[package]]
-name = "ctr"
-version = "0.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "049bb91fb4aaf0e3c7efa6cd5ef877dbbbd15b39dad06d9948de4ec8a75761ea"
-dependencies = [
- "cipher 0.3.0",
-]
-
 [[package]]
 name = "ctr"
 version = "0.9.2"
@@ -1525,12 +1938,12 @@ dependencies = [
 
 [[package]]
 name = "ctrlc"
-version = "3.4.1"
+version = "3.4.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "82e95fbd621905b854affdc67943b043a0fbb6ed7385fd5a25650d19a8a6cfdf"
+checksum = "b467862cc8610ca6fc9a1532d7777cee0804e678ab45410897b9396495994a0b"
 dependencies = [
  "nix 0.27.1",
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
@@ -1547,11 +1960,11 @@ dependencies = [
  "cucumber-expressions",
  "derive_more",
  "either",
- "futures 0.3.29",
+ "futures 0.3.30",
  "gherkin",
  "globwalk",
  "inventory",
- "itertools",
+ "itertools 0.10.5",
  "linked-hash-map",
  "once_cell",
  "regex",
@@ -1566,7 +1979,7 @@ checksum = "57569af2742cb38e213e8cc686fffc76e0ee4119cad3a122753c27107dc26e58"
 dependencies = [
  "cucumber-expressions",
  "inflections",
- "itertools",
+ "itertools 0.10.5",
  "proc-macro2",
  "quote",
  "regex",
@@ -1596,7 +2009,7 @@ dependencies = [
  "byteorder",
  "digest 0.8.1",
  "rand_core 0.5.1",
- "subtle",
+ "subtle 2.5.0",
  "zeroize",
 ]
 
@@ -1609,7 +2022,7 @@ dependencies = [
  "byteorder",
  "digest 0.9.0",
  "rand_core 0.5.1",
- "subtle",
+ "subtle 2.5.0",
  "zeroize",
 ]
 
@@ -1624,9 +2037,9 @@ dependencies = [
  "curve25519-dalek-derive",
  "digest 0.10.7",
  "fiat-crypto",
- "platforms 3.2.0",
+ "platforms",
  "rustc_version",
- "subtle",
+ "subtle 2.5.0",
  "zeroize",
 ]
 
@@ -1638,14 +2051,14 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
 name = "cxx"
-version = "1.0.110"
+version = "1.0.115"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7129e341034ecb940c9072817cd9007974ea696844fc4dd582dc1653a7fbe2e8"
+checksum = "8de00f15a6fa069c99b88c5c78c4541d0e7899a33b86f7480e23df2431fce0bc"
 dependencies = [
  "cc",
  "cxxbridge-flags",
@@ -1655,9 +2068,9 @@ dependencies = [
 
 [[package]]
 name = "cxx-build"
-version = "1.0.110"
+version = "1.0.115"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a2a24f3f5f8eed71936f21e570436f024f5c2e25628f7496aa7ccd03b90109d5"
+checksum = "0a71e1e631fa2f2f5f92e8b0d860a00c198c6771623a6cefcc863e3554f0d8d6"
 dependencies = [
  "cc",
  "codespan-reporting",
@@ -1665,24 +2078,24 @@ dependencies = [
  "proc-macro2",
  "quote",
  "scratch",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
 name = "cxxbridge-flags"
-version = "1.0.110"
+version = "1.0.115"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "06fdd177fc61050d63f67f5bd6351fac6ab5526694ea8e359cd9cd3b75857f44"
+checksum = "6f3fed61d56ba497c4efef9144dfdbaa25aa58f2f6b3a7cf441d4591c583745c"
 
 [[package]]
 name = "cxxbridge-macro"
-version = "1.0.110"
+version = "1.0.115"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "587663dd5fb3d10932c8aecfe7c844db1bcf0aee93eeab08fac13dc1212c2e7f"
+checksum = "8908e380a8efd42150c017b0cfa31509fc49b6d47f7cb6b33e93ffb8f4e3661e"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -1691,8 +2104,18 @@ version = "0.14.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850"
 dependencies = [
- "darling_core",
- "darling_macro",
+ "darling_core 0.14.4",
+ "darling_macro 0.14.4",
+]
+
+[[package]]
+name = "darling"
+version = "0.20.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "da01daa5f6d41c91358398e8db4dde38e292378da1f28300b59ef4732b879454"
+dependencies = [
+ "darling_core 0.20.4",
+ "darling_macro 0.20.4",
 ]
 
 [[package]]
@@ -1709,17 +2132,42 @@ dependencies = [
  "syn 1.0.109",
 ]
 
+[[package]]
+name = "darling_core"
+version = "0.20.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f44f6238b948a3c6c3073cdf53bb0c2d5e024ee27e0f35bfe9d556a12395808a"
+dependencies = [
+ "fnv",
+ "ident_case",
+ "proc-macro2",
+ "quote",
+ "strsim",
+ "syn 2.0.48",
+]
+
 [[package]]
 name = "darling_macro"
 version = "0.14.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e"
 dependencies = [
- "darling_core",
+ "darling_core 0.14.4",
  "quote",
  "syn 1.0.109",
 ]
 
+[[package]]
+name = "darling_macro"
+version = "0.20.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d2d88bd93979b1feb760a6b5c531ac5ba06bd63e74894c377af02faee07b9cd"
+dependencies = [
+ "darling_core 0.20.4",
+ "quote",
+ "syn 2.0.48",
+]
+
 [[package]]
 name = "data-encoding"
 version = "2.5.0"
@@ -1763,17 +2211,6 @@ dependencies = [
  "thiserror",
 ]
 
-[[package]]
-name = "der"
-version = "0.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f1a467a65c5e759bce6e65eaf91cc29f466cdc57cb65777bd646872a8a1fd4de"
-dependencies = [
- "const-oid",
- "pem-rfc7468",
- "zeroize",
-]
-
 [[package]]
 name = "der"
 version = "0.7.8"
@@ -1786,11 +2223,11 @@ dependencies = [
 
 [[package]]
 name = "der-parser"
-version = "7.0.0"
+version = "8.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe398ac75057914d7d07307bf67dc7f3f574a26783b4fc7805a20ffa9f506e82"
+checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e"
 dependencies = [
- "asn1-rs 0.3.1",
+ "asn1-rs",
  "displaydoc",
  "nom",
  "num-bigint",
@@ -1799,17 +2236,12 @@ dependencies = [
 ]
 
 [[package]]
-name = "der-parser"
-version = "8.2.0"
+name = "deranged"
+version = "0.3.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e"
+checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
 dependencies = [
- "asn1-rs 0.5.2",
- "displaydoc",
- "nom",
- "num-bigint",
- "num-traits 0.2.17",
- "rusticata-macros",
+ "powerfmt",
 ]
 
 [[package]]
@@ -1834,45 +2266,16 @@ dependencies = [
  "syn 1.0.109",
 ]
 
-[[package]]
-name = "derive_builder"
-version = "0.11.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d07adf7be193b71cc36b193d0f5fe60b918a3a9db4dad0449f57bcfd519704a3"
-dependencies = [
- "derive_builder_macro",
-]
-
-[[package]]
-name = "derive_builder_core"
-version = "0.11.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f91d4cfa921f1c05904dc3c57b4a32c38aed3340cce209f3a6fd1478babafc4"
-dependencies = [
- "darling",
- "proc-macro2",
- "quote",
- "syn 1.0.109",
-]
-
-[[package]]
-name = "derive_builder_macro"
-version = "0.11.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f0314b72bed045f3a68671b3c86328386762c93f82d98c65c3cb5e5f573dd68"
-dependencies = [
- "derive_builder_core",
- "syn 1.0.109",
-]
-
 [[package]]
 name = "derive_more"
 version = "0.99.17"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
 dependencies = [
+ "convert_case 0.4.0",
  "proc-macro2",
  "quote",
+ "rustc_version",
  "syn 1.0.109",
 ]
 
@@ -1909,14 +2312,14 @@ dependencies = [
  "block-buffer 0.10.4",
  "const-oid",
  "crypto-common",
- "subtle",
+ "subtle 2.5.0",
 ]
 
 [[package]]
 name = "directories"
-version = "4.0.1"
+version = "5.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f51c5d4ddabd36886dd3e1438cb358cdcb0d7c499cb99cb4ac2e38e18b5cb210"
+checksum = "9a49173b84e034382284f27f1af4dcbbd231ffa358c0fe316541a7337f376a35"
 dependencies = [
  "dirs-sys",
 ]
@@ -1933,13 +2336,14 @@ dependencies = [
 
 [[package]]
 name = "dirs-sys"
-version = "0.3.7"
+version = "0.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
+checksum = "520f05a5cbd335fae5a99ff7a6ab8627577660ee5cfd6a94a6a929b52ff0321c"
 dependencies = [
  "libc",
+ "option-ext",
  "redox_users",
- "winapi 0.3.9",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
@@ -1961,7 +2365,7 @@ checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -1969,10 +2373,11 @@ name = "distance-oracle"
 version = "0.1.0"
 dependencies = [
  "bincode",
- "clap 4.4.11",
+ "clap 4.4.18",
  "dubp-wot",
  "flate2",
  "fnv",
+ "hex",
  "log",
  "num-traits 0.2.17",
  "parity-scale-codec",
@@ -1987,6 +2392,49 @@ dependencies = [
  "tokio",
 ]
 
+[[package]]
+name = "dleq_vrf"
+version = "0.0.2"
+source = "git+https://github.com/w3f/ring-vrf?rev=e9782f9#e9782f938629c90f3adb3fff2358bc8d1386af3e"
+dependencies = [
+ "ark-ec",
+ "ark-ff",
+ "ark-scale",
+ "ark-secret-scalar",
+ "ark-serialize",
+ "ark-std",
+ "ark-transcript",
+ "arrayvec 0.7.4",
+ "zeroize",
+]
+
+[[package]]
+name = "docify"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7cc4fd38aaa9fb98ac70794c82a00360d1e165a87fbf96a8a91f9dfc602aaee2"
+dependencies = [
+ "docify_macros",
+]
+
+[[package]]
+name = "docify_macros"
+version = "0.2.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "63fa215f3a0d40fb2a221b3aa90d8e1fbb8379785a990cb60d62ac71ebdc6460"
+dependencies = [
+ "common-path",
+ "derive-syn-parse",
+ "once_cell",
+ "proc-macro2",
+ "quote",
+ "regex",
+ "syn 2.0.48",
+ "termcolor",
+ "toml 0.8.8",
+ "walkdir",
+]
+
 [[package]]
 name = "downcast"
 version = "0.11.0"
@@ -2022,9 +2470,9 @@ dependencies = [
 name = "duniter"
 version = "0.7.1"
 dependencies = [
- "async-io 1.13.0",
+ "async-io",
  "bs58 0.5.0",
- "clap 4.4.11",
+ "clap 4.4.18",
  "clap_complete",
  "common-runtime",
  "dc-distance",
@@ -2033,16 +2481,16 @@ dependencies = [
  "frame-benchmarking",
  "frame-benchmarking-cli",
  "frame-system",
- "futures 0.3.29",
+ "futures 0.3.30",
  "g1-runtime",
  "gdev-runtime",
  "gtest-runtime",
  "hex",
- "jsonrpsee",
+ "jsonrpsee 0.16.3",
  "lazy_static",
  "log",
  "maplit",
- "memmap2",
+ "memmap2 0.9.4",
  "num-format",
  "pallet-certification",
  "pallet-grandpa",
@@ -2067,6 +2515,7 @@ dependencies = [
  "sc-keystore",
  "sc-network",
  "sc-network-common",
+ "sc-offchain",
  "sc-rpc-api",
  "sc-service",
  "sc-telemetry",
@@ -2092,7 +2541,7 @@ dependencies = [
  "sp-offchain",
  "sp-runtime",
  "sp-session",
- "sp-storage",
+ "sp-storage 13.0.0",
  "sp-timestamp",
  "sp-transaction-pool",
  "sp-transaction-storage-proof",
@@ -2119,6 +2568,8 @@ dependencies = [
  "parity-scale-codec",
  "portpicker",
  "serde_json",
+ "sp-core",
+ "sp-core-hashing",
  "sp-keyring",
  "sp-runtime",
  "subxt",
@@ -2147,7 +2598,7 @@ dependencies = [
  "parity-scale-codec",
  "scale-info",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
@@ -2177,39 +2628,18 @@ version = "1.0.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "545b22097d44f8a9581187cdf93de7a71e4722bf51200cfaba810865b49a495d"
 
-[[package]]
-name = "ecdsa"
-version = "0.14.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "413301934810f597c1d19ca71c8710e99a3f1ba28a0d2ebc01551a2daeea3c5c"
-dependencies = [
- "der 0.6.1",
- "elliptic-curve 0.12.3",
- "rfc6979 0.3.1",
- "signature 1.6.4",
-]
-
 [[package]]
 name = "ecdsa"
 version = "0.16.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca"
 dependencies = [
- "der 0.7.8",
+ "der",
  "digest 0.10.7",
- "elliptic-curve 0.13.8",
- "rfc6979 0.4.0",
- "signature 2.2.0",
- "spki 0.7.2",
-]
-
-[[package]]
-name = "ed25519"
-version = "1.5.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7"
-dependencies = [
- "signature 1.6.4",
+ "elliptic-curve",
+ "rfc6979",
+ "signature",
+ "spki",
 ]
 
 [[package]]
@@ -2218,22 +2648,8 @@ version = "2.2.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53"
 dependencies = [
- "pkcs8 0.10.2",
- "signature 2.2.0",
-]
-
-[[package]]
-name = "ed25519-dalek"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c762bae6dcaf24c4c84667b8579785430908723d5c889f469d76a41d59cc7a9d"
-dependencies = [
- "curve25519-dalek 3.2.0",
- "ed25519 1.5.3",
- "rand 0.7.3",
- "serde",
- "sha2 0.9.9",
- "zeroize",
+ "pkcs8",
+ "signature",
 ]
 
 [[package]]
@@ -2243,11 +2659,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1f628eaec48bfd21b865dc2950cfa014450c01d2fa2b69a86c2fd5844ec523c0"
 dependencies = [
  "curve25519-dalek 4.1.1",
- "ed25519 2.2.3",
+ "ed25519",
  "rand_core 0.6.4",
  "serde",
  "sha2 0.10.8",
- "subtle",
+ "subtle 2.5.0",
  "zeroize",
 ]
 
@@ -2266,49 +2682,42 @@ dependencies = [
 ]
 
 [[package]]
-name = "either"
-version = "1.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
-
-[[package]]
-name = "elliptic-curve"
-version = "0.12.3"
+name = "ed25519-zebra"
+version = "4.0.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7bb888ab5300a19b8e5bceef25ac745ad065f3c9f7efc6de1b91958110891d3"
+checksum = "7d9ce6874da5d4415896cd45ffbc4d1cfc0c4f9c079427bd870742c30f2f65a9"
 dependencies = [
- "base16ct 0.1.1",
- "crypto-bigint 0.4.9",
- "der 0.6.1",
- "digest 0.10.7",
- "ff 0.12.1",
- "generic-array 0.14.7",
- "group 0.12.1",
- "hkdf",
- "pem-rfc7468",
- "pkcs8 0.9.0",
+ "curve25519-dalek 4.1.1",
+ "ed25519",
+ "hashbrown 0.14.3",
+ "hex",
  "rand_core 0.6.4",
- "sec1 0.3.0",
- "subtle",
+ "sha2 0.10.8",
  "zeroize",
 ]
 
+[[package]]
+name = "either"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
+
 [[package]]
 name = "elliptic-curve"
 version = "0.13.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47"
 dependencies = [
- "base16ct 0.2.0",
- "crypto-bigint 0.5.5",
+ "base16ct",
+ "crypto-bigint",
  "digest 0.10.7",
- "ff 0.13.0",
+ "ff",
  "generic-array 0.14.7",
- "group 0.13.0",
- "pkcs8 0.10.2",
+ "group",
+ "pkcs8",
  "rand_core 0.6.4",
- "sec1 0.7.3",
- "subtle",
+ "sec1",
+ "subtle 2.5.0",
  "zeroize",
 ]
 
@@ -2354,9 +2763,9 @@ dependencies = [
 
 [[package]]
 name = "env_logger"
-version = "0.10.1"
+version = "0.10.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "95b3f3e67048839cb0d0781f445682a35113da7121f7c949db0e2be96a4fbece"
+checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580"
 dependencies = [
  "humantime",
  "is-terminal",
@@ -2389,12 +2798,12 @@ checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
 
 [[package]]
 name = "errno"
-version = "0.3.7"
+version = "0.3.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f258a7194e7f7c2a7837a8913aeab7fd8c383457034fa20ce4dd3dcb813e8eb8"
+checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
 dependencies = [
  "libc",
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
@@ -2405,9 +2814,9 @@ checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
 
 [[package]]
 name = "event-listener"
-version = "3.1.0"
+version = "4.0.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d93877bcde0eb80ca09131a08d23f0a5c18a620b01db137dba666d18cd9b30c2"
+checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e"
 dependencies = [
  "concurrent-queue",
  "parking",
@@ -2416,11 +2825,11 @@ dependencies = [
 
 [[package]]
 name = "event-listener-strategy"
-version = "0.3.0"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d96b852f1345da36d551b9473fa1e2b1eb5c5195585c6c018118bc92a8d91160"
+checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3"
 dependencies = [
- "event-listener 3.1.0",
+ "event-listener 4.0.3",
  "pin-project-lite 0.2.13",
 ]
 
@@ -2430,20 +2839,20 @@ version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e43f2f1833d64e33f15592464d6fdd70f349dda7b1a53088eb83cd94014008c5"
 dependencies = [
- "futures 0.3.29",
+ "futures 0.3.30",
 ]
 
 [[package]]
 name = "expander"
-version = "1.0.0"
+version = "2.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f360349150728553f92e4c997a16af8915f418d3a0f21b440d34c5632f16ed84"
+checksum = "5f86a749cf851891866c10515ef6c299b5c69661465e9c3bbe7e07a2b77fb0f7"
 dependencies = [
- "blake2",
+ "blake2 0.10.6",
  "fs-err",
  "proc-macro2",
  "quote",
- "syn 1.0.109",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -2490,15 +2899,6 @@ dependencies = [
  "regex",
 ]
 
-[[package]]
-name = "fastrand"
-version = "1.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
-dependencies = [
- "instant",
-]
-
 [[package]]
 name = "fastrand"
 version = "2.0.1"
@@ -2507,31 +2907,35 @@ checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5"
 
 [[package]]
 name = "fdlimit"
-version = "0.2.1"
+version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c4c9e43643f5a3be4ca5b67d26b98031ff9db6806c3440ae32e02e3ceac3f1b"
+checksum = "e182f7dbc2ef73d9ef67351c5fbbea084729c48362d3ce9dd44c28e32e277fe5"
 dependencies = [
  "libc",
+ "thiserror",
 ]
 
 [[package]]
 name = "ff"
-version = "0.12.1"
+version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d013fc25338cc558c5c2cfbad646908fb23591e2404481826742b651c9af7160"
+checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
 dependencies = [
  "rand_core 0.6.4",
- "subtle",
+ "subtle 2.5.0",
 ]
 
 [[package]]
-name = "ff"
-version = "0.13.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
+name = "fflonk"
+version = "0.1.0"
+source = "git+https://github.com/w3f/fflonk#1e854f35e9a65d08b11a86291405cdc95baa0a35"
 dependencies = [
- "rand_core 0.6.4",
- "subtle",
+ "ark-ec",
+ "ark-ff",
+ "ark-poly",
+ "ark-serialize",
+ "ark-std",
+ "merlin 3.0.0",
 ]
 
 [[package]]
@@ -2546,20 +2950,20 @@ version = "0.1.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "84f2e425d9790201ba4af4630191feac6dcc98765b118d4d18e91d23c2353866"
 dependencies = [
- "env_logger 0.10.1",
+ "env_logger 0.10.2",
  "log",
 ]
 
 [[package]]
 name = "filetime"
-version = "0.2.22"
+version = "0.2.23"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d4029edd3e734da6fe05b6cd7bd2960760a616bd2ddd0d59a0124746d6272af0"
+checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd"
 dependencies = [
  "cfg-if 1.0.0",
  "libc",
- "redox_syscall 0.3.5",
- "windows-sys 0.48.0",
+ "redox_syscall 0.4.1",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
@@ -2569,7 +2973,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "36530797b9bf31cd4ff126dcfee8170f86b00cfdcea3269d73133cc0415945c3"
 dependencies = [
  "either",
- "futures 0.3.29",
+ "futures 0.3.30",
  "futures-timer",
  "log",
  "num-traits 0.2.17",
@@ -2640,16 +3044,16 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
 [[package]]
 name = "fork-tree"
 version = "3.0.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "parity-scale-codec",
 ]
 
 [[package]]
 name = "form_urlencoded"
-version = "1.2.0"
+version = "1.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a62bc1cf6f830c2ec14a513a9fb124d0a213a629668a4186f329db21fe045652"
+checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
 dependencies = [
  "percent-encoding",
 ]
@@ -2663,7 +3067,7 @@ checksum = "6c2141d6d6c8512188a7891b4b01590a45f6dac67afb4f255c4124dbb86d4eaa"
 [[package]]
 name = "frame-benchmarking"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "frame-support",
  "frame-support-procedural",
@@ -2679,28 +3083,28 @@ dependencies = [
  "sp-core",
  "sp-io",
  "sp-runtime",
- "sp-runtime-interface",
- "sp-std 5.0.0",
- "sp-storage",
+ "sp-runtime-interface 17.0.0",
+ "sp-std 8.0.0",
+ "sp-storage 13.0.0",
  "static_assertions",
 ]
 
 [[package]]
 name = "frame-benchmarking-cli"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "Inflector",
- "array-bytes",
+ "array-bytes 6.2.2",
  "chrono",
- "clap 4.4.11",
+ "clap 4.4.18",
  "comfy-table",
  "frame-benchmarking",
  "frame-support",
  "frame-system",
  "gethostname",
  "handlebars",
- "itertools",
+ "itertools 0.10.5",
  "lazy_static",
  "linked-hash-map",
  "log",
@@ -2720,14 +3124,15 @@ dependencies = [
  "sp-blockchain",
  "sp-core",
  "sp-database",
- "sp-externalities",
+ "sp-externalities 0.19.0",
  "sp-inherents",
+ "sp-io",
  "sp-keystore",
  "sp-runtime",
  "sp-state-machine",
- "sp-std 5.0.0",
- "sp-storage",
+ "sp-storage 13.0.0",
  "sp-trie",
+ "sp-wasm-interface 14.0.0",
  "thiserror",
  "thousands",
 ]
@@ -2735,18 +3140,19 @@ dependencies = [
 [[package]]
 name = "frame-executive"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "frame-support",
  "frame-system",
  "frame-try-runtime",
+ "log",
  "parity-scale-codec",
  "scale-info",
  "sp-core",
  "sp-io",
  "sp-runtime",
- "sp-std 5.0.0",
- "sp-tracing",
+ "sp-std 8.0.0",
+ "sp-tracing 10.0.0",
 ]
 
 [[package]]
@@ -2754,6 +3160,17 @@ name = "frame-metadata"
 version = "15.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "878babb0b136e731cc77ec2fd883ff02745ff21e6fb662729953d44923df009c"
+dependencies = [
+ "cfg-if 1.0.0",
+ "parity-scale-codec",
+ "scale-info",
+]
+
+[[package]]
+name = "frame-metadata"
+version = "16.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692"
 dependencies = [
  "cfg-if 1.0.0",
  "parity-scale-codec",
@@ -2764,97 +3181,113 @@ dependencies = [
 [[package]]
 name = "frame-remote-externalities"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "async-recursion",
- "futures 0.3.29",
- "jsonrpsee",
+ "futures 0.3.30",
+ "indicatif",
+ "jsonrpsee 0.16.3",
  "log",
  "parity-scale-codec",
  "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
+ "sp-state-machine",
+ "spinners",
  "substrate-rpc-client",
  "tokio",
+ "tokio-retry",
 ]
 
 [[package]]
 name = "frame-support"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
+ "aquamarine",
+ "array-bytes 6.2.2",
  "bitflags 1.3.2",
+ "docify",
  "environmental",
- "frame-metadata",
+ "frame-metadata 16.0.0",
  "frame-support-procedural",
  "impl-trait-for-tuples",
  "k256",
  "log",
- "once_cell",
+ "macro_magic",
  "parity-scale-codec",
  "paste",
  "scale-info",
  "serde",
+ "serde_json",
  "smallvec",
  "sp-api",
  "sp-arithmetic",
  "sp-core",
  "sp-core-hashing-proc-macro",
+ "sp-debug-derive 8.0.0",
+ "sp-genesis-builder",
  "sp-inherents",
  "sp-io",
+ "sp-metadata-ir",
  "sp-runtime",
  "sp-staking",
  "sp-state-machine",
- "sp-std 5.0.0",
- "sp-tracing",
+ "sp-std 8.0.0",
+ "sp-tracing 10.0.0",
  "sp-weights",
+ "static_assertions",
  "tt-call",
 ]
 
 [[package]]
 name = "frame-support-procedural"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "Inflector",
  "cfg-expr",
  "derive-syn-parse",
+ "expander",
  "frame-support-procedural-tools",
- "itertools",
+ "itertools 0.10.5",
+ "macro_magic",
  "proc-macro-warning",
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "sp-core-hashing",
+ "syn 2.0.48",
 ]
 
 [[package]]
 name = "frame-support-procedural-tools"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "frame-support-procedural-tools-derive",
- "proc-macro-crate",
+ "proc-macro-crate 3.1.0",
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
 name = "frame-support-procedural-tools-derive"
 version = "3.0.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
 name = "frame-system"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
+ "cfg-if 1.0.0",
+ "docify",
  "frame-support",
  "log",
  "parity-scale-codec",
@@ -2863,7 +3296,7 @@ dependencies = [
  "sp-core",
  "sp-io",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
  "sp-version",
  "sp-weights",
 ]
@@ -2871,7 +3304,7 @@ dependencies = [
 [[package]]
 name = "frame-system-benchmarking"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -2880,13 +3313,13 @@ dependencies = [
  "scale-info",
  "sp-core",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "frame-system-rpc-runtime-api"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "parity-scale-codec",
  "sp-api",
@@ -2895,13 +3328,13 @@ dependencies = [
 [[package]]
 name = "frame-try-runtime"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "frame-support",
  "parity-scale-codec",
  "sp-api",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
@@ -2923,16 +3356,6 @@ dependencies = [
  "winapi 0.3.9",
 ]
 
-[[package]]
-name = "fs4"
-version = "0.6.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2eeb4ed9e12f43b7fa0baae3f9cdda28352770132ef2e09a23760c29cae8bd47"
-dependencies = [
- "rustix 0.38.25",
- "windows-sys 0.48.0",
-]
-
 [[package]]
 name = "fsevent"
 version = "0.4.0"
@@ -2992,9 +3415,9 @@ checksum = "3a471a38ef8ed83cd6e40aa59c1ffe17db6855c18e3604d9c4ed8c08ebc28678"
 
 [[package]]
 name = "futures"
-version = "0.3.29"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335"
+checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
 dependencies = [
  "futures-channel",
  "futures-core",
@@ -3007,9 +3430,9 @@ dependencies = [
 
 [[package]]
 name = "futures-channel"
-version = "0.3.29"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb"
+checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78"
 dependencies = [
  "futures-core",
  "futures-sink",
@@ -3017,15 +3440,15 @@ dependencies = [
 
 [[package]]
 name = "futures-core"
-version = "0.3.29"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c"
+checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d"
 
 [[package]]
 name = "futures-executor"
-version = "0.3.29"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc"
+checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d"
 dependencies = [
  "futures-core",
  "futures-task",
@@ -3035,44 +3458,32 @@ dependencies = [
 
 [[package]]
 name = "futures-io"
-version = "0.3.29"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa"
+checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1"
 
 [[package]]
 name = "futures-lite"
-version = "1.13.0"
+version = "2.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce"
+checksum = "445ba825b27408685aaecefd65178908c36c6e96aaf6d8599419d46e624192ba"
 dependencies = [
- "fastrand 1.9.0",
+ "fastrand",
  "futures-core",
  "futures-io",
- "memchr",
  "parking",
  "pin-project-lite 0.2.13",
- "waker-fn",
-]
-
-[[package]]
-name = "futures-lite"
-version = "2.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3831c2651acb5177cbd83943f3d9c8912c5ad03c76afcc0e9511ba568ec5ebb"
-dependencies = [
- "futures-core",
- "pin-project-lite 0.2.13",
 ]
 
 [[package]]
 name = "futures-macro"
-version = "0.3.29"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb"
+checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -3083,20 +3494,20 @@ checksum = "d2411eed028cdf8c8034eaf21f9915f956b6c3abec4d4c7949ee67f0721127bd"
 dependencies = [
  "futures-io",
  "rustls 0.20.9",
- "webpki 0.22.4",
+ "webpki",
 ]
 
 [[package]]
 name = "futures-sink"
-version = "0.3.29"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817"
+checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5"
 
 [[package]]
 name = "futures-task"
-version = "0.3.29"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2"
+checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004"
 
 [[package]]
 name = "futures-timer"
@@ -3106,9 +3517,9 @@ checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c"
 
 [[package]]
 name = "futures-util"
-version = "0.3.29"
+version = "0.3.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104"
+checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
 dependencies = [
  "futures 0.1.31",
  "futures-channel",
@@ -3146,6 +3557,7 @@ dependencies = [
  "frame-try-runtime",
  "hex-literal",
  "log",
+ "node-primitives",
  "pallet-atomic-swap",
  "pallet-authority-discovery",
  "pallet-authority-members",
@@ -3184,20 +3596,23 @@ dependencies = [
  "parity-scale-codec",
  "scale-info",
  "serde",
+ "serde_derive",
  "sp-api",
  "sp-arithmetic",
  "sp-authority-discovery",
  "sp-block-builder",
  "sp-consensus-babe",
+ "sp-consensus-grandpa",
  "sp-core",
+ "sp-distance",
  "sp-inherents",
- "sp-io",
  "sp-keyring",
  "sp-membership",
  "sp-offchain",
  "sp-runtime",
  "sp-session",
- "sp-std 5.0.0",
+ "sp-staking",
+ "sp-std 8.0.0",
  "sp-transaction-pool",
  "sp-version",
  "substrate-wasm-builder",
@@ -3217,6 +3632,7 @@ dependencies = [
  "frame-try-runtime",
  "hex-literal",
  "log",
+ "node-primitives",
  "pallet-atomic-swap",
  "pallet-authority-discovery",
  "pallet-authority-members",
@@ -3272,7 +3688,7 @@ dependencies = [
  "sp-runtime",
  "sp-session",
  "sp-staking",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
  "sp-transaction-pool",
  "sp-version",
  "substrate-wasm-builder",
@@ -3330,9 +3746,9 @@ dependencies = [
 
 [[package]]
 name = "getrandom"
-version = "0.2.11"
+version = "0.2.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f"
+checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5"
 dependencies = [
  "cfg-if 1.0.0",
  "js-sys",
@@ -3342,13 +3758,13 @@ dependencies = [
 ]
 
 [[package]]
-name = "ghash"
-version = "0.4.4"
+name = "getrandom_or_panic"
+version = "0.0.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1583cc1656d7839fd3732b80cf4f38850336cdb9b8ded1cd399ca62958de3c99"
+checksum = "6ea1015b5a70616b688dc230cfe50c8af89d972cb132d5a622814d29773b10b9"
 dependencies = [
- "opaque-debug 0.3.0",
- "polyval 0.5.3",
+ "rand 0.8.5",
+ "rand_core 0.6.4",
 ]
 
 [[package]]
@@ -3358,7 +3774,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40"
 dependencies = [
  "opaque-debug 0.3.0",
- "polyval 0.6.1",
+ "polyval",
 ]
 
 [[package]]
@@ -3380,20 +3796,20 @@ dependencies = [
 
 [[package]]
 name = "ghost"
-version = "0.1.16"
+version = "0.1.17"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef81e7cedce6ab54cd5dc7b3400c442c8d132fe03200a1be0637db7ef308ff17"
+checksum = "b0e085ded9f1267c32176b40921b9754c474f7dd96f7e808d4a982e48aa1e854"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
 name = "gimli"
-version = "0.26.2"
+version = "0.27.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d"
+checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e"
 dependencies = [
  "fallible-iterator",
  "indexmap 1.9.3",
@@ -3402,9 +3818,9 @@ dependencies = [
 
 [[package]]
 name = "gimli"
-version = "0.28.0"
+version = "0.28.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
+checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253"
 
 [[package]]
 name = "git-version"
@@ -3423,7 +3839,7 @@ checksum = "53010ccb100b96a67bc32c0175f0ed1426b31b655d562898e57325f81c023ac0"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -3434,15 +3850,15 @@ checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b"
 
 [[package]]
 name = "globset"
-version = "0.4.13"
+version = "0.4.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "759c97c1e17c55525b57192c06a267cda0ac5210b222d6b82189a2338fa1c13d"
+checksum = "57da3b9b5b85bd66f31093f8c408b90a74431672542466497dcbdfdc02034be1"
 dependencies = [
  "aho-corasick",
  "bstr",
- "fnv",
  "log",
- "regex",
+ "regex-automata 0.4.5",
+ "regex-syntax 0.8.2",
 ]
 
 [[package]]
@@ -3514,26 +3930,15 @@ dependencies = [
  "syn 1.0.109",
 ]
 
-[[package]]
-name = "group"
-version = "0.12.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5dfbfb3a6cfbd390d5c9564ab283a0349b9b9fcd46a706c1eb10e0db70bfbac7"
-dependencies = [
- "ff 0.12.1",
- "rand_core 0.6.4",
- "subtle",
-]
-
 [[package]]
 name = "group"
 version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
 dependencies = [
- "ff 0.13.0",
+ "ff",
  "rand_core 0.6.4",
- "subtle",
+ "subtle 2.5.0",
 ]
 
 [[package]]
@@ -3550,6 +3955,7 @@ dependencies = [
  "frame-try-runtime",
  "hex-literal",
  "log",
+ "node-primitives",
  "pallet-atomic-swap",
  "pallet-authority-discovery",
  "pallet-authority-members",
@@ -3560,6 +3966,7 @@ dependencies = [
  "pallet-collective",
  "pallet-distance",
  "pallet-duniter-account",
+ "pallet-duniter-test-parameters",
  "pallet-duniter-wot",
  "pallet-grandpa",
  "pallet-identity",
@@ -3593,16 +4000,17 @@ dependencies = [
  "sp-authority-discovery",
  "sp-block-builder",
  "sp-consensus-babe",
+ "sp-consensus-grandpa",
  "sp-core",
  "sp-distance",
  "sp-inherents",
- "sp-io",
  "sp-keyring",
  "sp-membership",
  "sp-offchain",
  "sp-runtime",
  "sp-session",
- "sp-std 5.0.0",
+ "sp-staking",
+ "sp-std 8.0.0",
  "sp-transaction-pool",
  "sp-version",
  "substrate-wasm-builder",
@@ -3610,9 +4018,9 @@ dependencies = [
 
 [[package]]
 name = "h2"
-version = "0.3.22"
+version = "0.3.24"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4d6250322ef6e60f93f9a2162799302cd6f68f79f6e5d85c8c16f14d1d958178"
+checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9"
 dependencies = [
  "bytes",
  "fnv",
@@ -3620,7 +4028,7 @@ dependencies = [
  "futures-sink",
  "futures-util",
  "http",
- "indexmap 2.1.0",
+ "indexmap 2.2.1",
  "slab",
  "tokio",
  "tokio-util",
@@ -3671,14 +4079,28 @@ version = "0.13.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
 dependencies = [
- "ahash 0.8.6",
+ "ahash 0.8.7",
 ]
 
 [[package]]
 name = "hashbrown"
-version = "0.14.2"
+version = "0.14.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
+dependencies = [
+ "ahash 0.8.7",
+ "allocator-api2",
+ "serde",
+]
+
+[[package]]
+name = "hashlink"
+version = "0.8.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f93e7192158dbcda357bdec5fb5788eebf8bbac027f3f33e719d29135ae84156"
+checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7"
+dependencies = [
+ "hashbrown 0.14.3",
+]
 
 [[package]]
 name = "heck"
@@ -3706,9 +4128,9 @@ dependencies = [
 
 [[package]]
 name = "hermit-abi"
-version = "0.3.3"
+version = "0.3.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7"
+checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f"
 
 [[package]]
 name = "hex"
@@ -3724,9 +4146,9 @@ checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46"
 
 [[package]]
 name = "hkdf"
-version = "0.12.3"
+version = "0.12.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437"
+checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7"
 dependencies = [
  "hmac 0.12.1",
 ]
@@ -3747,7 +4169,7 @@ version = "0.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b"
 dependencies = [
- "crypto-mac 0.11.1",
+ "crypto-mac 0.11.0",
  "digest 0.9.0",
 ]
 
@@ -3773,11 +4195,11 @@ dependencies = [
 
 [[package]]
 name = "home"
-version = "0.5.5"
+version = "0.5.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5444c27eef6923071f7ebcc33e3444508466a76f7a2b93da00ed6e19f30c1ddb"
+checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5"
 dependencies = [
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
@@ -3804,9 +4226,9 @@ dependencies = [
 
 [[package]]
 name = "http-body"
-version = "0.4.5"
+version = "0.4.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1"
+checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2"
 dependencies = [
  "bytes",
  "http",
@@ -3839,9 +4261,9 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
 
 [[package]]
 name = "hyper"
-version = "0.14.27"
+version = "0.14.28"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468"
+checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80"
 dependencies = [
  "bytes",
  "futures-channel",
@@ -3854,28 +4276,13 @@ dependencies = [
  "httpdate",
  "itoa",
  "pin-project-lite 0.2.13",
- "socket2 0.4.10",
+ "socket2 0.5.5",
  "tokio",
  "tower-service",
  "tracing",
  "want",
 ]
 
-[[package]]
-name = "hyper-rustls"
-version = "0.23.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c"
-dependencies = [
- "http",
- "hyper",
- "log",
- "rustls 0.20.9",
- "rustls-native-certs",
- "tokio",
- "tokio-rustls 0.23.4",
-]
-
 [[package]]
 name = "hyper-rustls"
 version = "0.24.2"
@@ -3886,11 +4293,11 @@ dependencies = [
  "http",
  "hyper",
  "log",
- "rustls 0.21.9",
- "rustls-native-certs",
+ "rustls 0.21.10",
+ "rustls-native-certs 0.6.3",
  "tokio",
  "tokio-rustls 0.24.1",
- "webpki-roots 0.25.2",
+ "webpki-roots 0.25.3",
 ]
 
 [[package]]
@@ -3908,16 +4315,16 @@ dependencies = [
 
 [[package]]
 name = "iana-time-zone"
-version = "0.1.58"
+version = "0.1.59"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20"
+checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539"
 dependencies = [
  "android_system_properties",
  "core-foundation-sys",
  "iana-time-zone-haiku",
  "js-sys",
  "wasm-bindgen",
- "windows-core",
+ "windows-core 0.52.0",
 ]
 
 [[package]]
@@ -3948,9 +4355,9 @@ dependencies = [
 
 [[package]]
 name = "idna"
-version = "0.4.0"
+version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"
+checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
 dependencies = [
  "unicode-bidi",
  "unicode-normalization",
@@ -3972,10 +4379,10 @@ version = "3.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d6b0422c86d7ce0e97169cc42e04ae643caf278874a7a3c87b8150a220dc7e1e"
 dependencies = [
- "async-io 2.2.0",
+ "async-io",
  "core-foundation",
  "fnv",
- "futures 0.3.29",
+ "futures 0.3.30",
  "if-addrs",
  "ipnet",
  "log",
@@ -3987,17 +4394,16 @@ dependencies = [
 
 [[package]]
 name = "ignore"
-version = "0.4.20"
+version = "0.4.22"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dbe7873dab538a9a44ad79ede1faf5f30d49f9a5c883ddbab48bce81b64b7492"
+checksum = "b46810df39e66e925525d6e38ce1e7f6e1d208f72dc39757880fcb66e2c58af1"
 dependencies = [
+ "crossbeam-deque",
  "globset",
- "lazy_static",
  "log",
  "memchr",
- "regex",
+ "regex-automata 0.4.5",
  "same-file",
- "thread_local",
  "walkdir",
  "winapi-util",
 ]
@@ -4031,6 +4437,25 @@ dependencies = [
  "syn 1.0.109",
 ]
 
+[[package]]
+name = "include_dir"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "18762faeff7122e89e0857b02f7ce6fcc0d101d5e9ad2ad7846cc01d61b7f19e"
+dependencies = [
+ "include_dir_macros",
+]
+
+[[package]]
+name = "include_dir_macros"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+]
+
 [[package]]
 name = "indexmap"
 version = "1.9.3"
@@ -4044,12 +4469,31 @@ dependencies = [
 
 [[package]]
 name = "indexmap"
-version = "2.1.0"
+version = "2.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d530e1a18b1cb4c484e6e34556a0d948706958449fca0cab753d649f2bce3d1f"
+checksum = "433de089bd45971eecf4668ee0ee8f4cec17db4f8bd8f7bc3197a6ce37aa7d9b"
 dependencies = [
  "equivalent",
- "hashbrown 0.14.2",
+ "hashbrown 0.14.3",
+]
+
+[[package]]
+name = "indexmap-nostd"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8e04e2fd2b8188ea827b32ef11de88377086d690286ab35747ef7f9bf3ccb590"
+
+[[package]]
+name = "indicatif"
+version = "0.17.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fb28741c9db9a713d93deb3bb9515c20788cef5815265bee4980e87bde7e0f25"
+dependencies = [
+ "console",
+ "instant",
+ "number_prefix",
+ "portable-atomic",
+ "unicode-width",
 ]
 
 [[package]]
@@ -4105,25 +4549,6 @@ dependencies = [
  "num-traits 0.2.17",
 ]
 
-[[package]]
-name = "interceptor"
-version = "0.8.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e8a11ae2da61704edada656798b61c94b35ecac2c58eb955156987d5e6be90b"
-dependencies = [
- "async-trait",
- "bytes",
- "log",
- "rand 0.8.5",
- "rtcp",
- "rtp",
- "thiserror",
- "tokio",
- "waitgroup",
- "webrtc-srtp",
- "webrtc-util",
-]
-
 [[package]]
 name = "inventory"
 version = "0.2.3"
@@ -4140,7 +4565,7 @@ version = "1.0.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
 dependencies = [
- "hermit-abi 0.3.3",
+ "hermit-abi 0.3.4",
  "libc",
  "windows-sys 0.48.0",
 ]
@@ -4180,13 +4605,13 @@ checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3"
 
 [[package]]
 name = "is-terminal"
-version = "0.4.9"
+version = "0.4.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb0889898416213fab133e1d33a0e5858a48177452750691bde3666d0fdbaf8b"
+checksum = "0bad00257d07be169d870ab665980b06cdb366d792ad690bf2e76876dc503455"
 dependencies = [
- "hermit-abi 0.3.3",
- "rustix 0.38.25",
- "windows-sys 0.48.0",
+ "hermit-abi 0.3.4",
+ "rustix 0.38.30",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
@@ -4198,11 +4623,20 @@ dependencies = [
  "either",
 ]
 
+[[package]]
+name = "itertools"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569"
+dependencies = [
+ "either",
+]
+
 [[package]]
 name = "itoa"
-version = "1.0.9"
+version = "1.0.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38"
+checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c"
 
 [[package]]
 name = "jobserver"
@@ -4215,9 +4649,9 @@ dependencies = [
 
 [[package]]
 name = "js-sys"
-version = "0.3.65"
+version = "0.3.67"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "54c0c35952f67de54bb584e9fd912b3023117cbafc0a77d8f3dee1fb5f572fe8"
+checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1"
 dependencies = [
  "wasm-bindgen",
 ]
@@ -4228,16 +4662,27 @@ version = "0.16.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "367a292944c07385839818bb71c8d76611138e2dedb0677d035b8da21d29c78b"
 dependencies = [
- "jsonrpsee-client-transport",
- "jsonrpsee-core",
- "jsonrpsee-http-client",
+ "jsonrpsee-core 0.16.3",
+ "jsonrpsee-http-client 0.16.3",
  "jsonrpsee-proc-macros",
  "jsonrpsee-server",
- "jsonrpsee-types",
+ "jsonrpsee-types 0.16.3",
  "jsonrpsee-ws-client",
  "tracing",
 ]
 
+[[package]]
+name = "jsonrpsee"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9579d0ca9fb30da026bac2f0f7d9576ec93489aeb7cd4971dd5b4617d82c79b2"
+dependencies = [
+ "jsonrpsee-client-transport 0.21.0",
+ "jsonrpsee-core 0.21.0",
+ "jsonrpsee-http-client 0.21.0",
+ "jsonrpsee-types 0.21.0",
+]
+
 [[package]]
 name = "jsonrpsee-client-transport"
 version = "0.16.3"
@@ -4246,17 +4691,38 @@ checksum = "c8b3815d9f5d5de348e5f162b316dc9cdf4548305ebb15b4eb9328e66cf27d7a"
 dependencies = [
  "futures-util",
  "http",
- "jsonrpsee-core",
- "jsonrpsee-types",
+ "jsonrpsee-core 0.16.3",
+ "jsonrpsee-types 0.16.3",
  "pin-project",
- "rustls-native-certs",
+ "rustls-native-certs 0.6.3",
  "soketto",
  "thiserror",
  "tokio",
  "tokio-rustls 0.24.1",
  "tokio-util",
  "tracing",
- "webpki-roots 0.25.2",
+ "webpki-roots 0.25.3",
+]
+
+[[package]]
+name = "jsonrpsee-client-transport"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3f9f9ed46590a8d5681975f126e22531698211b926129a40a2db47cbca429220"
+dependencies = [
+ "futures-util",
+ "http",
+ "jsonrpsee-core 0.21.0",
+ "pin-project",
+ "rustls-native-certs 0.7.0",
+ "rustls-pki-types",
+ "soketto",
+ "thiserror",
+ "tokio",
+ "tokio-rustls 0.25.0",
+ "tokio-util",
+ "tracing",
+ "url",
 ]
 
 [[package]]
@@ -4269,19 +4735,62 @@ dependencies = [
  "arrayvec 0.7.4",
  "async-lock 2.8.0",
  "async-trait",
- "beef",
- "futures-channel",
- "futures-timer",
- "futures-util",
- "globset",
+ "beef",
+ "futures-channel",
+ "futures-timer",
+ "futures-util",
+ "globset",
+ "hyper",
+ "jsonrpsee-types 0.16.3",
+ "parking_lot 0.12.1",
+ "rand 0.8.5",
+ "rustc-hash",
+ "serde",
+ "serde_json",
+ "soketto",
+ "thiserror",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "jsonrpsee-core"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "776d009e2f591b78c038e0d053a796f94575d66ca4e77dd84bfc5e81419e436c"
+dependencies = [
+ "anyhow",
+ "async-lock 3.3.0",
+ "async-trait",
+ "beef",
+ "futures-timer",
+ "futures-util",
+ "hyper",
+ "jsonrpsee-types 0.21.0",
+ "pin-project",
+ "rustc-hash",
+ "serde",
+ "serde_json",
+ "thiserror",
+ "tokio",
+ "tokio-stream",
+ "tracing",
+]
+
+[[package]]
+name = "jsonrpsee-http-client"
+version = "0.16.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e5f9fabdd5d79344728521bb65e3106b49ec405a78b66fbff073b72b389fa43"
+dependencies = [
+ "async-trait",
  "hyper",
- "jsonrpsee-types",
- "parking_lot 0.12.1",
- "rand 0.8.5",
+ "hyper-rustls",
+ "jsonrpsee-core 0.16.3",
+ "jsonrpsee-types 0.16.3",
  "rustc-hash",
  "serde",
  "serde_json",
- "soketto",
  "thiserror",
  "tokio",
  "tracing",
@@ -4289,21 +4798,22 @@ dependencies = [
 
 [[package]]
 name = "jsonrpsee-http-client"
-version = "0.16.3"
+version = "0.21.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7e5f9fabdd5d79344728521bb65e3106b49ec405a78b66fbff073b72b389fa43"
+checksum = "78b7de9f3219d95985eb77fd03194d7c1b56c19bce1abfcc9d07462574b15572"
 dependencies = [
  "async-trait",
  "hyper",
- "hyper-rustls 0.24.2",
- "jsonrpsee-core",
- "jsonrpsee-types",
- "rustc-hash",
+ "hyper-rustls",
+ "jsonrpsee-core 0.21.0",
+ "jsonrpsee-types 0.21.0",
  "serde",
  "serde_json",
  "thiserror",
  "tokio",
+ "tower",
  "tracing",
+ "url",
 ]
 
 [[package]]
@@ -4313,7 +4823,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "44e8ab85614a08792b9bff6c8feee23be78c98d0182d4c622c05256ab553892a"
 dependencies = [
  "heck 0.4.1",
- "proc-macro-crate",
+ "proc-macro-crate 1.1.3",
  "proc-macro2",
  "quote",
  "syn 1.0.109",
@@ -4329,8 +4839,8 @@ dependencies = [
  "futures-util",
  "http",
  "hyper",
- "jsonrpsee-core",
- "jsonrpsee-types",
+ "jsonrpsee-core 0.16.3",
+ "jsonrpsee-types 0.16.3",
  "serde",
  "serde_json",
  "soketto",
@@ -4355,6 +4865,19 @@ dependencies = [
  "tracing",
 ]
 
+[[package]]
+name = "jsonrpsee-types"
+version = "0.21.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3266dfb045c9174b24c77c2dfe0084914bb23a6b2597d70c9dc6018392e1cd1b"
+dependencies = [
+ "anyhow",
+ "beef",
+ "serde",
+ "serde_json",
+ "thiserror",
+]
+
 [[package]]
 name = "jsonrpsee-ws-client"
 version = "0.16.3"
@@ -4362,29 +4885,29 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "4e1b3975ed5d73f456478681a417128597acd6a2487855fdb7b4a3d4d195bf5e"
 dependencies = [
  "http",
- "jsonrpsee-client-transport",
- "jsonrpsee-core",
- "jsonrpsee-types",
+ "jsonrpsee-client-transport 0.16.3",
+ "jsonrpsee-core 0.16.3",
+ "jsonrpsee-types 0.16.3",
 ]
 
 [[package]]
 name = "k256"
-version = "0.13.2"
+version = "0.13.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f01b677d82ef7a676aa37e099defd83a28e15687112cafdd112d60236b6115b"
+checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b"
 dependencies = [
  "cfg-if 1.0.0",
- "ecdsa 0.16.9",
- "elliptic-curve 0.13.8",
+ "ecdsa",
+ "elliptic-curve",
  "once_cell",
  "sha2 0.10.8",
 ]
 
 [[package]]
 name = "keccak"
-version = "0.1.4"
+version = "0.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940"
+checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654"
 dependencies = [
  "cpufeatures",
 ]
@@ -4399,6 +4922,12 @@ dependencies = [
  "winapi-build",
 ]
 
+[[package]]
+name = "keystream"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c33070833c9ee02266356de0c43f723152bd38bd96ddf52c82b3af10c9138b28"
+
 [[package]]
 name = "kvdb"
 version = "0.13.0"
@@ -4418,6 +4947,20 @@ dependencies = [
  "parking_lot 0.12.1",
 ]
 
+[[package]]
+name = "kvdb-rocksdb"
+version = "0.19.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b644c70b92285f66bfc2032922a79000ea30af7bc2ab31902992a5dcb9b434f6"
+dependencies = [
+ "kvdb",
+ "num_cpus",
+ "parking_lot 0.12.1",
+ "regex",
+ "rocksdb",
+ "smallvec",
+]
+
 [[package]]
 name = "lazy_static"
 version = "1.4.0"
@@ -4432,9 +4975,19 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
 
 [[package]]
 name = "libc"
-version = "0.2.150"
+version = "0.2.152"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7"
+
+[[package]]
+name = "libloading"
+version = "0.8.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c"
+checksum = "c571b676ddfc9a8c12f1f3d3085a7b163966a8fd8098a90640953ce5f6170161"
+dependencies = [
+ "cfg-if 1.0.0",
+ "windows-sys 0.48.0",
+]
 
 [[package]]
 name = "libm"
@@ -4444,22 +4997,24 @@ checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058"
 
 [[package]]
 name = "libp2p"
-version = "0.50.1"
+version = "0.51.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c7b0104790be871edcf97db9bd2356604984e623a08d825c3f27852290266b8"
+checksum = "f35eae38201a993ece6bdc823292d6abd1bffed1c4d0f4a3517d2bd8e1d917fe"
 dependencies = [
  "bytes",
- "futures 0.3.29",
+ "futures 0.3.30",
  "futures-timer",
- "getrandom 0.2.11",
+ "getrandom 0.2.12",
  "instant",
- "libp2p-core 0.38.0",
+ "libp2p-allow-block-list",
+ "libp2p-connection-limits",
+ "libp2p-core",
  "libp2p-dns",
  "libp2p-identify",
+ "libp2p-identity",
  "libp2p-kad",
  "libp2p-mdns",
  "libp2p-metrics",
- "libp2p-mplex",
  "libp2p-noise",
  "libp2p-ping",
  "libp2p-quic",
@@ -4467,47 +5022,34 @@ dependencies = [
  "libp2p-swarm",
  "libp2p-tcp",
  "libp2p-wasm-ext",
- "libp2p-webrtc",
  "libp2p-websocket",
  "libp2p-yamux",
- "multiaddr 0.16.0",
- "parking_lot 0.12.1",
+ "multiaddr",
  "pin-project",
- "smallvec",
 ]
 
 [[package]]
-name = "libp2p-core"
-version = "0.38.0"
+name = "libp2p-allow-block-list"
+version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6a8fcd392ff67af6cc3f03b1426c41f7f26b6b9aff2dc632c1c56dd649e571f"
+checksum = "510daa05efbc25184458db837f6f9a5143888f1caa742426d92e1833ddd38a50"
 dependencies = [
- "asn1_der",
- "bs58 0.4.0",
- "ed25519-dalek 1.0.1",
- "either",
- "fnv",
- "futures 0.3.29",
- "futures-timer",
- "instant",
- "log",
- "multiaddr 0.16.0",
- "multihash 0.16.3",
- "multistream-select",
- "once_cell",
- "parking_lot 0.12.1",
- "pin-project",
- "prost",
- "prost-build",
- "rand 0.8.5",
- "rw-stream-sink",
- "sec1 0.3.0",
- "sha2 0.10.8",
- "smallvec",
- "thiserror",
- "unsigned-varint",
+ "libp2p-core",
+ "libp2p-identity",
+ "libp2p-swarm",
+ "void",
+]
+
+[[package]]
+name = "libp2p-connection-limits"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4caa33f1d26ed664c4fe2cca81a08c8e07d4c1c04f2f4ac7655c2dd85467fda0"
+dependencies = [
+ "libp2p-core",
+ "libp2p-identity",
+ "libp2p-swarm",
  "void",
- "zeroize",
 ]
 
 [[package]]
@@ -4518,13 +5060,13 @@ checksum = "3c1df63c0b582aa434fb09b2d86897fa2b419ffeccf934b36f87fcedc8e835c2"
 dependencies = [
  "either",
  "fnv",
- "futures 0.3.29",
+ "futures 0.3.30",
  "futures-timer",
  "instant",
  "libp2p-identity",
  "log",
- "multiaddr 0.17.1",
- "multihash 0.17.0",
+ "multiaddr",
+ "multihash",
  "multistream-select",
  "once_cell",
  "parking_lot 0.12.1",
@@ -4540,12 +5082,12 @@ dependencies = [
 
 [[package]]
 name = "libp2p-dns"
-version = "0.38.0"
+version = "0.39.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e42a271c1b49f789b92f7fc87749fa79ce5c7bdc88cbdfacb818a4bca47fec5"
+checksum = "146ff7034daae62077c415c2376b8057368042df6ab95f5432ad5e88568b1554"
 dependencies = [
- "futures 0.3.29",
- "libp2p-core 0.38.0",
+ "futures 0.3.30",
+ "libp2p-core",
  "log",
  "parking_lot 0.12.1",
  "smallvec",
@@ -4554,20 +5096,21 @@ dependencies = [
 
 [[package]]
 name = "libp2p-identify"
-version = "0.41.1"
+version = "0.42.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c052d0026f4817b44869bfb6810f4e1112f43aec8553f2cb38881c524b563abf"
+checksum = "5455f472243e63b9c497ff320ded0314254a9eb751799a39c283c6f20b793f3c"
 dependencies = [
  "asynchronous-codec",
- "futures 0.3.29",
+ "either",
+ "futures 0.3.30",
  "futures-timer",
- "libp2p-core 0.38.0",
+ "libp2p-core",
+ "libp2p-identity",
  "libp2p-swarm",
  "log",
- "lru",
- "prost",
- "prost-build",
- "prost-codec",
+ "lru 0.10.1",
+ "quick-protobuf",
+ "quick-protobuf-codec",
  "smallvec",
  "thiserror",
  "void",
@@ -4580,10 +5123,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "276bb57e7af15d8f100d3c11cbdd32c6752b7eef4ba7a18ecf464972c07abcce"
 dependencies = [
  "bs58 0.4.0",
- "ed25519-dalek 2.1.0",
+ "ed25519-dalek",
  "log",
- "multiaddr 0.17.1",
- "multihash 0.17.0",
+ "multiaddr",
+ "multihash",
  "quick-protobuf",
  "rand 0.8.5",
  "sha2 0.10.8",
@@ -4593,23 +5136,23 @@ dependencies = [
 
 [[package]]
 name = "libp2p-kad"
-version = "0.42.1"
+version = "0.43.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2766dcd2be8c87d5e1f35487deb22d765f49c6ae1251b3633efe3b25698bd3d2"
+checksum = "39d5ef876a2b2323d63c258e63c2f8e36f205fe5a11f0b3095d59635650790ff"
 dependencies = [
  "arrayvec 0.7.4",
  "asynchronous-codec",
  "bytes",
  "either",
  "fnv",
- "futures 0.3.29",
+ "futures 0.3.30",
  "futures-timer",
  "instant",
- "libp2p-core 0.38.0",
+ "libp2p-core",
+ "libp2p-identity",
  "libp2p-swarm",
  "log",
- "prost",
- "prost-build",
+ "quick-protobuf",
  "rand 0.8.5",
  "sha2 0.10.8",
  "smallvec",
@@ -4621,14 +5164,15 @@ dependencies = [
 
 [[package]]
 name = "libp2p-mdns"
-version = "0.42.0"
+version = "0.43.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "04f378264aade9872d6ccd315c0accc18be3a35d15fc1b9c36e5b6f983b62b5b"
+checksum = "19983e1f949f979a928f2c603de1cf180cc0dc23e4ac93a62651ccb18341460b"
 dependencies = [
  "data-encoding",
- "futures 0.3.29",
+ "futures 0.3.30",
  "if-watch",
- "libp2p-core 0.38.0",
+ "libp2p-core",
+ "libp2p-identity",
  "libp2p-swarm",
  "log",
  "rand 0.8.5",
@@ -4641,11 +5185,11 @@ dependencies = [
 
 [[package]]
 name = "libp2p-metrics"
-version = "0.11.0"
+version = "0.12.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ad8a64f29da86005c86a4d2728b8a0719e9b192f4092b609fd8790acb9dec55"
+checksum = "a42ec91e227d7d0dafa4ce88b333cdf5f277253873ab087555c92798db2ddd46"
 dependencies = [
- "libp2p-core 0.38.0",
+ "libp2p-core",
  "libp2p-identify",
  "libp2p-kad",
  "libp2p-ping",
@@ -4653,38 +5197,20 @@ dependencies = [
  "prometheus-client",
 ]
 
-[[package]]
-name = "libp2p-mplex"
-version = "0.38.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03805b44107aa013e7cbbfa5627b31c36cbedfdfb00603c0311998882bc4bace"
-dependencies = [
- "asynchronous-codec",
- "bytes",
- "futures 0.3.29",
- "libp2p-core 0.38.0",
- "log",
- "nohash-hasher",
- "parking_lot 0.12.1",
- "rand 0.8.5",
- "smallvec",
- "unsigned-varint",
-]
-
 [[package]]
 name = "libp2p-noise"
-version = "0.41.0"
+version = "0.42.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a978cb57efe82e892ec6f348a536bfbd9fee677adbe5689d7a93ad3a9bffbf2e"
+checksum = "9c3673da89d29936bc6435bafc638e2f184180d554ce844db65915113f86ec5e"
 dependencies = [
  "bytes",
  "curve25519-dalek 3.2.0",
- "futures 0.3.29",
- "libp2p-core 0.38.0",
+ "futures 0.3.30",
+ "libp2p-core",
+ "libp2p-identity",
  "log",
  "once_cell",
- "prost",
- "prost-build",
+ "quick-protobuf",
  "rand 0.8.5",
  "sha2 0.10.8",
  "snow",
@@ -4696,14 +5222,15 @@ dependencies = [
 
 [[package]]
 name = "libp2p-ping"
-version = "0.41.0"
+version = "0.42.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "929fcace45a112536e22b3dcfd4db538723ef9c3cb79f672b98be2cc8e25f37f"
+checksum = "3e57759c19c28a73ef1eb3585ca410cefb72c1a709fcf6de1612a378e4219202"
 dependencies = [
- "futures 0.3.29",
+ "either",
+ "futures 0.3.30",
  "futures-timer",
  "instant",
- "libp2p-core 0.38.0",
+ "libp2p-core",
  "libp2p-swarm",
  "log",
  "rand 0.8.5",
@@ -4712,15 +5239,16 @@ dependencies = [
 
 [[package]]
 name = "libp2p-quic"
-version = "0.7.0-alpha"
+version = "0.7.0-alpha.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "01e7c867e95c8130667b24409d236d37598270e6da69b3baf54213ba31ffca59"
+checksum = "c6b26abd81cd2398382a1edfe739b539775be8a90fa6914f39b2ab49571ec735"
 dependencies = [
  "bytes",
- "futures 0.3.29",
+ "futures 0.3.30",
  "futures-timer",
  "if-watch",
- "libp2p-core 0.38.0",
+ "libp2p-core",
+ "libp2p-identity",
  "libp2p-tls",
  "log",
  "parking_lot 0.12.1",
@@ -4733,49 +5261,46 @@ dependencies = [
 
 [[package]]
 name = "libp2p-request-response"
-version = "0.23.0"
+version = "0.24.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3236168796727bfcf4927f766393415361e2c644b08bedb6a6b13d957c9a4884"
+checksum = "7ffdb374267d42dc5ed5bc53f6e601d4a64ac5964779c6e40bb9e4f14c1e30d5"
 dependencies = [
  "async-trait",
- "bytes",
- "futures 0.3.29",
+ "futures 0.3.30",
  "instant",
- "libp2p-core 0.38.0",
+ "libp2p-core",
+ "libp2p-identity",
  "libp2p-swarm",
- "log",
  "rand 0.8.5",
  "smallvec",
- "unsigned-varint",
 ]
 
 [[package]]
 name = "libp2p-swarm"
-version = "0.41.1"
+version = "0.42.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2a35472fe3276b3855c00f1c032ea8413615e030256429ad5349cdf67c6e1a0"
+checksum = "903b3d592d7694e56204d211f29d31bc004be99386644ba8731fc3e3ef27b296"
 dependencies = [
  "either",
  "fnv",
- "futures 0.3.29",
+ "futures 0.3.30",
  "futures-timer",
  "instant",
- "libp2p-core 0.38.0",
+ "libp2p-core",
+ "libp2p-identity",
  "libp2p-swarm-derive",
  "log",
- "pin-project",
  "rand 0.8.5",
  "smallvec",
- "thiserror",
  "tokio",
  "void",
 ]
 
 [[package]]
 name = "libp2p-swarm-derive"
-version = "0.31.0"
+version = "0.32.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d527d5827582abd44a6d80c07ff8b50b4ee238a8979e05998474179e79dc400"
+checksum = "0fba456131824ab6acd4c7bf61e9c0f0a3014b5fc9868ccb8e10d344594cdc4f"
 dependencies = [
  "heck 0.4.1",
  "quote",
@@ -4784,15 +5309,15 @@ dependencies = [
 
 [[package]]
 name = "libp2p-tcp"
-version = "0.38.0"
+version = "0.39.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4b257baf6df8f2df39678b86c578961d48cc8b68642a12f0f763f56c8e5858d"
+checksum = "33d33698596d7722d85d3ab0c86c2c322254fce1241e91208e3679b4eb3026cf"
 dependencies = [
- "futures 0.3.29",
+ "futures 0.3.30",
  "futures-timer",
  "if-watch",
  "libc",
- "libp2p-core 0.38.0",
+ "libp2p-core",
  "log",
  "socket2 0.4.10",
  "tokio",
@@ -4804,74 +5329,43 @@ version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ff08d13d0dc66e5e9ba6279c1de417b84fa0d0adc3b03e5732928c180ec02781"
 dependencies = [
- "futures 0.3.29",
+ "futures 0.3.30",
  "futures-rustls",
- "libp2p-core 0.39.2",
+ "libp2p-core",
  "libp2p-identity",
- "rcgen 0.10.0",
+ "rcgen",
  "ring 0.16.20",
  "rustls 0.20.9",
  "thiserror",
- "webpki 0.22.4",
- "x509-parser 0.14.0",
+ "webpki",
+ "x509-parser",
  "yasna",
 ]
 
 [[package]]
 name = "libp2p-wasm-ext"
-version = "0.38.0"
+version = "0.39.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1bb1a35299860e0d4b3c02a3e74e3b293ad35ae0cee8a056363b0c862d082069"
+checksum = "77dff9d32353a5887adb86c8afc1de1a94d9e8c3bc6df8b2201d7cdf5c848f43"
 dependencies = [
- "futures 0.3.29",
+ "futures 0.3.30",
  "js-sys",
- "libp2p-core 0.38.0",
+ "libp2p-core",
  "parity-send-wrapper",
  "wasm-bindgen",
  "wasm-bindgen-futures",
 ]
 
-[[package]]
-name = "libp2p-webrtc"
-version = "0.4.0-alpha"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cdb6cd86dd68cba72308ea05de1cebf3ba0ae6e187c40548167955d4e3970f6a"
-dependencies = [
- "async-trait",
- "asynchronous-codec",
- "bytes",
- "futures 0.3.29",
- "futures-timer",
- "hex",
- "if-watch",
- "libp2p-core 0.38.0",
- "libp2p-noise",
- "log",
- "multihash 0.16.3",
- "prost",
- "prost-build",
- "prost-codec",
- "rand 0.8.5",
- "rcgen 0.9.3",
- "serde",
- "stun",
- "thiserror",
- "tinytemplate",
- "tokio",
- "tokio-util",
- "webrtc",
-]
-
 [[package]]
 name = "libp2p-websocket"
-version = "0.40.0"
+version = "0.41.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1d705506030d5c0aaf2882437c70dab437605f21c5f9811978f694e6917a3b54"
+checksum = "111273f7b3d3510524c752e8b7a5314b7f7a1fee7e68161c01a7d72cbb06db9f"
 dependencies = [
  "either",
- "futures 0.3.29",
+ "futures 0.3.30",
  "futures-rustls",
- "libp2p-core 0.38.0",
+ "libp2p-core",
  "log",
  "parking_lot 0.12.1",
  "quicksink",
@@ -4883,14 +5377,13 @@ dependencies = [
 
 [[package]]
 name = "libp2p-yamux"
-version = "0.42.0"
+version = "0.43.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4f63594a0aa818642d9d4915c791945053877253f08a3626f13416b5cd928a29"
+checksum = "4dcd21d950662700a385d4c6d68e2f5f54d778e97068cdd718522222ef513bda"
 dependencies = [
- "futures 0.3.29",
- "libp2p-core 0.38.0",
+ "futures 0.3.30",
+ "libp2p-core",
  "log",
- "parking_lot 0.12.1",
  "thiserror",
  "yamux",
 ]
@@ -4901,11 +5394,26 @@ version = "0.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8"
 dependencies = [
- "bitflags 2.4.1",
+ "bitflags 2.4.2",
  "libc",
  "redox_syscall 0.4.1",
 ]
 
+[[package]]
+name = "librocksdb-sys"
+version = "0.11.0+8.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3386f101bcb4bd252d8e9d2fb41ec3b0862a15a62b478c355b2982efa469e3e"
+dependencies = [
+ "bindgen",
+ "bzip2-sys",
+ "cc",
+ "glob",
+ "libc",
+ "libz-sys",
+ "tikv-jemalloc-sys",
+]
+
 [[package]]
 name = "libsecp256k1"
 version = "0.7.1"
@@ -4933,7 +5441,7 @@ checksum = "5be9b9bb642d8522a44d533eab56c16c738301965504753b03ad1de3425d5451"
 dependencies = [
  "crunchy",
  "digest 0.9.0",
- "subtle",
+ "subtle 2.5.0",
 ]
 
 [[package]]
@@ -4956,9 +5464,9 @@ dependencies = [
 
 [[package]]
 name = "libz-sys"
-version = "1.1.12"
+version = "1.1.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d97137b25e321a73eef1418d1d5d2eda4d77e12813f8e6dead84bc52c5870a7b"
+checksum = "037731f5d3aaa87a5675e895b63ddff1a87624bc29f77004ea829809654e48f6"
 dependencies = [
  "cc",
  "cmake",
@@ -5008,15 +5516,21 @@ checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4"
 
 [[package]]
 name = "linux-raw-sys"
-version = "0.3.8"
+version = "0.4.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c"
 
 [[package]]
-name = "linux-raw-sys"
-version = "0.4.11"
+name = "lioness"
+version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "969488b55f8ac402214f3f5fd243ebb7206cf82de60d3172994707a4bcc2b829"
+checksum = "4ae926706ba42c425c9457121178330d75e273df2e82e28b758faf3de3a9acb9"
+dependencies = [
+ "arrayref",
+ "blake2 0.8.1",
+ "chacha",
+ "keystream",
+]
 
 [[package]]
 name = "lock_api"
@@ -5036,11 +5550,20 @@ checksum = "b5e6163cb8c49088c2c36f57875e58ccd8c87c7427f7fbd50ea6710b2f3f2e8f"
 
 [[package]]
 name = "lru"
-version = "0.8.1"
+version = "0.10.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b6e8aaa3f231bb4bd57b84b2d5dc3ae7f350265df8aa96492e0bc394a1571909"
+checksum = "718e8fae447df0c7e1ba7f5189829e63fd536945c8988d61444c19039f16b670"
 dependencies = [
- "hashbrown 0.12.3",
+ "hashbrown 0.13.2",
+]
+
+[[package]]
+name = "lru"
+version = "0.12.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "db2c024b41519440580066ba82aab04092b333e09066a5eb86c7c4890df31f22"
+dependencies = [
+ "hashbrown 0.14.3",
 ]
 
 [[package]]
@@ -5081,6 +5604,54 @@ dependencies = [
  "libc",
 ]
 
+[[package]]
+name = "macro_magic"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e03844fc635e92f3a0067e25fa4bf3e3dbf3f2927bf3aa01bb7bc8f1c428949d"
+dependencies = [
+ "macro_magic_core",
+ "macro_magic_macros",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "macro_magic_core"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "468155613a44cfd825f1fb0ffa532b018253920d404e6fca1e8d43155198a46d"
+dependencies = [
+ "const-random",
+ "derive-syn-parse",
+ "macro_magic_core_macros",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "macro_magic_core_macros"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ea73aa640dc01d62a590d48c0c3521ed739d53b27f919b25c3551e233481654"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "macro_magic_macros"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef9d79ae96aaba821963320eb2b6e34d17df1e5a83d8a1985c29cc5be59577b3"
+dependencies = [
+ "macro_magic_core",
+ "quote",
+ "syn 2.0.48",
+]
+
 [[package]]
 name = "maplit"
 version = "1.0.2"
@@ -5118,21 +5689,11 @@ dependencies = [
  "rawpointer",
 ]
 
-[[package]]
-name = "md-5"
-version = "0.10.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf"
-dependencies = [
- "cfg-if 1.0.0",
- "digest 0.10.7",
-]
-
 [[package]]
 name = "memchr"
-version = "2.6.4"
+version = "2.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
+checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
 
 [[package]]
 name = "memfd"
@@ -5140,7 +5701,7 @@ version = "0.6.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b2cffa4ad52c6f791f4f8b15f0c05f9824b2ced1160e88cc393d64fff9a8ac64"
 dependencies = [
- "rustix 0.38.25",
+ "rustix 0.38.30",
 ]
 
 [[package]]
@@ -5153,19 +5714,19 @@ dependencies = [
 ]
 
 [[package]]
-name = "memoffset"
-version = "0.6.5"
+name = "memmap2"
+version = "0.9.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5aa361d4faea93603064a027415f07bd8e1d5c88c9fbf68bf56a285428fd79ce"
+checksum = "fe751422e4a8caa417e13c3ea66452215d7d63e19e604f4980461212f3ae1322"
 dependencies = [
- "autocfg",
+ "libc",
 ]
 
 [[package]]
 name = "memoffset"
-version = "0.9.0"
+version = "0.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
+checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
 dependencies = [
  "autocfg",
 ]
@@ -5179,12 +5740,6 @@ dependencies = [
  "hash-db",
 ]
 
-[[package]]
-name = "memory_units"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8452105ba047068f40ff7093dd1d9da90898e63dd61736462e9cdda6a90ad3c3"
-
 [[package]]
 name = "merlin"
 version = "2.0.1"
@@ -5197,6 +5752,18 @@ dependencies = [
  "zeroize",
 ]
 
+[[package]]
+name = "merlin"
+version = "3.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58c38e2799fc0978b65dfff8023ec7843e2330bb462f19198840b34b6582397d"
+dependencies = [
+ "byteorder",
+ "keccak",
+ "rand_core 0.6.4",
+ "zeroize",
+]
+
 [[package]]
 name = "mime"
 version = "0.3.17"
@@ -5239,9 +5806,9 @@ dependencies = [
 
 [[package]]
 name = "mio"
-version = "0.8.9"
+version = "0.8.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3dce281c5e46beae905d4de1870d8b1509a9142b62eedf18b443b011ca8343d0"
+checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09"
 dependencies = [
  "libc",
  "wasi 0.11.0+wasi-snapshot-preview1",
@@ -5272,6 +5839,31 @@ dependencies = [
  "ws2_32-sys",
 ]
 
+[[package]]
+name = "mixnet"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "daa3eb39495d8e2e2947a1d862852c90cc6a4a8845f8b41c8829cb9fcc047f4a"
+dependencies = [
+ "arrayref",
+ "arrayvec 0.7.4",
+ "bitflags 1.3.2",
+ "blake2 0.10.6",
+ "c2-chacha",
+ "curve25519-dalek 4.1.1",
+ "either",
+ "hashlink",
+ "lioness",
+ "log",
+ "parking_lot 0.12.1",
+ "rand 0.8.5",
+ "rand_chacha 0.3.1",
+ "rand_distr",
+ "subtle 2.5.0",
+ "thiserror",
+ "zeroize",
+]
+
 [[package]]
 name = "mockall"
 version = "0.11.4"
@@ -5299,24 +5891,6 @@ dependencies = [
  "syn 1.0.109",
 ]
 
-[[package]]
-name = "multiaddr"
-version = "0.16.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a4aebdb21e90f81d13ed01dc84123320838e53963c2ca94b60b305d3fa64f31e"
-dependencies = [
- "arrayref",
- "byteorder",
- "data-encoding",
- "multibase",
- "multihash 0.16.3",
- "percent-encoding",
- "serde",
- "static_assertions",
- "unsigned-varint",
- "url",
-]
-
 [[package]]
 name = "multiaddr"
 version = "0.17.1"
@@ -5328,7 +5902,7 @@ dependencies = [
  "data-encoding",
  "log",
  "multibase",
- "multihash 0.17.0",
+ "multihash",
  "percent-encoding",
  "serde",
  "static_assertions",
@@ -5349,9 +5923,9 @@ dependencies = [
 
 [[package]]
 name = "multihash"
-version = "0.16.3"
+version = "0.17.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1c346cf9999c631f002d8f977c4eaeaa0e6386f16007202308d0b3757522c2cc"
+checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40"
 dependencies = [
  "blake2b_simd",
  "blake2s_simd",
@@ -5364,24 +5938,13 @@ dependencies = [
  "unsigned-varint",
 ]
 
-[[package]]
-name = "multihash"
-version = "0.17.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "835d6ff01d610179fbce3de1694d007e500bf33a7f29689838941d6bf783ae40"
-dependencies = [
- "core2",
- "multihash-derive",
- "unsigned-varint",
-]
-
 [[package]]
 name = "multihash-derive"
 version = "0.8.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1d6d4752e6230d8ef7adf7bd5d8c4b1f6561c1014c5ba9a37445ccefe18aa1db"
 dependencies = [
- "proc-macro-crate",
+ "proc-macro-crate 1.1.3",
  "proc-macro-error",
  "proc-macro2",
  "quote",
@@ -5402,7 +5965,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c8552ab875c1313b97b8d20cb857b9fd63e2d1d6a0a1b53ce9821e575405f27a"
 dependencies = [
  "bytes",
- "futures 0.3.29",
+ "futures 0.3.30",
  "log",
  "pin-project",
  "smallvec",
@@ -5438,9 +6001,9 @@ dependencies = [
 
 [[package]]
 name = "names"
-version = "0.13.0"
+version = "0.14.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e7d66043b25d4a6cccb23619d10c19c25304b355a7dccd4a8e11423dd2382146"
+checksum = "7bddcd3bf5144b6392de80e04c347cd7fab2508f6df16a85fc496ecd5cec39bc"
 dependencies = [
  "rand 0.8.5",
 ]
@@ -5519,7 +6082,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "65b4b14489ab424703c092062176d52ba55485a89c076b4f9db05092b7223aa6"
 dependencies = [
  "bytes",
- "futures 0.3.29",
+ "futures 0.3.30",
  "log",
  "netlink-packet-core",
  "netlink-sys",
@@ -5534,7 +6097,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6471bf08e7ac0135876a9581bf3217ef0333c191c128d34878079f42ee150411"
 dependencies = [
  "bytes",
- "futures 0.3.29",
+ "futures 0.3.30",
  "libc",
  "log",
  "tokio",
@@ -5555,7 +6118,6 @@ dependencies = [
  "bitflags 1.3.2",
  "cfg-if 1.0.0",
  "libc",
- "memoffset 0.6.5",
 ]
 
 [[package]]
@@ -5564,11 +6126,32 @@ version = "0.27.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053"
 dependencies = [
- "bitflags 2.4.1",
+ "bitflags 2.4.2",
  "cfg-if 1.0.0",
  "libc",
 ]
 
+[[package]]
+name = "no-std-net"
+version = "0.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65"
+
+[[package]]
+name = "node-primitives"
+version = "2.0.0"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
+dependencies = [
+ "sp-core",
+ "sp-runtime",
+]
+
+[[package]]
+name = "nodrop"
+version = "0.1.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
+
 [[package]]
 name = "nohash-hasher"
 version = "0.2.0"
@@ -5688,6 +6271,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c"
 dependencies = [
  "autocfg",
+ "libm",
 ]
 
 [[package]]
@@ -5696,28 +6280,28 @@ version = "1.16.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43"
 dependencies = [
- "hermit-abi 0.3.3",
+ "hermit-abi 0.3.4",
  "libc",
 ]
 
 [[package]]
 name = "num_enum"
-version = "0.5.11"
+version = "0.7.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9"
+checksum = "02339744ee7253741199f897151b38e72257d13802d4ee837285cc2990a90845"
 dependencies = [
  "num_enum_derive",
 ]
 
 [[package]]
 name = "num_enum_derive"
-version = "0.5.11"
+version = "0.7.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799"
+checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 1.0.109",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -5729,50 +6313,47 @@ dependencies = [
  "libc",
 ]
 
+[[package]]
+name = "number_prefix"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
+
 [[package]]
 name = "object"
-version = "0.29.0"
+version = "0.30.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53"
+checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385"
 dependencies = [
  "crc32fast",
- "hashbrown 0.12.3",
+ "hashbrown 0.13.2",
  "indexmap 1.9.3",
  "memchr",
 ]
 
 [[package]]
 name = "object"
-version = "0.32.1"
+version = "0.32.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
+checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441"
 dependencies = [
  "memchr",
 ]
 
-[[package]]
-name = "oid-registry"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "38e20717fa0541f39bd146692035c37bedfa532b3e5071b35761082407546b2a"
-dependencies = [
- "asn1-rs 0.3.1",
-]
-
 [[package]]
 name = "oid-registry"
 version = "0.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff"
 dependencies = [
- "asn1-rs 0.5.2",
+ "asn1-rs",
 ]
 
 [[package]]
 name = "once_cell"
-version = "1.18.0"
+version = "1.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92"
 dependencies = [
  "parking_lot_core 0.9.9",
 ]
@@ -5791,11 +6372,11 @@ checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
 
 [[package]]
 name = "openssl"
-version = "0.10.59"
+version = "0.10.63"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7a257ad03cd8fb16ad4172fedf8094451e1af1c4b70097636ef2eac9a5f0cc33"
+checksum = "15c9d69dd87a29568d4d017cfe8ec518706046a05184e5aea92d0af890b803c8"
 dependencies = [
- "bitflags 2.4.1",
+ "bitflags 2.4.2",
  "cfg-if 1.0.0",
  "foreign-types",
  "libc",
@@ -5812,7 +6393,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -5823,9 +6404,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
 
 [[package]]
 name = "openssl-sys"
-version = "0.9.95"
+version = "0.9.99"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "40a4130519a360279579c2053038317e40eff64d13fd3f004f9e1b72b8a6aaf9"
+checksum = "22e1bf214306098e4832460f797824c05d25aacdf896f64a985fb0fd992454ae"
 dependencies = [
  "cc",
  "libc",
@@ -5834,37 +6415,21 @@ dependencies = [
 ]
 
 [[package]]
-name = "os_str_bytes"
-version = "6.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1"
-
-[[package]]
-name = "p256"
-version = "0.11.1"
+name = "option-ext"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "51f44edd08f51e2ade572f141051021c5af22677e42b7dd28a88155151c33594"
-dependencies = [
- "ecdsa 0.14.8",
- "elliptic-curve 0.12.3",
- "sha2 0.10.8",
-]
+checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d"
 
 [[package]]
-name = "p384"
-version = "0.11.2"
+name = "os_str_bytes"
+version = "6.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dfc8c5bf642dde52bb9e87c0ecd8ca5a76faac2eeed98dedb7c717997e1080aa"
-dependencies = [
- "ecdsa 0.14.8",
- "elliptic-curve 0.12.3",
- "sha2 0.10.8",
-]
+checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1"
 
 [[package]]
 name = "pallet-atomic-swap"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5873,13 +6438,13 @@ dependencies = [
  "sp-core",
  "sp-io",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "pallet-authority-discovery"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5889,7 +6454,7 @@ dependencies = [
  "sp-application-crypto",
  "sp-authority-discovery",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
@@ -5908,16 +6473,16 @@ dependencies = [
  "serde",
  "sp-core",
  "sp-io",
- "sp-membership",
  "sp-runtime",
  "sp-staking",
- "sp-std 5.0.0",
+ "sp-state-machine",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "pallet-authorship"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -5925,13 +6490,13 @@ dependencies = [
  "parity-scale-codec",
  "scale-info",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "pallet-babe"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -5949,13 +6514,13 @@ dependencies = [
  "sp-runtime",
  "sp-session",
  "sp-staking",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "pallet-balances"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -5964,7 +6529,7 @@ dependencies = [
  "parity-scale-codec",
  "scale-info",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
@@ -5978,17 +6543,16 @@ dependencies = [
  "maplit",
  "parity-scale-codec",
  "scale-info",
- "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "pallet-collective"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -5999,7 +6563,7 @@ dependencies = [
  "sp-core",
  "sp-io",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
@@ -6009,7 +6573,7 @@ dependencies = [
  "frame-benchmarking",
  "frame-support",
  "frame-system",
- "getrandom 0.2.11",
+ "getrandom 0.2.12",
  "pallet-authority-members",
  "pallet-authorship",
  "pallet-balances",
@@ -6025,7 +6589,7 @@ dependencies = [
  "sp-io",
  "sp-keystore",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
@@ -6049,7 +6613,7 @@ dependencies = [
  "sp-core",
  "sp-io",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
@@ -6065,7 +6629,7 @@ dependencies = [
  "serde",
  "sp-io",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
@@ -6075,7 +6639,7 @@ dependencies = [
  "num_enum",
  "proc-macro2",
  "quote",
- "syn 1.0.109",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -6091,18 +6655,18 @@ dependencies = [
  "pallet-membership",
  "parity-scale-codec",
  "scale-info",
- "serde",
  "sp-core",
  "sp-io",
  "sp-membership",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-state-machine",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "pallet-grandpa"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6119,7 +6683,7 @@ dependencies = [
  "sp-runtime",
  "sp-session",
  "sp-staking",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
@@ -6138,13 +6702,15 @@ dependencies = [
  "sp-io",
  "sp-keystore",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-state-machine",
+ "sp-std 8.0.0",
+ "substrate-wasm-builder",
 ]
 
 [[package]]
 name = "pallet-im-online"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6158,7 +6724,7 @@ dependencies = [
  "sp-io",
  "sp-runtime",
  "sp-staking",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
@@ -6171,18 +6737,17 @@ dependencies = [
  "maplit",
  "parity-scale-codec",
  "scale-info",
- "serde",
  "sp-core",
  "sp-io",
  "sp-membership",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "pallet-multisig"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6192,7 +6757,7 @@ dependencies = [
  "scale-info",
  "sp-io",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
@@ -6205,12 +6770,11 @@ dependencies = [
  "pallet-balances",
  "parity-scale-codec",
  "scale-info",
- "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
  "sp-staking",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
@@ -6228,13 +6792,13 @@ dependencies = [
  "sp-core",
  "sp-io",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "pallet-preimage"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6245,7 +6809,7 @@ dependencies = [
  "sp-core",
  "sp-io",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
@@ -6261,13 +6825,13 @@ dependencies = [
  "sp-core",
  "sp-io",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "pallet-proxy"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6276,7 +6840,7 @@ dependencies = [
  "scale-info",
  "sp-io",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
@@ -6293,14 +6857,15 @@ dependencies = [
  "sp-core",
  "sp-io",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "pallet-scheduler"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
+ "docify",
  "frame-benchmarking",
  "frame-support",
  "frame-system",
@@ -6309,14 +6874,14 @@ dependencies = [
  "scale-info",
  "sp-io",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
  "sp-weights",
 ]
 
 [[package]]
 name = "pallet-session"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -6330,7 +6895,8 @@ dependencies = [
  "sp-runtime",
  "sp-session",
  "sp-staking",
- "sp-std 5.0.0",
+ "sp-state-machine",
+ "sp-std 8.0.0",
  "sp-trie",
 ]
 
@@ -6351,7 +6917,7 @@ dependencies = [
  "sp-io",
  "sp-runtime",
  "sp-session",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
@@ -6367,33 +6933,35 @@ dependencies = [
  "pallet-balances",
  "parity-scale-codec",
  "scale-info",
- "serde",
  "sp-core",
  "sp-io",
  "sp-runtime",
  "sp-staking",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "pallet-sudo"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
+ "docify",
+ "frame-benchmarking",
  "frame-support",
  "frame-system",
  "parity-scale-codec",
  "scale-info",
  "sp-io",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "pallet-timestamp"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
+ "docify",
  "frame-benchmarking",
  "frame-support",
  "frame-system",
@@ -6403,14 +6971,15 @@ dependencies = [
  "sp-inherents",
  "sp-io",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
+ "sp-storage 13.0.0",
  "sp-timestamp",
 ]
 
 [[package]]
 name = "pallet-transaction-payment"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "frame-support",
  "frame-system",
@@ -6420,15 +6989,15 @@ dependencies = [
  "sp-core",
  "sp-io",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "pallet-transaction-payment-rpc"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "jsonrpsee",
+ "jsonrpsee 0.16.3",
  "pallet-transaction-payment-rpc-runtime-api",
  "parity-scale-codec",
  "sp-api",
@@ -6442,7 +7011,7 @@ dependencies = [
 [[package]]
 name = "pallet-transaction-payment-rpc-runtime-api"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "pallet-transaction-payment",
  "parity-scale-codec",
@@ -6454,8 +7023,9 @@ dependencies = [
 [[package]]
 name = "pallet-treasury"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
+ "docify",
  "frame-benchmarking",
  "frame-support",
  "frame-system",
@@ -6464,8 +7034,9 @@ dependencies = [
  "parity-scale-codec",
  "scale-info",
  "serde",
+ "sp-core",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
@@ -6484,7 +7055,7 @@ dependencies = [
  "sp-core",
  "sp-io",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
@@ -6498,13 +7069,13 @@ dependencies = [
  "scale-info",
  "sp-io",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "pallet-utility"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "frame-benchmarking",
  "frame-support",
@@ -6514,34 +7085,35 @@ dependencies = [
  "sp-core",
  "sp-io",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "parity-db"
-version = "0.4.12"
+version = "0.4.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59e9ab494af9e6e813c72170f0d3c1de1500990d62c97cc05cc7576f91aa402f"
+checksum = "592a28a24b09c9dc20ac8afaa6839abc417c720afe42c12e1e4a9d6aa2508d2e"
 dependencies = [
- "blake2",
+ "blake2 0.10.6",
  "crc32fast",
  "fs2",
  "hex",
  "libc",
  "log",
  "lz4",
- "memmap2",
+ "memmap2 0.5.10",
  "parking_lot 0.12.1",
  "rand 0.8.5",
- "siphasher",
+ "siphasher 0.3.11",
  "snap",
+ "winapi 0.3.9",
 ]
 
 [[package]]
 name = "parity-scale-codec"
-version = "3.6.5"
+version = "3.6.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0dec8a8073036902368c2cdc0387e85ff9a37054d7e7c98e592145e0c92cd4fb"
+checksum = "881331e34fa842a2fb61cc2db9643a8fedc615e47cfcc52597d1af0db9a7e8fe"
 dependencies = [
  "arrayvec 0.7.4",
  "bitvec",
@@ -6554,11 +7126,11 @@ dependencies = [
 
 [[package]]
 name = "parity-scale-codec-derive"
-version = "3.6.5"
+version = "3.6.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "312270ee71e1cd70289dacf597cab7b207aa107d2f28191c2ae45b2ece18a260"
+checksum = "be30eaf4b0a9fba5336683b38de57bb86d179a35862ba6bfcf57625d006bde5b"
 dependencies = [
- "proc-macro-crate",
+ "proc-macro-crate 2.0.0",
  "proc-macro2",
  "quote",
  "syn 1.0.109",
@@ -6630,6 +7202,12 @@ dependencies = [
  "windows-targets 0.48.5",
 ]
 
+[[package]]
+name = "partial_sort"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7924d1d0ad836f665c9065e26d016c673ece3993f30d340068b16f282afc1156"
+
 [[package]]
 name = "paste"
 version = "1.0.14"
@@ -6642,18 +7220,24 @@ version = "0.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d95f5254224e617595d2cc3cc73ff0a5eaf2637519e25f03388154e9378b6ffa"
 dependencies = [
- "crypto-mac 0.11.1",
+ "crypto-mac 0.11.0",
 ]
 
 [[package]]
 name = "pbkdf2"
-version = "0.11.0"
+version = "0.12.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917"
+checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2"
 dependencies = [
  "digest 0.10.7",
 ]
 
+[[package]]
+name = "peeking_take_while"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099"
+
 [[package]]
 name = "peg"
 version = "0.6.3"
@@ -6690,26 +7274,17 @@ dependencies = [
  "base64 0.13.1",
 ]
 
-[[package]]
-name = "pem-rfc7468"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "24d159833a9105500e0398934e205e0773f0b27529557134ecfc51c27646adac"
-dependencies = [
- "base64ct",
-]
-
 [[package]]
 name = "percent-encoding"
-version = "2.3.0"
+version = "2.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9b2a4787296e9989611394c33f193f676704af1686e70b8f8033ab5ba9a35a94"
+checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
 
 [[package]]
 name = "pest"
-version = "2.7.5"
+version = "2.7.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ae9cee2a55a544be8b89dc6848072af97a20f2422603c10865be2a42b580fff5"
+checksum = "1f200d8d83c44a45b21764d1916299752ca035d15ecd46faca3e9a2a2bf6ad06"
 dependencies = [
  "memchr",
  "thiserror",
@@ -6718,9 +7293,9 @@ dependencies = [
 
 [[package]]
 name = "pest_derive"
-version = "2.7.5"
+version = "2.7.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "81d78524685f5ef2a3b3bd1cafbc9fcabb036253d9b1463e726a91cd16e2dfc2"
+checksum = "bcd6ab1236bbdb3a49027e920e693192ebfe8913f6d60e294de57463a493cfde"
 dependencies = [
  "pest",
  "pest_generator",
@@ -6728,22 +7303,22 @@ dependencies = [
 
 [[package]]
 name = "pest_generator"
-version = "2.7.5"
+version = "2.7.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "68bd1206e71118b5356dae5ddc61c8b11e28b09ef6a31acbd15ea48a28e0c227"
+checksum = "2a31940305ffc96863a735bef7c7994a00b325a7138fdbc5bda0f1a0476d3275"
 dependencies = [
  "pest",
  "pest_meta",
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
 name = "pest_meta"
-version = "2.7.5"
+version = "2.7.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c747191d4ad9e4a4ab9c8798f1e82a39affe7ef9648390b7e5548d18e099de6"
+checksum = "a7ff62f5259e53b78d1af898941cdcdccfae7385cf7d793a6e55de5d05bb4b7d"
 dependencies = [
  "once_cell",
  "pest",
@@ -6757,27 +7332,27 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9"
 dependencies = [
  "fixedbitset",
- "indexmap 2.1.0",
+ "indexmap 2.2.1",
 ]
 
 [[package]]
 name = "pin-project"
-version = "1.1.3"
+version = "1.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fda4ed1c6c173e3fc7a83629421152e01d7b1f9b7f65fb301e490e8cfc656422"
+checksum = "0302c4a0442c456bd56f841aee5c3bfd17967563f6fadc9ceb9f9c23cf3807e0"
 dependencies = [
  "pin-project-internal",
 ]
 
 [[package]]
 name = "pin-project-internal"
-version = "1.1.3"
+version = "1.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405"
+checksum = "266c042b60c9c76b8d53061e52b2e0d1116abc57cefc8c5cd671619a56ac3690"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -6799,13 +7374,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
 
 [[package]]
-name = "pkcs8"
-version = "0.9.0"
+name = "piper"
+version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9eca2c590a5f85da82668fa685c09ce2888b9430e83299debf1f34b65fd4a4ba"
+checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4"
 dependencies = [
- "der 0.6.1",
- "spki 0.6.0",
+ "atomic-waker",
+ "fastrand",
+ "futures-io",
 ]
 
 [[package]]
@@ -6814,15 +7390,15 @@ version = "0.10.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7"
 dependencies = [
- "der 0.7.8",
- "spki 0.7.2",
+ "der",
+ "spki",
 ]
 
 [[package]]
 name = "pkg-config"
-version = "0.3.27"
+version = "0.3.29"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
+checksum = "2900ede94e305130c13ddd391e0ab7cbaeb783945ae07a279c268cb05109c6cb"
 
 [[package]]
 name = "placeholder"
@@ -6836,44 +7412,22 @@ dependencies = [
 
 [[package]]
 name = "platforms"
-version = "2.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e8d0eef3571242013a0d5dc84861c3ae4a652e56e12adf8bdc26ff5f8cb34c94"
-
-[[package]]
-name = "platforms"
-version = "3.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14e6ab3f592e6fb464fc9712d8d6e6912de6473954635fd76a589d832cffcbb0"
-
-[[package]]
-name = "polling"
-version = "2.8.0"
+version = "3.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce"
-dependencies = [
- "autocfg",
- "bitflags 1.3.2",
- "cfg-if 1.0.0",
- "concurrent-queue",
- "libc",
- "log",
- "pin-project-lite 0.2.13",
- "windows-sys 0.48.0",
-]
+checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c"
 
 [[package]]
 name = "polling"
-version = "3.3.0"
+version = "3.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e53b6af1f60f36f8c2ac2aad5459d75a5a9b4be1e8cdd40264f315d78193e531"
+checksum = "545c980a3880efd47b2e262f6a4bb6daad6555cf3367aa9c4e52895f69537a41"
 dependencies = [
  "cfg-if 1.0.0",
  "concurrent-queue",
  "pin-project-lite 0.2.13",
- "rustix 0.38.25",
+ "rustix 0.38.30",
  "tracing",
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
@@ -6884,32 +7438,26 @@ checksum = "8159bd90725d2df49889a078b54f4f79e87f1f8a8444194cdca81d38f5393abf"
 dependencies = [
  "cpufeatures",
  "opaque-debug 0.3.0",
- "universal-hash 0.5.1",
+ "universal-hash",
 ]
 
 [[package]]
 name = "polyval"
-version = "0.5.3"
+version = "0.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8419d2b623c7c0896ff2d5d96e2cb4ede590fed28fcc34934f4c33c036e620a1"
+checksum = "d52cff9d1d4dee5fe6d03729099f4a310a41179e0a10dbf542039873f2e826fb"
 dependencies = [
  "cfg-if 1.0.0",
  "cpufeatures",
  "opaque-debug 0.3.0",
- "universal-hash 0.4.1",
+ "universal-hash",
 ]
 
 [[package]]
-name = "polyval"
-version = "0.6.1"
+name = "portable-atomic"
+version = "1.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d52cff9d1d4dee5fe6d03729099f4a310a41179e0a10dbf542039873f2e826fb"
-dependencies = [
- "cfg-if 1.0.0",
- "cpufeatures",
- "opaque-debug 0.3.0",
- "universal-hash 0.5.1",
-]
+checksum = "7170ef9988bc169ba16dd36a7fa041e5c4cbeb6a35b76d4c03daded371eae7c0"
 
 [[package]]
 name = "portpicker"
@@ -6920,6 +7468,12 @@ dependencies = [
  "rand 0.8.5",
 ]
 
+[[package]]
+name = "powerfmt"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
+
 [[package]]
 name = "ppv-lite86"
 version = "0.2.17"
@@ -6934,7 +7488,7 @@ checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd"
 dependencies = [
  "difflib",
  "float-cmp",
- "itertools",
+ "itertools 0.10.5",
  "normalize-line-endings",
  "predicates-core",
  "regex",
@@ -6966,6 +7520,16 @@ dependencies = [
  "syn 1.0.109",
 ]
 
+[[package]]
+name = "prettyplease"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a41cf62165e97c7f814d2221421dbb9afcbcdb0a88068e5ea206e19951c2cbb5"
+dependencies = [
+ "proc-macro2",
+ "syn 2.0.48",
+]
+
 [[package]]
 name = "primitive-types"
 version = "0.12.2"
@@ -6989,6 +7553,24 @@ dependencies = [
  "toml 0.5.11",
 ]
 
+[[package]]
+name = "proc-macro-crate"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7e8366a6159044a37876a2b9817124296703c586a5c92e2c53751fa06d8d43e8"
+dependencies = [
+ "toml_edit 0.20.7",
+]
+
+[[package]]
+name = "proc-macro-crate"
+version = "3.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284"
+dependencies = [
+ "toml_edit 0.21.0",
+]
+
 [[package]]
 name = "proc-macro-error"
 version = "1.0.4"
@@ -7015,20 +7597,20 @@ dependencies = [
 
 [[package]]
 name = "proc-macro-warning"
-version = "0.3.1"
+version = "1.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0e99670bafb56b9a106419397343bdbc8b8742c3cc449fec6345f86173f47cd4"
+checksum = "834da187cfe638ae8abb0203f0b33e5ccdb02a28e7199f2f47b3e2754f50edca"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.70"
+version = "1.0.78"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b"
+checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
 dependencies = [
  "unicode-ident",
 ]
@@ -7049,25 +7631,25 @@ dependencies = [
 
 [[package]]
 name = "prometheus-client"
-version = "0.18.1"
+version = "0.19.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83cd1b99916654a69008fd66b4f9397fbe08e6e51dfe23d4417acf5d3b8cb87c"
+checksum = "5d6fa99d535dd930d1249e6c79cb3c2915f9172a540fe2b02a4c8f9ca954721e"
 dependencies = [
  "dtoa",
  "itoa",
  "parking_lot 0.12.1",
- "prometheus-client-derive-text-encode",
+ "prometheus-client-derive-encode",
 ]
 
 [[package]]
-name = "prometheus-client-derive-text-encode"
-version = "0.3.0"
+name = "prometheus-client-derive-encode"
+version = "0.4.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "66a455fbcb954c1a7decf3c586e860fd7889cddf4b8e164be736dbac95a953cd"
+checksum = "440f724eba9f6996b75d63681b0a92b06947f1457076d503a4d2e2c8f56442b8"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 1.0.109",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -7088,12 +7670,12 @@ checksum = "119533552c9a7ffacc21e099c24a0ac8bb19c2a2a3f363de84cd9b844feab270"
 dependencies = [
  "bytes",
  "heck 0.4.1",
- "itertools",
+ "itertools 0.10.5",
  "lazy_static",
  "log",
  "multimap",
  "petgraph",
- "prettyplease",
+ "prettyplease 0.1.25",
  "prost",
  "prost-types",
  "regex",
@@ -7102,19 +7684,6 @@ dependencies = [
  "which",
 ]
 
-[[package]]
-name = "prost-codec"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0dc34979ff898b6e141106178981ce2596c387ea6e62533facfc61a37fc879c0"
-dependencies = [
- "asynchronous-codec",
- "bytes",
- "prost",
- "thiserror",
- "unsigned-varint",
-]
-
 [[package]]
 name = "prost-derive"
 version = "0.11.9"
@@ -7122,7 +7691,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e5d2d8d10f3c6ded6da8b05b5fb3b8a5082514344d56c9f871412d29b4e075b4"
 dependencies = [
  "anyhow",
- "itertools",
+ "itertools 0.10.5",
  "proc-macro2",
  "quote",
  "syn 1.0.109",
@@ -7161,6 +7730,19 @@ dependencies = [
  "byteorder",
 ]
 
+[[package]]
+name = "quick-protobuf-codec"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1693116345026436eb2f10b677806169c1a1260c1c60eaaffe3fb5a29ae23d8b"
+dependencies = [
+ "asynchronous-codec",
+ "bytes",
+ "quick-protobuf",
+ "thiserror",
+ "unsigned-varint",
+]
+
 [[package]]
 name = "quicksink"
 version = "0.1.2"
@@ -7187,14 +7769,14 @@ dependencies = [
  "thiserror",
  "tinyvec",
  "tracing",
- "webpki 0.22.4",
+ "webpki",
 ]
 
 [[package]]
 name = "quote"
-version = "1.0.33"
+version = "1.0.35"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae"
+checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
 dependencies = [
  "proc-macro2",
 ]
@@ -7264,7 +7846,17 @@ version = "0.6.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
 dependencies = [
- "getrandom 0.2.11",
+ "getrandom 0.2.12",
+]
+
+[[package]]
+name = "rand_distr"
+version = "0.4.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "32cb0b9bc82b0a0876c2dd994a7e7a2683d3e7390ca40e6886785ef0c7e3ee31"
+dependencies = [
+ "num-traits 0.2.17",
+ "rand 0.8.5",
 ]
 
 [[package]]
@@ -7293,9 +7885,9 @@ checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
 
 [[package]]
 name = "rayon"
-version = "1.8.0"
+version = "1.8.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1"
+checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051"
 dependencies = [
  "either",
  "rayon-core",
@@ -7303,27 +7895,14 @@ dependencies = [
 
 [[package]]
 name = "rayon-core"
-version = "1.12.0"
+version = "1.12.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed"
+checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
 dependencies = [
  "crossbeam-deque",
  "crossbeam-utils",
 ]
 
-[[package]]
-name = "rcgen"
-version = "0.9.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6413f3de1edee53342e6138e75b56d32e7bc6e332b3bd62d497b1929d4cfbcdd"
-dependencies = [
- "pem",
- "ring 0.16.20",
- "time",
- "x509-parser 0.13.2",
- "yasna",
-]
-
 [[package]]
 name = "rcgen"
 version = "0.10.0"
@@ -7338,18 +7917,9 @@ dependencies = [
 
 [[package]]
 name = "redox_syscall"
-version = "0.2.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
-dependencies = [
- "bitflags 1.3.2",
-]
-
-[[package]]
-name = "redox_syscall"
-version = "0.3.5"
+version = "0.2.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a"
 dependencies = [
  "bitflags 1.3.2",
 ]
@@ -7369,36 +7939,36 @@ version = "0.4.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a18479200779601e498ada4e8c1e1f50e3ee19deb0259c25825a98b5603b2cb4"
 dependencies = [
- "getrandom 0.2.11",
+ "getrandom 0.2.12",
  "libredox",
  "thiserror",
 ]
 
 [[package]]
 name = "ref-cast"
-version = "1.0.20"
+version = "1.0.22"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "acde58d073e9c79da00f2b5b84eed919c8326832648a5b109b3fce1bb1175280"
+checksum = "c4846d4c50d1721b1a3bef8af76924eef20d5e723647333798c1b519b3a9473f"
 dependencies = [
  "ref-cast-impl",
 ]
 
 [[package]]
 name = "ref-cast-impl"
-version = "1.0.20"
+version = "1.0.22"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f7473c2cfcf90008193dd0e3e16599455cb601a9fce322b5bb55de799664925"
+checksum = "5fddb4f8d99b0a2ebafc65a87a69a7b9875e4b1ae1f00db265d300ef7f28bccc"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
 name = "regalloc2"
-version = "0.5.1"
+version = "0.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "300d4fbfb40c1c66a78ba3ddd41c1110247cf52f97b87d0f2fc9209bd49b030c"
+checksum = "80535183cae11b149d618fbd3c37e38d7cda589d82d7769e196ca9a9042d7621"
 dependencies = [
  "fxhash",
  "log",
@@ -7408,13 +7978,13 @@ dependencies = [
 
 [[package]]
 name = "regex"
-version = "1.10.2"
+version = "1.10.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
+checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15"
 dependencies = [
  "aho-corasick",
  "memchr",
- "regex-automata 0.4.3",
+ "regex-automata 0.4.5",
  "regex-syntax 0.8.2",
 ]
 
@@ -7429,9 +7999,9 @@ dependencies = [
 
 [[package]]
 name = "regex-automata"
-version = "0.4.3"
+version = "0.4.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
+checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd"
 dependencies = [
  "aho-corasick",
  "memchr",
@@ -7450,25 +8020,13 @@ version = "0.8.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
 
-[[package]]
-name = "region"
-version = "3.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76e189c2369884dce920945e2ddf79b3dff49e071a167dd1817fa9c4c00d512e"
-dependencies = [
- "bitflags 1.3.2",
- "libc",
- "mach",
- "winapi 0.3.9",
-]
-
 [[package]]
 name = "reqwest"
-version = "0.11.22"
+version = "0.11.23"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b"
+checksum = "37b1ae8d9ac08420c66222fb9096fc5de435c3c48542bc5336c51892cffafb41"
 dependencies = [
- "base64 0.21.5",
+ "base64 0.21.7",
  "bytes",
  "encoding_rs",
  "futures-core",
@@ -7512,23 +8070,28 @@ dependencies = [
 
 [[package]]
 name = "rfc6979"
-version = "0.3.1"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7743f17af12fa0b03b803ba12cd6a8d9483a587e89c69445e3909655c0b9fabb"
+checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
 dependencies = [
- "crypto-bigint 0.4.9",
  "hmac 0.12.1",
- "zeroize",
+ "subtle 2.5.0",
 ]
 
 [[package]]
-name = "rfc6979"
-version = "0.4.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2"
+name = "ring"
+version = "0.1.0"
+source = "git+https://github.com/w3f/ring-proof#b273d33f9981e2bb3375ab45faeb537f7ee35224"
 dependencies = [
- "hmac 0.12.1",
- "subtle",
+ "ark-ec",
+ "ark-ff",
+ "ark-poly",
+ "ark-serialize",
+ "ark-std",
+ "blake2 0.10.6",
+ "common",
+ "fflonk",
+ "merlin 3.0.0",
 ]
 
 [[package]]
@@ -7548,12 +8111,12 @@ dependencies = [
 
 [[package]]
 name = "ring"
-version = "0.17.5"
+version = "0.17.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fb0205304757e5d899b9c2e448b867ffd03ae7f988002e47cd24954391394d0b"
+checksum = "688c63d65483050968b2a8937f7995f443e27041a0f7700aa59b0822aedebb74"
 dependencies = [
  "cc",
- "getrandom 0.2.11",
+ "getrandom 0.2.12",
  "libc",
  "spin 0.9.8",
  "untrusted 0.9.0",
@@ -7561,25 +8124,24 @@ dependencies = [
 ]
 
 [[package]]
-name = "rpassword"
-version = "7.3.1"
+name = "rocksdb"
+version = "0.21.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "80472be3c897911d0137b2d2b9055faf6eeac5b14e324073d83bc17b191d7e3f"
+checksum = "bb6f170a4041d50a0ce04b0d2e14916d6ca863ea2e422689a5b694395d299ffe"
 dependencies = [
  "libc",
- "rtoolbox",
- "windows-sys 0.48.0",
+ "librocksdb-sys",
 ]
 
 [[package]]
-name = "rtcp"
-version = "0.7.2"
+name = "rpassword"
+version = "7.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1919efd6d4a6a85d13388f9487549bb8e359f17198cc03ffd72f79b553873691"
+checksum = "80472be3c897911d0137b2d2b9055faf6eeac5b14e324073d83bc17b191d7e3f"
 dependencies = [
- "bytes",
- "thiserror",
- "webrtc-util",
+ "libc",
+ "rtoolbox",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
@@ -7588,7 +8150,7 @@ version = "0.10.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "322c53fd76a18698f1c27381d58091de3a043d356aa5bd0d510608b565f469a0"
 dependencies = [
- "futures 0.3.29",
+ "futures 0.3.30",
  "log",
  "netlink-packet-route",
  "netlink-proto",
@@ -7607,20 +8169,6 @@ dependencies = [
  "windows-sys 0.48.0",
 ]
 
-[[package]]
-name = "rtp"
-version = "0.6.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a2a095411ff00eed7b12e4c6a118ba984d113e1079582570d56a5ee723f11f80"
-dependencies = [
- "async-trait",
- "bytes",
- "rand 0.8.5",
- "serde",
- "thiserror",
- "webrtc-util",
-]
-
 [[package]]
 name = "run_script"
 version = "0.6.4"
@@ -7654,7 +8202,7 @@ version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
 dependencies = [
- "semver 1.0.20",
+ "semver 1.0.21",
 ]
 
 [[package]]
@@ -7682,66 +8230,53 @@ dependencies = [
 
 [[package]]
 name = "rustix"
-version = "0.37.27"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2"
-dependencies = [
- "bitflags 1.3.2",
- "errno",
- "io-lifetimes",
- "libc",
- "linux-raw-sys 0.3.8",
- "windows-sys 0.48.0",
-]
-
-[[package]]
-name = "rustix"
-version = "0.38.25"
+version = "0.38.30"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc99bc2d4f1fed22595588a013687477aedf3cdcfb26558c559edb67b4d9b22e"
+checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca"
 dependencies = [
- "bitflags 2.4.1",
+ "bitflags 2.4.2",
  "errno",
  "libc",
- "linux-raw-sys 0.4.11",
- "windows-sys 0.48.0",
+ "linux-raw-sys 0.4.13",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
 name = "rustls"
-version = "0.19.1"
+version = "0.20.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7"
+checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99"
 dependencies = [
- "base64 0.13.1",
  "log",
  "ring 0.16.20",
- "sct 0.6.1",
- "webpki 0.21.4",
+ "sct",
+ "webpki",
 ]
 
 [[package]]
 name = "rustls"
-version = "0.20.9"
+version = "0.21.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99"
+checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba"
 dependencies = [
  "log",
- "ring 0.16.20",
- "sct 0.7.1",
- "webpki 0.22.4",
+ "ring 0.17.7",
+ "rustls-webpki 0.101.7",
+ "sct",
 ]
 
 [[package]]
 name = "rustls"
-version = "0.21.9"
+version = "0.22.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "629648aced5775d558af50b2b4c7b02983a04b312126d45eeead26e7caa498b9"
+checksum = "e87c9956bd9807afa1f77e0f7594af32566e830e088a5576d27c5b6f30f49d41"
 dependencies = [
  "log",
- "ring 0.17.5",
- "rustls-webpki",
- "sct 0.7.1",
+ "ring 0.17.7",
+ "rustls-pki-types",
+ "rustls-webpki 0.102.1",
+ "subtle 2.5.0",
+ "zeroize",
 ]
 
 [[package]]
@@ -7751,7 +8286,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00"
 dependencies = [
  "openssl-probe",
- "rustls-pemfile",
+ "rustls-pemfile 1.0.4",
+ "schannel",
+ "security-framework",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8f1fb85efa936c42c6d5fc28d2629bb51e4b2f4b8a5211e297d599cc5a093792"
+dependencies = [
+ "openssl-probe",
+ "rustls-pemfile 2.0.0",
+ "rustls-pki-types",
  "schannel",
  "security-framework",
 ]
@@ -7762,16 +8310,43 @@ version = "1.0.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c"
 dependencies = [
- "base64 0.21.5",
+ "base64 0.21.7",
+]
+
+[[package]]
+name = "rustls-pemfile"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "35e4980fa29e4c4b212ffb3db068a564cbf560e51d3944b7c88bd8bf5bec64f4"
+dependencies = [
+ "base64 0.21.7",
+ "rustls-pki-types",
 ]
 
+[[package]]
+name = "rustls-pki-types"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e9d979b3ce68192e42760c7810125eb6cf2ea10efae545a156063e61f314e2a"
+
 [[package]]
 name = "rustls-webpki"
 version = "0.101.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
 dependencies = [
- "ring 0.17.5",
+ "ring 0.17.7",
+ "untrusted 0.9.0",
+]
+
+[[package]]
+name = "rustls-webpki"
+version = "0.102.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef4ca26037c909dedb327b48c3327d0ba91d3dd3c4e05dad328f210ffb68e95b"
+dependencies = [
+ "ring 0.17.7",
+ "rustls-pki-types",
  "untrusted 0.9.0",
 ]
 
@@ -7793,22 +8368,33 @@ dependencies = [
  "toml 0.5.11",
 ]
 
+[[package]]
+name = "ruzstd"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "58c4eb8a81997cf040a091d1f7e1938aeab6749d3a0dfa73af43cdc32393483d"
+dependencies = [
+ "byteorder",
+ "derive_more",
+ "twox-hash",
+]
+
 [[package]]
 name = "rw-stream-sink"
 version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "26338f5e09bb721b85b135ea05af7767c90b52f6de4f087d4f4a3a9d64e7dc04"
 dependencies = [
- "futures 0.3.29",
+ "futures 0.3.30",
  "pin-project",
  "static_assertions",
 ]
 
 [[package]]
 name = "ryu"
-version = "1.0.15"
+version = "1.0.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741"
+checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c"
 
 [[package]]
 name = "safe_arch"
@@ -7831,25 +8417,24 @@ dependencies = [
 [[package]]
 name = "sc-allocator"
 version = "4.1.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "log",
  "sp-core",
- "sp-wasm-interface",
+ "sp-wasm-interface 14.0.0",
  "thiserror",
 ]
 
 [[package]]
 name = "sc-basic-authorship"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "futures 0.3.29",
+ "futures 0.3.30",
  "futures-timer",
  "log",
  "parity-scale-codec",
  "sc-block-builder",
- "sc-client-api",
  "sc-proposer-metrics",
  "sc-telemetry",
  "sc-transaction-pool-api",
@@ -7865,24 +8450,28 @@ dependencies = [
 [[package]]
 name = "sc-block-builder"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "parity-scale-codec",
- "sc-client-api",
  "sp-api",
  "sp-block-builder",
  "sp-blockchain",
  "sp-core",
  "sp-inherents",
  "sp-runtime",
+ "sp-trie",
 ]
 
 [[package]]
 name = "sc-chain-spec"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "memmap2",
+ "array-bytes 6.2.2",
+ "docify",
+ "log",
+ "memmap2 0.5.10",
+ "parity-scale-codec",
  "sc-chain-spec-derive",
  "sc-client-api",
  "sc-executor",
@@ -7892,6 +8481,8 @@ dependencies = [
  "serde_json",
  "sp-blockchain",
  "sp-core",
+ "sp-genesis-builder",
+ "sp-io",
  "sp-runtime",
  "sp-state-machine",
 ]
@@ -7899,25 +8490,27 @@ dependencies = [
 [[package]]
 name = "sc-chain-spec-derive"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "proc-macro-crate",
+ "proc-macro-crate 3.1.0",
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
 name = "sc-cli"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "array-bytes",
+ "array-bytes 6.2.2",
+ "bip39",
  "chrono",
- "clap 4.4.11",
+ "clap 4.4.18",
  "fdlimit",
- "futures 0.3.29",
- "libp2p",
+ "futures 0.3.30",
+ "itertools 0.10.5",
+ "libp2p-identity",
  "log",
  "names",
  "parity-scale-codec",
@@ -7927,8 +8520,8 @@ dependencies = [
  "sc-client-api",
  "sc-client-db",
  "sc-keystore",
+ "sc-mixnet",
  "sc-network",
- "sc-network-common",
  "sc-service",
  "sc-telemetry",
  "sc-tracing",
@@ -7943,17 +8536,16 @@ dependencies = [
  "sp-runtime",
  "sp-version",
  "thiserror",
- "tiny-bip39",
  "tokio",
 ]
 
 [[package]]
 name = "sc-client-api"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "fnv",
- "futures 0.3.29",
+ "futures 0.3.30",
  "log",
  "parity-scale-codec",
  "parking_lot 0.12.1",
@@ -7965,22 +8557,24 @@ dependencies = [
  "sp-consensus",
  "sp-core",
  "sp-database",
- "sp-externalities",
- "sp-keystore",
+ "sp-externalities 0.19.0",
  "sp-runtime",
  "sp-state-machine",
- "sp-storage",
+ "sp-statement-store",
+ "sp-storage 13.0.0",
+ "sp-trie",
  "substrate-prometheus-endpoint",
 ]
 
 [[package]]
 name = "sc-client-db"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "hash-db",
  "kvdb",
  "kvdb-memorydb",
+ "kvdb-rocksdb",
  "linked-hash-map",
  "log",
  "parity-db",
@@ -8001,12 +8595,12 @@ dependencies = [
 [[package]]
 name = "sc-consensus"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "async-trait",
- "futures 0.3.29",
+ "futures 0.3.30",
  "futures-timer",
- "libp2p",
+ "libp2p-identity",
  "log",
  "mockall",
  "parking_lot 0.12.1",
@@ -8026,10 +8620,10 @@ dependencies = [
 [[package]]
 name = "sc-consensus-aura"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "async-trait",
- "futures 0.3.29",
+ "futures 0.3.30",
  "log",
  "parity-scale-codec",
  "sc-block-builder",
@@ -8055,11 +8649,11 @@ dependencies = [
 [[package]]
 name = "sc-consensus-babe"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "async-trait",
  "fork-tree",
- "futures 0.3.29",
+ "futures 0.3.30",
  "log",
  "num-bigint",
  "num-rational",
@@ -8070,9 +8664,8 @@ dependencies = [
  "sc-consensus",
  "sc-consensus-epochs",
  "sc-consensus-slots",
- "sc-keystore",
  "sc-telemetry",
- "scale-info",
+ "sc-transaction-pool-api",
  "sp-api",
  "sp-application-crypto",
  "sp-block-builder",
@@ -8091,10 +8684,10 @@ dependencies = [
 [[package]]
 name = "sc-consensus-babe-rpc"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "futures 0.3.29",
- "jsonrpsee",
+ "futures 0.3.30",
+ "jsonrpsee 0.16.3",
  "sc-consensus-babe",
  "sc-consensus-epochs",
  "sc-rpc-api",
@@ -8113,7 +8706,7 @@ dependencies = [
 [[package]]
 name = "sc-consensus-epochs"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "fork-tree",
  "parity-scale-codec",
@@ -8126,15 +8719,15 @@ dependencies = [
 [[package]]
 name = "sc-consensus-grandpa"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "ahash 0.8.6",
- "array-bytes",
+ "ahash 0.8.7",
+ "array-bytes 6.2.2",
  "async-trait",
  "dyn-clone",
  "finality-grandpa",
  "fork-tree",
- "futures 0.3.29",
+ "futures 0.3.30",
  "futures-timer",
  "log",
  "parity-scale-codec",
@@ -8147,7 +8740,9 @@ dependencies = [
  "sc-network",
  "sc-network-common",
  "sc-network-gossip",
+ "sc-network-sync",
  "sc-telemetry",
+ "sc-transaction-pool-api",
  "sc-utils",
  "serde_json",
  "sp-api",
@@ -8166,12 +8761,13 @@ dependencies = [
 [[package]]
 name = "sc-consensus-manual-seal"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "assert_matches",
  "async-trait",
- "futures 0.3.29",
- "jsonrpsee",
+ "futures 0.3.30",
+ "futures-timer",
+ "jsonrpsee 0.16.3",
  "log",
  "parity-scale-codec",
  "sc-client-api",
@@ -8200,10 +8796,10 @@ dependencies = [
 [[package]]
 name = "sc-consensus-slots"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "async-trait",
- "futures 0.3.29",
+ "futures 0.3.30",
  "futures-timer",
  "log",
  "parity-scale-codec",
@@ -8223,83 +8819,68 @@ dependencies = [
 [[package]]
 name = "sc-executor"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "lru",
  "parity-scale-codec",
  "parking_lot 0.12.1",
  "sc-executor-common",
- "sc-executor-wasmi",
  "sc-executor-wasmtime",
+ "schnellru",
  "sp-api",
  "sp-core",
- "sp-externalities",
+ "sp-externalities 0.19.0",
  "sp-io",
  "sp-panic-handler",
- "sp-runtime-interface",
+ "sp-runtime-interface 17.0.0",
  "sp-trie",
  "sp-version",
- "sp-wasm-interface",
+ "sp-wasm-interface 14.0.0",
  "tracing",
- "wasmi",
 ]
 
 [[package]]
 name = "sc-executor-common"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "sc-allocator",
  "sp-maybe-compressed-blob",
- "sp-wasm-interface",
+ "sp-wasm-interface 14.0.0",
  "thiserror",
  "wasm-instrument",
- "wasmi",
-]
-
-[[package]]
-name = "sc-executor-wasmi"
-version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
-dependencies = [
- "log",
- "sc-allocator",
- "sc-executor-common",
- "sp-runtime-interface",
- "sp-wasm-interface",
- "wasmi",
 ]
 
 [[package]]
 name = "sc-executor-wasmtime"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "anyhow",
  "cfg-if 1.0.0",
  "libc",
  "log",
- "once_cell",
+ "parking_lot 0.12.1",
  "rustix 0.36.17",
  "sc-allocator",
  "sc-executor-common",
- "sp-runtime-interface",
- "sp-wasm-interface",
+ "sp-runtime-interface 17.0.0",
+ "sp-wasm-interface 14.0.0",
  "wasmtime",
 ]
 
 [[package]]
 name = "sc-informant"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "ansi_term",
- "futures 0.3.29",
+ "futures 0.3.30",
  "futures-timer",
  "log",
  "sc-client-api",
  "sc-network",
  "sc-network-common",
+ "sc-network-sync",
  "sp-blockchain",
  "sp-runtime",
 ]
@@ -8307,10 +8888,9 @@ dependencies = [
 [[package]]
 name = "sc-keystore"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "array-bytes",
- "async-trait",
+ "array-bytes 6.2.2",
  "parking_lot 0.12.1",
  "serde_json",
  "sp-application-crypto",
@@ -8319,65 +8899,92 @@ dependencies = [
  "thiserror",
 ]
 
+[[package]]
+name = "sc-mixnet"
+version = "0.1.0-dev"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
+dependencies = [
+ "array-bytes 4.2.0",
+ "arrayvec 0.7.4",
+ "blake2 0.10.6",
+ "bytes",
+ "futures 0.3.30",
+ "futures-timer",
+ "libp2p-identity",
+ "log",
+ "mixnet",
+ "multiaddr",
+ "parity-scale-codec",
+ "parking_lot 0.12.1",
+ "sc-client-api",
+ "sc-network",
+ "sc-transaction-pool-api",
+ "sp-api",
+ "sp-consensus",
+ "sp-core",
+ "sp-keystore",
+ "sp-mixnet",
+ "sp-runtime",
+ "thiserror",
+]
+
 [[package]]
 name = "sc-network"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "array-bytes",
- "async-channel",
+ "array-bytes 6.2.2",
+ "async-channel 1.9.0",
  "async-trait",
  "asynchronous-codec",
  "bytes",
  "either",
  "fnv",
- "futures 0.3.29",
+ "futures 0.3.30",
  "futures-timer",
  "ip_network",
  "libp2p",
  "linked_hash_set",
  "log",
- "lru",
  "mockall",
  "parity-scale-codec",
  "parking_lot 0.12.1",
+ "partial_sort",
  "pin-project",
  "rand 0.8.5",
- "sc-block-builder",
  "sc-client-api",
- "sc-consensus",
  "sc-network-common",
- "sc-peerset",
  "sc-utils",
  "serde",
  "serde_json",
  "smallvec",
- "snow",
  "sp-arithmetic",
  "sp-blockchain",
- "sp-consensus",
  "sp-core",
  "sp-runtime",
  "substrate-prometheus-endpoint",
  "thiserror",
+ "tokio",
+ "tokio-stream",
  "unsigned-varint",
+ "wasm-timer",
  "zeroize",
 ]
 
 [[package]]
 name = "sc-network-bitswap"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
+ "async-channel 1.9.0",
  "cid",
- "futures 0.3.29",
- "libp2p",
+ "futures 0.3.30",
+ "libp2p-identity",
  "log",
  "prost",
  "prost-build",
  "sc-client-api",
  "sc-network",
- "sc-network-common",
  "sp-blockchain",
  "sp-runtime",
  "thiserror",
@@ -8387,45 +8994,34 @@ dependencies = [
 [[package]]
 name = "sc-network-common"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "array-bytes",
  "async-trait",
  "bitflags 1.3.2",
- "bytes",
- "futures 0.3.29",
- "futures-timer",
- "libp2p",
+ "futures 0.3.30",
+ "libp2p-identity",
  "parity-scale-codec",
  "prost-build",
  "sc-consensus",
- "sc-peerset",
- "sc-utils",
- "serde",
- "smallvec",
- "sp-blockchain",
  "sp-consensus",
  "sp-consensus-grandpa",
  "sp-runtime",
- "substrate-prometheus-endpoint",
- "thiserror",
- "zeroize",
 ]
 
 [[package]]
 name = "sc-network-gossip"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "ahash 0.8.6",
- "futures 0.3.29",
+ "ahash 0.8.7",
+ "futures 0.3.30",
  "futures-timer",
  "libp2p",
  "log",
- "lru",
  "sc-network",
  "sc-network-common",
- "sc-peerset",
+ "sc-network-sync",
+ "schnellru",
  "sp-runtime",
  "substrate-prometheus-endpoint",
  "tracing",
@@ -8434,19 +9030,18 @@ dependencies = [
 [[package]]
 name = "sc-network-light"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "array-bytes",
- "futures 0.3.29",
- "libp2p",
+ "array-bytes 6.2.2",
+ "async-channel 1.9.0",
+ "futures 0.3.30",
+ "libp2p-identity",
  "log",
  "parity-scale-codec",
  "prost",
  "prost-build",
  "sc-client-api",
  "sc-network",
- "sc-network-common",
- "sc-peerset",
  "sp-blockchain",
  "sp-core",
  "sp-runtime",
@@ -8456,16 +9051,16 @@ dependencies = [
 [[package]]
 name = "sc-network-sync"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "array-bytes",
+ "array-bytes 6.2.2",
+ "async-channel 1.9.0",
  "async-trait",
  "fork-tree",
- "futures 0.3.29",
+ "futures 0.3.30",
  "futures-timer",
  "libp2p",
  "log",
- "lru",
  "mockall",
  "parity-scale-codec",
  "prost",
@@ -8474,8 +9069,8 @@ dependencies = [
  "sc-consensus",
  "sc-network",
  "sc-network-common",
- "sc-peerset",
  "sc-utils",
+ "schnellru",
  "smallvec",
  "sp-arithmetic",
  "sp-blockchain",
@@ -8485,22 +9080,23 @@ dependencies = [
  "sp-runtime",
  "substrate-prometheus-endpoint",
  "thiserror",
+ "tokio",
+ "tokio-stream",
 ]
 
 [[package]]
 name = "sc-network-transactions"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "array-bytes",
- "futures 0.3.29",
+ "array-bytes 6.2.2",
+ "futures 0.3.30",
  "libp2p",
  "log",
  "parity-scale-codec",
- "pin-project",
  "sc-network",
  "sc-network-common",
- "sc-peerset",
+ "sc-network-sync",
  "sc-utils",
  "sp-consensus",
  "sp-runtime",
@@ -8510,16 +9106,17 @@ dependencies = [
 [[package]]
 name = "sc-offchain"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "array-bytes",
+ "array-bytes 6.2.2",
  "bytes",
  "fnv",
- "futures 0.3.29",
+ "futures 0.3.30",
  "futures-timer",
  "hyper",
- "hyper-rustls 0.23.2",
+ "hyper-rustls",
  "libp2p",
+ "log",
  "num_cpus",
  "once_cell",
  "parity-scale-codec",
@@ -8528,33 +9125,22 @@ dependencies = [
  "sc-client-api",
  "sc-network",
  "sc-network-common",
- "sc-peerset",
+ "sc-transaction-pool-api",
  "sc-utils",
  "sp-api",
  "sp-core",
+ "sp-externalities 0.19.0",
+ "sp-keystore",
  "sp-offchain",
  "sp-runtime",
  "threadpool",
  "tracing",
 ]
 
-[[package]]
-name = "sc-peerset"
-version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
-dependencies = [
- "futures 0.3.29",
- "libp2p",
- "log",
- "sc-utils",
- "serde_json",
- "wasm-timer",
-]
-
 [[package]]
 name = "sc-proposer-metrics"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "log",
  "substrate-prometheus-endpoint",
@@ -8563,16 +9149,17 @@ dependencies = [
 [[package]]
 name = "sc-rpc"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "futures 0.3.29",
- "jsonrpsee",
+ "futures 0.3.30",
+ "jsonrpsee 0.16.3",
  "log",
  "parity-scale-codec",
  "parking_lot 0.12.1",
  "sc-block-builder",
  "sc-chain-spec",
  "sc-client-api",
+ "sc-mixnet",
  "sc-rpc-api",
  "sc-tracing",
  "sc-transaction-pool-api",
@@ -8586,6 +9173,7 @@ dependencies = [
  "sp-rpc",
  "sp-runtime",
  "sp-session",
+ "sp-statement-store",
  "sp-version",
  "tokio",
 ]
@@ -8593,11 +9181,12 @@ dependencies = [
 [[package]]
 name = "sc-rpc-api"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "jsonrpsee",
+ "jsonrpsee 0.16.3",
  "parity-scale-codec",
  "sc-chain-spec",
+ "sc-mixnet",
  "sc-transaction-pool-api",
  "scale-info",
  "serde",
@@ -8612,10 +9201,10 @@ dependencies = [
 [[package]]
 name = "sc-rpc-server"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "http",
- "jsonrpsee",
+ "jsonrpsee 0.16.3",
  "log",
  "serde_json",
  "substrate-prometheus-endpoint",
@@ -8627,46 +9216,48 @@ dependencies = [
 [[package]]
 name = "sc-rpc-spec-v2"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "array-bytes",
- "futures 0.3.29",
+ "array-bytes 6.2.2",
+ "futures 0.3.30",
  "futures-util",
  "hex",
- "jsonrpsee",
+ "jsonrpsee 0.16.3",
  "log",
  "parity-scale-codec",
  "parking_lot 0.12.1",
  "sc-chain-spec",
  "sc-client-api",
  "sc-transaction-pool-api",
+ "sc-utils",
  "serde",
  "sp-api",
  "sp-blockchain",
  "sp-core",
+ "sp-rpc",
  "sp-runtime",
  "sp-version",
  "thiserror",
+ "tokio",
  "tokio-stream",
 ]
 
 [[package]]
 name = "sc-service"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "async-trait",
  "directories",
  "exit-future",
- "futures 0.3.29",
+ "futures 0.3.30",
  "futures-timer",
- "jsonrpsee",
+ "jsonrpsee 0.16.3",
  "log",
  "parity-scale-codec",
  "parking_lot 0.12.1",
  "pin-project",
  "rand 0.8.5",
- "sc-block-builder",
  "sc-chain-spec",
  "sc-client-api",
  "sc-client-db",
@@ -8680,11 +9271,9 @@ dependencies = [
  "sc-network-light",
  "sc-network-sync",
  "sc-network-transactions",
- "sc-offchain",
  "sc-rpc",
  "sc-rpc-server",
  "sc-rpc-spec-v2",
- "sc-storage-monitor",
  "sc-sysinfo",
  "sc-telemetry",
  "sc-tracing",
@@ -8697,12 +9286,12 @@ dependencies = [
  "sp-blockchain",
  "sp-consensus",
  "sp-core",
- "sp-externalities",
+ "sp-externalities 0.19.0",
  "sp-keystore",
  "sp-runtime",
  "sp-session",
  "sp-state-machine",
- "sp-storage",
+ "sp-storage 13.0.0",
  "sp-transaction-pool",
  "sp-transaction-storage-proof",
  "sp-trie",
@@ -8719,7 +9308,7 @@ dependencies = [
 [[package]]
 name = "sc-state-db"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "log",
  "parity-scale-codec",
@@ -8727,28 +9316,13 @@ dependencies = [
  "sp-core",
 ]
 
-[[package]]
-name = "sc-storage-monitor"
-version = "0.1.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
-dependencies = [
- "clap 4.4.11",
- "fs4",
- "futures 0.3.29",
- "log",
- "sc-client-db",
- "sc-utils",
- "sp-core",
- "thiserror",
- "tokio",
-]
-
 [[package]]
 name = "sc-sysinfo"
 version = "6.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "futures 0.3.29",
+ "derive_more",
+ "futures 0.3.30",
  "libc",
  "log",
  "rand 0.8.5",
@@ -8759,16 +9333,16 @@ dependencies = [
  "serde_json",
  "sp-core",
  "sp-io",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "sc-telemetry"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "chrono",
- "futures 0.3.29",
+ "futures 0.3.30",
  "libp2p",
  "log",
  "parking_lot 0.12.1",
@@ -8784,20 +9358,19 @@ dependencies = [
 [[package]]
 name = "sc-tracing"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "ansi_term",
- "atty",
  "chrono",
+ "is-terminal",
  "lazy_static",
  "libc",
  "log",
- "once_cell",
+ "parity-scale-codec",
  "parking_lot 0.12.1",
  "regex",
  "rustc-hash",
  "sc-client-api",
- "sc-rpc-server",
  "sc-tracing-proc-macro",
  "serde",
  "sp-api",
@@ -8805,7 +9378,7 @@ dependencies = [
  "sp-core",
  "sp-rpc",
  "sp-runtime",
- "sp-tracing",
+ "sp-tracing 10.0.0",
  "thiserror",
  "tracing",
  "tracing-log",
@@ -8815,25 +9388,24 @@ dependencies = [
 [[package]]
 name = "sc-tracing-proc-macro"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "proc-macro-crate",
+ "proc-macro-crate 3.1.0",
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
 name = "sc-transaction-pool"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "async-trait",
- "futures 0.3.29",
+ "futures 0.3.30",
  "futures-timer",
  "linked-hash-map",
  "log",
- "num-traits 0.2.17",
  "parity-scale-codec",
  "parking_lot 0.12.1",
  "sc-client-api",
@@ -8844,7 +9416,7 @@ dependencies = [
  "sp-blockchain",
  "sp-core",
  "sp-runtime",
- "sp-tracing",
+ "sp-tracing 10.0.0",
  "sp-transaction-pool",
  "substrate-prometheus-endpoint",
  "thiserror",
@@ -8853,13 +9425,15 @@ dependencies = [
 [[package]]
 name = "sc-transaction-pool-api"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "async-trait",
- "futures 0.3.29",
+ "futures 0.3.30",
  "log",
+ "parity-scale-codec",
  "serde",
  "sp-blockchain",
+ "sp-core",
  "sp-runtime",
  "thiserror",
 ]
@@ -8867,10 +9441,10 @@ dependencies = [
 [[package]]
 name = "sc-utils"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "async-channel",
- "futures 0.3.29",
+ "async-channel 1.9.0",
+ "futures 0.3.30",
  "futures-timer",
  "lazy_static",
  "log",
@@ -8879,17 +9453,6 @@ dependencies = [
  "sp-arithmetic",
 ]
 
-[[package]]
-name = "scale-bits"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8dd7aca73785181cc41f0bbe017263e682b585ca660540ba569133901d013ecf"
-dependencies = [
- "parity-scale-codec",
- "scale-info",
- "serde",
-]
-
 [[package]]
 name = "scale-bits"
 version = "0.4.0"
@@ -8898,21 +9461,7 @@ checksum = "036575c29af9b6e4866ffb7fa055dbf623fe7a9cc159b33786de6013a6969d89"
 dependencies = [
  "parity-scale-codec",
  "scale-info",
- "serde",
-]
-
-[[package]]
-name = "scale-decode"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c7e5527e4b3bf079d4c0b2f253418598c380722ba37ef20fac9088081407f2b6"
-dependencies = [
- "parity-scale-codec",
- "primitive-types",
- "scale-bits 0.3.0",
- "scale-decode-derive",
- "scale-info",
- "thiserror",
+ "serde",
 ]
 
 [[package]]
@@ -8923,38 +9472,26 @@ checksum = "7caaf753f8ed1ab4752c6afb20174f03598c664724e0e32628e161c21000ff76"
 dependencies = [
  "derive_more",
  "parity-scale-codec",
- "scale-bits 0.4.0",
+ "primitive-types",
+ "scale-bits",
+ "scale-decode-derive",
  "scale-info",
  "smallvec",
 ]
 
 [[package]]
 name = "scale-decode-derive"
-version = "0.5.0"
+version = "0.10.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b38741b2f78e4391b94eac6b102af0f6ea2b0f7fe65adb55d7f4004f507854db"
+checksum = "d3475108a1b62c7efd1b5c65974f30109a598b2f45f23c9ae030acb9686966db"
 dependencies = [
- "darling",
- "proc-macro-crate",
+ "darling 0.14.4",
+ "proc-macro-crate 1.1.3",
  "proc-macro2",
  "quote",
  "syn 1.0.109",
 ]
 
-[[package]]
-name = "scale-encode"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "15546e5efbb45f0fc2291f7e202dee8623274c5d8bbfdf9c6886cc8b44a7ced3"
-dependencies = [
- "parity-scale-codec",
- "primitive-types",
- "scale-bits 0.3.0",
- "scale-encode-derive",
- "scale-info",
- "thiserror",
-]
-
 [[package]]
 name = "scale-encode"
 version = "0.5.0"
@@ -8963,19 +9500,21 @@ checksum = "6d70cb4b29360105483fac1ed567ff95d65224a14dd275b6303ed0a654c78de5"
 dependencies = [
  "derive_more",
  "parity-scale-codec",
- "scale-bits 0.4.0",
+ "primitive-types",
+ "scale-bits",
+ "scale-encode-derive",
  "scale-info",
  "smallvec",
 ]
 
 [[package]]
 name = "scale-encode-derive"
-version = "0.1.2"
+version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd983cf0a9effd76138554ead18a6de542d1af175ac12fd5e91836c5c0268082"
+checksum = "995491f110efdc6bea96d6a746140e32bfceb4ea47510750a5467295a4707a25"
 dependencies = [
- "darling",
- "proc-macro-crate",
+ "darling 0.14.4",
+ "proc-macro-crate 1.1.3",
  "proc-macro2",
  "quote",
  "syn 1.0.109",
@@ -9001,28 +9540,23 @@ version = "2.10.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "abf2c68b89cafb3b8d918dd07b42be0da66ff202cf1155c5739a4e0c1ea0dc19"
 dependencies = [
- "proc-macro-crate",
+ "proc-macro-crate 1.1.3",
  "proc-macro2",
  "quote",
  "syn 1.0.109",
 ]
 
 [[package]]
-name = "scale-value"
-version = "0.7.0"
+name = "scale-typegen"
+version = "0.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "11f549769261561e6764218f847e500588f9a79a289de49ce92f9e26642a3574"
+checksum = "00860983481ac590ac87972062909bef0d6a658013b592ccc0f2feb272feab11"
 dependencies = [
- "either",
- "frame-metadata",
- "parity-scale-codec",
- "scale-bits 0.3.0",
- "scale-decode 0.5.0",
- "scale-encode 0.1.2",
+ "proc-macro2",
+ "quote",
  "scale-info",
- "serde",
+ "syn 2.0.48",
  "thiserror",
- "yap 0.10.0",
 ]
 
 [[package]]
@@ -9032,26 +9566,26 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "58223c7691bf0bd46b43c9aea6f0472d1067f378d574180232358d7c6e0a8089"
 dependencies = [
  "base58",
- "blake2",
+ "blake2 0.10.6",
  "derive_more",
  "either",
- "frame-metadata",
+ "frame-metadata 15.1.0",
  "parity-scale-codec",
- "scale-bits 0.4.0",
- "scale-decode 0.10.0",
- "scale-encode 0.5.0",
+ "scale-bits",
+ "scale-decode",
+ "scale-encode",
  "scale-info",
  "serde",
- "yap 0.11.0",
+ "yap",
 ]
 
 [[package]]
 name = "schannel"
-version = "0.1.22"
+version = "0.1.23"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88"
+checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534"
 dependencies = [
- "windows-sys 0.48.0",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
@@ -9060,7 +9594,7 @@ version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "772575a524feeb803e5b0fcbc6dd9f367e579488197c94c6e4023aad2305774d"
 dependencies = [
- "ahash 0.8.6",
+ "ahash 0.8.7",
  "cfg-if 1.0.0",
  "hashbrown 0.13.2",
 ]
@@ -9074,12 +9608,29 @@ dependencies = [
  "arrayref",
  "arrayvec 0.5.2",
  "curve25519-dalek 2.1.3",
- "getrandom 0.1.16",
- "merlin",
- "rand 0.7.3",
+ "merlin 2.0.1",
  "rand_core 0.5.1",
  "sha2 0.8.2",
- "subtle",
+ "subtle 2.5.0",
+ "zeroize",
+]
+
+[[package]]
+name = "schnorrkel"
+version = "0.11.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8de18f6d8ba0aad7045f5feae07ec29899c1112584a38509a84ad7b04451eaa0"
+dependencies = [
+ "aead",
+ "arrayref",
+ "arrayvec 0.7.4",
+ "curve25519-dalek 4.1.1",
+ "getrandom_or_panic",
+ "merlin 3.0.0",
+ "rand_core 0.6.4",
+ "serde_bytes",
+ "sha2 0.10.8",
+ "subtle 2.5.0",
  "zeroize",
 ]
 
@@ -9095,38 +9646,16 @@ version = "1.0.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a3cf7c11c38cb994f3d40e8a8cde3bbd1f72a435e4c49e85d6553d8312306152"
 
-[[package]]
-name = "sct"
-version = "0.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce"
-dependencies = [
- "ring 0.16.20",
- "untrusted 0.7.1",
-]
-
 [[package]]
 name = "sct"
 version = "0.7.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
 dependencies = [
- "ring 0.17.5",
+ "ring 0.17.7",
  "untrusted 0.9.0",
 ]
 
-[[package]]
-name = "sdp"
-version = "0.5.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4d22a5ef407871893fd72b4562ee15e4742269b173959db4b8df6f538c414e13"
-dependencies = [
- "rand 0.8.5",
- "substring",
- "thiserror",
- "url",
-]
-
 [[package]]
 name = "sealed"
 version = "0.3.0"
@@ -9151,48 +9680,34 @@ dependencies = [
  "syn 1.0.109",
 ]
 
-[[package]]
-name = "sec1"
-version = "0.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3be24c1842290c45df0a7bf069e0c268a747ad05a192f2fd7dcfdbc1cba40928"
-dependencies = [
- "base16ct 0.1.1",
- "der 0.6.1",
- "generic-array 0.14.7",
- "pkcs8 0.9.0",
- "subtle",
- "zeroize",
-]
-
 [[package]]
 name = "sec1"
 version = "0.7.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
 dependencies = [
- "base16ct 0.2.0",
- "der 0.7.8",
+ "base16ct",
+ "der",
  "generic-array 0.14.7",
- "pkcs8 0.10.2",
- "subtle",
+ "pkcs8",
+ "subtle 2.5.0",
  "zeroize",
 ]
 
 [[package]]
 name = "secp256k1"
-version = "0.24.3"
+version = "0.28.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6b1629c9c557ef9b293568b338dddfc8208c98a18c59d722a9d53f859d9c9b62"
+checksum = "3f622567e3b4b38154fb8190bcf6b160d7a4301d70595a49195b48c116007a27"
 dependencies = [
  "secp256k1-sys",
 ]
 
 [[package]]
 name = "secp256k1-sys"
-version = "0.6.1"
+version = "0.9.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83080e2c2fc1006e625be82e5d1eb6a43b7fd9578b617fcc55814daf286bba4b"
+checksum = "e5d1746aae42c19d583c3c1a8c646bfad910498e2051c551a7f2e3c0c9fbb7eb"
 dependencies = [
  "cc",
 ]
@@ -9240,9 +9755,9 @@ dependencies = [
 
 [[package]]
 name = "semver"
-version = "1.0.20"
+version = "1.0.21"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090"
+checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0"
 dependencies = [
  "serde",
 ]
@@ -9255,29 +9770,38 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
 
 [[package]]
 name = "serde"
-version = "1.0.193"
+version = "1.0.196"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89"
+checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32"
 dependencies = [
  "serde_derive",
 ]
 
+[[package]]
+name = "serde_bytes"
+version = "0.11.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734"
+dependencies = [
+ "serde",
+]
+
 [[package]]
 name = "serde_derive"
-version = "1.0.193"
+version = "1.0.196"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3"
+checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
 name = "serde_json"
-version = "1.0.108"
+version = "1.0.113"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b"
+checksum = "69801b70b1c3dac963ecb03a364ba0ceda9cf60c71cfe475e99864759c8b8a79"
 dependencies = [
  "itoa",
  "ryu",
@@ -9286,9 +9810,9 @@ dependencies = [
 
 [[package]]
 name = "serde_spanned"
-version = "0.6.4"
+version = "0.6.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "12022b835073e5b11e90a14f86838ceb1c8fb0325b72416845c487ac0fa95e80"
+checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1"
 dependencies = [
  "serde",
 ]
@@ -9307,11 +9831,11 @@ dependencies = [
 
 [[package]]
 name = "serde_yaml"
-version = "0.9.27"
+version = "0.9.31"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3cc7a1570e38322cfe4154732e5110f887ea57e22b76f4bfd32b5bdd3368666c"
+checksum = "adf8a49373e98a4c5f0ceb5d05aa7c648d75f63774981ed95b7c7443bbd50c6e"
 dependencies = [
- "indexmap 2.1.0",
+ "indexmap 2.2.1",
  "itoa",
  "ryu",
  "serde",
@@ -9331,17 +9855,6 @@ dependencies = [
  "opaque-debug 0.3.0",
 ]
 
-[[package]]
-name = "sha1"
-version = "0.10.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba"
-dependencies = [
- "cfg-if 1.0.0",
- "cpufeatures",
- "digest 0.10.7",
-]
-
 [[package]]
 name = "sha2"
 version = "0.8.2"
@@ -9397,6 +9910,12 @@ dependencies = [
  "lazy_static",
 ]
 
+[[package]]
+name = "shlex"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+
 [[package]]
 name = "signal-hook-registry"
 version = "1.4.1"
@@ -9406,16 +9925,6 @@ dependencies = [
  "libc",
 ]
 
-[[package]]
-name = "signature"
-version = "1.6.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "74233d3b3b2f6d4b006dc19dee745e73e2a6bfb6f93607cd3b02bd5b00797d7c"
-dependencies = [
- "digest 0.10.7",
- "rand_core 0.6.4",
-]
-
 [[package]]
 name = "signature"
 version = "2.2.0"
@@ -9439,16 +9948,21 @@ dependencies = [
  "wide",
 ]
 
+[[package]]
+name = "simple-mermaid"
+version = "0.1.0"
+source = "git+https://github.com/kianenigma/simple-mermaid.git?rev=e48b187bcfd5cc75111acd9d241f1bd36604344b#e48b187bcfd5cc75111acd9d241f1bd36604344b"
+
 [[package]]
 name = "simple_logger"
-version = "4.2.0"
+version = "4.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2230cd5c29b815c9b699fb610b49a5ed65588f3509d9f0108be3a885da629333"
+checksum = "8e7e46c8c90251d47d08b28b8a419ffb4aede0f87c2eea95e17d1d5bacbf3ef1"
 dependencies = [
  "colored",
  "log",
  "time",
- "windows-sys 0.42.0",
+ "windows-sys 0.48.0",
 ]
 
 [[package]]
@@ -9457,6 +9971,12 @@ version = "0.3.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d"
 
+[[package]]
+name = "siphasher"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "54ac45299ccbd390721be55b412d41931911f654fa99e2cb8bfb57184b2061fe"
+
 [[package]]
 name = "slab"
 version = "0.4.9"
@@ -9474,31 +9994,139 @@ checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7"
 
 [[package]]
 name = "smallvec"
-version = "1.11.2"
+version = "1.13.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7"
+
+[[package]]
+name = "smol"
+version = "2.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e635339259e51ef85ac7aa29a1cd991b957047507288697a690e80ab97d07cad"
+dependencies = [
+ "async-channel 2.1.1",
+ "async-executor",
+ "async-fs",
+ "async-io",
+ "async-lock 3.3.0",
+ "async-net",
+ "async-process",
+ "blocking",
+ "futures-lite",
+]
+
+[[package]]
+name = "smoldot"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6d1eaa97d77be4d026a1e7ffad1bb3b78448763b357ea6f8188d3e6f736a9b9"
+dependencies = [
+ "arrayvec 0.7.4",
+ "async-lock 3.3.0",
+ "atomic-take",
+ "base64 0.21.7",
+ "bip39",
+ "blake2-rfc",
+ "bs58 0.5.0",
+ "chacha20",
+ "crossbeam-queue",
+ "derive_more",
+ "ed25519-zebra 4.0.3",
+ "either",
+ "event-listener 4.0.3",
+ "fnv",
+ "futures-lite",
+ "futures-util",
+ "hashbrown 0.14.3",
+ "hex",
+ "hmac 0.12.1",
+ "itertools 0.12.1",
+ "libm",
+ "libsecp256k1",
+ "merlin 3.0.0",
+ "no-std-net",
+ "nom",
+ "num-bigint",
+ "num-rational",
+ "num-traits 0.2.17",
+ "pbkdf2 0.12.2",
+ "pin-project",
+ "poly1305",
+ "rand 0.8.5",
+ "rand_chacha 0.3.1",
+ "ruzstd",
+ "schnorrkel 0.11.4",
+ "serde",
+ "serde_json",
+ "sha2 0.10.8",
+ "sha3",
+ "siphasher 1.0.0",
+ "slab",
+ "smallvec",
+ "soketto",
+ "twox-hash",
+ "wasmi",
+ "x25519-dalek 2.0.0",
+ "zeroize",
+]
+
+[[package]]
+name = "smoldot-light"
+version = "0.14.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970"
+checksum = "5496f2d116b7019a526b1039ec2247dd172b8670633b1a64a614c9ea12c9d8c7"
+dependencies = [
+ "async-channel 2.1.1",
+ "async-lock 3.3.0",
+ "base64 0.21.7",
+ "blake2-rfc",
+ "derive_more",
+ "either",
+ "event-listener 4.0.3",
+ "fnv",
+ "futures-channel",
+ "futures-lite",
+ "futures-util",
+ "hashbrown 0.14.3",
+ "hex",
+ "itertools 0.12.1",
+ "log",
+ "lru 0.12.2",
+ "no-std-net",
+ "parking_lot 0.12.1",
+ "pin-project",
+ "rand 0.8.5",
+ "rand_chacha 0.3.1",
+ "serde",
+ "serde_json",
+ "siphasher 1.0.0",
+ "slab",
+ "smol",
+ "smoldot",
+ "zeroize",
+]
 
 [[package]]
 name = "snap"
-version = "1.1.0"
+version = "1.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e9f0ab6ef7eb7353d9119c170a436d1bf248eea575ac42d19d12f4e34130831"
+checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b"
 
 [[package]]
 name = "snow"
-version = "0.9.4"
+version = "0.9.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "58021967fd0a5eeeb23b08df6cc244a4d4a5b4aec1d27c9e02fad1a58b4cd74e"
+checksum = "850948bee068e713b8ab860fe1adc4d109676ab4c3b621fd8147f06b261f2f85"
 dependencies = [
- "aes-gcm 0.10.3",
- "blake2",
+ "aes-gcm",
+ "blake2 0.10.6",
  "chacha20poly1305",
  "curve25519-dalek 4.1.1",
  "rand_core 0.6.4",
- "ring 0.17.5",
+ "ring 0.17.7",
  "rustc_version",
  "sha2 0.10.8",
- "subtle",
+ "subtle 2.5.0",
 ]
 
 [[package]]
@@ -9530,7 +10158,7 @@ dependencies = [
  "base64 0.13.1",
  "bytes",
  "flate2",
- "futures 0.3.29",
+ "futures 0.3.30",
  "http",
  "httparse",
  "log",
@@ -9541,7 +10169,7 @@ dependencies = [
 [[package]]
 name = "sp-api"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "hash-db",
  "log",
@@ -9549,10 +10177,11 @@ dependencies = [
  "scale-info",
  "sp-api-proc-macro",
  "sp-core",
+ "sp-externalities 0.19.0",
  "sp-metadata-ir",
  "sp-runtime",
  "sp-state-machine",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
  "sp-trie",
  "sp-version",
  "thiserror",
@@ -9561,79 +10190,96 @@ dependencies = [
 [[package]]
 name = "sp-api-proc-macro"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "Inflector",
- "blake2",
+ "blake2 0.10.6",
  "expander",
- "proc-macro-crate",
+ "proc-macro-crate 3.1.0",
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
 name = "sp-application-crypto"
-version = "7.0.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+version = "23.0.0"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "parity-scale-codec",
  "scale-info",
  "serde",
  "sp-core",
  "sp-io",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "sp-arithmetic"
-version = "6.0.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+version = "16.0.0"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "integer-sqrt",
  "num-traits 0.2.17",
  "parity-scale-codec",
  "scale-info",
  "serde",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
  "static_assertions",
 ]
 
+[[package]]
+name = "sp-ark-bls12-381"
+version = "0.4.2"
+source = "git+https://github.com/paritytech/arkworks-substrate#caa2eed74beb885dd07c7db5f916f2281dad818f"
+dependencies = [
+ "ark-bls12-381-ext",
+ "sp-crypto-ec-utils",
+]
+
+[[package]]
+name = "sp-ark-ed-on-bls12-381-bandersnatch"
+version = "0.4.2"
+source = "git+https://github.com/paritytech/arkworks-substrate#caa2eed74beb885dd07c7db5f916f2281dad818f"
+dependencies = [
+ "ark-ed-on-bls12-381-bandersnatch-ext",
+ "sp-crypto-ec-utils",
+]
+
 [[package]]
 name = "sp-authority-discovery"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "parity-scale-codec",
  "scale-info",
  "sp-api",
  "sp-application-crypto",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "sp-block-builder"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "parity-scale-codec",
  "sp-api",
  "sp-inherents",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "sp-blockchain"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "futures 0.3.29",
+ "futures 0.3.30",
  "log",
- "lru",
  "parity-scale-codec",
  "parking_lot 0.12.1",
+ "schnellru",
  "sp-api",
  "sp-consensus",
  "sp-database",
@@ -9645,10 +10291,10 @@ dependencies = [
 [[package]]
 name = "sp-consensus"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "async-trait",
- "futures 0.3.29",
+ "futures 0.3.30",
  "log",
  "sp-core",
  "sp-inherents",
@@ -9660,25 +10306,24 @@ dependencies = [
 [[package]]
 name = "sp-consensus-aura"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "async-trait",
  "parity-scale-codec",
  "scale-info",
  "sp-api",
  "sp-application-crypto",
- "sp-consensus",
  "sp-consensus-slots",
  "sp-inherents",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
  "sp-timestamp",
 ]
 
 [[package]]
 name = "sp-consensus-babe"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "async-trait",
  "parity-scale-codec",
@@ -9686,20 +10331,18 @@ dependencies = [
  "serde",
  "sp-api",
  "sp-application-crypto",
- "sp-consensus",
  "sp-consensus-slots",
  "sp-core",
  "sp-inherents",
- "sp-keystore",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
  "sp-timestamp",
 ]
 
 [[package]]
 name = "sp-consensus-grandpa"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "finality-grandpa",
  "log",
@@ -9711,109 +10354,115 @@ dependencies = [
  "sp-core",
  "sp-keystore",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "sp-consensus-slots"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "parity-scale-codec",
  "scale-info",
  "serde",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
  "sp-timestamp",
 ]
 
 [[package]]
 name = "sp-core"
-version = "7.0.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+version = "21.0.0"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "array-bytes",
+ "array-bytes 6.2.2",
+ "bandersnatch_vrfs",
+ "bip39",
  "bitflags 1.3.2",
- "blake2",
+ "blake2 0.10.6",
  "bounded-collections",
- "bs58 0.4.0",
+ "bs58 0.5.0",
  "dyn-clonable",
- "ed25519-zebra",
- "futures 0.3.29",
+ "ed25519-zebra 3.1.0",
+ "futures 0.3.30",
  "hash-db",
  "hash256-std-hasher",
  "impl-serde",
- "lazy_static",
+ "itertools 0.10.5",
  "libsecp256k1",
  "log",
- "merlin",
+ "merlin 3.0.0",
  "parity-scale-codec",
  "parking_lot 0.12.1",
  "paste",
  "primitive-types",
  "rand 0.8.5",
- "regex",
  "scale-info",
- "schnorrkel",
+ "schnorrkel 0.11.4",
  "secp256k1",
  "secrecy",
  "serde",
- "sp-core-hashing 5.0.0",
- "sp-debug-derive",
- "sp-externalities",
- "sp-runtime-interface",
- "sp-std 5.0.0",
- "sp-storage",
+ "sp-core-hashing",
+ "sp-debug-derive 8.0.0",
+ "sp-externalities 0.19.0",
+ "sp-runtime-interface 17.0.0",
+ "sp-std 8.0.0",
+ "sp-storage 13.0.0",
  "ss58-registry",
  "substrate-bip39",
  "thiserror",
- "tiny-bip39",
+ "tracing",
+ "w3f-bls",
  "zeroize",
 ]
 
 [[package]]
 name = "sp-core-hashing"
-version = "5.0.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+version = "9.0.0"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "blake2b_simd",
  "byteorder",
  "digest 0.10.7",
  "sha2 0.10.8",
  "sha3",
- "sp-std 5.0.0",
  "twox-hash",
 ]
 
 [[package]]
-name = "sp-core-hashing"
-version = "8.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "27449abdfbe41b473e625bce8113745e81d65777dd1d5a8462cf24137930dad8"
+name = "sp-core-hashing-proc-macro"
+version = "9.0.0"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "blake2b_simd",
- "byteorder",
- "digest 0.10.7",
- "sha2 0.10.8",
- "sha3",
- "sp-std 7.0.0",
- "twox-hash",
+ "quote",
+ "sp-core-hashing",
+ "syn 2.0.48",
 ]
 
 [[package]]
-name = "sp-core-hashing-proc-macro"
-version = "5.0.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+name = "sp-crypto-ec-utils"
+version = "0.10.0"
+source = "git+https://github.com/paritytech/polkadot-sdk#a190e0e9253562fdca9c1b6e9541a7ea0a50c018"
 dependencies = [
- "proc-macro2",
- "quote",
- "sp-core-hashing 5.0.0",
- "syn 2.0.39",
+ "ark-bls12-377",
+ "ark-bls12-377-ext",
+ "ark-bls12-381",
+ "ark-bls12-381-ext",
+ "ark-bw6-761",
+ "ark-bw6-761-ext",
+ "ark-ec",
+ "ark-ed-on-bls12-377",
+ "ark-ed-on-bls12-377-ext",
+ "ark-ed-on-bls12-381-bandersnatch",
+ "ark-ed-on-bls12-381-bandersnatch-ext",
+ "ark-scale",
+ "sp-runtime-interface 24.0.0",
+ "sp-std 14.0.0",
 ]
 
 [[package]]
 name = "sp-database"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "kvdb",
  "parking_lot 0.12.1",
@@ -9821,12 +10470,22 @@ dependencies = [
 
 [[package]]
 name = "sp-debug-derive"
-version = "5.0.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+version = "8.0.0"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "sp-debug-derive"
+version = "14.0.0"
+source = "git+https://github.com/paritytech/polkadot-sdk#a190e0e9253562fdca9c1b6e9541a7ea0a50c018"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -9840,57 +10499,76 @@ dependencies = [
  "serde",
  "sp-inherents",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
  "thiserror",
 ]
 
 [[package]]
 name = "sp-externalities"
-version = "0.13.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+version = "0.19.0"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
+dependencies = [
+ "environmental",
+ "parity-scale-codec",
+ "sp-std 8.0.0",
+ "sp-storage 13.0.0",
+]
+
+[[package]]
+name = "sp-externalities"
+version = "0.25.0"
+source = "git+https://github.com/paritytech/polkadot-sdk#a190e0e9253562fdca9c1b6e9541a7ea0a50c018"
 dependencies = [
  "environmental",
  "parity-scale-codec",
- "sp-std 5.0.0",
- "sp-storage",
+ "sp-std 14.0.0",
+ "sp-storage 19.0.0",
+]
+
+[[package]]
+name = "sp-genesis-builder"
+version = "0.1.0"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
+dependencies = [
+ "serde_json",
+ "sp-api",
+ "sp-runtime",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "sp-inherents"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "async-trait",
  "impl-trait-for-tuples",
  "parity-scale-codec",
  "scale-info",
- "sp-core",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
  "thiserror",
 ]
 
 [[package]]
 name = "sp-io"
-version = "7.0.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+version = "23.0.0"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "bytes",
- "ed25519 1.5.3",
- "ed25519-dalek 1.0.1",
- "futures 0.3.29",
+ "ed25519-dalek",
  "libsecp256k1",
  "log",
  "parity-scale-codec",
  "rustversion",
  "secp256k1",
  "sp-core",
- "sp-externalities",
+ "sp-externalities 0.19.0",
  "sp-keystore",
- "sp-runtime-interface",
+ "sp-runtime-interface 17.0.0",
  "sp-state-machine",
- "sp-std 5.0.0",
- "sp-tracing",
+ "sp-std 8.0.0",
+ "sp-tracing 10.0.0",
  "sp-trie",
  "tracing",
  "tracing-core",
@@ -9898,33 +10576,30 @@ dependencies = [
 
 [[package]]
 name = "sp-keyring"
-version = "7.0.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+version = "24.0.0"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "lazy_static",
  "sp-core",
  "sp-runtime",
- "strum",
+ "strum 0.24.1",
 ]
 
 [[package]]
 name = "sp-keystore"
-version = "0.13.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+version = "0.27.0"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "futures 0.3.29",
  "parity-scale-codec",
  "parking_lot 0.12.1",
- "serde",
  "sp-core",
- "sp-externalities",
+ "sp-externalities 0.19.0",
  "thiserror",
 ]
 
 [[package]]
 name = "sp-maybe-compressed-blob"
 version = "4.1.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "thiserror",
  "zstd 0.12.4",
@@ -9940,24 +10615,36 @@ dependencies = [
  "scale-info",
  "serde",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "sp-metadata-ir"
 version = "0.1.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "frame-metadata",
+ "frame-metadata 16.0.0",
  "parity-scale-codec",
  "scale-info",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
+]
+
+[[package]]
+name = "sp-mixnet"
+version = "0.1.0-dev"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
+dependencies = [
+ "parity-scale-codec",
+ "scale-info",
+ "sp-api",
+ "sp-application-crypto",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "sp-offchain"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "sp-api",
  "sp-core",
@@ -9966,8 +10653,8 @@ dependencies = [
 
 [[package]]
 name = "sp-panic-handler"
-version = "5.0.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+version = "8.0.0"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "backtrace",
  "lazy_static",
@@ -9977,7 +10664,7 @@ dependencies = [
 [[package]]
 name = "sp-rpc"
 version = "6.0.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "rustc-hash",
  "serde",
@@ -9986,9 +10673,10 @@ dependencies = [
 
 [[package]]
 name = "sp-runtime"
-version = "7.0.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+version = "24.0.0"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
+ "docify",
  "either",
  "hash256-std-hasher",
  "impl-trait-for-tuples",
@@ -9998,75 +10686,110 @@ dependencies = [
  "rand 0.8.5",
  "scale-info",
  "serde",
+ "simple-mermaid",
  "sp-application-crypto",
  "sp-arithmetic",
  "sp-core",
  "sp-io",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
  "sp-weights",
 ]
 
 [[package]]
 name = "sp-runtime-interface"
-version = "7.0.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+version = "17.0.0"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
+dependencies = [
+ "bytes",
+ "impl-trait-for-tuples",
+ "parity-scale-codec",
+ "primitive-types",
+ "sp-externalities 0.19.0",
+ "sp-runtime-interface-proc-macro 11.0.0",
+ "sp-std 8.0.0",
+ "sp-storage 13.0.0",
+ "sp-tracing 10.0.0",
+ "sp-wasm-interface 14.0.0",
+ "static_assertions",
+]
+
+[[package]]
+name = "sp-runtime-interface"
+version = "24.0.0"
+source = "git+https://github.com/paritytech/polkadot-sdk#a190e0e9253562fdca9c1b6e9541a7ea0a50c018"
 dependencies = [
  "bytes",
  "impl-trait-for-tuples",
  "parity-scale-codec",
  "primitive-types",
- "sp-externalities",
- "sp-runtime-interface-proc-macro",
- "sp-std 5.0.0",
- "sp-storage",
- "sp-tracing",
- "sp-wasm-interface",
+ "sp-externalities 0.25.0",
+ "sp-runtime-interface-proc-macro 17.0.0",
+ "sp-std 14.0.0",
+ "sp-storage 19.0.0",
+ "sp-tracing 16.0.0",
+ "sp-wasm-interface 20.0.0",
  "static_assertions",
 ]
 
 [[package]]
 name = "sp-runtime-interface-proc-macro"
-version = "6.0.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+version = "11.0.0"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
+dependencies = [
+ "Inflector",
+ "expander",
+ "proc-macro-crate 3.1.0",
+ "proc-macro2",
+ "quote",
+ "syn 2.0.48",
+]
+
+[[package]]
+name = "sp-runtime-interface-proc-macro"
+version = "17.0.0"
+source = "git+https://github.com/paritytech/polkadot-sdk#a190e0e9253562fdca9c1b6e9541a7ea0a50c018"
 dependencies = [
  "Inflector",
- "proc-macro-crate",
+ "expander",
+ "proc-macro-crate 3.1.0",
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
 name = "sp-session"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "parity-scale-codec",
  "scale-info",
  "sp-api",
  "sp-core",
+ "sp-keystore",
  "sp-runtime",
  "sp-staking",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "sp-staking"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
+ "impl-trait-for-tuples",
  "parity-scale-codec",
  "scale-info",
  "serde",
  "sp-core",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
 name = "sp-state-machine"
-version = "0.13.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+version = "0.28.0"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "hash-db",
  "log",
@@ -10075,60 +10798,107 @@ dependencies = [
  "rand 0.8.5",
  "smallvec",
  "sp-core",
- "sp-externalities",
+ "sp-externalities 0.19.0",
  "sp-panic-handler",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
  "sp-trie",
  "thiserror",
  "tracing",
+ "trie-db",
+]
+
+[[package]]
+name = "sp-statement-store"
+version = "4.0.0-dev"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
+dependencies = [
+ "aes-gcm",
+ "curve25519-dalek 4.1.1",
+ "ed25519-dalek",
+ "hkdf",
+ "parity-scale-codec",
+ "rand 0.8.5",
+ "scale-info",
+ "sha2 0.10.8",
+ "sp-api",
+ "sp-application-crypto",
+ "sp-core",
+ "sp-externalities 0.19.0",
+ "sp-runtime",
+ "sp-runtime-interface 17.0.0",
+ "sp-std 8.0.0",
+ "thiserror",
+ "x25519-dalek 2.0.0",
 ]
 
 [[package]]
 name = "sp-std"
-version = "5.0.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+version = "8.0.0"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 
 [[package]]
 name = "sp-std"
-version = "7.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1de8eef39962b5b97478719c493bed2926cf70cb621005bbf68ebe58252ff986"
+version = "14.0.0"
+source = "git+https://github.com/paritytech/polkadot-sdk#a190e0e9253562fdca9c1b6e9541a7ea0a50c018"
+
+[[package]]
+name = "sp-storage"
+version = "13.0.0"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
+dependencies = [
+ "impl-serde",
+ "parity-scale-codec",
+ "ref-cast",
+ "serde",
+ "sp-debug-derive 8.0.0",
+ "sp-std 8.0.0",
+]
 
 [[package]]
 name = "sp-storage"
-version = "7.0.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+version = "19.0.0"
+source = "git+https://github.com/paritytech/polkadot-sdk#a190e0e9253562fdca9c1b6e9541a7ea0a50c018"
 dependencies = [
  "impl-serde",
  "parity-scale-codec",
  "ref-cast",
  "serde",
- "sp-debug-derive",
- "sp-std 5.0.0",
+ "sp-debug-derive 14.0.0",
+ "sp-std 14.0.0",
 ]
 
 [[package]]
 name = "sp-timestamp"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "async-trait",
- "futures-timer",
- "log",
  "parity-scale-codec",
  "sp-inherents",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
  "thiserror",
 ]
 
 [[package]]
 name = "sp-tracing"
-version = "6.0.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+version = "10.0.0"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
+dependencies = [
+ "parity-scale-codec",
+ "sp-std 8.0.0",
+ "tracing",
+ "tracing-core",
+ "tracing-subscriber",
+]
+
+[[package]]
+name = "sp-tracing"
+version = "16.0.0"
+source = "git+https://github.com/paritytech/polkadot-sdk#a190e0e9253562fdca9c1b6e9541a7ea0a50c018"
 dependencies = [
  "parity-scale-codec",
- "sp-std 5.0.0",
+ "sp-std 14.0.0",
  "tracing",
  "tracing-core",
  "tracing-subscriber",
@@ -10137,7 +10907,7 @@ dependencies = [
 [[package]]
 name = "sp-transaction-pool"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "sp-api",
  "sp-runtime",
@@ -10146,36 +10916,36 @@ dependencies = [
 [[package]]
 name = "sp-transaction-storage-proof"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "async-trait",
- "log",
  "parity-scale-codec",
  "scale-info",
  "sp-core",
  "sp-inherents",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
  "sp-trie",
 ]
 
 [[package]]
 name = "sp-trie"
-version = "7.0.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+version = "22.0.0"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
- "ahash 0.8.6",
+ "ahash 0.8.7",
  "hash-db",
- "hashbrown 0.13.2",
  "lazy_static",
  "memory-db",
  "nohash-hasher",
  "parity-scale-codec",
  "parking_lot 0.12.1",
+ "rand 0.8.5",
  "scale-info",
  "schnellru",
  "sp-core",
- "sp-std 5.0.0",
+ "sp-externalities 0.19.0",
+ "sp-std 8.0.0",
  "thiserror",
  "tracing",
  "trie-db",
@@ -10184,8 +10954,8 @@ dependencies = [
 
 [[package]]
 name = "sp-version"
-version = "5.0.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+version = "22.0.0"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "impl-serde",
  "parity-scale-codec",
@@ -10194,49 +10964,61 @@ dependencies = [
  "serde",
  "sp-core-hashing-proc-macro",
  "sp-runtime",
- "sp-std 5.0.0",
+ "sp-std 8.0.0",
  "sp-version-proc-macro",
  "thiserror",
 ]
 
 [[package]]
 name = "sp-version-proc-macro"
-version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+version = "8.0.0"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "parity-scale-codec",
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
 name = "sp-wasm-interface"
-version = "7.0.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+version = "14.0.0"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "anyhow",
  "impl-trait-for-tuples",
  "log",
  "parity-scale-codec",
- "sp-std 5.0.0",
- "wasmi",
+ "sp-std 8.0.0",
+ "wasmtime",
+]
+
+[[package]]
+name = "sp-wasm-interface"
+version = "20.0.0"
+source = "git+https://github.com/paritytech/polkadot-sdk#a190e0e9253562fdca9c1b6e9541a7ea0a50c018"
+dependencies = [
+ "anyhow",
+ "impl-trait-for-tuples",
+ "log",
+ "parity-scale-codec",
+ "sp-std 14.0.0",
  "wasmtime",
 ]
 
 [[package]]
 name = "sp-weights"
-version = "4.0.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+version = "20.0.0"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
+ "bounded-collections",
  "parity-scale-codec",
  "scale-info",
  "serde",
  "smallvec",
  "sp-arithmetic",
- "sp-core",
- "sp-debug-derive",
- "sp-std 5.0.0",
+ "sp-debug-derive 8.0.0",
+ "sp-std 8.0.0",
 ]
 
 [[package]]
@@ -10252,30 +11034,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
 
 [[package]]
-name = "spki"
-version = "0.6.0"
+name = "spinners"
+version = "4.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "67cf02bbac7a337dc36e4f5a693db6c21e7863f45070f7064577eb4367a3212b"
+checksum = "a0ef947f358b9c238923f764c72a4a9d42f2d637c46e059dbd319d6e7cfb4f82"
 dependencies = [
- "base64ct",
- "der 0.6.1",
+ "lazy_static",
+ "maplit",
+ "strum 0.24.1",
 ]
 
 [[package]]
 name = "spki"
-version = "0.7.2"
+version = "0.7.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a"
+checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d"
 dependencies = [
  "base64ct",
- "der 0.7.8",
+ "der",
 ]
 
 [[package]]
 name = "ss58-registry"
-version = "1.44.0"
+version = "1.46.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "35935738370302d5e33963665b77541e4b990a3e919ec904c837a56cfc891de1"
+checksum = "b1114ee5900b8569bbc8b1a014a942f937b752af4b44f4607430b5f86cedaac0"
 dependencies = [
  "Inflector",
  "num-format",
@@ -10338,9 +11121,15 @@ 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"
@@ -10355,22 +11144,16 @@ dependencies = [
 ]
 
 [[package]]
-name = "stun"
-version = "0.4.4"
+name = "strum_macros"
+version = "0.25.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a7e94b1ec00bad60e6410e058b52f1c66de3dc5fe4d62d09b3e52bb7d3b73e25"
+checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0"
 dependencies = [
- "base64 0.13.1",
- "crc",
- "lazy_static",
- "md-5",
- "rand 0.8.5",
- "ring 0.16.20",
- "subtle",
- "thiserror",
- "tokio",
- "url",
- "webrtc-util",
+ "heck 0.4.1",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -10381,7 +11164,7 @@ checksum = "e620c7098893ba667438b47169c00aacdd9e7c10e042250ce2b60b087ec97328"
 dependencies = [
  "hmac 0.11.0",
  "pbkdf2 0.8.0",
- "schnorrkel",
+ "schnorrkel 0.9.1",
  "sha2 0.9.9",
  "zeroize",
 ]
@@ -10389,19 +11172,16 @@ dependencies = [
 [[package]]
 name = "substrate-build-script-utils"
 version = "3.0.0"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
-dependencies = [
- "platforms 2.0.0",
-]
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 
 [[package]]
 name = "substrate-frame-rpc-system"
 version = "4.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "frame-system-rpc-runtime-api",
- "futures 0.3.29",
- "jsonrpsee",
+ "futures 0.3.30",
+ "jsonrpsee 0.16.3",
  "log",
  "parity-scale-codec",
  "sc-rpc-api",
@@ -10416,7 +11196,7 @@ dependencies = [
 [[package]]
 name = "substrate-prometheus-endpoint"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "hyper",
  "log",
@@ -10428,10 +11208,10 @@ dependencies = [
 [[package]]
 name = "substrate-rpc-client"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "async-trait",
- "jsonrpsee",
+ "jsonrpsee 0.16.3",
  "log",
  "sc-rpc-api",
  "serde",
@@ -10441,34 +11221,32 @@ dependencies = [
 [[package]]
 name = "substrate-wasm-builder"
 version = "5.0.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "ansi_term",
  "build-helper",
  "cargo_metadata",
  "filetime",
+ "parity-wasm",
  "sp-maybe-compressed-blob",
- "strum",
+ "strum 0.24.1",
  "tempfile",
- "toml 0.7.8",
+ "toml 0.8.8",
  "walkdir",
  "wasm-opt",
 ]
 
 [[package]]
-name = "substring"
-version = "1.4.5"
+name = "subtle"
+version = "1.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "42ee6433ecef213b2e72f587ef64a2f5943e7cd16fbd82dbe8bc07486c534c86"
-dependencies = [
- "autocfg",
-]
+checksum = "2d67a5a62ba6e01cb2192ff309324cb4875d0c451d55fe2319433abe7a05a8ee"
 
 [[package]]
 name = "subtle"
-version = "2.4.1"
+version = "2.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
 
 [[package]]
 name = "subweight-core"
@@ -10476,93 +11254,116 @@ version = "3.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ee5751d8385836e91a9b7c613e1e7e11f97a4c8a867d6f45f556497d2cfb53c1"
 dependencies = [
- "clap 4.4.11",
+ "clap 4.4.18",
  "fancy-regex",
  "git-version",
  "glob",
  "lazy_static",
  "log",
  "proc-macro2",
- "semver 1.0.20",
+ "semver 1.0.21",
  "serde",
  "serde_json",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
 name = "subxt"
-version = "0.28.0"
-source = "git+https://github.com/duniter/subxt.git?branch=duniter-substrate-v0.9.42#64bde2b02a30e619b8efede5eec46104c600e15c"
+version = "0.34.0"
+source = "git+https://github.com/duniter/subxt?branch=subxt-v0.34.0-duniter-substrate-v1.6.0#b648c5e3a260d4e7d47df42d784ad4c723637411"
 dependencies = [
+ "async-trait",
  "base58",
- "blake2",
+ "blake2 0.10.6",
  "derivative",
  "either",
- "frame-metadata",
- "futures 0.3.29",
- "getrandom 0.2.11",
+ "frame-metadata 16.0.0",
+ "futures 0.3.30",
  "hex",
  "impl-serde",
- "jsonrpsee",
+ "instant",
+ "jsonrpsee 0.21.0",
  "parity-scale-codec",
- "parking_lot 0.12.1",
  "primitive-types",
- "scale-bits 0.3.0",
- "scale-decode 0.5.0",
- "scale-encode 0.1.2",
+ "scale-bits",
+ "scale-decode",
+ "scale-encode",
  "scale-info",
- "scale-value 0.7.0",
+ "scale-value",
  "serde",
  "serde_json",
  "sp-core",
- "sp-core-hashing 8.0.0",
+ "sp-core-hashing",
  "sp-runtime",
+ "subxt-lightclient",
  "subxt-macro",
  "subxt-metadata",
  "thiserror",
+ "tokio-util",
  "tracing",
+ "url",
 ]
 
 [[package]]
 name = "subxt-codegen"
-version = "0.28.0"
-source = "git+https://github.com/duniter/subxt.git?branch=duniter-substrate-v0.9.42#64bde2b02a30e619b8efede5eec46104c600e15c"
+version = "0.34.0"
+source = "git+https://github.com/duniter/subxt?branch=subxt-v0.34.0-duniter-substrate-v1.6.0#b648c5e3a260d4e7d47df42d784ad4c723637411"
 dependencies = [
- "darling",
- "frame-metadata",
+ "frame-metadata 16.0.0",
  "heck 0.4.1",
  "hex",
- "jsonrpsee",
+ "jsonrpsee 0.21.0",
  "parity-scale-codec",
  "proc-macro2",
  "quote",
  "scale-info",
+ "scale-typegen",
  "subxt-metadata",
- "syn 1.0.109",
+ "syn 2.0.48",
+ "thiserror",
+ "tokio",
+]
+
+[[package]]
+name = "subxt-lightclient"
+version = "0.34.0"
+source = "git+https://github.com/duniter/subxt?branch=subxt-v0.34.0-duniter-substrate-v1.6.0#b648c5e3a260d4e7d47df42d784ad4c723637411"
+dependencies = [
+ "futures 0.3.30",
+ "futures-util",
+ "serde",
+ "serde_json",
+ "smoldot-light",
  "thiserror",
  "tokio",
+ "tokio-stream",
+ "tracing",
 ]
 
 [[package]]
 name = "subxt-macro"
-version = "0.28.0"
-source = "git+https://github.com/duniter/subxt.git?branch=duniter-substrate-v0.9.42#64bde2b02a30e619b8efede5eec46104c600e15c"
+version = "0.34.0"
+source = "git+https://github.com/duniter/subxt?branch=subxt-v0.34.0-duniter-substrate-v1.6.0#b648c5e3a260d4e7d47df42d784ad4c723637411"
 dependencies = [
- "darling",
+ "darling 0.20.4",
+ "parity-scale-codec",
  "proc-macro-error",
+ "quote",
+ "scale-typegen",
  "subxt-codegen",
- "syn 1.0.109",
+ "syn 2.0.48",
 ]
 
 [[package]]
 name = "subxt-metadata"
-version = "0.28.0"
-source = "git+https://github.com/duniter/subxt.git?branch=duniter-substrate-v0.9.42#64bde2b02a30e619b8efede5eec46104c600e15c"
+version = "0.34.0"
+source = "git+https://github.com/duniter/subxt?branch=subxt-v0.34.0-duniter-substrate-v1.6.0#b648c5e3a260d4e7d47df42d784ad4c723637411"
 dependencies = [
- "frame-metadata",
+ "frame-metadata 16.0.0",
  "parity-scale-codec",
  "scale-info",
- "sp-core-hashing 8.0.0",
+ "sp-core-hashing",
+ "thiserror",
 ]
 
 [[package]]
@@ -10578,9 +11379,9 @@ dependencies = [
 
 [[package]]
 name = "syn"
-version = "2.0.39"
+version = "2.0.48"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a"
+checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -10661,21 +11462,21 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
 
 [[package]]
 name = "target-lexicon"
-version = "0.12.12"
+version = "0.12.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14c39fd04924ca3a864207c66fc2cd7d22d7c016007f9ce846cbb9326331930a"
+checksum = "69758bda2e78f098e4ccb393021a0963bb3442eac05f135c30f61b7370bbafae"
 
 [[package]]
 name = "tempfile"
-version = "3.8.1"
+version = "3.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5"
+checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa"
 dependencies = [
  "cfg-if 1.0.0",
- "fastrand 2.0.1",
+ "fastrand",
  "redox_syscall 0.4.1",
- "rustix 0.38.25",
- "windows-sys 0.48.0",
+ "rustix 0.38.30",
+ "windows-sys 0.52.0",
 ]
 
 [[package]]
@@ -10696,13 +11497,23 @@ dependencies = [
 
 [[package]]
 name = "termcolor"
-version = "1.4.0"
+version = "1.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff1bc3d3f05aff0403e8ac0d92ced918ec05b666a43f83297ccef5bea8a3d449"
+checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
 dependencies = [
  "winapi-util",
 ]
 
+[[package]]
+name = "terminal_size"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7"
+dependencies = [
+ "rustix 0.38.30",
+ "windows-sys 0.48.0",
+]
+
 [[package]]
 name = "termtree"
 version = "0.4.1"
@@ -10726,22 +11537,22 @@ checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
 
 [[package]]
 name = "thiserror"
-version = "1.0.50"
+version = "1.0.56"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f9a7210f5c9a7156bb50aa36aed4c95afb51df0df00713949448cf9e97d382d2"
+checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad"
 dependencies = [
  "thiserror-impl",
 ]
 
 [[package]]
 name = "thiserror-impl"
-version = "1.0.50"
+version = "1.0.56"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "266b2e40bc00e5a6c09c3584011e08b06f123c00362c92b975ba9843aaaa14b8"
+checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -10769,15 +11580,27 @@ dependencies = [
  "num_cpus",
 ]
 
+[[package]]
+name = "tikv-jemalloc-sys"
+version = "0.5.4+5.3.0-patched"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9402443cb8fd499b6f327e40565234ff34dbda27460c5b47db0db77443dd85d1"
+dependencies = [
+ "cc",
+ "libc",
+]
+
 [[package]]
 name = "time"
-version = "0.3.23"
+version = "0.3.31"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59e399c068f43a5d116fedaf73b203fa4f9c519f17e2b34f63221d3792f81446"
+checksum = "f657ba42c3f86e7680e53c8cd3af8abbe56b5491790b46e22e19c0d57463583e"
 dependencies = [
+ "deranged",
  "itoa",
  "libc",
  "num_threads",
+ "powerfmt",
  "serde",
  "time-core",
  "time-macros",
@@ -10785,46 +11608,26 @@ dependencies = [
 
 [[package]]
 name = "time-core"
-version = "0.1.1"
+version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7300fbefb4dadc1af235a9cef3737cea692a9d97e1b9cbcd4ebdae6f8868e6fb"
+checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3"
 
 [[package]]
 name = "time-macros"
-version = "0.2.10"
+version = "0.2.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96ba15a897f3c86766b757e5ac7221554c6750054d74d5b28844fce5fb36a6c4"
+checksum = "26197e33420244aeb70c3e8c78376ca46571bc4e701e4791c2cd9f57dcb3a43f"
 dependencies = [
  "time-core",
 ]
 
 [[package]]
-name = "tiny-bip39"
-version = "1.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "62cc94d358b5a1e84a5cb9109f559aa3c4d634d2b1b4de3d0fa4adc7c78e2861"
-dependencies = [
- "anyhow",
- "hmac 0.12.1",
- "once_cell",
- "pbkdf2 0.11.0",
- "rand 0.8.5",
- "rustc-hash",
- "sha2 0.10.8",
- "thiserror",
- "unicode-normalization",
- "wasm-bindgen",
- "zeroize",
-]
-
-[[package]]
-name = "tinytemplate"
-version = "1.2.1"
+name = "tiny-keccak"
+version = "2.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc"
+checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237"
 dependencies = [
- "serde",
- "serde_json",
+ "crunchy",
 ]
 
 [[package]]
@@ -10844,14 +11647,14 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
 
 [[package]]
 name = "tokio"
-version = "1.34.0"
+version = "1.35.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d0c014766411e834f7af5b8f4cf46257aab4036ca95e9d2c144a10f59ad6f5b9"
+checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104"
 dependencies = [
  "backtrace",
  "bytes",
  "libc",
- "mio 0.8.9",
+ "mio 0.8.10",
  "num_cpus",
  "parking_lot 0.12.1",
  "pin-project-lite 0.2.13",
@@ -10869,7 +11672,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -10883,14 +11686,14 @@ dependencies = [
 ]
 
 [[package]]
-name = "tokio-rustls"
-version = "0.23.4"
+name = "tokio-retry"
+version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59"
+checksum = "7f57eb36ecbe0fc510036adff84824dd3c24bb781e21bfa67b69d556aa85214f"
 dependencies = [
- "rustls 0.20.9",
+ "pin-project",
+ "rand 0.8.5",
  "tokio",
- "webpki 0.22.4",
 ]
 
 [[package]]
@@ -10899,7 +11702,18 @@ version = "0.24.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081"
 dependencies = [
- "rustls 0.21.9",
+ "rustls 0.21.10",
+ "tokio",
+]
+
+[[package]]
+name = "tokio-rustls"
+version = "0.25.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f"
+dependencies = [
+ "rustls 0.22.2",
+ "rustls-pki-types",
  "tokio",
 ]
 
@@ -10941,14 +11755,14 @@ dependencies = [
 
 [[package]]
 name = "toml"
-version = "0.7.8"
+version = "0.8.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257"
+checksum = "a1a195ec8c9da26928f773888e0742ca3ca1040c6cd859c919c9f59c1954ab35"
 dependencies = [
  "serde",
  "serde_spanned",
  "toml_datetime",
- "toml_edit",
+ "toml_edit 0.21.0",
 ]
 
 [[package]]
@@ -10962,11 +11776,22 @@ dependencies = [
 
 [[package]]
 name = "toml_edit"
-version = "0.19.15"
+version = "0.20.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70f427fce4d84c72b5b732388bf4a9f4531b53f74e2887e3ecb2481f68f66d81"
+dependencies = [
+ "indexmap 2.2.1",
+ "toml_datetime",
+ "winnow",
+]
+
+[[package]]
+name = "toml_edit"
+version = "0.21.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
+checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03"
 dependencies = [
- "indexmap 2.1.0",
+ "indexmap 2.2.1",
  "serde",
  "serde_spanned",
  "toml_datetime",
@@ -10979,6 +11804,10 @@ version = "0.4.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
 dependencies = [
+ "futures-core",
+ "futures-util",
+ "pin-project",
+ "pin-project-lite 0.2.13",
  "tower-layer",
  "tower-service",
  "tracing",
@@ -10986,11 +11815,11 @@ dependencies = [
 
 [[package]]
 name = "tower-http"
-version = "0.3.5"
+version = "0.4.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f873044bf02dd1e8239e9c1293ea39dad76dc594ec16185d0a1bf31d8dc8d858"
+checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140"
 dependencies = [
- "bitflags 1.3.2",
+ "bitflags 2.4.2",
  "bytes",
  "futures-core",
  "futures-util",
@@ -11034,7 +11863,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -11103,9 +11932,9 @@ dependencies = [
 
 [[package]]
 name = "trie-db"
-version = "0.27.1"
+version = "0.28.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "767abe6ffed88a1889671a102c2861ae742726f52e0a5a425b92c9fbfa7e9c85"
+checksum = "ff28e0f815c2fea41ebddf148e008b077d2faddb026c9555b29696114d602642"
 dependencies = [
  "hash-db",
  "hashbrown 0.13.2",
@@ -11171,32 +12000,31 @@ dependencies = [
 
 [[package]]
 name = "try-lock"
-version = "0.2.4"
+version = "0.2.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
+checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
 
 [[package]]
 name = "try-runtime-cli"
 version = "0.10.0-dev"
-source = "git+https://github.com/duniter/substrate?branch=duniter-substrate-v0.9.42#f1c396107a2312e5e029a5fe8e36f05234fc2511"
+source = "git+https://github.com/duniter/duniter-polkadot-sdk?branch=duniter-substrate-v1.6.0#c84530c57a6f9ab808a92f6b5d29338acf1c6e4f"
 dependencies = [
  "async-trait",
- "clap 4.4.11",
+ "clap 4.4.18",
  "frame-remote-externalities",
  "hex",
  "log",
  "parity-scale-codec",
  "sc-cli",
  "sc-executor",
- "sc-service",
  "serde",
  "serde_json",
  "sp-api",
  "sp-consensus-aura",
  "sp-consensus-babe",
  "sp-core",
- "sp-debug-derive",
- "sp-externalities",
+ "sp-debug-derive 8.0.0",
+ "sp-externalities 0.19.0",
  "sp-inherents",
  "sp-io",
  "sp-keystore",
@@ -11217,25 +12045,6 @@ version = "1.0.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f4f195fd851901624eee5a58c4bb2b4f06399148fcd0ed336e6f1cb60a9881df"
 
-[[package]]
-name = "turn"
-version = "0.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4712ee30d123ec7ae26d1e1b218395a16c87cdbaf4b3925d170d684af62ea5e8"
-dependencies = [
- "async-trait",
- "base64 0.13.1",
- "futures 0.3.29",
- "log",
- "md-5",
- "rand 0.8.5",
- "ring 0.16.20",
- "stun",
- "thiserror",
- "tokio",
- "webrtc-util",
-]
-
 [[package]]
 name = "twox-hash"
 version = "1.6.3"
@@ -11335,9 +12144,9 @@ dependencies = [
 
 [[package]]
 name = "unicode-bidi"
-version = "0.3.13"
+version = "0.3.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460"
+checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75"
 
 [[package]]
 name = "unicode-ident"
@@ -11372,16 +12181,6 @@ version = "0.2.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c"
 
-[[package]]
-name = "universal-hash"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9f214e8f697e925001e66ec2c6e37a4ef93f0f78c2eed7814394e10c62025b05"
-dependencies = [
- "generic-array 0.14.7",
- "subtle",
-]
-
 [[package]]
 name = "universal-hash"
 version = "0.5.1"
@@ -11389,7 +12188,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea"
 dependencies = [
  "crypto-common",
- "subtle",
+ "subtle 2.5.0",
 ]
 
 [[package]]
@@ -11403,9 +12202,9 @@ dependencies = [
 
 [[package]]
 name = "unsafe-libyaml"
-version = "0.2.9"
+version = "0.2.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f28467d3e1d3c6586d8f25fa243f544f5800fec42d97032474e17222c2b75cfa"
+checksum = "ab4c90930b95a82d00dc9e9ac071b4991924390d46cbd0dfe566148667605e4b"
 
 [[package]]
 name = "unsigned-varint"
@@ -11433,12 +12232,12 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
 
 [[package]]
 name = "url"
-version = "2.4.1"
+version = "2.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "143b538f18257fac9cad154828a57c6bf5157e1aa604d4816b5995bf6de87ae5"
+checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
 dependencies = [
  "form_urlencoded",
- "idna 0.4.0",
+ "idna 0.5.0",
  "percent-encoding",
 ]
 
@@ -11458,15 +12257,6 @@ version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
 
-[[package]]
-name = "uuid"
-version = "1.6.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5e395fcf16a7a3d8127ec99782007af141946b4795001f876d54fb0d55978560"
-dependencies = [
- "getrandom 0.2.11",
-]
-
 [[package]]
 name = "valuable"
 version = "0.1.0"
@@ -11498,19 +12288,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
 
 [[package]]
-name = "waitgroup"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d1f50000a783467e6c0200f9d10642f4bc424e39efc1b770203e88b488f79292"
-dependencies = [
- "atomic-waker",
-]
-
-[[package]]
-name = "waker-fn"
-version = "1.1.1"
+name = "w3f-bls"
+version = "0.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690"
+checksum = "7335e4c132c28cc43caef6adb339789e599e39adbe78da0c4d547fad48cbc331"
+dependencies = [
+ "ark-bls12-377",
+ "ark-bls12-381",
+ "ark-ec",
+ "ark-ff",
+ "ark-serialize",
+ "ark-serialize-derive",
+ "arrayref",
+ "constcat",
+ "digest 0.10.7",
+ "rand 0.8.5",
+ "rand_chacha 0.3.1",
+ "rand_core 0.6.4",
+ "sha2 0.10.8",
+ "sha3",
+ "thiserror",
+ "zeroize",
+]
 
 [[package]]
 name = "walkdir"
@@ -11545,9 +12344,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
 
 [[package]]
 name = "wasm-bindgen"
-version = "0.2.88"
+version = "0.2.90"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7daec296f25a1bae309c0cd5c29c4b260e510e6d813c286b19eaadf409d40fce"
+checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406"
 dependencies = [
  "cfg-if 1.0.0",
  "wasm-bindgen-macro",
@@ -11555,24 +12354,24 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-backend"
-version = "0.2.88"
+version = "0.2.90"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e397f4664c0e4e428e8313a469aaa58310d302159845980fd23b0f22a847f217"
+checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd"
 dependencies = [
  "bumpalo",
  "log",
  "once_cell",
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
  "wasm-bindgen-shared",
 ]
 
 [[package]]
 name = "wasm-bindgen-futures"
-version = "0.4.38"
+version = "0.4.40"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9afec9963e3d0994cac82455b2b3502b81a7f40f9a0d32181f7528d9f4b43e02"
+checksum = "bde2032aeb86bdfaecc8b261eef3cba735cc426c1f3a3416d1e0791be95fc461"
 dependencies = [
  "cfg-if 1.0.0",
  "js-sys",
@@ -11582,9 +12381,9 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-macro"
-version = "0.2.88"
+version = "0.2.90"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5961017b3b08ad5f3fe39f1e79877f8ee7c23c5e5fd5eb80de95abc41f1f16b2"
+checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999"
 dependencies = [
  "quote",
  "wasm-bindgen-macro-support",
@@ -11592,22 +12391,22 @@ dependencies = [
 
 [[package]]
 name = "wasm-bindgen-macro-support"
-version = "0.2.88"
+version = "0.2.90"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c5353b8dab669f5e10f5bd76df26a9360c748f054f862ff5f3f8aae0c7fb3907"
+checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
  "wasm-bindgen-backend",
  "wasm-bindgen-shared",
 ]
 
 [[package]]
 name = "wasm-bindgen-shared"
-version = "0.2.88"
+version = "0.2.90"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d046c5d029ba91a1ed14da14dca44b68bf2f124cfbaf741c54151fdb3e0750b"
+checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b"
 
 [[package]]
 name = "wasm-instrument"
@@ -11620,14 +12419,14 @@ dependencies = [
 
 [[package]]
 name = "wasm-opt"
-version = "0.111.0"
+version = "0.116.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "84a303793cbc01fb96551badfc7367db6007396bba6bac97936b3c8b6f7fdb41"
+checksum = "fc942673e7684671f0c5708fc18993569d184265fd5223bb51fc8e5b9b6cfd52"
 dependencies = [
  "anyhow",
  "libc",
- "strum",
- "strum_macros",
+ "strum 0.24.1",
+ "strum_macros 0.24.3",
  "tempfile",
  "thiserror",
  "wasm-opt-cxx-sys",
@@ -11636,9 +12435,9 @@ dependencies = [
 
 [[package]]
 name = "wasm-opt-cxx-sys"
-version = "0.111.0"
+version = "0.116.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9c9deb56f8a9f2ec177b3bd642a8205621835944ed5da55f2388ef216aca5a4"
+checksum = "8c57b28207aa724318fcec6575fe74803c23f6f266fce10cbc9f3f116762f12e"
 dependencies = [
  "anyhow",
  "cxx",
@@ -11648,15 +12447,14 @@ dependencies = [
 
 [[package]]
 name = "wasm-opt-sys"
-version = "0.111.0"
+version = "0.116.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4432e28b542738a9776cedf92e8a99d8991c7b4667ee2c7ccddfb479dd2856a7"
+checksum = "8a1cce564dc768dacbdb718fc29df2dba80bd21cb47d8f77ae7e3d95ceb98cbe"
 dependencies = [
  "anyhow",
  "cc",
  "cxx",
  "cxx-build",
- "regex",
 ]
 
 [[package]]
@@ -11665,7 +12463,7 @@ version = "0.2.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "be0ecb0db480561e9a7642b5d3e4187c128914e58aa84330b9493e3eb68c5e7f"
 dependencies = [
- "futures 0.3.29",
+ "futures 0.3.30",
  "js-sys",
  "parking_lot 0.11.2",
  "pin-utils",
@@ -11676,53 +12474,59 @@ dependencies = [
 
 [[package]]
 name = "wasmi"
-version = "0.13.2"
+version = "0.31.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "06c326c93fbf86419608361a2c925a31754cf109da1b8b55737070b4d6669422"
+checksum = "77a8281d1d660cdf54c76a3efa9ddd0c270cada1383a995db3ccb43d166456c7"
 dependencies = [
- "parity-wasm",
- "wasmi-validation",
+ "smallvec",
+ "spin 0.9.8",
+ "wasmi_arena",
  "wasmi_core",
+ "wasmparser-nostd",
 ]
 
 [[package]]
-name = "wasmi-validation"
-version = "0.5.0"
+name = "wasmi_arena"
+version = "0.4.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91ff416ad1ff0c42e5a926ed5d5fab74c0f098749aa0ad8b2a34b982ce0e867b"
-dependencies = [
- "parity-wasm",
-]
+checksum = "104a7f73be44570cac297b3035d76b169d6599637631cf37a1703326a0727073"
 
 [[package]]
 name = "wasmi_core"
-version = "0.2.1"
+version = "0.13.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57d20cb3c59b788653d99541c646c561c9dd26506f25c0cebfe810659c54c6d7"
+checksum = "dcf1a7db34bff95b85c261002720c00c3a6168256dcb93041d3fa2054d19856a"
 dependencies = [
  "downcast-rs",
  "libm",
- "memory_units",
- "num-rational",
  "num-traits 0.2.17",
- "region",
+ "paste",
 ]
 
 [[package]]
 name = "wasmparser"
-version = "0.100.0"
+version = "0.102.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "64b20236ab624147dfbb62cf12a19aaf66af0e41b8398838b66e997d07d269d4"
+checksum = "48134de3d7598219ab9eaf6b91b15d8e50d31da76b8519fe4ecfcec2cf35104b"
 dependencies = [
  "indexmap 1.9.3",
  "url",
 ]
 
+[[package]]
+name = "wasmparser-nostd"
+version = "0.100.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9157cab83003221bfd385833ab587a039f5d6fa7304854042ba358a3b09e0724"
+dependencies = [
+ "indexmap-nostd",
+]
+
 [[package]]
 name = "wasmtime"
-version = "6.0.2"
+version = "8.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "76a222f5fa1e14b2cefc286f1b68494d7a965f4bf57ec04c59bb62673d639af6"
+checksum = "f907fdead3153cb9bfb7a93bbd5b62629472dc06dee83605358c64c52ed3dda9"
 dependencies = [
  "anyhow",
  "bincode",
@@ -11730,7 +12534,7 @@ dependencies = [
  "indexmap 1.9.3",
  "libc",
  "log",
- "object 0.29.0",
+ "object 0.30.4",
  "once_cell",
  "paste",
  "psm",
@@ -11743,26 +12547,26 @@ dependencies = [
  "wasmtime-environ",
  "wasmtime-jit",
  "wasmtime-runtime",
- "windows-sys 0.42.0",
+ "windows-sys 0.45.0",
 ]
 
 [[package]]
 name = "wasmtime-asm-macros"
-version = "6.0.2"
+version = "8.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4407a7246e7d2f3d8fb1cf0c72fda8dbafdb6dd34d555ae8bea0e5ae031089cc"
+checksum = "d3b9daa7c14cd4fa3edbf69de994408d5f4b7b0959ac13fa69d465f6597f810d"
 dependencies = [
  "cfg-if 1.0.0",
 ]
 
 [[package]]
 name = "wasmtime-cache"
-version = "6.0.2"
+version = "8.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ceb3adf61d654be0be67fffdce42447b0880481348785be5fe40b5dd7663a4c"
+checksum = "c86437fa68626fe896e5afc69234bb2b5894949083586535f200385adfd71213"
 dependencies = [
  "anyhow",
- "base64 0.13.1",
+ "base64 0.21.7",
  "bincode",
  "directories-next",
  "file-per-thread-logger",
@@ -11771,15 +12575,15 @@ dependencies = [
  "serde",
  "sha2 0.10.8",
  "toml 0.5.11",
- "windows-sys 0.42.0",
+ "windows-sys 0.45.0",
  "zstd 0.11.2+zstd.1.5.2",
 ]
 
 [[package]]
 name = "wasmtime-cranelift"
-version = "6.0.2"
+version = "8.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c366bb8647e01fd08cb5589976284b00abfded5529b33d7e7f3f086c68304a4"
+checksum = "b1cefde0cce8cb700b1b21b6298a3837dba46521affd7b8c38a9ee2c869eee04"
 dependencies = [
  "anyhow",
  "cranelift-codegen",
@@ -11787,27 +12591,43 @@ dependencies = [
  "cranelift-frontend",
  "cranelift-native",
  "cranelift-wasm",
- "gimli 0.26.2",
+ "gimli 0.27.3",
  "log",
- "object 0.29.0",
+ "object 0.30.4",
  "target-lexicon",
  "thiserror",
  "wasmparser",
+ "wasmtime-cranelift-shared",
+ "wasmtime-environ",
+]
+
+[[package]]
+name = "wasmtime-cranelift-shared"
+version = "8.0.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cd041e382ef5aea1b9fc78442394f1a4f6d676ce457e7076ca4cb3f397882f8b"
+dependencies = [
+ "anyhow",
+ "cranelift-codegen",
+ "cranelift-native",
+ "gimli 0.27.3",
+ "object 0.30.4",
+ "target-lexicon",
  "wasmtime-environ",
 ]
 
 [[package]]
 name = "wasmtime-environ"
-version = "6.0.2"
+version = "8.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "47b8b50962eae38ee319f7b24900b7cf371f03eebdc17400c1dc8575fc10c9a7"
+checksum = "a990198cee4197423045235bf89d3359e69bd2ea031005f4c2d901125955c949"
 dependencies = [
  "anyhow",
  "cranelift-entity",
- "gimli 0.26.2",
+ "gimli 0.27.3",
  "indexmap 1.9.3",
  "log",
- "object 0.29.0",
+ "object 0.30.4",
  "serde",
  "target-lexicon",
  "thiserror",
@@ -11817,18 +12637,18 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-jit"
-version = "6.0.2"
+version = "8.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ffaed4f9a234ba5225d8e64eac7b4a5d13b994aeb37353cde2cbeb3febda9eaa"
+checksum = "0de48df552cfca1c9b750002d3e07b45772dd033b0b206d5c0968496abf31244"
 dependencies = [
- "addr2line 0.17.0",
+ "addr2line 0.19.0",
  "anyhow",
  "bincode",
  "cfg-if 1.0.0",
  "cpp_demangle",
- "gimli 0.26.2",
+ "gimli 0.27.3",
  "log",
- "object 0.29.0",
+ "object 0.30.4",
  "rustc-demangle",
  "serde",
  "target-lexicon",
@@ -11836,36 +12656,36 @@ dependencies = [
  "wasmtime-jit-debug",
  "wasmtime-jit-icache-coherence",
  "wasmtime-runtime",
- "windows-sys 0.42.0",
+ "windows-sys 0.45.0",
 ]
 
 [[package]]
 name = "wasmtime-jit-debug"
-version = "6.0.2"
+version = "8.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eed41cbcbf74ce3ff6f1d07d1b707888166dc408d1a880f651268f4f7c9194b2"
+checksum = "6e0554b84c15a27d76281d06838aed94e13a77d7bf604bbbaf548aa20eb93846"
 dependencies = [
- "object 0.29.0",
+ "object 0.30.4",
  "once_cell",
  "rustix 0.36.17",
 ]
 
 [[package]]
 name = "wasmtime-jit-icache-coherence"
-version = "6.0.2"
+version = "8.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "43a28ae1e648461bfdbb79db3efdaee1bca5b940872e4175390f465593a2e54c"
+checksum = "aecae978b13f7f67efb23bd827373ace4578f2137ec110bbf6a4a7cde4121bbd"
 dependencies = [
  "cfg-if 1.0.0",
  "libc",
- "windows-sys 0.42.0",
+ "windows-sys 0.45.0",
 ]
 
 [[package]]
 name = "wasmtime-runtime"
-version = "6.0.2"
+version = "8.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e704b126e4252788ccfc3526d4d4511d4b23c521bf123e447ac726c14545217b"
+checksum = "658cf6f325232b6760e202e5255d823da5e348fdea827eff0a2a22319000b441"
 dependencies = [
  "anyhow",
  "cc",
@@ -11875,21 +12695,21 @@ dependencies = [
  "log",
  "mach",
  "memfd",
- "memoffset 0.6.5",
+ "memoffset",
  "paste",
  "rand 0.8.5",
  "rustix 0.36.17",
  "wasmtime-asm-macros",
  "wasmtime-environ",
  "wasmtime-jit-debug",
- "windows-sys 0.42.0",
+ "windows-sys 0.45.0",
 ]
 
 [[package]]
 name = "wasmtime-types"
-version = "6.0.2"
+version = "8.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "83e5572c5727c1ee7e8f28717aaa8400e4d22dcbd714ea5457d85b5005206568"
+checksum = "a4f6fffd2a1011887d57f07654dd112791e872e3ff4a2e626aee8059ee17f06f"
 dependencies = [
  "cranelift-entity",
  "serde",
@@ -11899,31 +12719,21 @@ dependencies = [
 
 [[package]]
 name = "web-sys"
-version = "0.3.65"
+version = "0.3.67"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5db499c5f66323272151db0e666cd34f78617522fb0c1604d31a27c50c206a85"
+checksum = "58cd2333b6e0be7a39605f0e255892fd7418a682d8da8fe042fe25128794d2ed"
 dependencies = [
  "js-sys",
  "wasm-bindgen",
 ]
 
-[[package]]
-name = "webpki"
-version = "0.21.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea"
-dependencies = [
- "ring 0.16.20",
- "untrusted 0.7.1",
-]
-
 [[package]]
 name = "webpki"
 version = "0.22.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ed63aea5ce73d0ff405984102c42de94fc55a6b75765d621c65262469b3c9b53"
 dependencies = [
- "ring 0.17.5",
+ "ring 0.17.7",
  "untrusted 0.9.0",
 ]
 
@@ -11933,228 +12743,20 @@ version = "0.22.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87"
 dependencies = [
- "webpki 0.22.4",
+ "webpki",
 ]
 
 [[package]]
 name = "webpki-roots"
-version = "0.25.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14247bb57be4f377dfb94c72830b8ce8fc6beac03cf4bf7b9732eadd414123fc"
-
-[[package]]
-name = "webrtc"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2d3bc9049bdb2cea52f5fd4f6f728184225bdb867ed0dc2410eab6df5bdd67bb"
-dependencies = [
- "arc-swap",
- "async-trait",
- "bytes",
- "hex",
- "interceptor",
- "lazy_static",
- "log",
- "rand 0.8.5",
- "rcgen 0.9.3",
- "regex",
- "ring 0.16.20",
- "rtcp",
- "rtp",
- "rustls 0.19.1",
- "sdp",
- "serde",
- "serde_json",
- "sha2 0.10.8",
- "stun",
- "thiserror",
- "time",
- "tokio",
- "turn",
- "url",
- "waitgroup",
- "webrtc-data",
- "webrtc-dtls",
- "webrtc-ice",
- "webrtc-mdns",
- "webrtc-media",
- "webrtc-sctp",
- "webrtc-srtp",
- "webrtc-util",
-]
-
-[[package]]
-name = "webrtc-data"
-version = "0.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0ef36a4d12baa6e842582fe9ec16a57184ba35e1a09308307b67d43ec8883100"
-dependencies = [
- "bytes",
- "derive_builder",
- "log",
- "thiserror",
- "tokio",
- "webrtc-sctp",
- "webrtc-util",
-]
-
-[[package]]
-name = "webrtc-dtls"
-version = "0.7.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4a00f4242f2db33307347bd5be53263c52a0331c96c14292118c9a6bb48d267"
-dependencies = [
- "aes 0.6.0",
- "aes-gcm 0.10.3",
- "async-trait",
- "bincode",
- "block-modes",
- "byteorder",
- "ccm",
- "curve25519-dalek 3.2.0",
- "der-parser 8.2.0",
- "elliptic-curve 0.12.3",
- "hkdf",
- "hmac 0.12.1",
- "log",
- "p256",
- "p384",
- "rand 0.8.5",
- "rand_core 0.6.4",
- "rcgen 0.10.0",
- "ring 0.16.20",
- "rustls 0.19.1",
- "sec1 0.3.0",
- "serde",
- "sha1",
- "sha2 0.10.8",
- "signature 1.6.4",
- "subtle",
- "thiserror",
- "tokio",
- "webpki 0.21.4",
- "webrtc-util",
- "x25519-dalek 2.0.0",
- "x509-parser 0.13.2",
-]
-
-[[package]]
-name = "webrtc-ice"
-version = "0.9.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "465a03cc11e9a7d7b4f9f99870558fe37a102b65b93f8045392fef7c67b39e80"
-dependencies = [
- "arc-swap",
- "async-trait",
- "crc",
- "log",
- "rand 0.8.5",
- "serde",
- "serde_json",
- "stun",
- "thiserror",
- "tokio",
- "turn",
- "url",
- "uuid",
- "waitgroup",
- "webrtc-mdns",
- "webrtc-util",
-]
-
-[[package]]
-name = "webrtc-mdns"
-version = "0.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f08dfd7a6e3987e255c4dbe710dde5d94d0f0574f8a21afa95d171376c143106"
-dependencies = [
- "log",
- "socket2 0.4.10",
- "thiserror",
- "tokio",
- "webrtc-util",
-]
-
-[[package]]
-name = "webrtc-media"
-version = "0.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f72e1650a8ae006017d1a5280efb49e2610c19ccc3c0905b03b648aee9554991"
-dependencies = [
- "byteorder",
- "bytes",
- "rand 0.8.5",
- "rtp",
- "thiserror",
-]
-
-[[package]]
-name = "webrtc-sctp"
-version = "0.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0d47adcd9427eb3ede33d5a7f3424038f63c965491beafcc20bc650a2f6679c0"
-dependencies = [
- "arc-swap",
- "async-trait",
- "bytes",
- "crc",
- "log",
- "rand 0.8.5",
- "thiserror",
- "tokio",
- "webrtc-util",
-]
-
-[[package]]
-name = "webrtc-srtp"
-version = "0.9.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6183edc4c1c6c0175f8812eefdce84dfa0aea9c3ece71c2bf6ddd3c964de3da5"
-dependencies = [
- "aead 0.4.3",
- "aes 0.7.5",
- "aes-gcm 0.9.4",
- "async-trait",
- "byteorder",
- "bytes",
- "ctr 0.8.0",
- "hmac 0.11.0",
- "log",
- "rtcp",
- "rtp",
- "sha-1",
- "subtle",
- "thiserror",
- "tokio",
- "webrtc-util",
-]
-
-[[package]]
-name = "webrtc-util"
-version = "0.7.0"
+version = "0.25.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "93f1db1727772c05cf7a2cfece52c3aca8045ca1e176cd517d323489aa3c6d87"
-dependencies = [
- "async-trait",
- "bitflags 1.3.2",
- "bytes",
- "cc",
- "ipnet",
- "lazy_static",
- "libc",
- "log",
- "nix 0.24.3",
- "rand 0.8.5",
- "thiserror",
- "tokio",
- "winapi 0.3.9",
-]
+checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10"
 
 [[package]]
 name = "weight-analyzer"
 version = "0.0.0"
 dependencies = [
- "convert_case",
+ "convert_case 0.6.0",
  "glob",
  "serde",
  "subweight-core",
@@ -12169,14 +12771,14 @@ dependencies = [
  "either",
  "home",
  "once_cell",
- "rustix 0.38.25",
+ "rustix 0.38.30",
 ]
 
 [[package]]
 name = "wide"
-version = "0.7.13"
+version = "0.7.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c68938b57b33da363195412cfc5fc37c9ed49aa9cfe2156fde64b8d2c9498242"
+checksum = "89beec544f246e679fc25490e3f8e08003bc4bf612068f325120dad4cea02c1c"
 dependencies = [
  "bytemuck",
  "safe_arch",
@@ -12237,7 +12839,7 @@ version = "0.51.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ca229916c5ee38c2f2bc1e9d8f04df975b4bd93f9955dc69fabb5d91270045c9"
 dependencies = [
- "windows-core",
+ "windows-core 0.51.1",
  "windows-targets 0.48.5",
 ]
 
@@ -12251,18 +12853,12 @@ dependencies = [
 ]
 
 [[package]]
-name = "windows-sys"
-version = "0.42.0"
+name = "windows-core"
+version = "0.52.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
+checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
 dependencies = [
- "windows_aarch64_gnullvm 0.42.2",
- "windows_aarch64_msvc 0.42.2",
- "windows_i686_gnu 0.42.2",
- "windows_i686_msvc 0.42.2",
- "windows_x86_64_gnu 0.42.2",
- "windows_x86_64_gnullvm 0.42.2",
- "windows_x86_64_msvc 0.42.2",
+ "windows-targets 0.52.0",
 ]
 
 [[package]]
@@ -12283,6 +12879,15 @@ dependencies = [
  "windows-targets 0.48.5",
 ]
 
+[[package]]
+name = "windows-sys"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
+dependencies = [
+ "windows-targets 0.52.0",
+]
+
 [[package]]
 name = "windows-targets"
 version = "0.42.2"
@@ -12313,6 +12918,21 @@ dependencies = [
  "windows_x86_64_msvc 0.48.5",
 ]
 
+[[package]]
+name = "windows-targets"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
+dependencies = [
+ "windows_aarch64_gnullvm 0.52.0",
+ "windows_aarch64_msvc 0.52.0",
+ "windows_i686_gnu 0.52.0",
+ "windows_i686_msvc 0.52.0",
+ "windows_x86_64_gnu 0.52.0",
+ "windows_x86_64_gnullvm 0.52.0",
+ "windows_x86_64_msvc 0.52.0",
+]
+
 [[package]]
 name = "windows_aarch64_gnullvm"
 version = "0.42.2"
@@ -12325,6 +12945,12 @@ version = "0.48.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
 
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
+
 [[package]]
 name = "windows_aarch64_msvc"
 version = "0.42.2"
@@ -12337,6 +12963,12 @@ version = "0.48.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
 
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
+
 [[package]]
 name = "windows_i686_gnu"
 version = "0.42.2"
@@ -12349,6 +12981,12 @@ version = "0.48.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
 
+[[package]]
+name = "windows_i686_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
+
 [[package]]
 name = "windows_i686_msvc"
 version = "0.42.2"
@@ -12361,6 +12999,12 @@ version = "0.48.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
 
+[[package]]
+name = "windows_i686_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
+
 [[package]]
 name = "windows_x86_64_gnu"
 version = "0.42.2"
@@ -12373,6 +13017,12 @@ version = "0.48.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
 
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
+
 [[package]]
 name = "windows_x86_64_gnullvm"
 version = "0.42.2"
@@ -12385,6 +13035,12 @@ version = "0.48.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
 
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
+
 [[package]]
 name = "windows_x86_64_msvc"
 version = "0.42.2"
@@ -12397,11 +13053,17 @@ version = "0.48.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
 
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.52.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
+
 [[package]]
 name = "winnow"
-version = "0.5.19"
+version = "0.5.35"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "829846f3e3db426d4cee4510841b71a8e58aa2a76b1132579487ae430ccd9c7b"
+checksum = "1931d78a9c73861da0134f453bb1f790ce49b2e30eba8410b4b79bac72b46a2d"
 dependencies = [
  "memchr",
 ]
@@ -12458,38 +13120,19 @@ dependencies = [
  "zeroize",
 ]
 
-[[package]]
-name = "x509-parser"
-version = "0.13.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9fb9bace5b5589ffead1afb76e43e34cff39cd0f3ce7e170ae0c29e53b88eb1c"
-dependencies = [
- "asn1-rs 0.3.1",
- "base64 0.13.1",
- "data-encoding",
- "der-parser 7.0.0",
- "lazy_static",
- "nom",
- "oid-registry 0.4.0",
- "ring 0.16.20",
- "rusticata-macros",
- "thiserror",
- "time",
-]
-
 [[package]]
 name = "x509-parser"
 version = "0.14.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e0ecbeb7b67ce215e40e3cc7f2ff902f94a223acf44995934763467e7b1febc8"
 dependencies = [
- "asn1-rs 0.5.2",
+ "asn1-rs",
  "base64 0.13.1",
  "data-encoding",
- "der-parser 8.2.0",
+ "der-parser",
  "lazy_static",
  "nom",
- "oid-registry 0.6.1",
+ "oid-registry",
  "rusticata-macros",
  "thiserror",
  "time",
@@ -12500,17 +13143,17 @@ name = "xtask"
 version = "0.1.0"
 dependencies = [
  "anyhow",
- "clap 4.4.11",
- "frame-metadata",
+ "clap 4.4.18",
+ "frame-metadata 16.0.0",
  "graphql_client",
  "hex",
- "memmap2",
+ "memmap2 0.5.10",
  "parity-scale-codec",
  "placeholder",
  "reqwest",
  "run_script",
  "scale-info",
- "scale-value 0.13.0",
+ "scale-value",
  "serde",
  "serde_json",
  "tera",
@@ -12526,7 +13169,7 @@ version = "0.10.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e5d9ba232399af1783a58d8eb26f6b5006fbefe2dc9ef36bd283324792d03ea5"
 dependencies = [
- "futures 0.3.29",
+ "futures 0.3.30",
  "log",
  "nohash-hasher",
  "parking_lot 0.12.1",
@@ -12534,12 +13177,6 @@ dependencies = [
  "static_assertions",
 ]
 
-[[package]]
-name = "yap"
-version = "0.10.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2a7eb6d82a11e4d0b8e6bda8347169aff4ccd8235d039bba7c47482d977dcf7"
-
 [[package]]
 name = "yap"
 version = "0.11.0"
@@ -12557,22 +13194,22 @@ dependencies = [
 
 [[package]]
 name = "zerocopy"
-version = "0.7.26"
+version = "0.7.32"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e97e415490559a91254a2979b4829267a57d2fcd741a98eee8b722fb57289aa0"
+checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be"
 dependencies = [
  "zerocopy-derive",
 ]
 
 [[package]]
 name = "zerocopy-derive"
-version = "0.7.26"
+version = "0.7.32"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd7e48ccf166952882ca8bd778a43502c64f33bf94c12ebe2a7f08e5a0f6689f"
+checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
@@ -12592,7 +13229,7 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.39",
+ "syn 2.0.48",
 ]
 
 [[package]]
diff --git a/Cargo.toml b/Cargo.toml
index 53abd0ce4..4951122c6 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -21,123 +21,133 @@ path = "node/src/main.rs"
 default = ["gdev", "distance-oracle"]
 gdev = ["gdev-runtime"] # gdev feature enables gdev runtime and gdev command line options
 g1 = ["g1-runtime"]
-constant-fees = ["common-runtime/constant-fees"] # Activate constant fees model, 1 extrinsic = 2 cG
+constant-fees = [
+"common-runtime/constant-fees",
+"g1-runtime/constant-fees",
+"gdev-runtime/constant-fees",
+"gtest-runtime/constant-fees",
+] # Activate constant fees model, 1 extrinsic = 2 cG
 gtest = ["gtest-runtime"]
 embed = [] # embed feature enables embedding raw chainspecs that must be in ./specs/gdev-raw.json
 runtime-benchmarks = [
-    #'g1-runtime',
-    #'g1-runtime/runtime-benchmarks',
-    'gdev-runtime',
+    'common-runtime/runtime-benchmarks',
+    'g1-runtime/runtime-benchmarks',
     'gdev-runtime/runtime-benchmarks',
-    #'gtest-runtime',
-    #'gtest-runtime/runtime-benchmarks',
+    'gtest-runtime/runtime-benchmarks',
     'sc-client-db/runtime-benchmarks',
 ]
 try-runtime = [
-    #"g1-runtime/try-runtime",
+    "common-runtime/try-runtime",
+    "g1-runtime/try-runtime",
     "gdev-runtime/try-runtime",
-    #"gtest-runtime/try-runtime",
+    "gtest-runtime/try-runtime",
     "try-runtime-cli",
 ]
+std = [
+    "common-runtime/std",
+    "g1-runtime/std",
+    "gdev-runtime/std",
+    "gtest-runtime/std",
+]
 
 [build-dependencies]
-clap = { version = "4.0" }
+clap = { version = "4.4.18" }
 #clap_complete = { version = "4.0" }
-substrate-build-script-utils = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42' }
+substrate-build-script-utils = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0' }
 
 [dev-dependencies]
 rusty-hook = "^0.11.2"
 
 # Dependencies for specific targets
 [target.'cfg(any(target_arch="x86_64", target_arch="aarch64"))'.dependencies]
-sc-cli = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sc-service = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sp-trie = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42" }
-
+sc-cli = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sc-service = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sp-trie = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0" }
 
 [dependencies]
+
+# crates.io dependencies
+async-io = { version = "2.3.0", default-features = false }
+bs58 = "0.5.0"
+clap = { version = "4.4.18", default-features = false, features = ["derive"] }
+clap_complete = { version = "4.4.8", default-features = false }
 # local dependencies
-common-runtime = { path = 'runtime/common' }
+common-runtime = { path = 'runtime/common', default-features = false }
 dc-distance = { path = 'client/distance' }
 distance-oracle = { path = 'distance-oracle', default-features = false, optional = true }
+enum-as-inner = { version = "=0.5.1", default-features = false } #https://github.com/bluejekyll/trust-dns/issues/1946
+
+# substrate dependencies
+frame-benchmarking = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+frame-benchmarking-cli = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+frame-system = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+futures = { version = "0.3.28", default-features = false, features = ["compat"] }
 g1-runtime = { path = 'runtime/g1', optional = true }
 gdev-runtime = { path = 'runtime/gdev', optional = true }
 gtest-runtime = { path = 'runtime/gtest', optional = true }
-pallet-certification = { path = 'pallets/certification' }
-pallet-oneshot-account = { path = 'pallets/oneshot-account' }
-sp-distance = { path = 'primitives/distance' }
-sp-membership = { path = 'primitives/membership' }
-
-# crates.io dependencies
-async-io = { version = "1.6.0", default-features = false }
-bs58 = "0.5.0"
-clap = { version = "4.0.9", default-features = false, features = ["derive"] }
-clap_complete = { version = "4", default-features = false }
-futures = { version = "0.3.28", default-features = false, features = ["compat"] }
 hex = { version = "0.4.3", default-features = false }
 jsonrpsee = { version = "0.16.2", default-features = false, features = ["server"] }
 lazy_static = { version = "1.4.0", default-features = false }
-log = { version = "0.4", default-features = false }
+log = { version = "0.4.20", default-features = false }
 maplit = { version = '1.0.2', default-features = false }
-memmap2 = { version = "0.5.10", default-features = false }
-serde = { version = "1.0", default-features = false }
+memmap2 = { version = "0.9.3", default-features = false }
+num-format = "0.4.4"
+pallet-certification = { path = 'pallets/certification' }
+pallet-grandpa = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+pallet-im-online = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+pallet-oneshot-account = { path = 'pallets/oneshot-account' }
+pallet-transaction-payment = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+pallet-transaction-payment-rpc = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+pallet-treasury = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sc-basic-authorship = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sc-chain-spec = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sc-cli = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sc-client-api = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sc-client-db = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sc-consensus = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sc-consensus-babe = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sc-consensus-babe-rpc = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sc-consensus-grandpa = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sc-consensus-manual-seal = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sc-executor = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sc-keystore = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sc-network = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sc-network-common = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sc-rpc-api = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sc-service = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sc-telemetry = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sc-transaction-pool = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sc-transaction-pool-api = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+serde = { version = "1.0.195", default-features = false }
 serde_json = { version = "1.0.64", default-features = false }
 serde_yaml = { version = "0.9.27", default-features = false }
+sp-api = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sp-authority-discovery = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sp-block-builder = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sp-blockchain = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sp-consensus = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sp-consensus-babe = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sp-consensus-grandpa = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-core = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sp-distance = { path = 'primitives/distance' }
+sp-inherents = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sp-io = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sp-keyring = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sp-keystore = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sp-membership = { path = 'primitives/membership' }
+sp-offchain = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sc-offchain = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sp-runtime = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sp-session = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sp-storage = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sp-timestamp = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sp-transaction-pool = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sp-transaction-storage-proof = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sp-trie = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+substrate-frame-rpc-system = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
 tracing-core = { version = "0.1.28", default-features = false }
-enum-as-inner = { version = "=0.5.1", default-features = false } #https://github.com/bluejekyll/trust-dns/issues/1946
-num-format = "0.4.4"
-
-# substrate dependencies
-frame-benchmarking = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-frame-benchmarking-cli = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-frame-system = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-pallet-grandpa = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-pallet-im-online = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-pallet-transaction-payment = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-pallet-transaction-payment-rpc = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-pallet-treasury = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sc-basic-authorship = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sc-chain-spec = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sc-cli = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sc-client-api = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sc-consensus = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sc-consensus-babe = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sc-consensus-babe-rpc = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sc-consensus-manual-seal = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sc-client-db = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sc-executor = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sc-keystore = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sc-network = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sc-network-common = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sc-rpc-api = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sc-service = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sc-telemetry = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sc-transaction-pool = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sc-transaction-pool-api = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sp-api = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sp-authority-discovery = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sp-transaction-storage-proof = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sp-block-builder = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sp-blockchain = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sp-consensus = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sp-consensus-babe = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sp-consensus-grandpa = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sc-consensus-grandpa = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-core = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sp-inherents = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sp-io = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sp-offchain = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sp-keyring = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sp-keystore = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sp-runtime = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sp-session = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sp-storage = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sp-timestamp = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sp-transaction-pool = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-sp-trie = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-substrate-frame-rpc-system = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-try-runtime-cli = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", optional = true, default-features = false }
+try-runtime-cli = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", optional = true, default-features = false }
 
 [workspace]
 resolver = "2"
@@ -147,8 +157,8 @@ members = [
     'distance-oracle',
     'end2end-tests',
     'live-tests',
+    'pallets/authority-members',
     'pallets/certification',
-    'pallets/quota',
     'pallets/distance',
     'pallets/duniter-test-parameters',
     'pallets/duniter-test-parameters/macro',
@@ -156,16 +166,16 @@ members = [
     'pallets/identity',
     'pallets/membership',
     'pallets/oneshot-account',
-    'pallets/authority-members',
+    'pallets/quota',
     'pallets/smith-members',
     'pallets/universal-dividend',
     'pallets/upgrade-origin',
-    'primitives/membership',
     'primitives/distance',
+    'primitives/membership',
+    'resources/weight_analyzer',
     'runtime/common',
     'runtime/gdev',
-    'xtask',
-    'resources/weight_analyzer'
+    'xtask'
 ]
 
 # The list of dependencies below (which can be both direct and indirect dependencies) are crates
@@ -233,7 +243,7 @@ panic = "unwind"
 # # the following patch can be useful to debug substrate dependency
 # # added by tuxmain on 0.9.32 update
 # # updated by hugo on 0.9.42 update (benjamin)
-# [patch.'https://github.com/duniter/substrate']
+# [patch.'https://github.com/duniter/duniter-polkadot-sdk']
 # pallet-balances = {path = '../substrate/frame/balances'}
 # fork-tree = { path = "../substrate/utils/fork-tree" }
 # frame-support = { path = "../substrate/frame/support" }
diff --git a/client/distance/Cargo.toml b/client/distance/Cargo.toml
index 6ece8d3fa..11a8f9d37 100644
--- a/client/distance/Cargo.toml
+++ b/client/distance/Cargo.toml
@@ -11,14 +11,14 @@ version = '1.0.0'
 
 [dependencies]
 
-pallet-distance = { path = "../../pallets/distance" }
-sp-distance = { path = "../../primitives/distance" }
-
 log = "0.4"
-thiserror = "1.0.30"
+
+pallet-distance = { path = "../../pallets/distance" }
 
 # substrate
 scale-info = { version = "2.1.1", features = ["derive"] }
+sp-distance = { path = "../../primitives/distance" }
+thiserror = "1.0.30"
 
 [dependencies.codec]
 features = ['derive']
@@ -26,26 +26,25 @@ package = 'parity-scale-codec'
 version = '3.1.5'
 
 [dependencies.frame-support]
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sc-client-api]
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-core]
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-keystore]
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
-[dependencies.sp-runtime]
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 ### DOC ###
 
 [package.metadata.docs.rs]
 targets = ['x86_64-unknown-linux-gnu']
+
+[dependencies.sp-runtime]
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
diff --git a/distance-oracle/Cargo.toml b/distance-oracle/Cargo.toml
index 4ca93a1a5..bc70ca786 100644
--- a/distance-oracle/Cargo.toml
+++ b/distance-oracle/Cargo.toml
@@ -7,23 +7,25 @@ license = "AGPL-3.0-only"
 edition = "2021"
 
 [dependencies]
-sp-distance = { path = "../primitives/distance" }
 
-codec = { package = "parity-scale-codec", version = "3.6.5" }
+# standalone only
+clap = { version = "4.4.18", features = ["derive"], optional = true }
+
+codec = { package = "parity-scale-codec", version = "3.6.9" }
 fnv = "1.0.7"
-log = "0.4.17"
-num-traits = "0.2.15"
-rayon = "1.7.0"
-simple_logger = "4.2.0"
-sp-core = { git = "https://github.com/duniter/substrate.git", branch = "duniter-substrate-v0.9.42" }
-sp-runtime = { git = "https://github.com/duniter/substrate.git", branch = "duniter-substrate-v0.9.42" }
-subxt = { git = 'https://github.com/duniter/subxt.git', branch = "duniter-substrate-v0.9.42" }
-time = "<=0.3.23"# required for MSRV
-time-macros = "=0.2.10"
+log = "0.4.20"
+num-traits = "0.2.17"
+rayon = "1.8.1"
+simple_logger = "4.3.3"
+hex = "0.4.3"
 
-# standalone only
-clap = { version = "4.0", features = ["derive"], optional = true }
-tokio = { version = "1.15.0", features = [
+sp-core = { git = "https://github.com/duniter/duniter-polkadot-sdk.git", branch = "duniter-substrate-v1.6.0" }
+sp-distance = { path = "../primitives/distance" }
+sp-runtime = { git = "https://github.com/duniter/duniter-polkadot-sdk.git", branch = "duniter-substrate-v1.6.0" }
+subxt = { git = 'https://github.com/duniter/subxt', branch = 'subxt-v0.34.0-duniter-substrate-v1.6.0', default-features = false, features = ["substrate-compat", "native", "jsonrpsee"] }
+time = "0.3.31"
+time-macros = "0.2.16"
+tokio = { version = "1.35.1", features = [
 	"rt-multi-thread",
 	"macros",
 ], optional = true }
@@ -31,7 +33,7 @@ tokio = { version = "1.15.0", features = [
 [dev-dependencies]
 bincode = "1.3.3"
 dubp-wot = "0.11.1"
-flate2 = { version = "1.0", features = [
+flate2 = { version = "1.0.28", features = [
 	"zlib-ng-compat",
 ], default-features = false }
 
diff --git a/distance-oracle/src/api.rs b/distance-oracle/src/api.rs
index 6af754679..48b6e1278 100644
--- a/distance-oracle/src/api.rs
+++ b/distance-oracle/src/api.rs
@@ -14,11 +14,12 @@
 // You should have received a copy of the GNU Affero General Public License
 // along with Duniter-v2S. If not, see <https://www.gnu.org/licenses/>.
 
+#![allow(clippy::type_complexity)]
+
 use crate::runtime;
 use log::debug;
 
 use sp_core::H256;
-use subxt::storage::StorageKey;
 
 pub type Client = subxt::OnlineClient<crate::RuntimeConfig>;
 pub type AccountId = subxt::utils::AccountId32;
@@ -31,7 +32,12 @@ pub async fn client(rpc_url: String) -> Client {
 }
 
 pub async fn parent_hash(client: &Client) -> H256 {
-    client.rpc().block_hash(None).await.unwrap().unwrap()
+    client
+        .blocks()
+        .at_latest()
+        .await
+        .expect("Cannot fetch latest block hash")
+        .hash()
 }
 
 pub async fn current_session(client: &Client, parent_hash: H256) -> u32 {
@@ -93,27 +99,24 @@ pub async fn member_iter(client: &Client, evaluation_block: H256) -> MemberIter
         client
             .storage()
             .at(evaluation_block)
-            .iter(runtime::storage().membership().membership(0), 100)
+            .iter(runtime::storage().membership().membership_iter())
             .await
             .expect("Cannot fetch memberships"),
     )
 }
 
 pub struct MemberIter(
-    subxt::storage::KeyIter<
-        crate::RuntimeConfig,
-        Client,
+    subxt::backend::StreamOfResults<(
+        Vec<u8>,
         runtime::runtime_types::sp_membership::MembershipData<u32>,
-    >,
+    )>,
 );
 
 impl MemberIter {
     pub async fn next(&mut self) -> Result<Option<IdtyIndex>, subxt::error::Error> {
-        Ok(self
-            .0
-            .next()
-            .await?
-            .map(|(storage_key, _membership_data)| idty_id_from_storage_key(&storage_key)))
+        self.0.next().await.transpose().map(|i| {
+            i.map(|(storage_key, _membership_data)| idty_id_from_storage_key(&storage_key))
+        })
     }
 }
 
@@ -122,26 +125,28 @@ pub async fn cert_iter(client: &Client, evaluation_block: H256) -> CertIter {
         client
             .storage()
             .at(evaluation_block)
-            .iter(runtime::storage().certification().certs_by_receiver(0), 100)
+            .iter(runtime::storage().certification().certs_by_receiver_iter())
             .await
             .expect("Cannot fetch certifications"),
     )
 }
 
-pub struct CertIter(subxt::storage::KeyIter<crate::RuntimeConfig, Client, Vec<(IdtyIndex, u32)>>);
+pub struct CertIter(subxt::backend::StreamOfResults<(Vec<u8>, Vec<(IdtyIndex, u32)>)>);
 
 impl CertIter {
     pub async fn next(
         &mut self,
     ) -> Result<Option<(IdtyIndex, Vec<(IdtyIndex, u32)>)>, subxt::error::Error> {
-        Ok(self
-            .0
-            .next()
-            .await?
-            .map(|(storage_key, issuers)| (idty_id_from_storage_key(&storage_key), issuers)))
+        self.0.next().await.transpose().map(|i| {
+            i.map(|(storage_key, issuers)| (idty_id_from_storage_key(&storage_key), issuers))
+        })
     }
 }
 
-fn idty_id_from_storage_key(storage_key: &StorageKey) -> IdtyIndex {
-    u32::from_le_bytes(storage_key.as_ref()[40..44].try_into().unwrap())
+fn idty_id_from_storage_key(storage_key: &[u8]) -> IdtyIndex {
+    u32::from_le_bytes(
+        storage_key[40..44]
+            .try_into()
+            .expect("Cannot convert StorageKey to IdtyIndex"),
+    )
 }
diff --git a/distance-oracle/src/lib.rs b/distance-oracle/src/lib.rs
index daff57e90..955759efd 100644
--- a/distance-oracle/src/lib.rs
+++ b/distance-oracle/src/lib.rs
@@ -40,16 +40,15 @@ pub mod runtime {}
 
 pub enum RuntimeConfig {}
 impl subxt::config::Config for RuntimeConfig {
-    type Index = u32;
-    // type BlockNumber = u32;
-    type Hash = sp_core::H256;
-    type Hasher = subxt::config::substrate::BlakeTwo256;
     type AccountId = AccountId;
     type Address = subxt::ext::sp_runtime::MultiAddress<Self::AccountId, u32>;
+    type AssetId = ();
+    type ExtrinsicParams = subxt::config::substrate::SubstrateExtrinsicParams<Self>;
+    type Hash = sp_core::H256;
+    type Hasher = subxt::config::substrate::BlakeTwo256;
     type Header =
         subxt::config::substrate::SubstrateHeader<u32, subxt::config::substrate::BlakeTwo256>;
     type Signature = subxt::ext::sp_runtime::MultiSignature;
-    type ExtrinsicParams = subxt::config::extrinsic_params::BaseExtrinsicParams<Self, Tip>;
 }
 
 #[derive(Copy, Clone, Debug, Default, Encode)]
@@ -172,7 +171,10 @@ pub async fn run(
 
     if handle_fs {
         // Stop if already evaluated
-        if evaluation_result_path.try_exists().unwrap() {
+        if evaluation_result_path
+            .try_exists()
+            .expect("Result path unavailable")
+        {
             info!("Nothing to do: File already exists");
             return None;
         }
@@ -192,7 +194,11 @@ pub async fn run(
     let mut members = FnvHashMap::<IdtyIndex, u32>::default();
 
     let mut members_iter = api::member_iter(client, evaluation_block).await;
-    while let Some(member_idty) = members_iter.next().await.unwrap() {
+    while let Some(member_idty) = members_iter
+        .next()
+        .await
+        .expect("Cannot fetch next members")
+    {
         members.insert(member_idty, 0);
     }
 
diff --git a/docs/api/runtime-calls.md b/docs/api/runtime-calls.md
index ef918bc7e..5b99ddfdf 100644
--- a/docs/api/runtime-calls.md
+++ b/docs/api/runtime-calls.md
@@ -3,14 +3,13 @@
 Calls are categorized according to the dispatch origin they require:
 
 1. **User calls**: the dispatch origin for this kind of call must be signed by
-the transactor. This is the only call category that can be submitted with an extrinsic.
+   the transactor. This is the only call category that can be submitted with an extrinsic.
 1. **Root calls**: This kind of call requires a special origin that can only be invoked
-through on-chain governance mechanisms.
+   through on-chain governance mechanisms.
 1. **Inherent calls**: This kind of call is invoked by the author of the block itself
-(usually automatically by the node).
+   (usually automatically by the node).
 1. **Disabled calls**: These calls can not be called directly, they are reserved for internal use by other runtime calls.
 
-
 ## User calls
 
 There are **78** user calls from **21** pallets.
@@ -24,11 +23,12 @@ There are **78** user calls from **21** pallets.
 Taking 0.0082 % of a block.
 
 ```rust
+
 ```
-</details>
 
+</details>
 
-unlink the identity associated with the account
+See [`Pallet::unlink_identity`].
 
 ### Scheduler - 2
 
@@ -39,15 +39,15 @@ unlink the identity associated with the account
 Taking 0.0098 % of a block.
 
 ```rust
-when: T::BlockNumber
-maybe_periodic: Option<schedule::Period<T::BlockNumber>>
+when: BlockNumberFor<T>
+maybe_periodic: Option<schedule::Period<BlockNumberFor<T>>>
 priority: schedule::Priority
 call: Box<<T as Config>::RuntimeCall>
 ```
-</details>
 
+</details>
 
-Anonymously schedule a task.
+See [`Pallet::schedule`].
 
 #### cancel - 1
 
@@ -56,13 +56,13 @@ Anonymously schedule a task.
 Taking 0.0131 % of a block.
 
 ```rust
-when: T::BlockNumber
+when: BlockNumberFor<T>
 index: u32
 ```
-</details>
 
+</details>
 
-Cancel an anonymously scheduled task.
+See [`Pallet::cancel`].
 
 #### schedule_named - 2
 
@@ -72,15 +72,15 @@ Taking 0.0131 % of a block.
 
 ```rust
 id: TaskName
-when: T::BlockNumber
-maybe_periodic: Option<schedule::Period<T::BlockNumber>>
+when: BlockNumberFor<T>
+maybe_periodic: Option<schedule::Period<BlockNumberFor<T>>>
 priority: schedule::Priority
 call: Box<<T as Config>::RuntimeCall>
 ```
-</details>
 
+</details>
 
-Schedule a named task.
+See [`Pallet::schedule_named`].
 
 #### cancel_named - 3
 
@@ -91,10 +91,10 @@ Taking 0.0137 % of a block.
 ```rust
 id: TaskName
 ```
-</details>
 
+</details>
 
-Cancel a named scheduled task.
+See [`Pallet::cancel_named`].
 
 #### schedule_after - 4
 
@@ -103,15 +103,15 @@ Cancel a named scheduled task.
 No weight available.
 
 ```rust
-after: T::BlockNumber
-maybe_periodic: Option<schedule::Period<T::BlockNumber>>
+after: BlockNumberFor<T>
+maybe_periodic: Option<schedule::Period<BlockNumberFor<T>>>
 priority: schedule::Priority
 call: Box<<T as Config>::RuntimeCall>
 ```
-</details>
 
+</details>
 
-Anonymously schedule a task after a delay.
+See [`Pallet::schedule_after`].
 
 #### schedule_named_after - 5
 
@@ -121,15 +121,15 @@ No weight available.
 
 ```rust
 id: TaskName
-after: T::BlockNumber
-maybe_periodic: Option<schedule::Period<T::BlockNumber>>
+after: BlockNumberFor<T>
+maybe_periodic: Option<schedule::Period<BlockNumberFor<T>>>
 priority: schedule::Priority
 call: Box<<T as Config>::RuntimeCall>
 ```
-</details>
 
+</details>
 
-Schedule a named task after a delay.
+See [`Pallet::schedule_named_after`].
 
 ### Babe - 3
 
@@ -140,16 +140,13 @@ Schedule a named task after a delay.
 No weight available.
 
 ```rust
-equivocation_proof: Box<EquivocationProof<T::Header>>
+equivocation_proof: Box<EquivocationProof<HeaderFor<T>>>
 key_owner_proof: T::KeyOwnerProof
 ```
-</details>
 
+</details>
 
-Report authority equivocation/misbehavior. This method will verify
-the equivocation proof and validate the given key ownership proof
-against the extracted offender. If both are valid, the offence will
-be reported.
+See [`Pallet::report_equivocation`].
 
 ### Balances - 6
 
@@ -163,37 +160,10 @@ Taking 0.0152 % of a block.
 dest: AccountIdLookupOf<T>
 value: T::Balance
 ```
-</details>
-
-
-Transfer some liquid free balance to another account.
-
-`transfer_allow_death` will set the `FreeBalance` of the sender and receiver.
-If the sender's account is below the existential deposit as a result
-of the transfer, the account will be reaped.
-
-The dispatch origin for this call must be `Signed` by the transactor.
-
-#### set_balance_deprecated - 1
-
-<details><summary><code>set_balance_deprecated(who, new_free, old_reserved)</code></summary>
-
-No weight available.
 
-```rust
-who: AccountIdLookupOf<T>
-new_free: T::Balance
-old_reserved: T::Balance
-```
 </details>
 
-
-Set the regular balance of a given account; it also takes a reserved balance but this
-must be the same as the account's current reserved balance.
-
-The dispatch origin for this call is `root`.
-
-WARNING: This call is DEPRECATED! Use `force_set_balance` instead.
+See [`Pallet::transfer_allow_death`].
 
 #### transfer_keep_alive - 3
 
@@ -205,15 +175,10 @@ Taking 0.0168 % of a block.
 dest: AccountIdLookupOf<T>
 value: T::Balance
 ```
-</details>
-
 
-Same as the [`transfer_allow_death`] call, but with a check that the transfer will not
-kill the origin account.
-
-99% of the time you want [`transfer_allow_death`] instead.
+</details>
 
-[`transfer_allow_death`]: struct.Pallet.html#method.transfer
+See [`Pallet::transfer_keep_alive`].
 
 #### transfer_all - 4
 
@@ -225,41 +190,10 @@ Taking 0.0142 % of a block.
 dest: AccountIdLookupOf<T>
 keep_alive: bool
 ```
-</details>
-
-
-Transfer the entire transferable balance from the caller account.
 
-NOTE: This function only attempts to transfer _transferable_ balances. This means that
-any locked, reserved, or existential deposits (when `keep_alive` is `true`), will not be
-transferred by this function. To ensure that this function results in a killed account,
-you might need to prepare the account by removing any reference counters, storage
-deposits, etc...
-
-The dispatch origin of this call must be Signed.
-
-- `dest`: The recipient of the transfer.
-- `keep_alive`: A boolean to determine if the `transfer_all` operation should send all
-  of the funds the account has, causing the sender account to be killed (false), or
-  transfer everything except at least the existential deposit, which will guarantee to
-  keep the sender account alive (true).
-
-#### transfer - 7
-
-<details><summary><code>transfer(dest, value)</code></summary>
-
-No weight available.
-
-```rust
-dest: AccountIdLookupOf<T>
-value: T::Balance
-```
 </details>
 
-
-Alias for `transfer_allow_death`, provided only for name-wise compatibility.
-
-WARNING: DEPRECATED! Will be released in approximately 3 months.
+See [`Pallet::transfer_all`].
 
 #### force_set_balance - 8
 
@@ -271,14 +205,12 @@ No weight available.
 who: AccountIdLookupOf<T>
 new_free: T::Balance
 ```
-</details>
-
 
-Set the regular balance of a given account.
+</details>
 
-The dispatch origin for this call is `root`.
+See [`Pallet::force_set_balance`].
 
-### OneshotAccount - 7
+### OneshotAccount - 8
 
 #### create_oneshot_account - 0
 
@@ -290,15 +222,10 @@ Taking 0.0095 % of a block.
 dest: <T::Lookup as StaticLookup>::Source
 value: <T::Currency as Currency<T::AccountId>>::Balance
 ```
-</details>
 
+</details>
 
-Create an account that can only be consumed once
-
-- `dest`: The oneshot account to be created.
-- `balance`: The balance to be transfered to this oneshot account.
-
-Origin account is kept alive.
+See [`Pallet::create_oneshot_account`].
 
 #### consume_oneshot_account - 1
 
@@ -307,17 +234,13 @@ Origin account is kept alive.
 Taking 0.0134 % of a block.
 
 ```rust
-block_height: T::BlockNumber
+block_height: BlockNumberFor<T>
 dest: Account<<T::Lookup as StaticLookup>::Source>
 ```
-</details>
-
 
-Consume a oneshot account and transfer its balance to an account
+</details>
 
-- `block_height`: Must be a recent block number. The limit is `BlockHashCount` in the past. (this is to prevent replay attacks)
-- `dest`: The destination account.
-- `dest_is_oneshot`: If set to `true`, then a oneshot account is created at `dest`. Else, `dest` has to be an existing account.
+See [`Pallet::consume_oneshot_account`].
 
 #### consume_oneshot_account_with_remaining - 2
 
@@ -326,24 +249,15 @@ Consume a oneshot account and transfer its balance to an account
 Taking 0.0175 % of a block.
 
 ```rust
-block_height: T::BlockNumber
+block_height: BlockNumberFor<T>
 dest: Account<<T::Lookup as StaticLookup>::Source>
 remaining_to: Account<<T::Lookup as StaticLookup>::Source>
 balance: <T::Currency as Currency<T::AccountId>>::Balance
 ```
-</details>
 
+</details>
 
-Consume a oneshot account then transfer some amount to an account,
-and the remaining amount to another account.
-
-- `block_height`: Must be a recent block number.
-  The limit is `BlockHashCount` in the past. (this is to prevent replay attacks)
-- `dest`: The destination account.
-- `dest_is_oneshot`: If set to `true`, then a oneshot account is created at `dest`. Else, `dest` has to be an existing account.
-- `dest2`: The second destination account.
-- `dest2_is_oneshot`: If set to `true`, then a oneshot account is created at `dest2`. Else, `dest2` has to be an existing account.
-- `balance1`: The amount transfered to `dest`, the leftover being transfered to `dest2`.
+See [`Pallet::consume_oneshot_account_with_remaining`].
 
 ### SmithMembers - 10
 
@@ -356,8 +270,8 @@ Taking 0.0153 % of a block.
 ```rust
 receiver: T::IdtyIndex
 ```
-</details>
 
+</details>
 
 Invite a WoT member to try becoming a Smith
 
@@ -368,9 +282,10 @@ Invite a WoT member to try becoming a Smith
 Taking 0.0094 % of a block.
 
 ```rust
+
 ```
-</details>
 
+</details>
 
 Accept an invitation (must have been invited first)
 
@@ -383,8 +298,8 @@ Taking 0.0139 % of a block.
 ```rust
 receiver: T::IdtyIndex
 ```
-</details>
 
+</details>
 
 Certify an invited smith which can lead the certified to become a Smith
 
@@ -397,11 +312,12 @@ Certify an invited smith which can lead the certified to become a Smith
 Taking 0.0117 % of a block.
 
 ```rust
+
 ```
-</details>
 
+</details>
 
-ask to leave the set of validators two sessions after
+See [`Pallet::go_offline`].
 
 #### go_online - 1
 
@@ -410,11 +326,12 @@ ask to leave the set of validators two sessions after
 Taking 0.0138 % of a block.
 
 ```rust
+
 ```
-</details>
 
+</details>
 
-ask to join the set of validators two sessions after
+See [`Pallet::go_online`].
 
 #### set_session_keys - 2
 
@@ -425,10 +342,10 @@ Taking 0.0177 % of a block.
 ```rust
 keys: T::Keys
 ```
-</details>
 
+</details>
 
-declare new session keys to replace current ones
+See [`Pallet::set_session_keys`].
 
 #### remove_member_from_blacklist - 4
 
@@ -439,10 +356,10 @@ Taking 0.0094 % of a block.
 ```rust
 member_id: T::MemberId
 ```
-</details>
 
+</details>
 
-remove an identity from the blacklist
+See [`Pallet::remove_member_from_blacklist`].
 
 ### Grandpa - 16
 
@@ -453,18 +370,15 @@ remove an identity from the blacklist
 No weight available.
 
 ```rust
-equivocation_proof: Box<EquivocationProof<T::Hash, T::BlockNumber>>
+equivocation_proof: Box<EquivocationProof<T::Hash, BlockNumberFor<T>>>
 key_owner_proof: T::KeyOwnerProof
 ```
-</details>
 
+</details>
 
-Report voter equivocation/misbehavior. This method will verify the
-equivocation proof and validate the given key ownership proof
-against the extracted offender. If both are valid, the offence
-will be reported.
+See [`Pallet::report_equivocation`].
 
-### UpgradeOrigin - 21
+### UpgradeOrigin - 20
 
 #### dispatch_as_root_unchecked_weight - 1
 
@@ -476,16 +390,12 @@ No weight available.
 call: Box<<T as Config>::Call>
 weight: Weight
 ```
-</details>
-
 
-Dispatches a function call from root origin.
-This function does not check the weight of the call, and instead allows the
-caller to specify the weight of the call.
+</details>
 
-The weight of this call is defined by the caller.
+See [`Pallet::dispatch_as_root_unchecked_weight`].
 
-### Preimage - 22
+### Preimage - 21
 
 #### note_preimage - 0
 
@@ -496,13 +406,10 @@ Taking 0.5042 % of a block.
 ```rust
 bytes: Vec<u8>
 ```
-</details>
-
 
-Register a preimage on-chain.
+</details>
 
-If the preimage was previously requested, no fees or deposits are taken for providing
-the preimage. Otherwise, a deposit is taken proportional to the size of the preimage.
+See [`Pallet::note_preimage`].
 
 #### unnote_preimage - 1
 
@@ -513,15 +420,10 @@ Taking 0.0135 % of a block.
 ```rust
 hash: T::Hash
 ```
-</details>
-
 
-Clear an unrequested preimage from the runtime storage.
-
-If `len` is provided, then it will be a much cheaper operation.
+</details>
 
-- `hash`: The hash of the preimage to be removed from the store.
-- `len`: The length of the preimage of `hash`.
+See [`Pallet::unnote_preimage`].
 
 #### request_preimage - 2
 
@@ -532,13 +434,10 @@ Taking 0.0092 % of a block.
 ```rust
 hash: T::Hash
 ```
-</details>
-
 
-Request a preimage be uploaded to the chain without paying any fees or deposits.
+</details>
 
-If the preimage requests has already been provided on-chain, we unreserve any deposit
-a user may have paid, and take the control of the preimage out of their hands.
+See [`Pallet::request_preimage`].
 
 #### unrequest_preimage - 3
 
@@ -549,14 +448,26 @@ Taking 0.0119 % of a block.
 ```rust
 hash: T::Hash
 ```
+
 </details>
 
+See [`Pallet::unrequest_preimage`].
+
+#### ensure_updated - 4
 
-Clear a previously made request for a preimage.
+<details><summary><code>ensure_updated(hashes)</code></summary>
+
+Taking 21.0381 % of a block.
+
+```rust
+hashes: Vec<T::Hash>
+```
+
+</details>
 
-NOTE: THIS MUST NOT BE CALLED ON `hash` MORE TIMES THAN `request_preimage`.
+See [`Pallet::ensure_updated`].
 
-### TechnicalCommittee - 23
+### TechnicalCommittee - 22
 
 #### execute - 1
 
@@ -568,18 +479,10 @@ Taking 0.0061 % of a block.
 proposal: Box<<T as Config<I>>::Proposal>
 length_bound: u32
 ```
-</details>
-
 
-Dispatch a proposal from a member using the `Member` origin.
-
-Origin must be a member of the collective.
+</details>
 
-**Complexity**:
-- `O(B + M + P)` where:
-- `B` is `proposal` size in bytes (length-fee-bounded)
-- `M` members-count (code-bounded)
-- `P` complexity of dispatching `proposal`
+See [`Pallet::execute`].
 
 #### propose - 2
 
@@ -592,23 +495,10 @@ threshold: MemberCount
 proposal: Box<<T as Config<I>>::Proposal>
 length_bound: u32
 ```
-</details>
-
-
-Add a new proposal to either be voted on or executed directly.
 
-Requires the sender to be member.
-
-`threshold` determines whether `proposal` is executed directly (`threshold < 2`)
-or put up for voting.
+</details>
 
-**Complexity**
-- `O(B + M + P1)` or `O(B + M + P2)` where:
-  - `B` is `proposal` size in bytes (length-fee-bounded)
-  - `M` is members-count (code- and governance-bounded)
-  - branching is influenced by `threshold` where:
-    - `P1` is proposal execution complexity (`threshold < 2`)
-    - `P2` is proposals-count (code-bounded) (`threshold >= 2`)
+See [`Pallet::propose`].
 
 #### vote - 3
 
@@ -621,18 +511,10 @@ proposal: T::Hash
 index: ProposalIndex
 approve: bool
 ```
-</details>
-
 
-Add an aye or nay vote for the sender to the given proposal.
-
-Requires the sender to be a member.
+</details>
 
-Transaction fees will be waived if the member is voting on any particular proposal
-for the first time and the call is successful. Subsequent vote changes will charge a
-fee.
-**Complexity**
-- `O(M)` where `M` is members-count (code- and governance-bounded)
+See [`Pallet::vote`].
 
 #### close - 6
 
@@ -646,35 +528,12 @@ index: ProposalIndex
 proposal_weight_bound: Weight
 length_bound: u32
 ```
-</details>
 
+</details>
 
-Close a vote that is either approved, disapproved or whose voting period has ended.
-
-May be called by any signed account in order to finish voting and close the proposal.
-
-If called before the end of the voting period it will only close the vote if it is
-has enough votes to be approved or disapproved.
-
-If called after the end of the voting period abstentions are counted as rejections
-unless there is a prime member set and the prime member cast an approval.
-
-If the close operation completes successfully with disapproval, the transaction fee will
-be waived. Otherwise execution of the approved operation will be charged to the caller.
-
-+ `proposal_weight_bound`: The maximum amount of weight consumed by executing the closed
-proposal.
-+ `length_bound`: The upper bound for the length of the proposal in storage. Checked via
-`storage::read` so it is `size_of::<u32>() == 4` larger than the pure length.
-
-**Complexity**
-- `O(B + M + P1 + P2)` where:
-  - `B` is `proposal` size in bytes (length-fee-bounded)
-  - `M` is members-count (code- and governance-bounded)
-  - `P1` is the complexity of `proposal` preimage.
-  - `P2` is proposal-count (code-bounded)
+See [`Pallet::close`].
 
-### UniversalDividend - 30
+### UniversalDividend - 23
 
 #### claim_uds - 0
 
@@ -683,11 +542,12 @@ proposal.
 Taking 0.0146 % of a block.
 
 ```rust
+
 ```
-</details>
 
+</details>
 
-Claim Universal Dividends
+See [`Pallet::claim_uds`].
 
 #### transfer_ud - 1
 
@@ -699,10 +559,10 @@ Taking 0.0158 % of a block.
 dest: <T::Lookup as StaticLookup>::Source
 value: BalanceOf<T>
 ```
-</details>
 
+</details>
 
-Transfer some liquid free balance to another account, in milliUD.
+See [`Pallet::transfer_ud`].
 
 #### transfer_ud_keep_alive - 2
 
@@ -714,12 +574,12 @@ Taking 0.0144 % of a block.
 dest: <T::Lookup as StaticLookup>::Source
 value: BalanceOf<T>
 ```
-</details>
 
+</details>
 
-Transfer some liquid free balance to another account, in milliUD.
+See [`Pallet::transfer_ud_keep_alive`].
 
-### Identity - 41
+### Identity - 25
 
 #### create_identity - 0
 
@@ -730,14 +590,10 @@ Taking 0.0484 % of a block.
 ```rust
 owner_key: T::AccountId
 ```
-</details>
-
-
-Create an identity for an existing account
 
-- `owner_key`: the public key corresponding to the identity to be created
+</details>
 
-The origin must be allowed to create an identity.
+See [`Pallet::create_identity`].
 
 #### confirm_identity - 1
 
@@ -748,14 +604,10 @@ Taking 0.0204 % of a block.
 ```rust
 idty_name: IdtyName
 ```
-</details>
-
 
-Confirm the creation of an identity and give it a name
-
-- `idty_name`: the name uniquely associated to this identity. Must match the validation rules defined by the runtime.
+</details>
 
-The identity must have been created using `create_identity` before it can be confirmed.
+See [`Pallet::confirm_identity`].
 
 #### change_owner_key - 3
 
@@ -767,16 +619,10 @@ Taking 0.0306 % of a block.
 new_key: T::AccountId
 new_key_sig: T::Signature
 ```
-</details>
-
 
-Change identity owner key.
-
-- `new_key`: the new owner key.
-- `new_key_sig`: the signature of the encoded form of `IdtyIndexAccountIdPayload`.
-                 Must be signed by `new_key`.
+</details>
 
-The origin should be the old identity owner key.
+See [`Pallet::change_owner_key`].
 
 #### revoke_identity - 4
 
@@ -789,17 +635,10 @@ idty_index: T::IdtyIndex
 revocation_key: T::AccountId
 revocation_sig: T::Signature
 ```
-</details>
 
+</details>
 
-Revoke an identity using a revocation signature
-
-- `idty_index`: the index of the identity to be revoked.
-- `revocation_key`: the key used to sign the revocation payload.
-- `revocation_sig`: the signature of the encoded form of `RevocationPayload`.
-                    Must be signed by `revocation_key`.
-
-Any signed origin can execute this call.
+See [`Pallet::revoke_identity`].
 
 #### fix_sufficients - 7
 
@@ -811,10 +650,10 @@ Taking 0.0081 % of a block.
 owner_key: T::AccountId
 inc: bool
 ```
-</details>
 
+</details>
 
-change sufficient ref count for given key
+See [`Pallet::fix_sufficients`].
 
 #### link_account - 8
 
@@ -826,12 +665,12 @@ Taking 0.0135 % of a block.
 account_id: T::AccountId
 payload_sig: T::Signature
 ```
-</details>
 
+</details>
 
-Link an account to an identity
+See [`Pallet::link_account`].
 
-### Certification - 43
+### Certification - 27
 
 #### add_cert - 0
 
@@ -842,8 +681,8 @@ Taking 0.0214 % of a block.
 ```rust
 receiver: T::IdtyIndex
 ```
-</details>
 
+</details>
 
 Add a new certification.
 
@@ -856,8 +695,8 @@ Taking 0.018 % of a block.
 ```rust
 receiver: T::IdtyIndex
 ```
-</details>
 
+</details>
 
 Renew an existing certification.
 
@@ -871,10 +710,10 @@ Taking 0.0155 % of a block.
 issuer: T::IdtyIndex
 receiver: T::IdtyIndex
 ```
-</details>
 
+</details>
 
-remove a certification (only root)
+See [`Pallet::del_cert`].
 
 #### remove_all_certs_received_by - 2
 
@@ -885,12 +724,12 @@ Taking 3.7485 % of a block.
 ```rust
 idty_index: T::IdtyIndex
 ```
-</details>
 
+</details>
 
-remove all certifications received by an identity (only root)
+See [`Pallet::remove_all_certs_received_by`].
 
-### Distance - 44
+### Distance - 28
 
 #### request_distance_evaluation - 0
 
@@ -899,13 +738,12 @@ remove all certifications received by an identity (only root)
 Taking 0.0194 % of a block.
 
 ```rust
+
 ```
-</details>
 
+</details>
 
-Request caller identity to be evaluated
-positive evaluation will result in claim/renew membership
-negative evaluation will result in slash for caller
+See [`Pallet::request_distance_evaluation`].
 
 #### request_distance_evaluation_for - 4
 
@@ -916,11 +754,10 @@ Taking 0.0199 % of a block.
 ```rust
 target: T::IdtyIndex
 ```
-</details>
 
+</details>
 
-Request target identity to be evaluated
-only possible for unvalidated identity
+See [`Pallet::request_distance_evaluation_for`].
 
 #### update_evaluation - 1
 
@@ -931,11 +768,10 @@ Taking 0.0214 % of a block.
 ```rust
 computation_result: ComputationResult
 ```
-</details>
 
+</details>
 
-(Inherent) Push an evaluation result to the pool
-this is called internally by validators (= inherent)
+See [`Pallet::update_evaluation`].
 
 #### force_update_evaluation - 2
 
@@ -947,10 +783,10 @@ Taking 0.014 % of a block.
 evaluator: <T as frame_system::Config>::AccountId
 computation_result: ComputationResult
 ```
-</details>
 
+</details>
 
-Force push an evaluation result to the pool
+See [`Pallet::force_update_evaluation`].
 
 #### force_valid_distance_status - 3
 
@@ -961,12 +797,12 @@ Taking 0.0173 % of a block.
 ```rust
 identity: <T as pallet_identity::Config>::IdtyIndex
 ```
-</details>
 
+</details>
 
-Force set the distance evaluation status of an identity
+See [`Pallet::force_valid_distance_status`].
 
-### AtomicSwap - 50
+### AtomicSwap - 29
 
 #### create_swap - 0
 
@@ -978,23 +814,12 @@ No weight available.
 target: T::AccountId
 hashed_proof: HashedProof
 action: T::SwapAction
-duration: T::BlockNumber
+duration: BlockNumberFor<T>
 ```
-</details>
 
+</details>
 
-Register a new atomic swap, declaring an intention to send funds from origin to target
-on the current blockchain. The target can claim the fund using the revealed proof. If
-the fund is not claimed after `duration` blocks, then the sender can cancel the swap.
-
-The dispatch origin for this call must be _Signed_.
-
-- `target`: Receiver of the atomic swap.
-- `hashed_proof`: The blake2_256 hash of the secret proof.
-- `balance`: Funds to be sent from origin.
-- `duration`: Locked duration of the atomic swap. For safety reasons, it is recommended
-  that the revealer uses a shorter duration than the counterparty, to prevent the
-  situation where the revealer reveals the proof too late around the end block.
+See [`Pallet::create_swap`].
 
 #### claim_swap - 1
 
@@ -1006,16 +831,10 @@ No weight available.
 proof: Vec<u8>
 action: T::SwapAction
 ```
-</details>
 
+</details>
 
-Claim an atomic swap.
-
-The dispatch origin for this call must be _Signed_.
-
-- `proof`: Revealed proof of the claim.
-- `action`: Action defined in the swap, it must match the entry in blockchain. Otherwise
-  the operation fails. This is used for weight calculation.
+See [`Pallet::claim_swap`].
 
 #### cancel_swap - 2
 
@@ -1027,17 +846,12 @@ No weight available.
 target: T::AccountId
 hashed_proof: HashedProof
 ```
-</details>
-
-
-Cancel an atomic swap. Only possible after the originally set duration has passed.
 
-The dispatch origin for this call must be _Signed_.
+</details>
 
-- `target`: Target of the original atomic swap.
-- `hashed_proof`: Hashed proof of the original atomic swap.
+See [`Pallet::cancel_swap`].
 
-### Multisig - 51
+### Multisig - 30
 
 #### as_multi_threshold_1 - 0
 
@@ -1049,21 +863,10 @@ Taking 0.0054 % of a block.
 other_signatories: Vec<T::AccountId>
 call: Box<<T as Config>::RuntimeCall>
 ```
-</details>
-
 
-Immediately dispatch a multi-signature call using a single approval from the caller.
-
-The dispatch origin for this call must be _Signed_.
-
-- `other_signatories`: The accounts (other than the sender) who are part of the
-multi-signature, but do not participate in the approval process.
-- `call`: The call to be executed.
-
-Result is equivalent to the dispatched result.
+</details>
 
-**Complexity**
-O(Z + C) where Z is the length of the call and C its execution weight.
+See [`Pallet::as_multi_threshold_1`].
 
 #### as_multi - 1
 
@@ -1074,52 +877,14 @@ No weight available.
 ```rust
 threshold: u16
 other_signatories: Vec<T::AccountId>
-maybe_timepoint: Option<Timepoint<T::BlockNumber>>
+maybe_timepoint: Option<Timepoint<BlockNumberFor<T>>>
 call: Box<<T as Config>::RuntimeCall>
 max_weight: Weight
 ```
-</details>
-
-
-Register approval for a dispatch to be made from a deterministic composite account if
-approved by a total of `threshold - 1` of `other_signatories`.
 
-If there are enough, then dispatch the call.
-
-Payment: `DepositBase` will be reserved if this is the first approval, plus
-`threshold` times `DepositFactor`. It is returned once this dispatch happens or
-is cancelled.
-
-The dispatch origin for this call must be _Signed_.
-
-- `threshold`: The total number of approvals for this dispatch before it is executed.
-- `other_signatories`: The accounts (other than the sender) who can approve this
-dispatch. May not be empty.
-- `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is
-not the first approval, then it must be `Some`, with the timepoint (block number and
-transaction index) of the first approval transaction.
-- `call`: The call to be executed.
-
-NOTE: Unless this is the final approval, you will generally want to use
-`approve_as_multi` instead, since it only requires a hash of the call.
-
-Result is equivalent to the dispatched result if `threshold` is exactly `1`. Otherwise
-on success, result is `Ok` and the result from the interior call, if it was executed,
-may be found in the deposited `MultisigExecuted` event.
+</details>
 
-**Complexity**
-- `O(S + Z + Call)`.
-- Up to one balance-reserve or unreserve operation.
-- One passthrough operation, one insert, both `O(S)` where `S` is the number of
-  signatories. `S` is capped by `MaxSignatories`, with weight being proportional.
-- One call encode & hash, both of complexity `O(Z)` where `Z` is tx-len.
-- One encode & hash, both of complexity `O(S)`.
-- Up to one binary search and insert (`O(logS + S)`).
-- I/O: 1 read `O(S)`, up to 1 mutate `O(S)`. Up to one remove.
-- One event.
-- The weight of the `call`.
-- Storage: inserts one item, value size bounded by `MaxSignatories`, with a deposit
-  taken for its lifetime of `DepositBase + threshold * DepositFactor`.
+See [`Pallet::as_multi`].
 
 #### approve_as_multi - 2
 
@@ -1130,43 +895,14 @@ No weight available.
 ```rust
 threshold: u16
 other_signatories: Vec<T::AccountId>
-maybe_timepoint: Option<Timepoint<T::BlockNumber>>
+maybe_timepoint: Option<Timepoint<BlockNumberFor<T>>>
 call_hash: [u8; 32]
 max_weight: Weight
 ```
-</details>
-
-
-Register approval for a dispatch to be made from a deterministic composite account if
-approved by a total of `threshold - 1` of `other_signatories`.
-
-Payment: `DepositBase` will be reserved if this is the first approval, plus
-`threshold` times `DepositFactor`. It is returned once this dispatch happens or
-is cancelled.
 
-The dispatch origin for this call must be _Signed_.
-
-- `threshold`: The total number of approvals for this dispatch before it is executed.
-- `other_signatories`: The accounts (other than the sender) who can approve this
-dispatch. May not be empty.
-- `maybe_timepoint`: If this is the first approval, then this must be `None`. If it is
-not the first approval, then it must be `Some`, with the timepoint (block number and
-transaction index) of the first approval transaction.
-- `call_hash`: The hash of the call to be executed.
-
-NOTE: If this is the final approval, you will want to use `as_multi` instead.
+</details>
 
-**Complexity**
-- `O(S)`.
-- Up to one balance-reserve or unreserve operation.
-- One passthrough operation, one insert, both `O(S)` where `S` is the number of
-  signatories. `S` is capped by `MaxSignatories`, with weight being proportional.
-- One encode & hash, both of complexity `O(S)`.
-- Up to one binary search and insert (`O(logS + S)`).
-- I/O: 1 read `O(S)`, up to 1 mutate `O(S)`. Up to one remove.
-- One event.
-- Storage: inserts one item, value size bounded by `MaxSignatories`, with a deposit
-  taken for its lifetime of `DepositBase + threshold * DepositFactor`.
+See [`Pallet::approve_as_multi`].
 
 #### cancel_as_multi - 3
 
@@ -1177,35 +913,15 @@ Taking 0.0103 % of a block.
 ```rust
 threshold: u16
 other_signatories: Vec<T::AccountId>
-timepoint: Timepoint<T::BlockNumber>
+timepoint: Timepoint<BlockNumberFor<T>>
 call_hash: [u8; 32]
 ```
-</details>
-
-
-Cancel a pre-existing, on-going multisig transaction. Any deposit reserved previously
-for this operation will be unreserved on success.
 
-The dispatch origin for this call must be _Signed_.
-
-- `threshold`: The total number of approvals for this dispatch before it is executed.
-- `other_signatories`: The accounts (other than the sender) who can approve this
-dispatch. May not be empty.
-- `timepoint`: The timepoint (block number and transaction index) of the first approval
-transaction for this dispatch.
-- `call_hash`: The hash of the call to be executed.
+</details>
 
-**Complexity**
-- `O(S)`.
-- Up to one balance-reserve or unreserve operation.
-- One passthrough operation, one insert, both `O(S)` where `S` is the number of
-  signatories. `S` is capped by `MaxSignatories`, with weight being proportional.
-- One encode & hash, both of complexity `O(S)`.
-- One event.
-- I/O: 1 read `O(S)`, one remove.
-- Storage: removes one item.
+See [`Pallet::cancel_as_multi`].
 
-### ProvideRandomness - 52
+### ProvideRandomness - 31
 
 #### request - 0
 
@@ -1217,12 +933,12 @@ Taking 0.0224 % of a block.
 randomness_type: RandomnessType
 salt: H256
 ```
-</details>
 
+</details>
 
-Request a randomness
+See [`Pallet::request`].
 
-### Proxy - 53
+### Proxy - 32
 
 #### proxy - 0
 
@@ -1235,18 +951,10 @@ real: AccountIdLookupOf<T>
 force_proxy_type: Option<T::ProxyType>
 call: Box<<T as Config>::RuntimeCall>
 ```
-</details>
-
-
-Dispatch the given `call` from an account that the sender is authorised for through
-`add_proxy`.
 
-The dispatch origin for this call must be _Signed_.
+</details>
 
-Parameters:
-- `real`: The account that the proxy will make a call on behalf of.
-- `force_proxy_type`: Specify the exact proxy type to be used and checked for this call.
-- `call`: The call to be made by the `real` account.
+See [`Pallet::proxy`].
 
 #### add_proxy - 1
 
@@ -1257,20 +965,12 @@ Taking 0.0098 % of a block.
 ```rust
 delegate: AccountIdLookupOf<T>
 proxy_type: T::ProxyType
-delay: T::BlockNumber
+delay: BlockNumberFor<T>
 ```
-</details>
-
 
-Register a proxy account for the sender that is able to make calls on its behalf.
-
-The dispatch origin for this call must be _Signed_.
+</details>
 
-Parameters:
-- `proxy`: The account that the `caller` would like to make a proxy.
-- `proxy_type`: The permissions allowed for this proxy account.
-- `delay`: The announcement period required of the initial proxy. Will generally be
-zero.
+See [`Pallet::add_proxy`].
 
 #### remove_proxy - 2
 
@@ -1281,18 +981,12 @@ Taking 0.0101 % of a block.
 ```rust
 delegate: AccountIdLookupOf<T>
 proxy_type: T::ProxyType
-delay: T::BlockNumber
+delay: BlockNumberFor<T>
 ```
-</details>
-
 
-Unregister a proxy account for the sender.
-
-The dispatch origin for this call must be _Signed_.
+</details>
 
-Parameters:
-- `proxy`: The account that the `caller` would like to remove as a proxy.
-- `proxy_type`: The permissions currently enabled for the removed proxy account.
+See [`Pallet::remove_proxy`].
 
 #### remove_proxies - 3
 
@@ -1301,16 +995,12 @@ Parameters:
 Taking 0.0098 % of a block.
 
 ```rust
-```
-</details>
-
 
-Unregister all proxy accounts for the sender.
+```
 
-The dispatch origin for this call must be _Signed_.
+</details>
 
-WARNING: This may be called on accounts created by `pure`, however if done, then
-the unreserved fees will be inaccessible. **All access to this account will be lost.**
+See [`Pallet::remove_proxies`].
 
 #### create_pure - 4
 
@@ -1320,30 +1010,13 @@ Taking 0.0109 % of a block.
 
 ```rust
 proxy_type: T::ProxyType
-delay: T::BlockNumber
+delay: BlockNumberFor<T>
 index: u16
 ```
-</details>
-
-
-Spawn a fresh new account that is guaranteed to be otherwise inaccessible, and
-initialize it with a proxy of `proxy_type` for `origin` sender.
 
-Requires a `Signed` origin.
-
-- `proxy_type`: The type of the proxy that the sender will be registered as over the
-new account. This will almost always be the most permissive `ProxyType` possible to
-allow for maximum flexibility.
-- `index`: A disambiguation index, in case this is called multiple times in the same
-transaction (e.g. with `utility::batch`). Unless you're using `batch` you probably just
-want to use `0`.
-- `delay`: The announcement period required of the initial proxy. Will generally be
-zero.
-
-Fails with `Duplicate` if this has already been called in this transaction, from the
-same sender, with the same parameters.
+</details>
 
-Fails if there are insufficient funds to pay for deposit.
+See [`Pallet::create_pure`].
 
 #### kill_pure - 5
 
@@ -1355,28 +1028,13 @@ Taking 0.0094 % of a block.
 spawner: AccountIdLookupOf<T>
 proxy_type: T::ProxyType
 index: u16
-height: T::BlockNumber
+height: BlockNumberFor<T>
 ext_index: u32
 ```
-</details>
-
-
-Removes a previously spawned pure proxy.
 
-WARNING: **All access to this account will be lost.** Any funds held in it will be
-inaccessible.
-
-Requires a `Signed` origin, and the sender account must have been created by a call to
-`pure` with corresponding parameters.
-
-- `spawner`: The account that originally called `pure` to create this account.
-- `index`: The disambiguation index originally passed to `pure`. Probably `0`.
-- `proxy_type`: The proxy type originally passed to `pure`.
-- `height`: The height of the chain when the call to `pure` was processed.
-- `ext_index`: The extrinsic index in which the call to `pure` was processed.
+</details>
 
-Fails with `NoPermission` in case the caller is not a previously created pure
-account whose `pure` call has corresponding parameters.
+See [`Pallet::kill_pure`].
 
 #### announce - 6
 
@@ -1388,24 +1046,10 @@ Taking 0.0138 % of a block.
 real: AccountIdLookupOf<T>
 call_hash: CallHashOf<T>
 ```
-</details>
-
-
-Publish the hash of a proxy-call that will be made in the future.
-
-This must be called some number of blocks before the corresponding `proxy` is attempted
-if the delay associated with the proxy relationship is greater than zero.
 
-No more than `MaxPending` announcements may be made at any one time.
-
-This will take a deposit of `AnnouncementDepositFactor` as well as
-`AnnouncementDepositBase` if there are no other pending announcements.
-
-The dispatch origin for this call must be _Signed_ and a proxy of `real`.
+</details>
 
-Parameters:
-- `real`: The account that the proxy will make a call on behalf of.
-- `call_hash`: The hash of the call to be made by the `real` account.
+See [`Pallet::announce`].
 
 #### remove_announcement - 7
 
@@ -1417,19 +1061,10 @@ Taking 0.0126 % of a block.
 real: AccountIdLookupOf<T>
 call_hash: CallHashOf<T>
 ```
-</details>
-
-
-Remove a given announcement.
-
-May be called by a proxy account to remove a call they previously announced and return
-the deposit.
 
-The dispatch origin for this call must be _Signed_.
+</details>
 
-Parameters:
-- `real`: The account that the proxy will make a call on behalf of.
-- `call_hash`: The hash of the call to be made by the `real` account.
+See [`Pallet::remove_announcement`].
 
 #### reject_announcement - 8
 
@@ -1441,19 +1076,10 @@ Taking 0.0128 % of a block.
 delegate: AccountIdLookupOf<T>
 call_hash: CallHashOf<T>
 ```
-</details>
-
-
-Remove the given announcement of a delegate.
 
-May be called by a target (proxied) account to remove a call that one of their delegates
-(`delegate`) has announced they want to execute. The deposit is returned.
-
-The dispatch origin for this call must be _Signed_.
+</details>
 
-Parameters:
-- `delegate`: The account that previously announced the call.
-- `call_hash`: The hash of the call to be made.
+See [`Pallet::reject_announcement`].
 
 #### proxy_announced - 9
 
@@ -1467,22 +1093,12 @@ real: AccountIdLookupOf<T>
 force_proxy_type: Option<T::ProxyType>
 call: Box<<T as Config>::RuntimeCall>
 ```
-</details>
 
+</details>
 
-Dispatch the given `call` from an account that the sender is authorized for through
-`add_proxy`.
-
-Removes any corresponding announcement(s).
-
-The dispatch origin for this call must be _Signed_.
-
-Parameters:
-- `real`: The account that the proxy will make a call on behalf of.
-- `force_proxy_type`: Specify the exact proxy type to be used and checked for this call.
-- `call`: The call to be made by the `real` account.
+See [`Pallet::proxy_announced`].
 
-### Utility - 54
+### Utility - 33
 
 #### batch - 0
 
@@ -1493,27 +1109,10 @@ Taking 0.2737 % of a block.
 ```rust
 calls: Vec<<T as Config>::RuntimeCall>
 ```
-</details>
-
 
-Send a batch of dispatch calls.
-
-May be called from any origin except `None`.
-
-- `calls`: The calls to be dispatched from the same origin. The number of call must not
-  exceed the constant: `batched_calls_limit` (available in constant metadata).
-
-If origin is root then the calls are dispatched without checking origin filter. (This
-includes bypassing `frame_system::Config::BaseCallFilter`).
-
-**Complexity**
-- O(C) where C is the number of calls to be batched.
+</details>
 
-This will return `Ok` in all circumstances. To determine the success of the batch, an
-event is deposited. If a call failed and the batch was interrupted, then the
-`BatchInterrupted` event is deposited, along with the number of successful calls made
-and the error of the failed call. If all were successful, then the `BatchCompleted`
-event is deposited.
+See [`Pallet::batch`].
 
 #### as_derivative - 1
 
@@ -1525,22 +1124,10 @@ Taking 0.0049 % of a block.
 index: u16
 call: Box<<T as Config>::RuntimeCall>
 ```
-</details>
-
 
-Send a call through an indexed pseudonym of the sender.
-
-Filter from origin are passed along. The call will be dispatched with an origin which
-use the same filter as the origin of this call.
-
-NOTE: If you need to ensure that any account-based filtering is not honored (i.e.
-because you expect `proxy` to have been used prior in the call stack and you do not want
-the call restrictions to apply to any sub-accounts), then use `as_multi_threshold_1`
-in the Multisig pallet instead.
-
-NOTE: Prior to version *12, this was called `as_limited_sub`.
+</details>
 
-The dispatch origin for this call must be _Signed_.
+See [`Pallet::as_derivative`].
 
 #### batch_all - 2
 
@@ -1551,22 +1138,10 @@ Taking 0.2944 % of a block.
 ```rust
 calls: Vec<<T as Config>::RuntimeCall>
 ```
-</details>
-
-
-Send a batch of dispatch calls and atomically execute them.
-The whole transaction will rollback and fail if any of the calls failed.
 
-May be called from any origin except `None`.
-
-- `calls`: The calls to be dispatched from the same origin. The number of call must not
-  exceed the constant: `batched_calls_limit` (available in constant metadata).
-
-If origin is root then the calls are dispatched without checking origin filter. (This
-includes bypassing `frame_system::Config::BaseCallFilter`).
+</details>
 
-**Complexity**
-- O(C) where C is the number of calls to be batched.
+See [`Pallet::batch_all`].
 
 #### force_batch - 4
 
@@ -1577,22 +1152,10 @@ Taking 0.3113 % of a block.
 ```rust
 calls: Vec<<T as Config>::RuntimeCall>
 ```
-</details>
-
-
-Send a batch of dispatch calls.
-Unlike `batch`, it allows errors and won't interrupt.
-
-May be called from any origin except `None`.
 
-- `calls`: The calls to be dispatched from the same origin. The number of call must not
-  exceed the constant: `batched_calls_limit` (available in constant metadata).
-
-If origin is root then the calls are dispatch without checking origin filter. (This
-includes bypassing `frame_system::Config::BaseCallFilter`).
+</details>
 
-**Complexity**
-- O(C) where C is the number of calls to be batched.
+See [`Pallet::force_batch`].
 
 #### with_weight - 5
 
@@ -1604,17 +1167,12 @@ No weight available.
 call: Box<<T as Config>::RuntimeCall>
 weight: Weight
 ```
-</details>
 
+</details>
 
-Dispatch a function call with a specified weight.
-
-This function does not check the weight of the call, and instead allows the
-Root origin to specify the weight of the call.
-
-The dispatch origin for this call must be _Root_.
+See [`Pallet::with_weight`].
 
-### Treasury - 55
+### Treasury - 34
 
 #### propose_spend - 0
 
@@ -1626,37 +1184,25 @@ Taking 0.0119 % of a block.
 value: BalanceOf<T, I>
 beneficiary: AccountIdLookupOf<T>
 ```
-</details>
-
 
-Put forward a suggestion for spending. A deposit proportional to the value
-is reserved and slashed if the proposal is rejected. It is returned once the
-proposal is awarded.
+</details>
 
-**Complexity**
-- O(1)
+See [`Pallet::propose_spend`].
 
-#### spend - 3
+#### spend_local - 3
 
-<details><summary><code>spend(amount, beneficiary)</code></summary>
+<details><summary><code>spend_local(amount, beneficiary)</code></summary>
 
-Taking 0.0045 % of a block.
+Taking 0.0035 % of a block.
 
 ```rust
 amount: BalanceOf<T, I>
 beneficiary: AccountIdLookupOf<T>
 ```
-</details>
 
+</details>
 
-Propose and approve a spend of treasury funds.
-
-- `origin`: Must be `SpendOrigin` with the `Success` value being at least `amount`.
-- `amount`: The amount to be transferred from the treasury to the `beneficiary`.
-- `beneficiary`: The destination account for the transfer.
-
-NOTE: For record-keeping purposes, the proposer is deemed to be equivalent to the
-beneficiary.
+See [`Pallet::spend_local`].
 
 #### remove_approval - 4
 
@@ -1667,28 +1213,73 @@ Taking 0.0079 % of a block.
 ```rust
 proposal_id: ProposalIndex
 ```
+
+</details>
+
+See [`Pallet::remove_approval`].
+
+#### spend - 5
+
+<details><summary><code>spend(asset_kind, amount, beneficiary, valid_from)</code></summary>
+
+Taking 0.0035 % of a block.
+
+```rust
+asset_kind: Box<T::AssetKind>
+amount: AssetBalanceOf<T, I>
+beneficiary: Box<BeneficiaryLookupOf<T, I>>
+valid_from: Option<BlockNumberFor<T>>
+```
+
+</details>
+
+See [`Pallet::spend`].
+
+#### payout - 6
+
+<details><summary><code>payout(index)</code></summary>
+
+Taking 0.0035 % of a block.
+
+```rust
+index: SpendIndex
+```
+
+</details>
+
+See [`Pallet::payout`].
+
+#### check_status - 7
+
+<details><summary><code>check_status(index)</code></summary>
+
+Taking 0.0035 % of a block.
+
+```rust
+index: SpendIndex
+```
+
 </details>
 
+See [`Pallet::check_status`].
 
-Force a previously approved proposal to be removed from the approval queue.
-The original deposit will no longer be returned.
+#### void_spend - 8
 
-May only be called from `T::RejectOrigin`.
-- `proposal_id`: The index of a proposal
+<details><summary><code>void_spend(index)</code></summary>
 
-**Complexity**
-- O(A) where `A` is the number of approvals
+Taking 0.0035 % of a block.
 
-Errors:
-- `ProposalNotApproved`: The `proposal_id` supplied was not found in the approval queue,
-i.e., the proposal has not been approved. This could also mean the proposal does not
-exist altogether, thus there is no way it would have been approved in the first place.
+```rust
+index: SpendIndex
+```
 
+</details>
 
+See [`Pallet::void_spend`].
 
 ## Root calls
 
-There are **15** root calls from **8** pallets.
+There are **18** root calls from **8** pallets.
 
 ### System - 0
 
@@ -1701,27 +1292,24 @@ Taking 0.0105 % of a block.
 ```rust
 pages: u64
 ```
-</details>
 
+</details>
 
-Set the number of pages in the WebAssembly environment's heap.
+See [`Pallet::set_heap_pages`].
 
 #### set_code - 2
 
 <details><summary><code>set_code(code)</code></summary>
 
-No weight available.
+Taking 3.9604 % of a block.
 
 ```rust
 code: Vec<u8>
 ```
-</details>
 
+</details>
 
-Set the new runtime code.
-
-**Complexity**
-- `O(C + S)` where `C` length of `code` and `S` complexity of `can_set_code`
+See [`Pallet::set_code`].
 
 #### set_code_without_checks - 3
 
@@ -1732,13 +1320,10 @@ No weight available.
 ```rust
 code: Vec<u8>
 ```
-</details>
-
 
-Set the new runtime code without doing any checks of the given `code`.
+</details>
 
-**Complexity**
-- `O(C)` where `C` length of `code`
+See [`Pallet::set_code_without_checks`].
 
 #### set_storage - 4
 
@@ -1749,10 +1334,10 @@ Taking 2.6599 % of a block.
 ```rust
 items: Vec<KeyValue>
 ```
-</details>
 
+</details>
 
-Set some items of storage.
+See [`Pallet::set_storage`].
 
 #### kill_storage - 5
 
@@ -1763,10 +1348,10 @@ Taking 2.6329 % of a block.
 ```rust
 keys: Vec<Key>
 ```
-</details>
 
+</details>
 
-Kill some items from storage.
+See [`Pallet::kill_storage`].
 
 #### kill_prefix - 6
 
@@ -1778,13 +1363,52 @@ Taking 3.0283 % of a block.
 prefix: Key
 subkeys: u32
 ```
+
+</details>
+
+See [`Pallet::kill_prefix`].
+
+#### authorize_upgrade - 9
+
+<details><summary><code>authorize_upgrade(code_hash)</code></summary>
+
+Taking 0.0098 % of a block.
+
+```rust
+code_hash: T::Hash
+```
+
 </details>
 
+See [`Pallet::authorize_upgrade`].
+
+#### authorize_upgrade_without_checks - 10
+
+<details><summary><code>authorize_upgrade_without_checks(code_hash)</code></summary>
 
-Kill all storage items with a key that starts with the given prefix.
+No weight available.
+
+```rust
+code_hash: T::Hash
+```
+
+</details>
+
+See [`Pallet::authorize_upgrade_without_checks`].
+
+#### apply_authorized_upgrade - 11
+
+<details><summary><code>apply_authorized_upgrade(code)</code></summary>
+
+Taking 4.1178 % of a block.
+
+```rust
+code: Vec<u8>
+```
+
+</details>
 
-**NOTE:** We rely on the Root origin to provide us the number of subkeys under
-the prefix we are removing to accurately calculate the weight of this function.
+See [`Pallet::apply_authorized_upgrade`].
 
 ### Babe - 3
 
@@ -1797,13 +1421,10 @@ No weight available.
 ```rust
 config: NextConfigDescriptor
 ```
-</details>
 
+</details>
 
-Plan an epoch config change. The epoch config change is recorded and will be enacted on
-the next call to `enact_epoch_change`. The config will be activated one epoch after.
-Multiple calls to this method will replace any existing planned config change that had
-not been enacted yet.
+See [`Pallet::plan_config_change`].
 
 ### Balances - 6
 
@@ -1818,11 +1439,10 @@ source: AccountIdLookupOf<T>
 dest: AccountIdLookupOf<T>
 value: T::Balance
 ```
-</details>
 
+</details>
 
-Exactly as `transfer_allow_death`, except the origin must be root and the source account
-may be specified.
+See [`Pallet::force_transfer`].
 
 #### force_unreserve - 5
 
@@ -1834,12 +1454,10 @@ Taking 0.0096 % of a block.
 who: AccountIdLookupOf<T>
 amount: T::Balance
 ```
-</details>
-
 
-Unreserve some balance from a user by force.
+</details>
 
-Can only be called by ROOT.
+See [`Pallet::force_unreserve`].
 
 ### AuthorityMembers - 11
 
@@ -1852,10 +1470,10 @@ Taking 0.0366 % of a block.
 ```rust
 member_id: T::MemberId
 ```
-</details>
 
+</details>
 
-remove an identity from the set of authorities
+See [`Pallet::remove_member`].
 
 ### Grandpa - 16
 
@@ -1866,26 +1484,15 @@ remove an identity from the set of authorities
 No weight available.
 
 ```rust
-delay: T::BlockNumber
-best_finalized_block_number: T::BlockNumber
+delay: BlockNumberFor<T>
+best_finalized_block_number: BlockNumberFor<T>
 ```
-</details>
-
 
-Note that the current authority set of the GRANDPA finality gadget has stalled.
-
-This will trigger a forced authority set change at the beginning of the next session, to
-be enacted `delay` blocks after that. The `delay` should be high enough to safely assume
-that the block signalling the forced change will not be re-orged e.g. 1000 blocks.
-The block production rate (which may be slowed down because of finality lagging) should
-be taken into account when choosing the `delay`. The GRANDPA voters based on the new
-authority will start voting on top of `best_finalized_block_number` for new finalized
-blocks. `best_finalized_block_number` should be the highest of the latest finalized
-block of all validators of the new authority set.
+</details>
 
-Only callable by root.
+See [`Pallet::note_stalled`].
 
-### TechnicalCommittee - 23
+### TechnicalCommittee - 22
 
 #### set_members - 0
 
@@ -1898,33 +1505,10 @@ new_members: Vec<T::AccountId>
 prime: Option<T::AccountId>
 old_count: MemberCount
 ```
-</details>
 
+</details>
 
-Set the collective's membership.
-
-- `new_members`: The new member list. Be nice to the chain and provide it sorted.
-- `prime`: The prime member whose vote sets the default.
-- `old_count`: The upper bound for the previous number of members in storage. Used for
-  weight estimation.
-
-The dispatch of this call must be `SetMembersOrigin`.
-
-NOTE: Does not enforce the expected `MaxMembers` limit on the amount of members, but
-      the weight estimations rely on it to estimate dispatchable weight.
-
-WARNING:
-
-The `pallet-collective` can also be managed by logic outside of the pallet through the
-implementation of the trait [`ChangeMembers`].
-Any call to `set_members` must be careful that the member set doesn't get out of sync
-with other logic managing the member set.
-
-**Complexity**:
-- `O(MP + N)` where:
-  - `M` old-members-count (code- and governance-bounded)
-  - `N` new-members-count (code- and governance-bounded)
-  - `P` proposals-count (code-bounded)
+See [`Pallet::set_members`].
 
 #### disapprove_proposal - 5
 
@@ -1935,21 +1519,12 @@ Taking 0.014 % of a block.
 ```rust
 proposal_hash: T::Hash
 ```
-</details>
-
-
-Disapprove a proposal, close, and remove it from the system, regardless of its current
-state.
 
-Must be called by the Root origin.
-
-Parameters:
-* `proposal_hash`: The hash of the proposal that should be disapproved.
+</details>
 
-**Complexity**
-O(P) where P is the number of max proposals
+See [`Pallet::disapprove_proposal`].
 
-### Identity - 41
+### Identity - 25
 
 #### prune_item_identities_names - 6
 
@@ -1960,12 +1535,12 @@ Taking 2.6984 % of a block.
 ```rust
 names: Vec<IdtyName>
 ```
-</details>
 
+</details>
 
-remove identity names from storage
+See [`Pallet::prune_item_identities_names`].
 
-### Utility - 54
+### Utility - 33
 
 #### dispatch_as - 3
 
@@ -1977,20 +1552,10 @@ Taking 0.0059 % of a block.
 as_origin: Box<T::PalletsOrigin>
 call: Box<<T as Config>::RuntimeCall>
 ```
-</details>
-
-
-Dispatches a function call with a provided origin.
-
-The dispatch origin for this call must be _Root_.
-
-**Complexity**
-- O(1).
-
-
-
 
+</details>
 
+See [`Pallet::dispatch_as`].
 
 ## Disabled calls
 
@@ -2007,13 +1572,10 @@ Taking 0.0955 % of a block.
 ```rust
 remark: Vec<u8>
 ```
-</details>
-
 
-Make some on-chain remark.
+</details>
 
-**Complexity**
-- `O(1)`
+See [`Pallet::remark`].
 
 #### remark_with_event - 7
 
@@ -2024,10 +1586,10 @@ Taking 0.3514 % of a block.
 ```rust
 remark: Vec<u8>
 ```
-</details>
 
+</details>
 
-Make some on-chain remark and emit event.
+See [`Pallet::remark_with_event`].
 
 ### Session - 15
 
@@ -2041,18 +1603,10 @@ Taking 0.0212 % of a block.
 keys: T::Keys
 proof: Vec<u8>
 ```
-</details>
-
 
-Sets the session key(s) of the function caller to `keys`.
-Allows an account to set its session key prior to becoming a validator.
-This doesn't take effect until the next session.
-
-The dispatch origin of this function must be signed.
+</details>
 
-**Complexity**
-- `O(1)`. Actual cost depends on the number of length of `T::Keys::key_ids()` which is
-  fixed.
+See [`Pallet::set_keys`].
 
 #### purge_keys - 1
 
@@ -2061,20 +1615,9 @@ The dispatch origin of this function must be signed.
 Taking 0.0189 % of a block.
 
 ```rust
-```
-</details>
-
-
-Removes any session key(s) of the function caller.
 
-This doesn't take effect until the next session.
-
-The dispatch origin of this function must be Signed and the account must be either be
-convertible to a validator ID using the chain's typical addressing system (this usually
-means being a controller account) or directly convertible into a validator ID (which
-usually means being a stash account).
+```
 
-**Complexity**
-- `O(1)` in number of key types. Actual cost depends on the number of length of
-  `T::Keys::key_ids()` which is fixed.
+</details>
 
+See [`Pallet::purge_keys`].
diff --git a/docs/api/runtime-errors.md b/docs/api/runtime-errors.md
index ba588dddc..d41575391 100644
--- a/docs/api/runtime-errors.md
+++ b/docs/api/runtime-errors.md
@@ -28,6 +28,7 @@ and the new runtime.
 Failed to extract the runtime version from the new runtime.
 
 Either calling `Core_version` or decoding `RuntimeVersion` failed.
+
 </details>
 </li>
 <li>
@@ -51,6 +52,20 @@ There is a non-zero reference count preventing the account from being purged.
 The origin filter prevent the call to be dispatched.
 </details>
 </li>
+<li>
+<details>
+<summary>
+<code>NothingAuthorized</code> - 6</summary>
+No upgrade authorized.
+</details>
+</li>
+<li>
+<details>
+<summary>
+<code>Unauthorized</code> - 7</summary>
+The submitted code is not authorized.
+</details>
+</li>
 </ul>
 </li>
 <li>Account - 1
@@ -210,11 +225,11 @@ Number of freezes exceed `MaxFreezes`.
 </li>
 </ul>
 </li>
-<li>TransactionPayment - 32
+<li>TransactionPayment - 7
 <ul>
 </ul>
 </li>
-<li>OneshotAccount - 7
+<li>OneshotAccount - 8
 <ul>
 <li>
 <details>
@@ -267,7 +282,7 @@ Source oneshot account does not exist.
 </li>
 </ul>
 </li>
-<li>Quota - 66
+<li>Quota - 9
 <ul>
 </ul>
 </li>
@@ -589,22 +604,22 @@ Duplicated heartbeat.
 <ul>
 </ul>
 </li>
-<li>Sudo - 20
+<li>Sudo - 19
 <ul>
 <li>
 <details>
 <summary>
 <code>RequireSudo</code> - 0</summary>
-Sender must be the Sudo account
+Sender must be the Sudo account.
 </details>
 </li>
 </ul>
 </li>
-<li>UpgradeOrigin - 21
+<li>UpgradeOrigin - 20
 <ul>
 </ul>
 </li>
-<li>Preimage - 22
+<li>Preimage - 21
 <ul>
 <li>
 <details>
@@ -648,9 +663,23 @@ A preimage may not be removed when there are outstanding requests.
 The preimage request cannot be removed since no outstanding requests exist.
 </details>
 </li>
+<li>
+<details>
+<summary>
+<code>TooMany</code> - 6</summary>
+More than `MAX_HASH_UPGRADE_BULK_COUNT` hashes were requested to be upgraded at once.
+</details>
+</li>
+<li>
+<details>
+<summary>
+<code>TooFew</code> - 7</summary>
+Too few hashes were requested to be upgraded (i.e. zero).
+</details>
+</li>
 </ul>
 </li>
-<li>TechnicalCommittee - 23
+<li>TechnicalCommittee - 22
 <ul>
 <li>
 <details>
@@ -722,9 +751,16 @@ The given weight bound for the proposal was too low.
 The given length bound for the proposal was too low.
 </details>
 </li>
+<li>
+<details>
+<summary>
+<code>PrimeAccountNotMember</code> - 10</summary>
+Prime account is not a member
+</details>
+</li>
 </ul>
 </li>
-<li>UniversalDividend - 30
+<li>UniversalDividend - 23
 <ul>
 <li>
 <details>
@@ -735,7 +771,7 @@ This account is not allowed to claim UDs.
 </li>
 </ul>
 </li>
-<li>Wot - 40
+<li>Wot - 24
 <ul>
 <li>
 <details>
@@ -795,7 +831,7 @@ Membership can only be renewed after an antispam delay.
 </li>
 </ul>
 </li>
-<li>Identity - 41
+<li>Identity - 25
 <ul>
 <li>
 <details>
@@ -918,7 +954,7 @@ Cannot link to an inexisting account.
 </li>
 </ul>
 </li>
-<li>Membership - 42
+<li>Membership - 26
 <ul>
 <li>
 <details>
@@ -936,7 +972,7 @@ Already member, can not add membership.
 </li>
 </ul>
 </li>
-<li>Certification - 43
+<li>Certification - 27
 <ul>
 <li>
 <details>
@@ -989,7 +1025,7 @@ Can not renew a non-existing cert
 </li>
 </ul>
 </li>
-<li>Distance - 44
+<li>Distance - 28
 <ul>
 <li>
 <details>
@@ -1084,7 +1120,7 @@ Targeted distance evaluation request is only possible for an unvalidated identit
 </li>
 </ul>
 </li>
-<li>AtomicSwap - 50
+<li>AtomicSwap - 29
 <ul>
 <li>
 <details>
@@ -1144,7 +1180,7 @@ Duration has not yet passed for the swap to be cancelled.
 </li>
 </ul>
 </li>
-<li>Multisig - 51
+<li>Multisig - 30
 <ul>
 <li>
 <details>
@@ -1246,7 +1282,7 @@ The data to be stored is already stored.
 </li>
 </ul>
 </li>
-<li>ProvideRandomness - 52
+<li>ProvideRandomness - 31
 <ul>
 <li>
 <details>
@@ -1257,7 +1293,7 @@ Request randomness queue is full.
 </li>
 </ul>
 </li>
-<li>Proxy - 53
+<li>Proxy - 32
 <ul>
 <li>
 <details>
@@ -1317,7 +1353,7 @@ Cannot add self as proxy.
 </li>
 </ul>
 </li>
-<li>Utility - 54
+<li>Utility - 33
 <ul>
 <li>
 <details>
@@ -1328,7 +1364,7 @@ Too many calls batched.
 </li>
 </ul>
 </li>
-<li>Treasury - 55
+<li>Treasury - 34
 <ul>
 <li>
 <details>
@@ -1341,7 +1377,7 @@ Proposer's balance is too low.
 <details>
 <summary>
 <code>InvalidIndex</code> - 1</summary>
-No proposal or bounty at that index.
+No proposal, bounty or spend at that index.
 </details>
 </li>
 <li>
@@ -1366,6 +1402,55 @@ amount to be spent.
 Proposal has not been approved.
 </details>
 </li>
+<li>
+<details>
+<summary>
+<code>FailedToConvertBalance</code> - 5</summary>
+The balance of the asset kind is not convertible to the balance of the native asset.
+</details>
+</li>
+<li>
+<details>
+<summary>
+<code>SpendExpired</code> - 6</summary>
+The spend has expired and cannot be claimed.
+</details>
+</li>
+<li>
+<details>
+<summary>
+<code>EarlyPayout</code> - 7</summary>
+The spend is not yet eligible for payout.
+</details>
+</li>
+<li>
+<details>
+<summary>
+<code>AlreadyAttempted</code> - 8</summary>
+The payment has already been attempted.
+</details>
+</li>
+<li>
+<details>
+<summary>
+<code>PayoutError</code> - 9</summary>
+There was some issue with the mechanism of payment.
+</details>
+</li>
+<li>
+<details>
+<summary>
+<code>NotAttempted</code> - 10</summary>
+The payout was not yet attempted/claimed.
+</details>
+</li>
+<li>
+<details>
+<summary>
+<code>Inconclusive</code> - 11</summary>
+The payment has neither failed nor succeeded yet.
+</details>
+</li>
 </ul>
 </li>
-</ul>
\ No newline at end of file
+</ul>
diff --git a/docs/api/runtime-events.md b/docs/api/runtime-events.md
index a3a532d8a..71abd3323 100644
--- a/docs/api/runtime-events.md
+++ b/docs/api/runtime-events.md
@@ -77,6 +77,19 @@ sender: T::AccountId
 hash: T::Hash
 ```
 
+</details>
+</li>
+<li>
+<details>
+<summary>
+<code>UpgradeAuthorized(code_hash, check_version)</code> - 6</summary>
+An upgrade was authorized.
+
+```rust
+code_hash: T::Hash
+check_version: bool
+```
+
 </details>
 </li>
 </ul>
@@ -145,7 +158,7 @@ The account was unlinked from its identity.
 Scheduled some task.
 
 ```rust
-when: T::BlockNumber
+when: BlockNumberFor<T>
 index: u32
 ```
 
@@ -158,7 +171,7 @@ index: u32
 Canceled some task.
 
 ```rust
-when: T::BlockNumber
+when: BlockNumberFor<T>
 index: u32
 ```
 
@@ -171,7 +184,7 @@ index: u32
 Dispatched some task.
 
 ```rust
-task: TaskAddress<T::BlockNumber>
+task: TaskAddress<BlockNumberFor<T>>
 id: Option<TaskName>
 result: DispatchResult
 ```
@@ -185,7 +198,7 @@ result: DispatchResult
 The call for the provided hash was not found so the task has been aborted.
 
 ```rust
-task: TaskAddress<T::BlockNumber>
+task: TaskAddress<BlockNumberFor<T>>
 id: Option<TaskName>
 ```
 
@@ -198,7 +211,7 @@ id: Option<TaskName>
 The given task was unable to be renewed since the agenda is full at that block.
 
 ```rust
-task: TaskAddress<T::BlockNumber>
+task: TaskAddress<BlockNumberFor<T>>
 id: Option<TaskName>
 ```
 
@@ -211,7 +224,7 @@ id: Option<TaskName>
 The given task can never be executed since it is overweight.
 
 ```rust
-task: TaskAddress<T::BlockNumber>
+task: TaskAddress<BlockNumberFor<T>>
 id: Option<TaskName>
 ```
 
@@ -510,7 +523,7 @@ amount: T::Balance
 </li>
 </ul>
 </li>
-<li>TransactionPayment - 32
+<li>TransactionPayment - 7
 <ul>
 <li>
 <details>
@@ -529,7 +542,7 @@ tip: BalanceOf<T>
 </li>
 </ul>
 </li>
-<li>OneshotAccount - 7
+<li>OneshotAccount - 8
 <ul>
 <li>
 <details>
@@ -576,7 +589,7 @@ balance: <T::Currency as Currency<T::AccountId>>::Balance
 </li>
 </ul>
 </li>
-<li>Quota - 66
+<li>Quota - 9
 <ul>
 <li>
 <details>
@@ -937,13 +950,13 @@ offline: Vec<IdentificationTuple<T>>
 <ul>
 </ul>
 </li>
-<li>Sudo - 20
+<li>Sudo - 19
 <ul>
 <li>
 <details>
 <summary>
 <code>Sudid(sudo_result)</code> - 0</summary>
-A sudo just took place. \[result\]
+A sudo call just took place.
 
 ```rust
 sudo_result: DispatchResult
@@ -954,11 +967,12 @@ sudo_result: DispatchResult
 <li>
 <details>
 <summary>
-<code>KeyChanged(old_sudoer)</code> - 1</summary>
-The \[sudoer\] just switched identity; the old key is supplied if one existed.
+<code>KeyChanged(old, new)</code> - 1</summary>
+The sudo key has been updated.
 
 ```rust
-old_sudoer: Option<T::AccountId>
+old: Option<T::AccountId>
+new: T::AccountId
 ```
 
 </details>
@@ -966,8 +980,20 @@ old_sudoer: Option<T::AccountId>
 <li>
 <details>
 <summary>
-<code>SudoAsDone(sudo_result)</code> - 2</summary>
-A sudo just took place. \[result\]
+<code>KeyRemoved()</code> - 2</summary>
+The key was permanently removed.
+
+```rust
+no args
+```
+
+</details>
+</li>
+<li>
+<details>
+<summary>
+<code>SudoAsDone(sudo_result)</code> - 3</summary>
+A [sudo_as](Pallet::sudo_as) call just took place.
 
 ```rust
 sudo_result: DispatchResult
@@ -977,7 +1003,7 @@ sudo_result: DispatchResult
 </li>
 </ul>
 </li>
-<li>UpgradeOrigin - 21
+<li>UpgradeOrigin - 20
 <ul>
 <li>
 <details>
@@ -993,7 +1019,7 @@ result: DispatchResult
 </li>
 </ul>
 </li>
-<li>Preimage - 22
+<li>Preimage - 21
 <ul>
 <li>
 <details>
@@ -1033,7 +1059,7 @@ hash: T::Hash
 </li>
 </ul>
 </li>
-<li>TechnicalCommittee - 23
+<li>TechnicalCommittee - 22
 <ul>
 <li>
 <details>
@@ -1134,7 +1160,7 @@ no: MemberCount
 </li>
 </ul>
 </li>
-<li>UniversalDividend - 30
+<li>UniversalDividend - 23
 <ul>
 <li>
 <details>
@@ -1195,11 +1221,11 @@ who: T::AccountId
 </li>
 </ul>
 </li>
-<li>Wot - 40
+<li>Wot - 24
 <ul>
 </ul>
 </li>
-<li>Identity - 41
+<li>Identity - 25
 <ul>
 <li>
 <details>
@@ -1245,7 +1271,6 @@ idty_index: T::IdtyIndex
 <summary>
 <code>IdtyChangedOwnerKey(idty_index, new_owner_key)</code> - 3</summary>
 
-
 ```rust
 idty_index: T::IdtyIndex
 new_owner_key: T::AccountId
@@ -1281,7 +1306,7 @@ reason: RemovalReason
 </li>
 </ul>
 </li>
-<li>Membership - 42
+<li>Membership - 26
 <ul>
 <li>
 <details>
@@ -1324,7 +1349,7 @@ reason: MembershipRemovalReason
 </li>
 </ul>
 </li>
-<li>Certification - 43
+<li>Certification - 27
 <ul>
 <li>
 <details>
@@ -1368,7 +1393,7 @@ receiver: T::IdtyIndex
 </li>
 </ul>
 </li>
-<li>Distance - 44
+<li>Distance - 28
 <ul>
 <li>
 <details>
@@ -1409,7 +1434,7 @@ idty_index: T::IdtyIndex
 </li>
 </ul>
 </li>
-<li>AtomicSwap - 50
+<li>AtomicSwap - 29
 <ul>
 <li>
 <details>
@@ -1454,7 +1479,7 @@ proof: HashedProof
 </li>
 </ul>
 </li>
-<li>Multisig - 51
+<li>Multisig - 30
 <ul>
 <li>
 <details>
@@ -1478,7 +1503,7 @@ A multisig operation has been approved by someone.
 
 ```rust
 approving: T::AccountId
-timepoint: Timepoint<T::BlockNumber>
+timepoint: Timepoint<BlockNumberFor<T>>
 multisig: T::AccountId
 call_hash: CallHash
 ```
@@ -1493,7 +1518,7 @@ A multisig operation has been executed.
 
 ```rust
 approving: T::AccountId
-timepoint: Timepoint<T::BlockNumber>
+timepoint: Timepoint<BlockNumberFor<T>>
 multisig: T::AccountId
 call_hash: CallHash
 result: DispatchResult
@@ -1509,7 +1534,7 @@ A multisig operation has been cancelled.
 
 ```rust
 cancelling: T::AccountId
-timepoint: Timepoint<T::BlockNumber>
+timepoint: Timepoint<BlockNumberFor<T>>
 multisig: T::AccountId
 call_hash: CallHash
 ```
@@ -1518,7 +1543,7 @@ call_hash: CallHash
 </li>
 </ul>
 </li>
-<li>ProvideRandomness - 52
+<li>ProvideRandomness - 31
 <ul>
 <li>
 <details>
@@ -1549,7 +1574,7 @@ r#type: RandomnessType
 </li>
 </ul>
 </li>
-<li>Proxy - 53
+<li>Proxy - 32
 <ul>
 <li>
 <details>
@@ -1603,7 +1628,7 @@ A proxy was added.
 delegator: T::AccountId
 delegatee: T::AccountId
 proxy_type: T::ProxyType
-delay: T::BlockNumber
+delay: BlockNumberFor<T>
 ```
 
 </details>
@@ -1618,14 +1643,14 @@ A proxy was removed.
 delegator: T::AccountId
 delegatee: T::AccountId
 proxy_type: T::ProxyType
-delay: T::BlockNumber
+delay: BlockNumberFor<T>
 ```
 
 </details>
 </li>
 </ul>
 </li>
-<li>Utility - 54
+<li>Utility - 33
 <ul>
 <li>
 <details>
@@ -1703,7 +1728,7 @@ result: DispatchResult
 </li>
 </ul>
 </li>
-<li>Treasury - 55
+<li>Treasury - 34
 <ul>
 <li>
 <details>
@@ -1817,8 +1842,76 @@ reactivated: BalanceOf<T, I>
 deactivated: BalanceOf<T, I>
 ```
 
+</details>
+</li>
+<li>
+<details>
+<summary>
+<code>AssetSpendApproved(index, asset_kind, amount, beneficiary, valid_from, expire_at)</code> - 9</summary>
+A new asset spend proposal has been approved.
+
+```rust
+index: SpendIndex
+asset_kind: T::AssetKind
+amount: AssetBalanceOf<T, I>
+beneficiary: T::Beneficiary
+valid_from: BlockNumberFor<T>
+expire_at: BlockNumberFor<T>
+```
+
+</details>
+</li>
+<li>
+<details>
+<summary>
+<code>AssetSpendVoided(index)</code> - 10</summary>
+An approved spend was voided.
+
+```rust
+index: SpendIndex
+```
+
+</details>
+</li>
+<li>
+<details>
+<summary>
+<code>Paid(index, payment_id)</code> - 11</summary>
+A payment happened.
+
+```rust
+index: SpendIndex
+payment_id: <T::Paymaster as Pay>::Id
+```
+
+</details>
+</li>
+<li>
+<details>
+<summary>
+<code>PaymentFailed(index, payment_id)</code> - 12</summary>
+A payment failed and can be retried.
+
+```rust
+index: SpendIndex
+payment_id: <T::Paymaster as Pay>::Id
+```
+
+</details>
+</li>
+<li>
+<details>
+<summary>
+<code>SpendProcessed(index)</code> - 13</summary>
+A spend was processed and removed from the storage. It might have been successfully
+paid or it may have expired.
+
+```rust
+index: SpendIndex
+```
+
 </details>
 </li>
 </ul>
 </li>
-</ul>
\ No newline at end of file
+</ul>
diff --git a/end2end-tests/Cargo.toml b/end2end-tests/Cargo.toml
index d933ba05a..a59b3faae 100644
--- a/end2end-tests/Cargo.toml
+++ b/end2end-tests/Cargo.toml
@@ -10,21 +10,23 @@ version = '3.0.0'
 
 [dev-dependencies]
 anyhow = "1.0"
-async-trait = "0.1"
-clap = { version = "3.2.23", features = ["derive"] }
+async-trait = "0.1.74"
+clap = { version = "3.2.23", features = ["derive", "cargo"] } # end2end cli refactoring need to upgrade to 4
 ctrlc = "3.2.2"
 cucumber = "0.11"
 distance-oracle = { path = "../distance-oracle", default_features = false }
 env_logger = "0.9.0"
-hex = "0.4"
+hex = "0.4.3"
 notify = "4.0"
 parity-scale-codec = "3.4.0"
 portpicker = "0.1.1"
 serde_json = "1.0.96"
-sp-keyring = { git = "https://github.com/duniter/substrate", branch = "duniter-substrate-v0.9.42", default-features = false }
-subxt = { git = 'https://github.com/duniter/subxt.git', branch = 'duniter-substrate-v0.9.42', default-features = false, features = ["substrate-compat", "jsonrpsee-ws"] }
+sp-core = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sp-core-hashing = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0", default-features = false }
+sp-runtime = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0" }
+sp-keyring = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0" }
+subxt = { git = 'https://github.com/duniter/subxt', branch = 'subxt-v0.34.0-duniter-substrate-v1.6.0', default-features = false, features = ["substrate-compat", "native", "jsonrpsee"] }
 tokio = { version = "1.28", features = ["macros", "time", "rt-multi-thread"], default-features = false }
-sp-runtime = {  git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false , features = ["std"] }
 
 [[test]]
 name = "cucumber_tests"
diff --git a/end2end-tests/cucumber-features/oneshot_account.feature b/end2end-tests/cucumber-features/oneshot_account.feature
index e180b019b..10b6b3a90 100644
--- a/end2end-tests/cucumber-features/oneshot_account.feature
+++ b/end2end-tests/cucumber-features/oneshot_account.feature
@@ -1,9 +1,11 @@
 Feature: Oneshot account
 
   Scenario: Simple oneshot consumption
+    When charlie sends 7 ÄžD to dave
+    # Cover the oneshot calls fees
     When alice sends 7 ÄžD to oneshot dave
-    # Alice is treasury funder for 1 ÄžD and pays fees TODO
-    Then alice should have 199 cÄžD
+    # Alice is treasury funder for 1 ÄžD, and member so fees are refunded
+    Then alice should have 2 ÄžD
     Then dave should have oneshot 7 ÄžD
     When oneshot dave consumes into account bob
     Then dave should have oneshot 0 ÄžD
@@ -11,13 +13,16 @@ Feature: Oneshot account
     Then bob should have oneshot 0 ÄžD
 
   Scenario: Double oneshot consumption
+    When charlie sends 7 ÄžD to dave
+    Then charlie should have 299 cÄžD
+    # Cover the oneshot calls fees
     When alice sends 7 ÄžD to oneshot dave
-    # Alice is treasury funder for 1 ÄžD and pays fees TODO
-    Then alice should have 199 cÄžD
+    # Alice is treasury funder for 1 ÄžD, and member so fees are refunded
+    Then alice should have 2 ÄžD
     Then dave should have oneshot 7 ÄžD
     When oneshot dave consumes 4 ÄžD into account bob and the rest into oneshot charlie
     Then dave should have oneshot 0 ÄžD
     Then bob should have 14 ÄžD
     Then bob should have oneshot 0 ÄžD
-    Then charlie should have 10 ÄžD
+    Then charlie should have 299 cÄžD
     Then charlie should have oneshot 298 cÄžD
diff --git a/end2end-tests/cucumber-genesis/default.json b/end2end-tests/cucumber-genesis/default.json
index 84ba683ec..2912937ff 100644
--- a/end2end-tests/cucumber-genesis/default.json
+++ b/end2end-tests/cucumber-genesis/default.json
@@ -93,4 +93,4 @@
     "number": 0,
     "medianTime": 1700000000
   }
-}
\ No newline at end of file
+}
diff --git a/end2end-tests/tests/common/balances.rs b/end2end-tests/tests/common/balances.rs
index a09421ae2..9329a5fe1 100644
--- a/end2end-tests/tests/common/balances.rs
+++ b/end2end-tests/tests/common/balances.rs
@@ -20,10 +20,11 @@ use super::*;
 use sp_keyring::AccountKeyring;
 use subxt::{tx::PairSigner, utils::MultiAddress};
 
-pub async fn set_balance(client: &Client, who: AccountKeyring, amount: u64) -> Result<()> {
+pub async fn set_balance(client: &FullClient, who: AccountKeyring, amount: u64) -> Result<()> {
     let _events = create_block_with_extrinsic(
-        client,
+        &client.rpc,
         client
+            .client
             .tx()
             .create_signed(
                 &gdev::tx()
@@ -35,7 +36,7 @@ pub async fn set_balance(client: &Client, who: AccountKeyring, amount: u64) -> R
                         },
                     )),
                 &PairSigner::new(SUDO_ACCOUNT.pair()),
-                BaseExtrinsicParamsBuilder::new(),
+                SubstrateExtrinsicParamsBuilder::new().build(),
             )
             .await?,
     )
@@ -45,7 +46,7 @@ pub async fn set_balance(client: &Client, who: AccountKeyring, amount: u64) -> R
 }
 
 pub async fn transfer(
-    client: &Client,
+    client: &FullClient,
     from: AccountKeyring,
     amount: u64,
     to: AccountKeyring,
@@ -54,15 +55,16 @@ pub async fn transfer(
     let to = to.to_account_id();
 
     let _events = create_block_with_extrinsic(
-        client,
+        &client.rpc,
         client
+            .client
             .tx()
             .create_signed(
                 &gdev::tx()
                     .universal_dividend()
                     .transfer_ud(to.clone().into(), amount),
                 &from,
-                BaseExtrinsicParamsBuilder::new(),
+                SubstrateExtrinsicParamsBuilder::new().build(),
             )
             .await?,
     )
@@ -71,18 +73,23 @@ pub async fn transfer(
     Ok(())
 }
 
-pub async fn transfer_all(client: &Client, from: AccountKeyring, to: AccountKeyring) -> Result<()> {
+pub async fn transfer_all(
+    client: &FullClient,
+    from: AccountKeyring,
+    to: AccountKeyring,
+) -> Result<()> {
     let from = PairSigner::new(from.pair());
     let to = to.to_account_id();
 
     let _events = create_block_with_extrinsic(
-        client,
+        &client.rpc,
         client
+            .client
             .tx()
             .create_signed(
                 &gdev::tx().balances().transfer_all(to.into(), false),
                 &from,
-                BaseExtrinsicParamsBuilder::new(),
+                SubstrateExtrinsicParamsBuilder::new().build(),
             )
             .await?,
     )
@@ -92,7 +99,7 @@ pub async fn transfer_all(client: &Client, from: AccountKeyring, to: AccountKeyr
 }
 
 pub async fn transfer_ud(
-    client: &Client,
+    client: &FullClient,
     from: AccountKeyring,
     amount: u64,
     to: AccountKeyring,
@@ -101,15 +108,16 @@ pub async fn transfer_ud(
     let to = to.to_account_id();
 
     let _events = create_block_with_extrinsic(
-        client,
+        &client.rpc,
         client
+            .client
             .tx()
             .create_signed(
                 &gdev::tx()
                     .universal_dividend()
                     .transfer_ud(to.clone().into(), amount),
                 &from,
-                BaseExtrinsicParamsBuilder::new(),
+                SubstrateExtrinsicParamsBuilder::new().build(),
             )
             .await?,
     )
diff --git a/end2end-tests/tests/common/cert.rs b/end2end-tests/tests/common/cert.rs
index d1fba6417..86efaed68 100644
--- a/end2end-tests/tests/common/cert.rs
+++ b/end2end-tests/tests/common/cert.rs
@@ -20,12 +20,13 @@ use super::*;
 use sp_keyring::AccountKeyring;
 use subxt::{tx::PairSigner, utils::MultiAddress};
 
-pub async fn certify(client: &Client, from: AccountKeyring, to: AccountKeyring) -> Result<()> {
+pub async fn certify(client: &FullClient, from: AccountKeyring, to: AccountKeyring) -> Result<()> {
     let signer = PairSigner::new(from.pair());
     let from = from.to_account_id();
     let to = to.to_account_id();
 
     let _issuer_index = client
+        .client
         .storage()
         .at_latest()
         .await
@@ -38,6 +39,7 @@ pub async fn certify(client: &Client, from: AccountKeyring, to: AccountKeyring)
         .await?
         .unwrap_or_else(|| panic!("{} issuer must exist", from));
     let receiver_index = client
+        .client
         .storage()
         .at_latest()
         .await
@@ -47,13 +49,14 @@ pub async fn certify(client: &Client, from: AccountKeyring, to: AccountKeyring)
         .unwrap_or_else(|| panic!("{} issuer must exist", from));
 
     let _events = create_block_with_extrinsic(
-        client,
+        &client.rpc,
         client
+            .client
             .tx()
             .create_signed(
                 &gdev::tx().certification().add_cert(receiver_index),
                 &signer,
-                BaseExtrinsicParamsBuilder::new(),
+                SubstrateExtrinsicParamsBuilder::new().build(),
             )
             .await?,
     )
diff --git a/end2end-tests/tests/common/distance.rs b/end2end-tests/tests/common/distance.rs
index c06b52919..97add31a3 100644
--- a/end2end-tests/tests/common/distance.rs
+++ b/end2end-tests/tests/common/distance.rs
@@ -19,20 +19,22 @@ use super::gdev::runtime_types::pallet_identity;
 use super::*;
 use crate::DuniterWorld;
 use sp_keyring::AccountKeyring;
+use subxt::backend::rpc::RpcClient;
 use subxt::tx::{PairSigner, Signer};
 use subxt::utils::AccountId32;
 
-pub async fn request_evaluation(client: &Client, origin: AccountKeyring) -> Result<()> {
+pub async fn request_evaluation(client: &FullClient, origin: AccountKeyring) -> Result<()> {
     let origin = PairSigner::new(origin.pair());
 
     let _events = create_block_with_extrinsic(
-        client,
+        &client.rpc,
         client
+            .client
             .tx()
             .create_signed(
                 &gdev::tx().distance().request_distance_evaluation(),
                 &origin,
-                BaseExtrinsicParamsBuilder::new(),
+                SubstrateExtrinsicParamsBuilder::new().build(),
             )
             .await?,
     )
@@ -41,7 +43,11 @@ pub async fn request_evaluation(client: &Client, origin: AccountKeyring) -> Resu
     Ok(())
 }
 
-pub async fn run_oracle(client: &Client, origin: AccountKeyring, rpc_url: String) -> Result<()> {
+pub async fn run_oracle(
+    client: &FullClient,
+    origin: AccountKeyring,
+    rpc_url: String,
+) -> Result<()> {
     let origin = PairSigner::new(origin.pair());
     let account_id: &AccountId32 = origin.account_id();
 
@@ -56,12 +62,12 @@ pub async fn run_oracle(client: &Client, origin: AccountKeyring, rpc_url: String
     .await
     {
         for _ in 0..30 {
-            super::create_empty_block(client).await?;
+            super::create_empty_block(&client.rpc).await?;
         }
 
         let _events = create_block_with_extrinsic(
-            client,
-            client
+        &client.rpc,
+        client.client
                 .tx()
                 .create_signed(
                     &gdev::tx().sudo().sudo(gdev::runtime_types::gdev_runtime::RuntimeCall::Distance(
@@ -75,7 +81,7 @@ pub async fn run_oracle(client: &Client, origin: AccountKeyring, rpc_url: String
                         )
                     ),
                     &origin,
-                    BaseExtrinsicParamsBuilder::new(),
+                SubstrateExtrinsicParamsBuilder::new().build(),
                 )
                 .await?,
         )
diff --git a/end2end-tests/tests/common/identity.rs b/end2end-tests/tests/common/identity.rs
index 57707e5b0..ab42cff02 100644
--- a/end2end-tests/tests/common/identity.rs
+++ b/end2end-tests/tests/common/identity.rs
@@ -17,6 +17,7 @@
 use super::gdev;
 use super::gdev::runtime_types::pallet_identity;
 use super::*;
+use crate::gdev::runtime_types::pallet_identity::types::IdtyName;
 use crate::DuniterWorld;
 use sp_keyring::AccountKeyring;
 use subxt::tx::PairSigner;
@@ -30,7 +31,7 @@ type IdtyValue =
 // submit extrinsics
 
 pub async fn create_identity(
-    client: &Client,
+    client: &FullClient,
     from: AccountKeyring,
     to: AccountKeyring,
 ) -> Result<()> {
@@ -38,13 +39,14 @@ pub async fn create_identity(
     let to = to.to_account_id();
 
     let _events = create_block_with_extrinsic(
-        client,
+        &client.rpc,
         client
+            .client
             .tx()
             .create_signed(
                 &gdev::tx().identity().create_identity(to.into()),
                 &from,
-                BaseExtrinsicParamsBuilder::new(),
+                SubstrateExtrinsicParamsBuilder::new().build(),
             )
             .await?,
     )
@@ -53,17 +55,23 @@ pub async fn create_identity(
     Ok(())
 }
 
-pub async fn confirm_identity(client: &Client, from: AccountKeyring, pseudo: String) -> Result<()> {
+pub async fn confirm_identity(
+    client: &FullClient,
+    from: AccountKeyring,
+    pseudo: String,
+) -> Result<()> {
     let from = PairSigner::new(from.pair());
+    let pseudo: IdtyName = IdtyName(pseudo.as_bytes().to_vec());
 
     let _events = create_block_with_extrinsic(
-        client,
+        &client.rpc,
         client
+            .client
             .tx()
             .create_signed(
                 &gdev::tx().identity().confirm_identity(pseudo),
                 &from,
-                BaseExtrinsicParamsBuilder::new(),
+                SubstrateExtrinsicParamsBuilder::new().build(),
             )
             .await?,
     )
diff --git a/end2end-tests/tests/common/mod.rs b/end2end-tests/tests/common/mod.rs
index d69a00c15..6b65e5ec7 100644
--- a/end2end-tests/tests/common/mod.rs
+++ b/end2end-tests/tests/common/mod.rs
@@ -37,9 +37,12 @@ use std::path::{Path, PathBuf};
 use std::process::Command;
 use std::str::FromStr;
 use std::time::{Duration, Instant};
-use subxt::config::extrinsic_params::BaseExtrinsicParamsBuilder;
+use subxt::backend::rpc::RpcClient;
+use subxt::backend::rpc::RpcParams;
+use subxt::config::substrate::SubstrateExtrinsicParamsBuilder;
+use subxt::config::SubstrateExtrinsicParams;
 use subxt::ext::{sp_core, sp_runtime};
-use subxt::rpc::rpc_params;
+use subxt::rpc_params;
 
 pub type Client = subxt::OnlineClient<GdevConfig>;
 pub type Event = gdev::Event;
@@ -49,15 +52,15 @@ pub type TxProgress = subxt::tx::TxProgress<GdevConfig, Client>;
 
 pub enum GdevConfig {}
 impl subxt::config::Config for GdevConfig {
-    type Index = u32;
-    type Hash = sp_core::H256;
     type AccountId = subxt::utils::AccountId32;
     type Address = sp_runtime::MultiAddress<Self::AccountId, u32>;
+    type AssetId = ();
+    type ExtrinsicParams = SubstrateExtrinsicParams<Self>;
+    type Hash = sp_core::H256;
+    type Hasher = subxt::config::substrate::BlakeTwo256;
     type Header =
         subxt::config::substrate::SubstrateHeader<u32, subxt::config::substrate::BlakeTwo256>;
-    type Hasher = subxt::config::substrate::BlakeTwo256;
     type Signature = sp_runtime::MultiSignature;
-    type ExtrinsicParams = subxt::config::extrinsic_params::BaseExtrinsicParams<Self, Tip>;
 }
 
 #[derive(Copy, Clone, Debug, Default, Encode)]
@@ -66,6 +69,11 @@ pub struct Tip {
     tip: u64,
 }
 
+pub struct FullClient {
+    pub rpc: RpcClient,
+    pub client: Client,
+}
+
 impl Tip {
     pub fn new(amount: u64) -> Self {
         Tip { tip: amount }
@@ -101,13 +109,13 @@ const DUNITER_LOCAL_PATH: &str = "../target/debug/duniter";
 struct FullNode {
     process: Process,
     p2p_port: u16,
-    ws_port: u16,
+    rpc_port: u16,
 }
 
 pub async fn spawn_node(
     maybe_genesis_conf_file: Option<PathBuf>,
     no_spawn: bool,
-) -> (Client, Option<Process>, u16) {
+) -> (FullClient, Option<Process>, u16) {
     println!("maybe_genesis_conf_file={:?}", maybe_genesis_conf_file);
     let duniter_binary_path = std::env::var("DUNITER_BINARY_PATH").unwrap_or_else(|_| {
         if std::path::Path::new(DUNITER_DOCKER_PATH).exists() {
@@ -117,14 +125,14 @@ pub async fn spawn_node(
         }
     });
 
-    let mut the_ws_port = 9944;
+    let mut the_rpc_port = 9944;
     let mut opt_process = None;
     // Eventually spawn a node (we most likely will - unless --no-spawn option is used)
     if !no_spawn {
         let FullNode {
             process,
             p2p_port: _,
-            ws_port,
+            rpc_port,
         } = spawn_full_node(
             &[
                 "--chain=gdev_dev",
@@ -144,27 +152,27 @@ pub async fn spawn_node(
             maybe_genesis_conf_file,
         );
         opt_process = Some(process);
-        the_ws_port = ws_port;
+        the_rpc_port = rpc_port;
     }
-    let client = Client::from_url(format!("ws://127.0.0.1:{}", the_ws_port))
+    let rpc = RpcClient::from_url(format!("ws://127.0.0.1:{}", the_rpc_port))
         .await
-        .expect("fail to connect to node");
+        .expect("Failed to create the rpc backend");
+    let client = Client::from_rpc_client(rpc.clone()).await.unwrap();
 
-    (client, opt_process, the_ws_port)
+    (FullClient { rpc, client }, opt_process, the_rpc_port)
 }
 
-pub async fn create_empty_block(client: &Client) -> Result<()> {
+pub async fn create_empty_block(client: &RpcClient) -> Result<()> {
     // Create an empty block
     let _: Value = client
-        .rpc()
-        .request("engine_createBlock", rpc_params![true, false, Value::Null])
+        .request("engine_createBlock", rpc_params![true, true, Value::Null])
         .await?;
 
     Ok(())
 }
 
 pub async fn create_block_with_extrinsic(
-    client: &Client,
+    client: &RpcClient,
     extrinsic: SubmittableExtrinsic,
 ) -> Result<subxt::blocks::ExtrinsicEvents<GdevConfig>> {
     //println!("extrinsic encoded: {}", hex::encode(extrinsic.encoded()));
@@ -173,13 +181,12 @@ pub async fn create_block_with_extrinsic(
 
     // Create a non-empty block
     let _: Value = client
-        .rpc()
-        .request("engine_createBlock", rpc_params![false, false, Value::Null])
+        .request("engine_createBlock", rpc_params![false, true, Value::Null])
         .await?;
 
     // Get extrinsic events
     watcher
-        .wait_for_in_block()
+        .wait_for_finalized()
         .await?
         .fetch_events()
         .await
@@ -194,7 +201,6 @@ fn spawn_full_node(
     // Ports
     let p2p_port = portpicker::pick_unused_port().expect("No ports free");
     let rpc_port = portpicker::pick_unused_port().expect("No ports free");
-    let ws_port = portpicker::pick_unused_port().expect("No ports free");
 
     // Env vars
     let mut envs = Vec::new();
@@ -204,7 +210,7 @@ fn spawn_full_node(
     }
 
     // Logs
-    let log_file_path = format!("duniter-v2s-{}.log", ws_port);
+    let log_file_path = format!("duniter-v2s-{}.log", rpc_port);
     let log_file = std::fs::File::create(&log_file_path).expect("fail to create log file");
 
     // Command
@@ -218,8 +224,6 @@ fn spawn_full_node(
                     &p2p_port.to_string(),
                     "--rpc-port",
                     &rpc_port.to_string(),
-                    "--ws-port",
-                    &ws_port.to_string(),
                 ]
                 .iter()
                 .chain(args),
@@ -247,7 +251,7 @@ fn spawn_full_node(
     FullNode {
         process,
         p2p_port,
-        ws_port,
+        rpc_port,
     }
 }
 
diff --git a/end2end-tests/tests/common/oneshot.rs b/end2end-tests/tests/common/oneshot.rs
index 6bfe2189d..51478d129 100644
--- a/end2end-tests/tests/common/oneshot.rs
+++ b/end2end-tests/tests/common/oneshot.rs
@@ -43,7 +43,7 @@ impl Account {
 }
 
 pub async fn create_oneshot_account(
-    client: &Client,
+    client: &FullClient,
     from: AccountKeyring,
     amount: u64,
     to: AccountKeyring,
@@ -52,15 +52,16 @@ pub async fn create_oneshot_account(
     let to = to.to_account_id();
 
     let _events = create_block_with_extrinsic(
-        client,
+        &client.rpc,
         client
+            .client
             .tx()
             .create_signed(
                 &gdev::tx()
                     .oneshot_account()
                     .create_oneshot_account(to.into(), amount),
                 &from,
-                BaseExtrinsicParamsBuilder::new(),
+                SubstrateExtrinsicParamsBuilder::new().build(),
             )
             .await?,
     )
@@ -70,7 +71,7 @@ pub async fn create_oneshot_account(
 }
 
 pub async fn consume_oneshot_account(
-    client: &Client,
+    client: &FullClient,
     from: AccountKeyring,
     to: Account,
 ) -> Result<()> {
@@ -78,13 +79,14 @@ pub async fn consume_oneshot_account(
     let to = to.to_account_id();
 
     let _events = create_block_with_extrinsic(
-        client,
+        &client.rpc,
         client
+            .client
             .tx()
             .create_signed(
                 &gdev::tx().oneshot_account().consume_oneshot_account(0, to),
                 &from,
-                BaseExtrinsicParamsBuilder::new(),
+                SubstrateExtrinsicParamsBuilder::new().build(),
             )
             .await?,
     )
@@ -95,7 +97,7 @@ pub async fn consume_oneshot_account(
 
 #[allow(clippy::too_many_arguments)]
 pub async fn consume_oneshot_account_with_remaining(
-    client: &Client,
+    client: &FullClient,
     from: AccountKeyring,
     amount: u64,
     to: Account,
@@ -106,15 +108,16 @@ pub async fn consume_oneshot_account_with_remaining(
     let remaining_to = remaining_to.to_account_id();
 
     let _events = create_block_with_extrinsic(
-        client,
+        &client.rpc,
         client
+            .client
             .tx()
             .create_signed(
                 &gdev::tx()
                     .oneshot_account()
                     .consume_oneshot_account_with_remaining(0, to, remaining_to, amount),
                 &from,
-                BaseExtrinsicParamsBuilder::new(),
+                SubstrateExtrinsicParamsBuilder::new().build(),
             )
             .await?,
     )
diff --git a/end2end-tests/tests/cucumber_tests.rs b/end2end-tests/tests/cucumber_tests.rs
index 48d7c30be..e63495dff 100644
--- a/end2end-tests/tests/cucumber_tests.rs
+++ b/end2end-tests/tests/cucumber_tests.rs
@@ -27,6 +27,7 @@ use std::sync::{
     atomic::{AtomicBool, Ordering},
     Arc,
 };
+use subxt::backend::rpc::RpcClient;
 
 // ===== world =====
 
@@ -44,25 +45,47 @@ impl DuniterWorld {
         }
         self.inner = Some(DuniterWorldInner::new(maybe_genesis_conf_file, no_spawn).await);
     }
+
     fn kill(&mut self) {
         if let Some(ref mut inner) = self.inner {
             inner.kill();
         }
     }
+
     fn set_ignore_errors(&mut self, ignore_errors: bool) {
         self.ignore_errors = ignore_errors;
     }
+
     // Read methods
+    fn rpc_client(&self) -> &RpcClient {
+        if let Some(ref inner) = self.inner {
+            &inner.client.rpc
+        } else {
+            panic!("uninit")
+        }
+    }
+
     fn client(&self) -> &Client {
+        if let Some(ref inner) = self.inner {
+            &inner.client.client
+        } else {
+            panic!("uninit")
+        }
+    }
+
+    fn full_client(&self) -> &FullClient {
         if let Some(ref inner) = self.inner {
             &inner.client
         } else {
             panic!("uninit")
         }
     }
+
+    // Read methods
     fn ignore_errors(&self) -> bool {
         self.ignore_errors
     }
+
     // Read storage entry on last block
     async fn read<'a, Address>(
         &self,
@@ -80,6 +103,7 @@ impl DuniterWorld {
             .unwrap()
             .fetch(address)
     }
+
     // Read storage entry with default value (on last block)
     async fn read_or_default<'a, Address>(
         &self,
@@ -120,7 +144,7 @@ impl World for DuniterWorld {
 }
 
 struct DuniterWorldInner {
-    client: Client,
+    client: FullClient,
     process: Option<Process>,
     ws_port: u16,
 }
@@ -134,6 +158,7 @@ impl DuniterWorldInner {
             ws_port,
         }
     }
+
     fn kill(&mut self) {
         if let Some(p) = &mut self.process {
             p.kill();
@@ -170,7 +195,7 @@ async fn who_have(world: &mut DuniterWorld, who: String, amount: u64, unit: Stri
     }
 
     // Create {amount} ÄžD for {who}
-    common::balances::set_balance(world.client(), who, amount).await?;
+    common::balances::set_balance(world.full_client(), who, amount).await?;
 
     Ok(())
 }
@@ -181,7 +206,7 @@ async fn who_have(world: &mut DuniterWorld, who: String, amount: u64, unit: Stri
 #[when(regex = r"(\d+) blocks? later")]
 async fn n_blocks_later(world: &mut DuniterWorld, n: usize) -> Result<()> {
     for _ in 0..n {
-        common::create_empty_block(world.client()).await?;
+        common::create_empty_block(world.rpc_client()).await?;
     }
     Ok(())
 }
@@ -201,9 +226,9 @@ async fn transfer(
     let (amount, is_ud) = parse_amount(amount, &unit);
 
     let res = if is_ud {
-        common::balances::transfer_ud(world.client(), from, amount, to).await
+        common::balances::transfer_ud(world.full_client(), from, amount, to).await
     } else {
-        common::balances::transfer(world.client(), from, amount, to).await
+        common::balances::transfer(world.full_client(), from, amount, to).await
     };
 
     if world.ignore_errors() {
@@ -229,7 +254,7 @@ async fn create_oneshot_account(
 
     assert!(!is_ud);
 
-    common::oneshot::create_oneshot_account(world.client(), from, amount, to).await
+    common::oneshot::create_oneshot_account(world.full_client(), from, amount, to).await
 }
 
 #[allow(clippy::needless_pass_by_ref_mut)]
@@ -249,7 +274,7 @@ async fn consume_oneshot_account(
         _ => unreachable!(),
     };
 
-    common::oneshot::consume_oneshot_account(world.client(), from, to).await
+    common::oneshot::consume_oneshot_account(world.full_client(), from, to).await
 }
 
 #[when(
@@ -286,7 +311,7 @@ async fn consume_oneshot_account_with_remaining(
     assert!(!is_ud);
 
     common::oneshot::consume_oneshot_account_with_remaining(
-        world.client(),
+        world.full_client(),
         from,
         amount,
         to,
@@ -302,7 +327,7 @@ async fn send_all_to(world: &mut DuniterWorld, from: String, to: String) -> Resu
     let from = AccountKeyring::from_str(&from).expect("unknown from");
     let to = AccountKeyring::from_str(&to).expect("unknown to");
 
-    common::balances::transfer_all(world.client(), from, to).await
+    common::balances::transfer_all(world.full_client(), from, to).await
 }
 
 #[allow(clippy::needless_pass_by_ref_mut)]
@@ -312,7 +337,7 @@ async fn certifies(world: &mut DuniterWorld, from: String, to: String) -> Result
     let from = AccountKeyring::from_str(&from).expect("unknown from");
     let to = AccountKeyring::from_str(&to).expect("unknown to");
 
-    common::cert::certify(world.client(), from, to).await
+    common::cert::certify(world.full_client(), from, to).await
 }
 
 #[allow(clippy::needless_pass_by_ref_mut)]
@@ -322,7 +347,7 @@ async fn creates_identity(world: &mut DuniterWorld, from: String, to: String) ->
     let from = AccountKeyring::from_str(&from).expect("unknown from");
     let to = AccountKeyring::from_str(&to).expect("unknown to");
 
-    common::identity::create_identity(world.client(), from, to).await
+    common::identity::create_identity(world.full_client(), from, to).await
 }
 
 #[allow(clippy::needless_pass_by_ref_mut)]
@@ -330,7 +355,7 @@ async fn creates_identity(world: &mut DuniterWorld, from: String, to: String) ->
 async fn confirm_identity(world: &mut DuniterWorld, from: String, pseudo: String) -> Result<()> {
     let from = AccountKeyring::from_str(&from).expect("unknown from");
 
-    common::identity::confirm_identity(world.client(), from, pseudo).await
+    common::identity::confirm_identity(world.full_client(), from, pseudo).await
 }
 
 #[allow(clippy::needless_pass_by_ref_mut)]
@@ -338,7 +363,7 @@ async fn confirm_identity(world: &mut DuniterWorld, from: String, pseudo: String
 async fn request_distance_evaluation(world: &mut DuniterWorld, who: String) -> Result<()> {
     let who = AccountKeyring::from_str(&who).expect("unknown origin");
 
-    common::distance::request_evaluation(world.client(), who).await
+    common::distance::request_evaluation(world.full_client(), who).await
 }
 
 #[allow(clippy::needless_pass_by_ref_mut)]
@@ -347,7 +372,7 @@ async fn run_distance_oracle(world: &mut DuniterWorld, who: String) -> Result<()
     let who = AccountKeyring::from_str(&who).expect("unknown origin");
 
     common::distance::run_oracle(
-        world.client(),
+        world.full_client(),
         who,
         format!("ws://127.0.0.1:{}", world.inner.as_ref().unwrap().ws_port),
     )
diff --git a/live-tests/Cargo.toml b/live-tests/Cargo.toml
index d58d98fc2..ab7efc7fd 100644
--- a/live-tests/Cargo.toml
+++ b/live-tests/Cargo.toml
@@ -10,10 +10,10 @@ version = '3.0.0'
 
 [dev-dependencies]
 anyhow = "1.0"
+countmap = "0.2.0"
 hex-literal = "0.4"
 parity-scale-codec = "3.4.0"
-sp-core = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-subxt = { git = 'https://github.com/duniter/subxt', branch = 'duniter-substrate-v0.9.42', default-features = false, features = ["jsonrpsee-ws"] }
+sp-core = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-runtime = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false, features = ["std"] } # https://github.com/paritytech/subxt/issues/437
+subxt = { git = 'https://github.com/duniter/subxt', branch = 'subxt-v0.34.0-duniter-substrate-v1.6.0', default-features = false, features = ["substrate-compat", "native", "jsonrpsee"] }
 tokio = { version = "1.28", features = ["macros", "time", "rt-multi-thread"], default-features = false }
-sp-runtime = {  git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false , features = ["std"] } # https://github.com/paritytech/subxt/issues/437
-countmap = "0.2.0"
diff --git a/live-tests/tests/sanity_gdev.rs b/live-tests/tests/sanity_gdev.rs
index e326b7191..814af0786 100644
--- a/live-tests/tests/sanity_gdev.rs
+++ b/live-tests/tests/sanity_gdev.rs
@@ -14,6 +14,10 @@
 // You should have received a copy of the GNU Affero General Public License
 // along with Duniter-v2S. If not, see <https://www.gnu.org/licenses/>.
 
+// WARNING
+// these live test build but I'm not sure they actually test something
+// they should be checked against corrupted storage to see that they actually fail
+
 #[subxt::subxt(runtime_metadata_path = "../resources/metadata.scale")]
 pub mod gdev {}
 
@@ -22,7 +26,13 @@ use hex_literal::hex;
 use sp_core::crypto::AccountId32;
 use sp_core::{blake2_128, ByteArray, H256};
 use std::collections::{HashMap, HashSet};
+use subxt::backend::rpc::RpcClient;
 use subxt::config::SubstrateConfig as GdevConfig;
+use subxt::ext::sp_core;
+// use subxt::config::substrate::SubstrateExtrinsicParamsBuilder;
+// use subxt::backend::rpc::RpcParams;
+// use subxt::config::SubstrateExtrinsicParams;
+// use subxt::ext::{sp_core, sp_runtime};
 
 const DEFAULT_ENDPOINT: &str = "ws://localhost:9944";
 
@@ -58,14 +68,17 @@ struct Storage {
 async fn main() -> anyhow::Result<()> {
     let ws_rpc_endpoint =
         std::env::var("WS_RPC_ENDPOINT").unwrap_or_else(|_| DEFAULT_ENDPOINT.to_owned());
-    let client = Client::from_url(ws_rpc_endpoint)
+    let rpc = RpcClient::from_url(ws_rpc_endpoint)
         .await
-        .expect("fail to connect to node");
+        .expect("Failed to create the rpc backend");
+    let client = Client::from_rpc_client(rpc.clone()).await.unwrap();
 
     let maybe_block_hash = if let Ok(block_number) = std::env::var("AT_BLOCK_NUMBER") {
         let block_number: BlockNumber = block_number.parse()?;
         println!("Run sanity tests against ÄžDev at block #{}.", block_number);
-        client.rpc().block_hash(Some(block_number.into())).await?
+        // FIXME
+        // client.at(block_number).await?
+        None
     } else {
         println!("Run sanity tests against ÄžDev at last best block");
         None
@@ -84,11 +97,11 @@ async fn sanity_tests_at(client: Client, _maybe_block_hash: Option<H256>) -> any
         .at_latest()
         .await
         .unwrap()
-        .iter(gdev::storage().system().account_root(), 100)
+        .iter(gdev::storage().system().account_iter())
         .await?;
-    while let Some((key, account_info)) = account_iter.next().await? {
+    while let Some(Ok((key, account_info))) = account_iter.next().await {
         let mut account_id_bytes = [0u8; 32];
-        account_id_bytes.copy_from_slice(&key.0[48..]);
+        account_id_bytes.copy_from_slice(&key[48..]);
         accounts.insert(AccountId32::new(account_id_bytes), account_info);
     }
     println!("accounts.len(): {}.", accounts.len());
@@ -100,11 +113,11 @@ async fn sanity_tests_at(client: Client, _maybe_block_hash: Option<H256>) -> any
         .at_latest()
         .await
         .unwrap()
-        .iter(gdev::storage().identity().identities_root(), 100)
+        .iter(gdev::storage().identity().identities_iter())
         .await?;
-    while let Some((key, idty_value)) = idty_iter.next().await? {
+    while let Some(Ok((key, idty_value))) = idty_iter.next().await {
         let mut idty_index_bytes = [0u8; 4];
-        idty_index_bytes.copy_from_slice(&key.0[40..]);
+        idty_index_bytes.copy_from_slice(&key[40..]);
         let idty_val = IdtyValue {
             data: idty_value.data,
             next_creatable_identity_on: idty_value.next_creatable_identity_on,
@@ -124,11 +137,11 @@ async fn sanity_tests_at(client: Client, _maybe_block_hash: Option<H256>) -> any
         .at_latest()
         .await
         .unwrap()
-        .iter(gdev::storage().identity().identity_index_of_root(), 100)
+        .iter(gdev::storage().identity().identity_index_of_iter())
         .await?;
-    while let Some((key, idty_index)) = idty_index_of_iter.next().await? {
+    while let Some(Ok((key, idty_index))) = idty_index_of_iter.next().await {
         let mut blake2_128_bytes = [0u8; 16];
-        blake2_128_bytes.copy_from_slice(&key.0[32..48]);
+        blake2_128_bytes.copy_from_slice(&key[32..48]);
         identity_index_of.insert(blake2_128_bytes, idty_index);
     }
     println!("identity_index_of.len(): {}.", identity_index_of.len());
diff --git a/node/src/chain_spec/gdev.rs b/node/src/chain_spec/gdev.rs
index 1ea45a67a..f43332a4c 100644
--- a/node/src/chain_spec/gdev.rs
+++ b/node/src/chain_spec/gdev.rs
@@ -14,6 +14,8 @@
 // You should have received a copy of the GNU Affero General Public License
 // along with Duniter-v2S. If not, see <https://www.gnu.org/licenses/>.
 
+#![allow(deprecated)]
+
 use super::*;
 use crate::chain_spec::gen_genesis_data::{
     AuthorityKeys, CommonParameters, GenesisIdentity, SessionKeysProvider,
@@ -23,10 +25,9 @@ use common_runtime::entities::IdtyData;
 use common_runtime::*;
 use gdev_runtime::{
     opaque::SessionKeys, pallet_universal_dividend, parameters, AccountConfig,
-    AuthorityMembersConfig, BabeConfig, BalancesConfig, CertificationConfig, GenesisConfig,
-    IdentityConfig, MembershipConfig, ParametersConfig, QuotaConfig, Runtime, SessionConfig,
-    SmithMembersConfig, SudoConfig, SystemConfig, TechnicalCommitteeConfig,
-    UniversalDividendConfig, WASM_BINARY,
+    AuthorityMembersConfig, BabeConfig, BalancesConfig, CertificationConfig, IdentityConfig,
+    MembershipConfig, ParametersConfig, QuotaConfig, Runtime, RuntimeGenesisConfig, SessionConfig,
+    SmithMembersConfig, SudoConfig, TechnicalCommitteeConfig, UniversalDividendConfig, WASM_BINARY,
 };
 use jsonrpsee::core::JsonValue;
 use sc_network::config::MultiaddrWithPeerId;
@@ -37,7 +38,7 @@ use sp_core::{sr25519, Get};
 use sp_runtime::Perbill;
 use std::{env, fs};
 
-pub type ChainSpec = sc_service::GenericChainSpec<GenesisConfig>;
+pub type ChainSpec = sc_service::GenericChainSpec<RuntimeGenesisConfig>;
 
 type GenesisParameters = gdev_runtime::GenesisParameters<u32, u32, u64, u32>;
 
@@ -61,8 +62,9 @@ impl SessionKeysProvider<SessionKeys> for GDevSKP {
 }
 
 fn get_parameters(parameters_from_file: &Option<GenesisParameters>) -> CommonParameters {
-    let parameters_from_file =
-        parameters_from_file.expect("parameters must be defined in file for GDev");
+    let parameters_from_file = parameters_from_file
+        .clone()
+        .expect("parameters must be defined in file for GDev");
     CommonParameters {
         currency_name: TOKEN_SYMBOL.to_string(),
         decimals: TOKEN_DECIMALS,
@@ -124,7 +126,7 @@ pub fn gdev_development_chain_spec(config_file_path: String) -> Result<ChainSpec
                     Some("Alice".to_owned()),
                 )
                 .expect("Genesis Data must be buildable");
-            genesis_data_to_gdev_genesis_conf(genesis_data, wasm_binary.to_vec())
+            genesis_data_to_gdev_genesis_conf(genesis_data)
         },
         // Bootnodes
         vec![],
@@ -146,6 +148,7 @@ pub fn gdev_development_chain_spec(config_file_path: String) -> Result<ChainSpec
         ),
         // Extensions
         None,
+        &wasm_binary.to_vec().clone(), // TODO upgrade to builder
     ))
 }
 
@@ -190,7 +193,7 @@ pub fn gen_live_conf(
                     None,
                 )
                 .expect("Genesis Data must be buildable");
-            genesis_data_to_gdev_genesis_conf(genesis_data, wasm_binary.to_vec())
+            genesis_data_to_gdev_genesis_conf(genesis_data)
         },
         // Bootnodes
         client_spec.boot_nodes,
@@ -204,6 +207,7 @@ pub fn gen_live_conf(
         client_spec.properties,
         // Extensions
         None,
+        &wasm_binary.clone(), // TODO upgrade to builder
     ))
 }
 
@@ -241,7 +245,7 @@ pub fn local_testnet_config(
                 get_parameters,
             )
             .expect("Genesis Data must be buildable");
-            genesis_data_to_gdev_genesis_conf(genesis_data, wasm_binary.to_vec())
+            genesis_data_to_gdev_genesis_conf(genesis_data)
         },
         // Bootnodes
         vec![],
@@ -263,14 +267,14 @@ pub fn local_testnet_config(
         ),
         // Extensions
         None,
+        &wasm_binary.clone(), // TODO upgrade to builder
     ))
 }
 
 /// custom genesis
 fn genesis_data_to_gdev_genesis_conf(
     genesis_data: super::gen_genesis_data::GenesisData<GenesisParameters, SessionKeys>,
-    wasm_binary: Vec<u8>,
-) -> gdev_runtime::GenesisConfig {
+) -> gdev_runtime::RuntimeGenesisConfig {
     let super::gen_genesis_data::GenesisData {
         accounts,
         treasury_balance,
@@ -290,11 +294,8 @@ fn genesis_data_to_gdev_genesis_conf(
         ud,
     } = genesis_data;
 
-    gdev_runtime::GenesisConfig {
-        system: SystemConfig {
-            // Add Wasm runtime to storage.
-            code: wasm_binary,
-        },
+    gdev_runtime::RuntimeGenesisConfig {
+        system: Default::default(),
         account: AccountConfig {
             accounts,
             treasury_balance,
@@ -312,6 +313,7 @@ fn genesis_data_to_gdev_genesis_conf(
         babe: BabeConfig {
             authorities: Vec::with_capacity(0),
             epoch_config: Some(BABE_GENESIS_EPOCH_CONFIG),
+            _config: Default::default(),
         },
         grandpa: Default::default(),
         im_online: Default::default(),
@@ -377,6 +379,7 @@ fn genesis_data_to_gdev_genesis_conf(
             ud,
         },
         treasury: Default::default(),
+        transaction_payment: Default::default(),
     }
 }
 
diff --git a/node/src/chain_spec/gtest.rs b/node/src/chain_spec/gtest.rs
index 2b0ff5c78..b4c37dbe6 100644
--- a/node/src/chain_spec/gtest.rs
+++ b/node/src/chain_spec/gtest.rs
@@ -14,18 +14,19 @@
 // You should have received a copy of the GNU Affero General Public License
 // along with Duniter-v2S. If not, see <https://www.gnu.org/licenses/>.
 
+#![allow(deprecated)]
+
 use super::*;
 use crate::chain_spec::gen_genesis_data::{CommonParameters, GenesisIdentity, SessionKeysProvider};
 use common_runtime::constants::*;
 use common_runtime::entities::IdtyData;
 use common_runtime::*;
-use frame_benchmarking::frame_support::traits::Get;
 use gtest_runtime::SmithMembersConfig;
 use gtest_runtime::{
     opaque::SessionKeys, pallet_universal_dividend, parameters, AccountConfig, AccountId,
     AuthorityMembersConfig, BabeConfig, BalancesConfig, CertificationConfig, GenesisConfig,
     IdentityConfig, ImOnlineId, MembershipConfig, Perbill, QuotaConfig, Runtime, SessionConfig,
-    SudoConfig, SystemConfig, TechnicalCommitteeConfig, UniversalDividendConfig, WASM_BINARY,
+    SudoConfig, TechnicalCommitteeConfig, UniversalDividendConfig, WASM_BINARY,
 };
 use jsonrpsee::core::JsonValue;
 use sc_consensus_grandpa::AuthorityId as GrandpaId;
@@ -35,6 +36,7 @@ use sc_telemetry::TelemetryEndpoints;
 use serde::Deserialize;
 use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId;
 use sp_consensus_babe::AuthorityId as BabeId;
+use sp_core::Get;
 use std::{env, fs};
 
 pub type ChainSpec = sc_service::GenericChainSpec<GenesisConfig>;
@@ -149,7 +151,7 @@ pub fn development_chainspecs(config_file_path: String) -> Result<ChainSpec, Str
                     Some("Alice".to_owned()),
                 )
                 .expect("Genesis Data must be buildable");
-            genesis_data_to_gtest_genesis_conf(genesis_data, wasm_binary.to_vec())
+            genesis_data_to_gtest_genesis_conf(genesis_data)
         },
         // Bootnodes
         vec![],
@@ -171,6 +173,7 @@ pub fn development_chainspecs(config_file_path: String) -> Result<ChainSpec, Str
         ),
         // Extensions
         None,
+        &wasm_binary.clone(), // TODO upgrade to builder
     ))
 }
 
@@ -199,7 +202,7 @@ pub fn live_chainspecs(
                     None,
                 )
                 .expect("Genesis Data must be buildable");
-            genesis_data_to_gtest_genesis_conf(genesis_data, wasm_binary.to_vec())
+            genesis_data_to_gtest_genesis_conf(genesis_data)
         },
         // Bootnodes
         client_spec.boot_nodes,
@@ -213,13 +216,13 @@ pub fn live_chainspecs(
         client_spec.properties,
         // Extensions
         None,
+        &wasm_binary.clone(), // TODO upgrade to builder
     ))
 }
 
 /// custom genesis
 fn genesis_data_to_gtest_genesis_conf(
     genesis_data: super::gen_genesis_data::GenesisData<GenesisParameters, SessionKeys>,
-    wasm_binary: Vec<u8>,
 ) -> gtest_runtime::GenesisConfig {
     let super::gen_genesis_data::GenesisData {
         accounts,
@@ -241,10 +244,7 @@ fn genesis_data_to_gtest_genesis_conf(
     } = genesis_data;
 
     gtest_runtime::GenesisConfig {
-        system: SystemConfig {
-            // Add Wasm runtime to storage.
-            code: wasm_binary,
-        },
+        system: Default::default(),
         account: AccountConfig {
             accounts,
             treasury_balance,
@@ -260,6 +260,7 @@ fn genesis_data_to_gtest_genesis_conf(
         babe: BabeConfig {
             authorities: Vec::with_capacity(0),
             epoch_config: Some(BABE_GENESIS_EPOCH_CONFIG),
+            _config: Default::default(),
         },
         grandpa: Default::default(),
         im_online: Default::default(),
@@ -327,6 +328,7 @@ fn genesis_data_to_gtest_genesis_conf(
             initial_members: vec![],
         },
         treasury: Default::default(),
+        transaction_payment: Default::default(),
     }
 }
 
diff --git a/node/src/command.rs b/node/src/command.rs
index e120906e7..14825ec79 100644
--- a/node/src/command.rs
+++ b/node/src/command.rs
@@ -22,17 +22,21 @@ pub mod utils;
 use crate::chain_spec::gtest;
 use crate::cli::{Cli, Subcommand};
 #[cfg(feature = "g1")]
-use crate::service::G1Executor;
+use crate::service::g1_executor::G1Executor;
 #[cfg(feature = "gdev")]
-use crate::service::GDevExecutor;
+#[cfg(feature = "runtime-benchmarks")]
+use crate::service::gdev_executor::GDevExecutor;
 #[cfg(feature = "gtest")]
-use crate::service::GTestExecutor;
+#[cfg(feature = "runtime-benchmarks")]
+use crate::service::gtest_executor::GTestExecutor;
 use crate::service::{IdentifyRuntimeType, RuntimeType};
 use crate::{chain_spec, service};
 use clap::CommandFactory;
 #[cfg(feature = "runtime-benchmarks")]
 use frame_benchmarking_cli::{BenchmarkCmd, SUBSTRATE_REFERENCE_HARDWARE};
-use sc_cli::{ChainSpec, RuntimeVersion, SubstrateCli};
+use sc_cli::SubstrateCli;
+#[cfg(feature = "runtime-benchmarks")]
+use sc_executor::{sp_wasm_interface::ExtendedHostFunctions, NativeExecutionDispatch};
 
 // TODO: create our own reference hardware
 /*
@@ -210,18 +214,6 @@ impl SubstrateCli for Cli {
             }
         })
     }
-
-    fn native_runtime_version(spec: &Box<dyn ChainSpec>) -> &'static RuntimeVersion {
-        match spec.runtime_type() {
-            #[cfg(feature = "g1")]
-            RuntimeType::G1 => &g1_runtime::VERSION,
-            #[cfg(feature = "gtest")]
-            RuntimeType::GTest => &gtest_runtime::VERSION,
-            #[cfg(feature = "gdev")]
-            RuntimeType::GDev => &gdev_runtime::VERSION,
-            _ => panic!("unknown runtime {:?}", spec.runtime_type()),
-        }
-    }
 }
 
 /// Parse and run command line arguments
@@ -357,15 +349,24 @@ pub fn run() -> sc_cli::Result<()> {
                         match chain_spec.runtime_type() {
                             #[cfg(feature = "g1")]
                             RuntimeType::G1 => runner.sync_run(|config| {
-                                cmd.run::<g1_runtime::Block, G1Executor>(config)
+                                cmd.run::<g1_runtime::Block, ExtendedHostFunctions<
+                                    sp_io::SubstrateHostFunctions,
+                                    <G1Executor as NativeExecutionDispatch>::ExtendHostFunctions,
+                                >>(config)
                             }),
                             #[cfg(feature = "gtest")]
                             RuntimeType::GTest => runner.sync_run(|config| {
-                                cmd.run::<gtest_runtime::Block, GTestExecutor>(config)
+                                cmd.run::<gtest_runtime::Block, ExtendedHostFunctions<
+                                    sp_io::SubstrateHostFunctions,
+                                    <GTestExecutor as NativeExecutionDispatch>::ExtendHostFunctions,
+                                >>(config)
                             }),
                             #[cfg(feature = "gdev")]
                             RuntimeType::GDev => runner.sync_run(|config| {
-                                cmd.run::<gdev_runtime::Block, GDevExecutor>(config)
+                                cmd.run::<gdev_runtime::Block, ExtendedHostFunctions<
+                                    sp_io::SubstrateHostFunctions,
+                                    <GDevExecutor as NativeExecutionDispatch>::ExtendHostFunctions,
+                                >>(config)
                             }),
                             _ => Err(sc_cli::Error::Application("unknown runtime type".into())),
                         }
@@ -443,22 +444,18 @@ pub fn run() -> sc_cli::Result<()> {
                 match config.chain_spec.runtime_type() {
                     #[cfg(feature = "g1")]
                     RuntimeType::G1 => {
-                        service::new_full::<g1_runtime::RuntimeApi, G1Executor>(config, cli.sealing)
+                        service::new_full::<g1_runtime::RuntimeApi>(config, cli.sealing)
                             .map_err(sc_cli::Error::Service)
                     }
                     #[cfg(feature = "gtest")]
-                    RuntimeType::GTest => service::new_full::<
-                        gtest_runtime::RuntimeApi,
-                        GTestExecutor,
-                    >(config, cli.sealing)
-                    .map_err(sc_cli::Error::Service),
+                    RuntimeType::GTest => {
+                        service::new_full::<gtest_runtime::RuntimeApi>(config, cli.sealing)
+                            .map_err(sc_cli::Error::Service)
+                    }
                     #[cfg(feature = "gdev")]
                     RuntimeType::GDev => {
-                        service::new_full::<gdev_runtime::RuntimeApi, GDevExecutor>(
-                            config,
-                            cli.sealing,
-                        )
-                        .map_err(sc_cli::Error::Service)
+                        service::new_full::<gdev_runtime::RuntimeApi>(config, cli.sealing)
+                            .map_err(sc_cli::Error::Service)
                     }
                     _ => Err(sc_cli::Error::Application("unknown runtime".into())),
                 }
diff --git a/node/src/service.rs b/node/src/service.rs
index 4d63bff98..35768f204 100644
--- a/node/src/service.rs
+++ b/node/src/service.rs
@@ -23,80 +23,88 @@ use async_io::Timer;
 use common_runtime::Block;
 use futures::{Stream, StreamExt};
 use sc_client_api::client::BlockBackend;
+use sc_client_api::Backend;
 use sc_consensus_grandpa::SharedVoterState;
 use sc_consensus_manual_seal::{run_manual_seal, EngineCommand, ManualSealParams};
-pub use sc_executor::NativeElseWasmExecutor;
-use sc_network_common::sync::warp::WarpSyncParams;
+pub use sc_executor::WasmExecutor;
+use sc_service::WarpSyncParams;
 use sc_service::{error::Error as ServiceError, Configuration, PartialComponents, TaskManager};
 use sc_telemetry::{Telemetry, TelemetryWorker};
 use sp_core::H256;
 use sp_runtime::traits::BlakeTwo256;
-use std::{path::PathBuf, sync::Arc, time::Duration};
+use std::{sync::Arc, time::Duration};
 
-type FullClient<RuntimeApi, Executor> =
-    sc_service::TFullClient<Block, RuntimeApi, NativeElseWasmExecutor<Executor>>;
+#[cfg(not(feature = "runtime-benchmarks"))]
+type HostFunctions = sp_io::SubstrateHostFunctions;
+
+#[cfg(feature = "runtime-benchmarks")]
+type HostFunctions = (
+    sp_io::SubstrateHostFunctions,
+    frame_benchmarking::benchmarking::HostFunctions,
+);
+
+type FullClient<RuntimeApi> =
+    sc_service::TFullClient<Block, RuntimeApi, WasmExecutor<HostFunctions>>;
 type FullBackend = sc_service::TFullBackend<Block>;
 type FullSelectChain = sc_consensus::LongestChain<FullBackend, Block>;
 
 #[cfg(feature = "gdev")]
-pub struct GDevExecutor;
-#[cfg(feature = "gdev")]
-impl sc_executor::NativeExecutionDispatch for GDevExecutor {
-    /// Only enable the benchmarking host functions when we actually want to benchmark.
-    #[cfg(feature = "runtime-benchmarks")]
-    type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions;
-    /// Otherwise we only use the default Substrate host functions.
-    #[cfg(not(feature = "runtime-benchmarks"))]
-    type ExtendHostFunctions = ();
-
-    fn dispatch(method: &str, data: &[u8]) -> Option<Vec<u8>> {
-        gdev_runtime::api::dispatch(method, data)
-    }
+pub mod gdev_executor {
+    pub use gdev_runtime;
 
-    fn native_version() -> sc_executor::NativeVersion {
-        gdev_runtime::native_version()
-    }
-}
+    pub struct GDevExecutor;
+    impl sc_executor::NativeExecutionDispatch for GDevExecutor {
+        type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions;
 
-#[cfg(feature = "gtest")]
-pub struct GTestExecutor;
-#[cfg(feature = "gtest")]
-impl sc_executor::NativeExecutionDispatch for GTestExecutor {
-    /// Only enable the benchmarking host functions when we actually want to benchmark.
-    #[cfg(feature = "runtime-benchmarks")]
-    type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions;
-    /// Otherwise we only use the default Substrate host functions.
-    #[cfg(not(feature = "runtime-benchmarks"))]
-    type ExtendHostFunctions = ();
-
-    fn dispatch(method: &str, data: &[u8]) -> Option<Vec<u8>> {
-        gtest_runtime::api::dispatch(method, data)
-    }
+        fn dispatch(method: &str, data: &[u8]) -> Option<Vec<u8>> {
+            gdev_runtime::api::dispatch(method, data)
+        }
 
-    fn native_version() -> sc_executor::NativeVersion {
-        gtest_runtime::native_version()
+        fn native_version() -> sc_executor::NativeVersion {
+            gdev_runtime::native_version()
+        }
     }
 }
 
 #[cfg(feature = "g1")]
-pub struct G1Executor;
-#[cfg(feature = "g1")]
-impl sc_executor::NativeExecutionDispatch for G1Executor {
-    /// Only enable the benchmarking host functions when we actually want to benchmark.
-    #[cfg(feature = "runtime-benchmarks")]
-    type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions;
-    /// Otherwise we only use the default Substrate host functions.
-    #[cfg(not(feature = "runtime-benchmarks"))]
-    type ExtendHostFunctions = ();
-
-    fn dispatch(method: &str, data: &[u8]) -> Option<Vec<u8>> {
-        g1_runtime::api::dispatch(method, data)
+pub mod g1_executor {
+    pub use g1_runtime;
+
+    pub struct G1Executor;
+    impl sc_executor::NativeExecutionDispatch for G1Executor {
+        type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions;
+
+        fn dispatch(method: &str, data: &[u8]) -> Option<Vec<u8>> {
+            g1_runtime::api::dispatch(method, data)
+        }
+
+        fn native_version() -> sc_executor::NativeVersion {
+            g1_runtime::native_version()
+        }
     }
+}
+
+#[cfg(feature = "gtest")]
+pub mod gtest_executor {
+    pub use gtest_runtime;
+
+    pub struct GTestExecutor;
+    impl sc_executor::NativeExecutionDispatch for GTestExecutor {
+        type ExtendHostFunctions = frame_benchmarking::benchmarking::HostFunctions;
 
-    fn native_version() -> sc_executor::NativeVersion {
-        g1_runtime::native_version()
+        fn dispatch(method: &str, data: &[u8]) -> Option<Vec<u8>> {
+            gtest_runtime::api::dispatch(method, data)
+        }
+
+        fn native_version() -> sc_executor::NativeVersion {
+            gtest_runtime::native_version()
+        }
     }
 }
+///
+/// The minimum period of blocks on which justifications will be
+/// imported and generated.
+const GRANDPA_JUSTIFICATION_PERIOD: u32 = 512;
 
 #[derive(Debug)]
 pub enum RuntimeType {
@@ -135,7 +143,7 @@ pub fn new_chain_ops(
     (
         Arc<Client>,
         Arc<FullBackend>,
-        sc_consensus::BasicQueue<Block, sp_trie::PrefixedMemoryDB<BlakeTwo256>>,
+        sc_consensus::BasicQueue<Block>,
         TaskManager,
     ),
     ServiceError,
@@ -149,7 +157,7 @@ pub fn new_chain_ops(
                 import_queue,
                 task_manager,
                 ..
-            } = new_partial::<g1_runtime::RuntimeApi, G1Executor>(config, manual_consensus)?;
+            } = new_partial::<g1_runtime::RuntimeApi>(config, manual_consensus)?;
             Ok((
                 Arc::new(Client::G1(client)),
                 backend,
@@ -165,7 +173,7 @@ pub fn new_chain_ops(
                 import_queue,
                 task_manager,
                 ..
-            } = new_partial::<gtest_runtime::RuntimeApi, GTestExecutor>(config, manual_consensus)?;
+            } = new_partial::<gtest_runtime::RuntimeApi>(config, manual_consensus)?;
             Ok((
                 Arc::new(Client::GTest(client)),
                 backend,
@@ -181,7 +189,7 @@ pub fn new_chain_ops(
                 import_queue,
                 task_manager,
                 ..
-            } = new_partial::<gdev_runtime::RuntimeApi, GDevExecutor>(config, manual_consensus)?;
+            } = new_partial::<gdev_runtime::RuntimeApi>(config, manual_consensus)?;
             Ok((
                 Arc::new(Client::GDev(client)),
                 backend,
@@ -193,50 +201,41 @@ pub fn new_chain_ops(
     }
 }
 
-type FullGrandpaBlockImport<RuntimeApi, Executor> = sc_consensus_grandpa::GrandpaBlockImport<
+type FullGrandpaBlockImport<RuntimeApi> = sc_consensus_grandpa::GrandpaBlockImport<
     FullBackend,
     Block,
-    FullClient<RuntimeApi, Executor>,
+    FullClient<RuntimeApi>,
     FullSelectChain,
 >;
 
 #[allow(clippy::type_complexity)]
-pub fn new_partial<RuntimeApi, Executor>(
+pub fn new_partial<RuntimeApi>(
     config: &Configuration,
     consensus_manual: bool,
 ) -> Result<
     sc_service::PartialComponents<
-        FullClient<RuntimeApi, Executor>,
+        FullClient<RuntimeApi>,
         FullBackend,
         FullSelectChain,
-        sc_consensus::DefaultImportQueue<Block, FullClient<RuntimeApi, Executor>>,
-        sc_transaction_pool::FullPool<Block, FullClient<RuntimeApi, Executor>>,
+        sc_consensus::DefaultImportQueue<Block>,
+        sc_transaction_pool::FullPool<Block, FullClient<RuntimeApi>>,
         (
             sc_consensus_babe::BabeBlockImport<
                 Block,
-                FullClient<RuntimeApi, Executor>,
-                FullGrandpaBlockImport<RuntimeApi, Executor>,
+                FullClient<RuntimeApi>,
+                FullGrandpaBlockImport<RuntimeApi>,
             >,
             sc_consensus_babe::BabeLink<Block>,
             Option<sc_consensus_babe::BabeWorkerHandle<Block>>,
-            sc_consensus_grandpa::LinkHalf<
-                Block,
-                FullClient<RuntimeApi, Executor>,
-                FullSelectChain,
-            >,
+            sc_consensus_grandpa::LinkHalf<Block, FullClient<RuntimeApi>, FullSelectChain>,
             Option<Telemetry>,
         ),
     >,
     ServiceError,
 >
 where
-    RuntimeApi: sp_api::ConstructRuntimeApi<Block, FullClient<RuntimeApi, Executor>>
-        + Send
-        + Sync
-        + 'static,
-    RuntimeApi::RuntimeApi:
-        RuntimeApiCollection<StateBackend = sc_client_api::StateBackendFor<FullBackend, Block>>,
-    Executor: sc_executor::NativeExecutionDispatch + 'static,
+    RuntimeApi: sp_api::ConstructRuntimeApi<Block, FullClient<RuntimeApi>> + Send + Sync + 'static,
+    RuntimeApi::RuntimeApi: RuntimeApiCollection,
 {
     let telemetry = config
         .telemetry_endpoints
@@ -249,7 +248,7 @@ where
         })
         .transpose()?;
 
-    let executor = sc_service::new_native_or_wasm_executor(config);
+    let executor = sc_service::new_wasm_executor(config);
 
     let (client, backend, keystore_container, task_manager) =
         sc_service::new_full_parts::<Block, RuntimeApi, _>(
@@ -279,6 +278,7 @@ where
     let client_ = client.clone();
     let (grandpa_block_import, grandpa_link) = sc_consensus_grandpa::block_import(
         client.clone(),
+        GRANDPA_JUSTIFICATION_PERIOD,
         &(client_ as Arc<_>),
         select_chain.clone(),
         telemetry.as_ref().map(|x| x.handle()),
@@ -301,26 +301,33 @@ where
         (import_queue, None)
     } else {
         let slot_duration = babe_link.config().slot_duration();
-        let (queue, handle) = sc_consensus_babe::import_queue(
-            babe_link.clone(),
-            babe_block_import.clone(),
-            Some(Box::new(justification_import)),
-            client.clone(),
-            select_chain.clone(),
-            move |_parent, ()| async move {
-                let timestamp = sp_timestamp::InherentDataProvider::from_system_time();
-
-                let slot =
-                    sp_consensus_babe::inherents::InherentDataProvider::from_timestamp_and_slot_duration(
-                        *timestamp,
-                        slot_duration,
-                    );
-                Ok((slot, timestamp))
-            },
-            &task_manager.spawn_essential_handle(),
-            config.prometheus_registry(),
-            telemetry.as_ref().map(|x| x.handle()),
-        )?;
+        let (queue, handle) =
+            sc_consensus_babe::import_queue(sc_consensus_babe::ImportQueueParams {
+                link: babe_link.clone(),
+                block_import: babe_block_import.clone(),
+                justification_import: Some(Box::new(justification_import)),
+                client: client.clone(),
+                select_chain: select_chain.clone(),
+                create_inherent_data_providers: move |_, ()| async move {
+                    let timestamp = sp_timestamp::InherentDataProvider::from_system_time();
+
+                    let slot =
+				sp_consensus_babe::inherents::InherentDataProvider::from_timestamp_and_slot_duration(
+					*timestamp,
+					slot_duration,
+				);
+
+                    Ok((slot, timestamp))
+                },
+                spawner: &task_manager.spawn_essential_handle(),
+                registry: config.prometheus_registry(),
+                telemetry: telemetry.as_ref().map(|x| x.handle()),
+                offchain_tx_pool_factory:
+                    sc_transaction_pool_api::OffchainTransactionPoolFactory::new(
+                        transaction_pool.clone(),
+                    ),
+            })?;
+
         (queue, Some(handle))
     };
 
@@ -343,18 +350,13 @@ where
 }
 
 /// Builds a new service for a full client.
-pub fn new_full<RuntimeApi, Executor>(
-    mut config: Configuration,
+pub fn new_full<RuntimeApi>(
+    config: Configuration,
     sealing: crate::cli::Sealing,
 ) -> Result<TaskManager, ServiceError>
 where
-    RuntimeApi: sp_api::ConstructRuntimeApi<Block, FullClient<RuntimeApi, Executor>>
-        + Send
-        + Sync
-        + 'static,
-    RuntimeApi::RuntimeApi:
-        RuntimeApiCollection<StateBackend = sc_client_api::StateBackendFor<FullBackend, Block>>,
-    Executor: sc_executor::NativeExecutionDispatch + 'static,
+    RuntimeApi: sp_api::ConstructRuntimeApi<Block, FullClient<RuntimeApi>> + Send + Sync + 'static,
+    RuntimeApi::RuntimeApi: RuntimeApiCollection,
 {
     let sc_service::PartialComponents {
         client,
@@ -365,7 +367,7 @@ where
         select_chain,
         transaction_pool,
         other: (block_import, babe_link, babe_worker_handle, grandpa_link, mut telemetry),
-    } = new_partial::<RuntimeApi, Executor>(&config, sealing.is_manual_consensus())?;
+    } = new_partial::<RuntimeApi>(&config, sealing.is_manual_consensus())?;
 
     let grandpa_protocol_name = sc_consensus_grandpa::protocol_standard_name(
         &client
@@ -375,12 +377,12 @@ where
             .expect("Genesis block exists; qed"),
         &config.chain_spec,
     );
-    config
-        .network
-        .extra_sets
-        .push(sc_consensus_grandpa::grandpa_peers_set_config(
-            grandpa_protocol_name.clone(),
-        ));
+
+    let mut net_config = sc_network::config::FullNetworkConfiguration::new(&config.network);
+    let (grandpa_protocol_config, grandpa_notification_service) =
+        sc_consensus_grandpa::grandpa_peers_set_config(grandpa_protocol_name.clone());
+    net_config.add_notification_protocol(grandpa_protocol_config);
+
     let warp_sync = Arc::new(sc_consensus_grandpa::warp_proof::NetworkProvider::new(
         backend.clone(),
         grandpa_link.shared_authority_set().clone(),
@@ -390,23 +392,16 @@ where
     let (network, system_rpc_tx, tx_handler_controller, network_starter, sync_service) =
         sc_service::build_network(sc_service::BuildNetworkParams {
             config: &config,
+            net_config,
             client: client.clone(),
             transaction_pool: transaction_pool.clone(),
             spawn_handle: task_manager.spawn_handle(),
             import_queue,
             block_announce_validator_builder: None,
             warp_sync_params: Some(WarpSyncParams::WithProvider(warp_sync)),
+            block_relay: None,
         })?;
 
-    if config.offchain_worker.enabled {
-        sc_service::build_offchain_workers(
-            &config,
-            task_manager.spawn_handle(),
-            client.clone(),
-            network.clone(),
-        );
-    }
-
     let role = config.role.clone();
     let force_authoring = config.force_authoring;
     let backoff_authoring_blocks: Option<()> = None;
@@ -414,21 +409,37 @@ where
     let enable_grandpa = !config.disable_grandpa;
     let prometheus_registry = config.prometheus_registry().cloned();
 
+    if config.offchain_worker.enabled {
+        use futures::FutureExt;
+
+        task_manager.spawn_handle().spawn(
+            "offchain-workers-runner",
+            "offchain-work",
+            sc_offchain::OffchainWorkers::new(sc_offchain::OffchainWorkerOptions {
+                runtime_api_provider: client.clone(),
+                keystore: Some(keystore_container.keystore()),
+                offchain_db: backend.offchain_storage(),
+                transaction_pool: Some(
+                    sc_transaction_pool_api::OffchainTransactionPoolFactory::new(
+                        transaction_pool.clone(),
+                    ),
+                ),
+                network_provider: network.clone(),
+                is_validator: role.is_authority(),
+                enable_http_requests: false,
+                custom_extensions: move |_| vec![],
+            })
+            .run(client.clone(), task_manager.spawn_handle())
+            .boxed(),
+        );
+    }
+
     let mut command_sink_opt = None;
     if role.is_authority() {
-        let distance_dir = config.base_path.as_ref().map_or_else(
-            || {
-                PathBuf::from(format!(
-                    "/tmp/duniter/chains/{}/distance",
-                    config.chain_spec.id()
-                ))
-            },
-            |base_path| {
-                base_path
-                    .config_dir(config.chain_spec.id())
-                    .join("distance")
-            },
-        );
+        let distance_dir = config
+            .base_path
+            .config_dir(config.chain_spec.id())
+            .join("distance");
 
         let proposer_factory = sc_basic_authorship::ProposerFactory::new(
             task_manager.spawn_handle(),
@@ -522,7 +533,7 @@ where
                             let distance =
                                 dc_distance::create_distance_inherent_data_provider::<
                                     Block,
-                                    FullClient<RuntimeApi, Executor>,
+                                    FullClient<RuntimeApi>,
                                     FullBackend,
                                 >(
                                     &*client, parent, distance_dir, &babe_owner_keys.clone()
@@ -569,7 +580,7 @@ where
 
                         let distance = dc_distance::create_distance_inherent_data_provider::<
                             Block,
-                            FullClient<RuntimeApi, Executor>,
+                            FullClient<RuntimeApi>,
                             FullBackend,
                         >(
                             &*client, parent, distance_dir, &babe_owner_keys.clone()
@@ -631,7 +642,7 @@ where
         client,
         keystore: keystore_container.keystore(),
         task_manager: &mut task_manager,
-        transaction_pool,
+        transaction_pool: transaction_pool.clone(),
         rpc_builder: rpc_extensions_builder,
         system_rpc_tx,
         tx_handler_controller,
@@ -647,9 +658,8 @@ where
     };
 
     let grandpa_config = sc_consensus_grandpa::Config {
-        // FIXME #1578 make this available through chainspec
         gossip_duration: Duration::from_millis(333),
-        justification_period: 512,
+        justification_generation_period: GRANDPA_JUSTIFICATION_PERIOD,
         name: Some(name),
         observer_enabled: false,
         keystore,
@@ -674,6 +684,10 @@ where
             prometheus_registry,
             shared_voter_state: SharedVoterState::empty(),
             telemetry: telemetry.as_ref().map(|x| x.handle()),
+            notification_service: grandpa_notification_service,
+            offchain_tx_pool_factory: sc_transaction_pool_api::OffchainTransactionPoolFactory::new(
+                transaction_pool.clone(),
+            ),
         };
 
         // the GRANDPA voter task is considered infallible, i.e.
@@ -716,10 +730,9 @@ impl client::ExecuteWithClient for RevertConsensus {
 
     fn execute_with_client<Client, Api, Backend>(self, client: Arc<Client>) -> Self::Output
     where
-        <Api as sp_api::ApiExt<Block>>::StateBackend: sp_api::StateBackend<BlakeTwo256>,
-        Backend: sc_client_api::Backend<Block> + 'static,
-        Backend::State: sp_api::StateBackend<BlakeTwo256>,
-        Api: RuntimeApiCollection<StateBackend = Backend::State>,
+        Backend: sc_client_api::Backend<Block>,
+        Backend::State: sc_client_api::StateBackend<BlakeTwo256>,
+        Api: RuntimeApiCollection,
         Client: client::AbstractClient<Block, Backend, Api = Api> + 'static,
     {
         // Revert consensus-related components.
diff --git a/node/src/service/client.rs b/node/src/service/client.rs
index e54efcfc3..1faebeb6c 100644
--- a/node/src/service/client.rs
+++ b/node/src/service/client.rs
@@ -15,10 +15,11 @@
 // along with Duniter-v2S. If not, see <https://www.gnu.org/licenses/>.
 
 use common_runtime::{AccountId, Balance, Block, BlockNumber, Hash, Header, Index};
+use sc_client_api::MerkleValue;
 use sc_client_api::{
     AuxStore, Backend as BackendT, BlockchainEvents, KeysIter, PairsIter, UsageProvider,
 };
-use sp_api::{CallApiAt, NumberFor, ProvideRuntimeApi};
+use sp_api::{CallApiAt, ProvideRuntimeApi};
 use sp_blockchain::{HeaderBackend, HeaderMetadata};
 use sp_consensus::BlockStatus;
 use sp_core::{Encode, Pair};
@@ -40,15 +41,15 @@ pub trait AbstractClient<Block, Backend>:
     + Sync
     + ProvideRuntimeApi<Block>
     + HeaderBackend<Block>
-    + CallApiAt<Block, StateBackend = Backend::State>
+    + CallApiAt<Block>
     + AuxStore
     + UsageProvider<Block>
     + HeaderMetadata<Block, Error = sp_blockchain::Error>
 where
     Block: BlockT,
     Backend: BackendT<Block>,
-    Backend::State: sp_api::StateBackend<BlakeTwo256>,
-    Self::Api: RuntimeApiCollection<StateBackend = Backend::State>,
+    Backend::State: sc_client_api::StateBackend<BlakeTwo256>,
+    Self::Api: RuntimeApiCollection,
 {
 }
 
@@ -56,7 +57,7 @@ impl<Block, Backend, Client> AbstractClient<Block, Backend> for Client
 where
     Block: BlockT,
     Backend: BackendT<Block>,
-    Backend::State: sp_api::StateBackend<BlakeTwo256>,
+    Backend::State: sc_client_api::StateBackend<BlakeTwo256>,
     Client: BlockchainEvents<Block>
         + ProvideRuntimeApi<Block>
         + HeaderBackend<Block>
@@ -65,9 +66,9 @@ where
         + Sized
         + Send
         + Sync
-        + CallApiAt<Block, StateBackend = Backend::State>
+        + CallApiAt<Block>
         + HeaderMetadata<Block, Error = sp_blockchain::Error>,
-    Client::Api: RuntimeApiCollection<StateBackend = Backend::State>,
+    Client::Api: RuntimeApiCollection,
 {
 }
 
@@ -102,10 +103,9 @@ pub trait ExecuteWithClient {
     /// Execute whatever should be executed with the given client instance.
     fn execute_with_client<Client, Api, Backend>(self, client: Arc<Client>) -> Self::Output
     where
-        <Api as sp_api::ApiExt<Block>>::StateBackend: sp_api::StateBackend<BlakeTwo256>,
         Backend: sc_client_api::Backend<Block> + 'static,
-        Backend::State: sp_api::StateBackend<BlakeTwo256>,
-        Api: crate::service::RuntimeApiCollection<StateBackend = Backend::State>,
+        Backend::State: sc_client_api::StateBackend<BlakeTwo256>,
+        Api: crate::service::RuntimeApiCollection,
         Client: AbstractClient<Block, Backend, Api = Api> + 'static;
 }
 
@@ -125,12 +125,9 @@ pub trait RuntimeApiCollection:
     + sp_session::SessionKeys<Block>
     + sp_transaction_pool::runtime_api::TaggedTransactionQueue<Block>
     + substrate_frame_rpc_system::AccountNonceApi<Block, AccountId, Index>
-where
-    <Self as sp_api::ApiExt<Block>>::StateBackend: sp_api::StateBackend<BlakeTwo256>,
 {
 }
-impl<Api> RuntimeApiCollection for Api
-where
+impl<Api> RuntimeApiCollection for Api where
     Api: pallet_grandpa::fg_primitives::GrandpaApi<Block>
         + pallet_transaction_payment_rpc_runtime_api::TransactionPaymentApi<Block, Balance>
         + sp_api::ApiExt<Block>
@@ -141,8 +138,7 @@ where
         + sp_offchain::OffchainWorkerApi<Block>
         + sp_session::SessionKeys<Block>
         + sp_transaction_pool::runtime_api::TaggedTransactionQueue<Block>
-        + substrate_frame_rpc_system::AccountNonceApi<Block, AccountId, Index>,
-    <Self as sp_api::ApiExt<Block>>::StateBackend: sp_api::StateBackend<BlakeTwo256>,
+        + substrate_frame_rpc_system::AccountNonceApi<Block, AccountId, Index>
 {
 }
 
@@ -150,11 +146,11 @@ where
 #[derive(Clone)]
 pub enum Client {
     #[cfg(feature = "g1")]
-    G1(Arc<super::FullClient<g1_runtime::RuntimeApi, super::G1Executor>>),
+    G1(Arc<super::FullClient<g1_runtime::RuntimeApi>>),
     #[cfg(feature = "gtest")]
-    GTest(Arc<super::FullClient<gtest_runtime::RuntimeApi, super::GTestExecutor>>),
+    GTest(Arc<super::FullClient<gtest_runtime::RuntimeApi>>),
     #[cfg(feature = "gdev")]
-    GDev(Arc<super::FullClient<gdev_runtime::RuntimeApi, super::GDevExecutor>>),
+    GDev(Arc<super::FullClient<gdev_runtime::RuntimeApi>>),
 }
 
 macro_rules! with_client {
@@ -201,24 +197,22 @@ impl ClientHandle for Client {
 }
 
 #[cfg(feature = "g1")]
-impl From<Arc<super::FullClient<g1_runtime::RuntimeApi, super::G1Executor>>> for Client {
-    fn from(client: Arc<super::FullClient<g1_runtime::RuntimeApi, super::G1Executor>>) -> Self {
+impl From<Arc<super::FullClient<g1_runtime::RuntimeApi>>> for Client {
+    fn from(client: Arc<super::FullClient<g1_runtime::RuntimeApi>>) -> Self {
         Self::G1(client)
     }
 }
 
 #[cfg(feature = "gtest")]
-impl From<Arc<super::FullClient<gtest_runtime::RuntimeApi, super::GTestExecutor>>> for Client {
-    fn from(
-        client: Arc<super::FullClient<gtest_runtime::RuntimeApi, super::GTestExecutor>>,
-    ) -> Self {
+impl From<Arc<super::FullClient<gtest_runtime::RuntimeApi>>> for Client {
+    fn from(client: Arc<super::FullClient<gtest_runtime::RuntimeApi>>) -> Self {
         Self::GTest(client)
     }
 }
 
 #[cfg(feature = "gdev")]
-impl From<Arc<super::FullClient<gdev_runtime::RuntimeApi, super::GDevExecutor>>> for Client {
-    fn from(client: Arc<super::FullClient<gdev_runtime::RuntimeApi, super::GDevExecutor>>) -> Self {
+impl From<Arc<super::FullClient<gdev_runtime::RuntimeApi>>> for Client {
+    fn from(client: Arc<super::FullClient<gdev_runtime::RuntimeApi>>) -> Self {
         Self::GDev(client)
     }
 }
@@ -271,7 +265,7 @@ impl sc_client_api::BlockBackend<Block> for Client {
 
     fn block_hash(
         &self,
-        number: NumberFor<Block>,
+        number: sp_runtime::traits::NumberFor<Block>,
     ) -> sp_blockchain::Result<Option<<Block as BlockT>::Hash>> {
         match_client!(self, block_hash(number))
     }
@@ -320,11 +314,11 @@ use g1_runtime as runtime;
 #[cfg(feature = "gdev")]
 use gdev_runtime as runtime;
 #[cfg(feature = "gdev")]
-type FullClient = super::FullClient<runtime::RuntimeApi, super::GDevExecutor>;
+type FullClient = super::FullClient<runtime::RuntimeApi>;
 #[cfg(feature = "gtest")]
 use gtest_runtime as runtime;
 #[cfg(feature = "gtest")]
-type FullClient = super::FullClient<runtime::RuntimeApi, super::GTestExecutor>;
+type FullClient = super::FullClient<runtime::RuntimeApi>;
 
 #[cfg(any(feature = "gdev", feature = "gtest"))]
 impl BenchmarkCallSigner<runtime::RuntimeCall, sp_core::sr25519::Pair> for FullClient {
@@ -382,9 +376,11 @@ impl frame_benchmarking_cli::ExtrinsicBuilder for Client {
     fn pallet(&self) -> &str {
         "system"
     }
+
     fn extrinsic(&self) -> &str {
         "remark"
     }
+
     fn build(&self, nonce: u32) -> std::result::Result<sp_runtime::OpaqueExtrinsic, &'static str> {
         with_client! {
             self, client, {
@@ -404,6 +400,7 @@ impl sp_blockchain::HeaderBackend<Block> for Client {
     fn header(&self, hash: Hash) -> sp_blockchain::Result<Option<Header>> {
         match_client!(self, header(hash))
     }
+
     fn info(&self) -> sp_blockchain::Info<Block> {
         match_client!(self, info())
     }
@@ -492,6 +489,25 @@ impl sc_client_api::StorageProvider<Block, super::FullBackend> for Client {
     ) -> sp_blockchain::Result<Option<<Block as BlockT>::Hash>> {
         match_client!(self, child_storage_hash(hash, child_info, key))
     }
+
+    // Given a block's hash and a key, return the closest merkle value.
+    fn closest_merkle_value(
+        &self,
+        hash: <Block as BlockT>::Hash,
+        key: &StorageKey,
+    ) -> sp_blockchain::Result<Option<MerkleValue<<Block as BlockT>::Hash>>> {
+        match_client!(self, closest_merkle_value(hash, key))
+    }
+
+    // Given a block's hash and a key and a child storage key, return the closest merkle value.
+    fn child_closest_merkle_value(
+        &self,
+        hash: <Block as BlockT>::Hash,
+        child_info: &ChildInfo,
+        key: &StorageKey,
+    ) -> sp_blockchain::Result<Option<MerkleValue<<Block as BlockT>::Hash>>> {
+        match_client!(self, child_closest_merkle_value(hash, child_info, key))
+    }
 }
 
 impl sc_client_api::UsageProvider<Block> for Client {
diff --git a/pallets/authority-members/Cargo.toml b/pallets/authority-members/Cargo.toml
index 8337faccb..92333b0c1 100644
--- a/pallets/authority-members/Cargo.toml
+++ b/pallets/authority-members/Cargo.toml
@@ -18,94 +18,103 @@ std = [
     'codec/std',
     'frame-support/std',
     'frame-system/std',
-    'frame-benchmarking/std',
-    'log/std',
+    'frame-benchmarking?/std',
     'pallet-session/std',
     'pallet-offences/std',
-    'serde',
+    'serde/std',
+    'scale-info/std',
     'sp-core/std',
-    'sp-membership/std',
     'sp-runtime/std',
     'sp-staking/std',
     'sp-std/std',
+    'sp-io/std',
+    'sp-state-machine/std',
+    'log/std',
+]
+try-runtime = [
+    'frame-support/try-runtime',
+    'frame-system/try-runtime',
+    'sp-runtime/try-runtime',
+    'pallet-session/try-runtime',
+    'pallet-offences/try-runtime',
 ]
-try-runtime = ['frame-support/try-runtime']
 
 [dependencies]
+
+# crates.io
+log = { version = "0.4.20", default-features = false }
 # local
 pallet-offences = { path = "../offences", default-features = false }
-sp-membership = { path = "../../primitives/membership", default-features = false }
+scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
 
-# crates.io
-log = { version = "0.4.14", default-features = false }
-scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
 [dependencies.codec]
 default-features = false
 features = ['derive']
 package = 'parity-scale-codec'
-version = "3.1.5"
+version = "3.6.9"
 
 # substrate
 [dependencies.frame-benchmarking]
 default-features = false
-git = 'https://github.com/duniter/substrate'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
 optional = true
-branch = 'duniter-substrate-v0.9.42'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-support]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-system]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.pallet-session]
 default-features = false
 features = ["historical"]
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.serde]
-version = "1.0.101"
 optional = true
+default-features = false
+version = "1.0.195"
 features = ["derive"]
 
 [dependencies.sp-core]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-runtime]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-staking]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
-[dependencies.sp-std]
-default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
-### DOC ###
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [package.metadata.docs.rs]
 targets = ['x86_64-unknown-linux-gnu']
 
-### DEV ###
+[dependencies.sp-std]
+default-features = false
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dev-dependencies.maplit]
+default-features = false
 version = '1.0.2'
 
-[dev-dependencies.serde]
-version = '1.0.119'
-
 [dev-dependencies.sp-io]
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+default-features = false
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
+
+[dev-dependencies.sp-state-machine]
+default-features = false
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
diff --git a/pallets/authority-members/src/lib.rs b/pallets/authority-members/src/lib.rs
index 3494331ad..963a180b5 100644
--- a/pallets/authority-members/src/lib.rs
+++ b/pallets/authority-members/src/lib.rs
@@ -31,7 +31,7 @@ mod tests;
 #[cfg(feature = "runtime-benchmarks")]
 mod benchmarking;
 
-pub use impls::*;
+//pub use impls::*;
 pub use pallet::*;
 pub use sp_staking::SessionIndex;
 pub use traits::*;
@@ -88,7 +88,6 @@ pub mod pallet {
         pub initial_authorities: BTreeMap<T::MemberId, (T::AccountId, bool)>,
     }
 
-    #[cfg(feature = "std")]
     impl<T: Config> Default for GenesisConfig<T> {
         fn default() -> Self {
             Self {
@@ -98,7 +97,7 @@ pub mod pallet {
     }
 
     #[pallet::genesis_build]
-    impl<T: Config> GenesisBuild<T> for GenesisConfig<T> {
+    impl<T: Config> BuildGenesisConfig for GenesisConfig<T> {
         fn build(&self) {
             for (member_id, (account_id, _is_online)) in &self.initial_authorities {
                 Members::<T>::insert(member_id, MemberData::new_genesis(account_id.to_owned()));
@@ -233,6 +232,7 @@ pub mod pallet {
 
             Ok(().into())
         }
+
         /// ask to join the set of validators two sessions after
         #[pallet::call_index(1)]
         #[pallet::weight(<T as pallet::Config>::WeightInfo::go_online())]
@@ -291,6 +291,7 @@ pub mod pallet {
 
             Ok(().into())
         }
+
         /// remove an identity from the set of authorities
         #[pallet::call_index(3)]
         #[pallet::weight(<T as pallet::Config>::WeightInfo::remove_member())]
@@ -305,6 +306,7 @@ pub mod pallet {
 
             Ok(().into())
         }
+
         #[pallet::call_index(4)]
         #[pallet::weight(<T as pallet::Config>::WeightInfo::remove_member_from_blacklist())]
         /// remove an identity from the blacklist
@@ -404,6 +406,7 @@ pub mod pallet {
             // Emit event
             Self::deposit_event(Event::MemberRemoved { member: member_id });
         }
+
         /// perform incoming authorities insertion
         fn insert_in(member_id: T::MemberId) -> bool {
             let not_already_inserted = IncomingAuthorities::<T>::mutate(|members_ids| {
@@ -419,6 +422,7 @@ pub mod pallet {
             }
             not_already_inserted
         }
+
         /// perform outgoing authority insertion
         pub fn insert_out(member_id: T::MemberId) -> bool {
             let not_already_inserted = OutgoingAuthorities::<T>::mutate(|members_ids| {
@@ -434,28 +438,33 @@ pub mod pallet {
             }
             not_already_inserted
         }
+
         /// check if member is incoming
         fn is_incoming(member_id: T::MemberId) -> bool {
             IncomingAuthorities::<T>::get()
                 .binary_search(&member_id)
                 .is_ok()
         }
+
         /// check if member is online
         fn is_online(member_id: T::MemberId) -> bool {
             OnlineAuthorities::<T>::get()
                 .binary_search(&member_id)
                 .is_ok()
         }
+
         /// check if member is outgoing
         fn is_outgoing(member_id: T::MemberId) -> bool {
             OutgoingAuthorities::<T>::get()
                 .binary_search(&member_id)
                 .is_ok()
         }
+
         /// check if member is blacklisted
         fn is_blacklisted(member_id: T::MemberId) -> bool {
             Blacklist::<T>::get().contains(&member_id)
         }
+
         /// perform removal from incoming authorities
         fn remove_in(member_id: T::MemberId) {
             IncomingAuthorities::<T>::mutate(|members_ids| {
@@ -464,6 +473,7 @@ pub mod pallet {
                 }
             })
         }
+
         /// perform removal from online authorities
         fn remove_online(member_id: T::MemberId) {
             OnlineAuthorities::<T>::mutate(|members_ids| {
@@ -472,6 +482,7 @@ pub mod pallet {
                 }
             });
         }
+
         /// perform removal from outgoing authorities
         fn remove_out(member_id: T::MemberId) {
             OutgoingAuthorities::<T>::mutate(|members_ids| {
@@ -480,6 +491,7 @@ pub mod pallet {
                 }
             });
         }
+
         /// check that accountid is member
         fn verify_ownership_and_membership(
             who: &T::AccountId,
@@ -558,6 +570,7 @@ impl<T: Config> pallet_session::SessionManager<T::ValidatorId> for Pallet<T> {
             .collect(),
         )
     }
+
     /// Same as `new_session`, but it this should only be called at genesis.
     fn new_session_genesis(_new_index: SessionIndex) -> Option<Vec<T::ValidatorId>> {
         Some(
@@ -573,11 +586,13 @@ impl<T: Config> pallet_session::SessionManager<T::ValidatorId> for Pallet<T> {
                 .collect(),
         )
     }
+
     /// End the session.
     ///
     /// Because the session pallet can queue validator set the ending session can be lower than the
     /// last new session index.
     fn end_session(_end_index: SessionIndex) {}
+
     /// Start an already planned session.
     ///
     /// The session start to be used for validation.
@@ -609,6 +624,7 @@ impl<T: Config> pallet_session::historical::SessionManager<T::ValidatorId, T::Fu
                 .collect()
         })
     }
+
     fn new_session_genesis(
         new_index: SessionIndex,
     ) -> Option<sp_std::vec::Vec<(T::ValidatorId, T::FullIdentification)>> {
@@ -621,9 +637,11 @@ impl<T: Config> pallet_session::historical::SessionManager<T::ValidatorId, T::Fu
             },
         )
     }
+
     fn start_session(start_index: SessionIndex) {
         <Self as pallet_session::SessionManager<_>>::start_session(start_index)
     }
+
     fn end_session(end_index: SessionIndex) {
         <Self as pallet_session::SessionManager<_>>::end_session(end_index)
     }
diff --git a/pallets/authority-members/src/mock.rs b/pallets/authority-members/src/mock.rs
index 4c818534a..f4d412df5 100644
--- a/pallets/authority-members/src/mock.rs
+++ b/pallets/authority-members/src/mock.rs
@@ -16,28 +16,24 @@
 
 use super::*;
 use crate::{self as pallet_authority_members};
-use frame_support::{
-    pallet_prelude::*,
-    parameter_types,
-    traits::{Everything, GenesisBuild},
-    BasicExternalities,
-};
+use frame_support::{pallet_prelude::*, parameter_types, traits::Everything};
 use frame_system as system;
 use pallet_offences::traits::OnOffenceHandler;
 use pallet_offences::SlashStrategy;
 use pallet_session::ShouldEndSession;
 use sp_core::{crypto::key_types::DUMMY, H256};
+use sp_runtime::BuildStorage;
 use sp_runtime::{
     impl_opaque_keys,
-    testing::{Header, UintAuthorityId},
+    testing::UintAuthorityId,
     traits::{BlakeTwo256, ConvertInto, IdentityLookup, IsMember, OpaqueKeys},
     KeyTypeId,
 };
 use sp_staking::offence::OffenceDetails;
+use sp_state_machine::BasicExternalities;
 
 type AccountId = u64;
 type Block = frame_system::mocking::MockBlock<Test>;
-type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic<Test>;
 
 impl_opaque_keys! {
     pub struct MockSessionKeys {
@@ -53,14 +49,11 @@ impl From<UintAuthorityId> for MockSessionKeys {
 
 // Configure a mock runtime to test the pallet.
 frame_support::construct_runtime!(
-    pub enum Test where
-        Block = Block,
-        NodeBlock = Block,
-        UncheckedExtrinsic = UncheckedExtrinsic,
+    pub enum Test
     {
-        System: frame_system::{Pallet, Call, Config, Storage, Event<T>},
-        Session: pallet_session::{Pallet, Call, Storage, Config<T>, Event},
-        AuthorityMembers: pallet_authority_members::{Pallet, Call, Storage, Config<T>, Event<T>},
+        System: frame_system,
+        Session: pallet_session,
+        AuthorityMembers: pallet_authority_members,
     }
 );
 
@@ -70,30 +63,30 @@ parameter_types! {
 }
 
 impl system::Config for Test {
+    type AccountData = ();
+    type AccountId = AccountId;
     type BaseCallFilter = Everything;
-    type BlockWeights = ();
+    type Block = Block;
+    type BlockHashCount = BlockHashCount;
     type BlockLength = ();
+    type BlockWeights = ();
     type DbWeight = ();
-    type RuntimeOrigin = RuntimeOrigin;
-    type RuntimeCall = RuntimeCall;
-    type Index = u64;
-    type BlockNumber = u64;
     type Hash = H256;
     type Hashing = BlakeTwo256;
-    type AccountId = AccountId;
     type Lookup = IdentityLookup<Self::AccountId>;
-    type Header = Header;
-    type RuntimeEvent = RuntimeEvent;
-    type BlockHashCount = BlockHashCount;
-    type Version = ();
-    type PalletInfo = PalletInfo;
-    type AccountData = ();
-    type OnNewAccount = ();
+    type MaxConsumers = frame_support::traits::ConstU32<16>;
+    type Nonce = u64;
     type OnKilledAccount = ();
-    type SystemWeightInfo = ();
-    type SS58Prefix = SS58Prefix;
+    type OnNewAccount = ();
     type OnSetCode = ();
-    type MaxConsumers = frame_support::traits::ConstU32<16>;
+    type PalletInfo = PalletInfo;
+    type RuntimeCall = RuntimeCall;
+    type RuntimeEvent = RuntimeEvent;
+    type RuntimeOrigin = RuntimeOrigin;
+    type RuntimeTask = ();
+    type SS58Prefix = SS58Prefix;
+    type SystemWeightInfo = ();
+    type Version = ();
 }
 
 pub struct TestSessionHandler;
@@ -121,14 +114,14 @@ impl ShouldEndSession<u64> for TestShouldEndSession {
 }
 
 impl pallet_session::Config for Test {
+    type Keys = MockSessionKeys;
+    type NextSessionRotation = ();
     type RuntimeEvent = RuntimeEvent;
+    type SessionHandler = TestSessionHandler;
+    type SessionManager = AuthorityMembers;
+    type ShouldEndSession = TestShouldEndSession;
     type ValidatorId = u64;
     type ValidatorIdOf = ConvertInto;
-    type ShouldEndSession = TestShouldEndSession;
-    type NextSessionRotation = ();
-    type SessionManager = AuthorityMembers;
-    type SessionHandler = TestSessionHandler;
-    type Keys = MockSessionKeys;
     type WeightInfo = ();
 }
 
@@ -155,12 +148,12 @@ impl pallet_authority_members::Config for Test {
     type MaxAuthorities = ConstU32<4>;
     type MemberId = u64;
     type MemberIdOf = ConvertInto;
+    type OnIncomingMember = ();
     type OnNewSession = ();
+    type OnOutgoingMember = ();
     type RemoveMemberOrigin = system::EnsureRoot<u64>;
     type RuntimeEvent = RuntimeEvent;
     type WeightInfo = ();
-    type OnIncomingMember = ();
-    type OnOutgoingMember = ();
 }
 
 // Build genesis storage according to the mock runtime.
@@ -172,8 +165,8 @@ pub fn new_test_ext(initial_authorities_len: u64) -> sp_io::TestExternalities {
         .map(|i| (i * 3, i * 3, UintAuthorityId(i * 3).into()))
         .collect();
 
-    let mut t = frame_system::GenesisConfig::default()
-        .build_storage::<Test>()
+    let mut t = frame_system::GenesisConfig::<Test>::default()
+        .build_storage()
         .unwrap();
     BasicExternalities::execute_with_storage(&mut t, || {
         for (ref k, ..) in &keys {
diff --git a/pallets/authority-members/src/weights.rs b/pallets/authority-members/src/weights.rs
index f4160f078..5a32bf50f 100644
--- a/pallets/authority-members/src/weights.rs
+++ b/pallets/authority-members/src/weights.rs
@@ -42,6 +42,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads(7 as u64))
             .saturating_add(RocksDbWeight::get().writes(2 as u64))
     }
+
     // Storage: Identity IdentityIndexOf (r:1 w:0)
     // Storage: SmithMembership Membership (r:1 w:0)
     // Storage: AuthorityMembers Members (r:1 w:0)
@@ -56,6 +57,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads(8 as u64))
             .saturating_add(RocksDbWeight::get().writes(2 as u64))
     }
+
     // Storage: Identity IdentityIndexOf (r:1 w:0)
     // Storage: SmithMembership Membership (r:1 w:0)
     // Storage: System Account (r:1 w:0)
@@ -70,6 +72,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads(11 as u64))
             .saturating_add(RocksDbWeight::get().writes(3 as u64))
     }
+
     // Storage: AuthorityMembers Members (r:1 w:1)
     // Storage: AuthorityMembers OnlineAuthorities (r:1 w:1)
     // Storage: AuthorityMembers OutgoingAuthorities (r:1 w:1)
@@ -86,6 +89,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads(9 as u64))
             .saturating_add(RocksDbWeight::get().writes(13 as u64))
     }
+
     // Storage: AuthorityMembers BlackList (r:1 w:1)
     fn remove_member_from_blacklist() -> Weight {
         // Minimum execution time: 60_023 nanoseconds.
diff --git a/pallets/certification/Cargo.toml b/pallets/certification/Cargo.toml
index d17ef7ee1..8ed57c30a 100644
--- a/pallets/certification/Cargo.toml
+++ b/pallets/certification/Cargo.toml
@@ -11,81 +11,82 @@ version = '3.0.0'
 
 [features]
 default = ['std']
-runtime-benchmarks = ["frame-benchmarking/runtime-benchmarks"]
+runtime-benchmarks = [
+    'frame-benchmarking/runtime-benchmarks',
+    'frame-support/runtime-benchmarks',
+    'frame-system/runtime-benchmarks',
+    'sp-runtime/runtime-benchmarks',
+]
 std = [
     'codec/std',
     'frame-support/std',
     'frame-system/std',
-    'frame-benchmarking/std',
-    'serde',
+    'frame-benchmarking?/std',
+    'scale-info/std',
     'sp-core/std',
     'sp-runtime/std',
     'sp-std/std',
+    'sp-io/std',
+]
+try-runtime = [
+    'frame-support/try-runtime',
+    'frame-system/try-runtime',
+    'sp-runtime/try-runtime',
 ]
-try-runtime = ['frame-support/try-runtime']
 
 [dependencies]
 duniter-primitives = { path = "../../primitives/duniter", default-features = false }
 
 # substrate
-scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
+scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
 
 [dependencies.codec]
 default-features = false
 features = ['derive']
 package = 'parity-scale-codec'
-version = "3.1.5"
+version = "3.6.9"
 
 [dependencies.frame-benchmarking]
 default-features = false
-git = 'https://github.com/duniter/substrate'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
 optional = true
-branch = 'duniter-substrate-v0.9.42'
-
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-support]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-system]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
-[dependencies.serde]
-version = "1.0.101"
-optional = true
-features = ["derive"]
+[dependencies.maplit]
+default-features = false
+version = '1.0.2'
 
 [dependencies.sp-core]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-runtime]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
-[dependencies.sp-std]
-default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
-[dependencies.maplit]
-version = '1.0.2'
-
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 ### DOC ###
 
 [package.metadata.docs.rs]
+default-features = false
 targets = ['x86_64-unknown-linux-gnu']
-[dev-dependencies.serde]
-version = '1.0.119'
 
-### DEV ###
+[dependencies.sp-std]
+default-features = false
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dev-dependencies.sp-io]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
diff --git a/pallets/certification/src/benchmarking.rs b/pallets/certification/src/benchmarking.rs
index 803903bc1..5aa67fdf4 100644
--- a/pallets/certification/src/benchmarking.rs
+++ b/pallets/certification/src/benchmarking.rs
@@ -19,8 +19,8 @@
 use super::*;
 
 use frame_benchmarking::benchmarks;
-use frame_benchmarking::Zero;
 use frame_system::RawOrigin;
+use sp_runtime::traits::Zero;
 
 #[cfg(test)]
 use maplit::btreemap;
@@ -100,11 +100,11 @@ benchmarks! {
     }
 
     on_initialize {
-        assert!(CertsRemovableOn::<T>::try_get(T::BlockNumber::zero()).is_err());
-    }: {Pallet::<T>::on_initialize(T::BlockNumber::zero());}
+        assert!(CertsRemovableOn::<T>::try_get(BlockNumberFor::<T>::zero()).is_err());
+    }: {Pallet::<T>::on_initialize(BlockNumberFor::<T>::zero());}
 
     do_remove_cert_noop {
-    }: {Pallet::<T>::do_remove_cert(100.into(), 101.into(), Some(T::BlockNumber::zero()));}
+    }: {Pallet::<T>::do_remove_cert(100.into(), 101.into(), Some(BlockNumberFor::<T>::zero()));}
 
     do_remove_cert {
         let issuer: T::IdtyIndex = 1.into();
diff --git a/pallets/certification/src/lib.rs b/pallets/certification/src/lib.rs
index 6da865932..88cdf0c29 100644
--- a/pallets/certification/src/lib.rs
+++ b/pallets/certification/src/lib.rs
@@ -29,6 +29,7 @@ mod mock;
 #[cfg(test)]
 mod tests;
 
+use frame_system::pallet_prelude::BlockNumberFor;
 pub use pallet::*;
 pub use types::*;
 pub use weights::WeightInfo;
@@ -60,7 +61,7 @@ pub mod pallet {
     pub trait Config: frame_system::Config {
         #[pallet::constant]
         /// Minimum duration between two certifications issued by the same issuer.
-        type CertPeriod: Get<Self::BlockNumber>;
+        type CertPeriod: Get<BlockNumberFor<Self>>;
         /// A short identity index.
         type IdtyIndex: Parameter
             + Member
@@ -91,7 +92,7 @@ pub mod pallet {
         type WeightInfo: WeightInfo;
         #[pallet::constant]
         /// Duration of validity of a certification.
-        type ValidityPeriod: Get<Self::BlockNumber>;
+        type ValidityPeriod: Get<BlockNumberFor<Self>>;
     }
 
     // GENESIS STUFF //
@@ -101,10 +102,9 @@ pub mod pallet {
     pub struct GenesisConfig<T: Config> {
         pub apply_cert_period_at_genesis: bool,
         pub certs_by_receiver:
-            BTreeMap<T::IdtyIndex, BTreeMap<T::IdtyIndex, Option<T::BlockNumber>>>,
+            BTreeMap<T::IdtyIndex, BTreeMap<T::IdtyIndex, Option<BlockNumberFor<T>>>>,
     }
 
-    #[cfg(feature = "std")]
     impl<T: Config> Default for GenesisConfig<T> {
         fn default() -> Self {
             Self {
@@ -115,12 +115,12 @@ pub mod pallet {
     }
 
     #[pallet::genesis_build]
-    impl<T: Config> GenesisBuild<T> for GenesisConfig<T> {
+    impl<T: Config> BuildGenesisConfig for GenesisConfig<T> {
         fn build(&self) {
             let mut cert_meta_by_issuer =
-                BTreeMap::<T::IdtyIndex, IdtyCertMeta<T::BlockNumber>>::new();
+                BTreeMap::<T::IdtyIndex, IdtyCertMeta<BlockNumberFor<T>>>::new();
             let mut certs_removable_on =
-                BTreeMap::<T::BlockNumber, Vec<(T::IdtyIndex, T::IdtyIndex)>>::new();
+                BTreeMap::<BlockNumberFor<T>, Vec<(T::IdtyIndex, T::IdtyIndex)>>::new();
             for (receiver, issuers) in &self.certs_by_receiver {
                 // Forbid self-cert
                 assert!(
@@ -204,19 +204,29 @@ pub mod pallet {
     #[pallet::storage]
     #[pallet::getter(fn idty_cert_meta)]
     pub type StorageIdtyCertMeta<T: Config> =
-        StorageMap<_, Twox64Concat, T::IdtyIndex, IdtyCertMeta<T::BlockNumber>, ValueQuery>;
+        StorageMap<_, Twox64Concat, T::IdtyIndex, IdtyCertMeta<BlockNumberFor<T>>, ValueQuery>;
 
     /// Certifications by receiver.
     #[pallet::storage]
     #[pallet::getter(fn certs_by_receiver)]
-    pub type CertsByReceiver<T: Config> =
-        StorageMap<_, Twox64Concat, T::IdtyIndex, Vec<(T::IdtyIndex, T::BlockNumber)>, ValueQuery>;
+    pub type CertsByReceiver<T: Config> = StorageMap<
+        _,
+        Twox64Concat,
+        T::IdtyIndex,
+        Vec<(T::IdtyIndex, BlockNumberFor<T>)>,
+        ValueQuery,
+    >;
 
     /// Certifications removable on.
     #[pallet::storage]
     #[pallet::getter(fn certs_removable_on)]
-    pub type CertsRemovableOn<T: Config> =
-        StorageMap<_, Twox64Concat, T::BlockNumber, Vec<(T::IdtyIndex, T::IdtyIndex)>, OptionQuery>;
+    pub type CertsRemovableOn<T: Config> = StorageMap<
+        _,
+        Twox64Concat,
+        BlockNumberFor<T>,
+        Vec<(T::IdtyIndex, T::IdtyIndex)>,
+        OptionQuery,
+    >;
 
     // EVENTS //
 
@@ -263,7 +273,7 @@ pub mod pallet {
 
     #[pallet::hooks]
     impl<T: Config> Hooks<BlockNumberFor<T>> for Pallet<T> {
-        fn on_initialize(n: T::BlockNumber) -> Weight {
+        fn on_initialize(n: BlockNumberFor<T>) -> Weight {
             Self::prune_certifications(n).saturating_add(T::WeightInfo::on_initialize())
         }
     }
@@ -359,7 +369,7 @@ pub mod pallet {
         /// perform cert addition if not existing, else CertAlreadyExists
         // must be transactional
         fn try_add_cert(
-            block_number: T::BlockNumber,
+            block_number: BlockNumberFor<T>,
             issuer: T::IdtyIndex,
             receiver: T::IdtyIndex,
         ) -> DispatchResultWithPostInfo {
@@ -412,7 +422,7 @@ pub mod pallet {
         // must be used in transactional context
         // (it can fail if certification does not exist after having modified state)
         fn try_renew_cert(
-            block_number: T::BlockNumber,
+            block_number: BlockNumberFor<T>,
             issuer: T::IdtyIndex,
             receiver: T::IdtyIndex,
         ) -> DispatchResultWithPostInfo {
@@ -442,7 +452,7 @@ pub mod pallet {
 
         /// remove the certifications due to expire on the given block
         // (run at on_initialize step)
-        fn prune_certifications(block_number: T::BlockNumber) -> Weight {
+        fn prune_certifications(block_number: BlockNumberFor<T>) -> Weight {
             // See on initialize for the overhead weight accounting
             let mut total_weight = Weight::zero();
 
@@ -461,7 +471,7 @@ pub mod pallet {
         pub fn do_remove_cert(
             issuer: T::IdtyIndex,
             receiver: T::IdtyIndex,
-            block_number_opt: Option<T::BlockNumber>,
+            block_number_opt: Option<BlockNumberFor<T>>,
         ) -> Weight {
             let mut total_weight = Weight::zero();
             let mut removed = false;
@@ -526,7 +536,7 @@ pub mod pallet {
         fn check_add_cert_internal(
             issuer: T::IdtyIndex,
             receiver: T::IdtyIndex,
-            block_number: T::BlockNumber,
+            block_number: BlockNumberFor<T>,
         ) -> DispatchResult {
             // 1. Forbid self cert
             ensure!(issuer != receiver, Error::<T>::CannotCertifySelf);
@@ -561,7 +571,7 @@ pub mod pallet {
         fn check_add_cert(
             issuer: T::IdtyIndex,
             receiver: T::IdtyIndex,
-            block_number: T::BlockNumber,
+            block_number: BlockNumberFor<T>,
         ) -> DispatchResult {
             // internal checks
             Self::check_add_cert_internal(issuer, receiver, block_number)?;
@@ -579,7 +589,7 @@ pub mod pallet {
         fn check_renew_cert(
             issuer: T::IdtyIndex,
             receiver: T::IdtyIndex,
-            block_number: T::BlockNumber,
+            block_number: BlockNumberFor<T>,
         ) -> DispatchResult {
             Self::check_add_cert_internal(issuer, receiver, block_number)?;
             T::CheckCertAllowed::check_cert_allowed(issuer, receiver)?;
@@ -589,8 +599,8 @@ pub mod pallet {
 }
 
 // implement setting next_issuable_on for certification period
-impl<T: Config> SetNextIssuableOn<T::BlockNumber, T::IdtyIndex> for Pallet<T> {
-    fn set_next_issuable_on(idty_index: T::IdtyIndex, next_issuable_on: T::BlockNumber) {
+impl<T: Config> SetNextIssuableOn<BlockNumberFor<T>, T::IdtyIndex> for Pallet<T> {
+    fn set_next_issuable_on(idty_index: T::IdtyIndex, next_issuable_on: BlockNumberFor<T>) {
         <StorageIdtyCertMeta<T>>::mutate_exists(idty_index, |cert_meta_opt| {
             let cert_meta = cert_meta_opt.get_or_insert(IdtyCertMeta::default());
             cert_meta.next_issuable_on = next_issuable_on;
diff --git a/pallets/certification/src/mock.rs b/pallets/certification/src/mock.rs
index 514b25e9f..066753f25 100644
--- a/pallets/certification/src/mock.rs
+++ b/pallets/certification/src/mock.rs
@@ -22,26 +22,19 @@ use frame_support::{
 use frame_system as system;
 use sp_core::H256;
 use sp_runtime::{
-    testing::Header,
     traits::{BlakeTwo256, IdentityLookup},
     BuildStorage,
 };
 
 type AccountId = u64;
-type BlockNumber = u64;
 type Block = frame_system::mocking::MockBlock<Test>;
 pub type IdtyIndex = u64;
-type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic<Test>;
 
 // Configure a mock runtime to test the pallet.
 frame_support::construct_runtime!(
-    pub enum Test where
-        Block = Block,
-        NodeBlock = Block,
-        UncheckedExtrinsic = UncheckedExtrinsic,
-    {
-        System: frame_system::{Pallet, Call, Config, Storage, Event<T>},
-        DefaultCertification: pallet_certification::{Pallet, Call, Event<T>, Storage, Config<T>},
+    pub enum Test {
+        System: frame_system,
+        DefaultCertification: pallet_certification,
     }
 );
 
@@ -51,30 +44,30 @@ parameter_types! {
 }
 
 impl system::Config for Test {
+    type AccountData = ();
+    type AccountId = AccountId;
     type BaseCallFilter = Everything;
-    type BlockWeights = ();
+    type Block = Block;
+    type BlockHashCount = BlockHashCount;
     type BlockLength = ();
+    type BlockWeights = ();
     type DbWeight = ();
-    type RuntimeOrigin = RuntimeOrigin;
-    type RuntimeCall = RuntimeCall;
-    type Index = u64;
-    type BlockNumber = BlockNumber;
     type Hash = H256;
     type Hashing = BlakeTwo256;
-    type AccountId = AccountId;
     type Lookup = IdentityLookup<Self::AccountId>;
-    type Header = Header;
-    type RuntimeEvent = RuntimeEvent;
-    type BlockHashCount = BlockHashCount;
-    type Version = ();
-    type PalletInfo = PalletInfo;
-    type AccountData = ();
-    type OnNewAccount = ();
+    type MaxConsumers = frame_support::traits::ConstU32<16>;
+    type Nonce = u64;
     type OnKilledAccount = ();
-    type SystemWeightInfo = ();
-    type SS58Prefix = SS58Prefix;
+    type OnNewAccount = ();
     type OnSetCode = ();
-    type MaxConsumers = frame_support::traits::ConstU32<16>;
+    type PalletInfo = PalletInfo;
+    type RuntimeCall = RuntimeCall;
+    type RuntimeEvent = RuntimeEvent;
+    type RuntimeOrigin = RuntimeOrigin;
+    type RuntimeTask = ();
+    type SS58Prefix = SS58Prefix;
+    type SystemWeightInfo = ();
+    type Version = ();
 }
 
 parameter_types! {
@@ -86,23 +79,23 @@ parameter_types! {
 
 impl pallet_certification::Config for Test {
     type CertPeriod = CertPeriod;
-    type IdtyIndex = IdtyIndex;
-    type IdtyAttr = ();
     type CheckCertAllowed = ();
+    type IdtyAttr = ();
+    type IdtyIndex = IdtyIndex;
     type MaxByIssuer = MaxByIssuer;
     type MinReceivedCertToBeAbleToIssueCert = MinReceivedCertToBeAbleToIssueCert;
     type OnNewcert = ();
     type OnRemovedCert = ();
     type RuntimeEvent = RuntimeEvent;
-    type WeightInfo = ();
     type ValidityPeriod = ValidityPeriod;
+    type WeightInfo = ();
 }
 
 // Build genesis storage according to the mock runtime.
 pub fn new_test_ext(
     gen_conf: pallet_certification::GenesisConfig<Test>,
 ) -> sp_io::TestExternalities {
-    GenesisConfig {
+    RuntimeGenesisConfig {
         system: SystemConfig::default(),
         default_certification: gen_conf,
     }
diff --git a/pallets/certification/src/weights.rs b/pallets/certification/src/weights.rs
index 08ba7b444..e58c33831 100644
--- a/pallets/certification/src/weights.rs
+++ b/pallets/certification/src/weights.rs
@@ -42,6 +42,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads(7 as u64))
             .saturating_add(RocksDbWeight::get().writes(4 as u64))
     }
+
     // Storage: Identity Identities (r:2 w:0)
     // Storage: Cert StorageIdtyCertMeta (r:2 w:2)
     // Storage: Parameters ParametersStorage (r:1 w:0)
@@ -53,6 +54,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads(7 as u64))
             .saturating_add(RocksDbWeight::get().writes(4 as u64))
     }
+
     // Storage: Cert CertsByReceiver (r:1 w:1)
     // Storage: Cert StorageIdtyCertMeta (r:2 w:2)
     // Storage: Parameters ParametersStorage (r:1 w:0)
@@ -63,6 +65,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads(5 as u64))
             .saturating_add(RocksDbWeight::get().writes(3 as u64))
     }
+
     // Storage: Cert CertsByReceiver (r:1 w:1)
     // Storage: Cert StorageIdtyCertMeta (r:2 w:2)
     // Storage: Parameters ParametersStorage (r:1 w:0)
@@ -78,18 +81,21 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().writes(1 as u64))
             .saturating_add(RocksDbWeight::get().writes((1 as u64).saturating_mul(i as u64)))
     }
+
     fn on_initialize() -> Weight {
         // Minimum execution time: 259_247 nanoseconds.
         Weight::from_parts(269_348_000 as u64, 0)
             .saturating_add(RocksDbWeight::get().reads(7 as u64))
             .saturating_add(RocksDbWeight::get().writes(4 as u64))
     }
+
     fn do_remove_cert_noop() -> Weight {
         // Minimum execution time: 259_247 nanoseconds.
         Weight::from_parts(269_348_000 as u64, 0)
             .saturating_add(RocksDbWeight::get().reads(7 as u64))
             .saturating_add(RocksDbWeight::get().writes(4 as u64))
     }
+
     fn do_remove_cert() -> Weight {
         // Minimum execution time: 259_247 nanoseconds.
         Weight::from_parts(269_348_000 as u64, 0)
diff --git a/pallets/distance/Cargo.toml b/pallets/distance/Cargo.toml
index 2387c3ce1..f9ae014d7 100644
--- a/pallets/distance/Cargo.toml
+++ b/pallets/distance/Cargo.toml
@@ -13,100 +13,126 @@ version = '1.0.0'
 default = ['std']
 runtime-benchmarks = [
     'frame-benchmarking/runtime-benchmarks',
-    'pallet-balances',
     'pallet-identity/runtime-benchmarks',
-    'sp-consensus-babe',
+    'frame-support/runtime-benchmarks',
+    'frame-system/runtime-benchmarks',
+    'sp-runtime/runtime-benchmarks',
+    'pallet-authority-members/runtime-benchmarks',
+    'pallet-membership/runtime-benchmarks',
+    'pallet-balances/runtime-benchmarks',
 ]
 std = [
     'codec/std',
+    'scale-info/std',
     'frame-support/std',
-    'frame-benchmarking/std',
+    'frame-system/std',
+    'frame-benchmarking?/std',
     'pallet-authority-members/std',
     'pallet-authorship/std',
     'pallet-identity/std',
     'pallet-membership/std',
     'pallet-session/std',
+    'pallet-balances/std',
+    'sp-io/std',
+    'sp-keystore/std',
     'sp-core/std',
     'sp-consensus-babe/std',
+    'sp-inherents/std',
     'sp-distance/std',
     'sp-runtime/std',
     'sp-std/std',
+    'sp-io/std',
+]
+try-runtime = [
+    'frame-support/try-runtime',
+    'frame-system/try-runtime',
+    'sp-runtime/try-runtime',
+    'pallet-authority-members/try-runtime',
+    'pallet-authorship/try-runtime',
+    'pallet-identity/try-runtime',
+    'pallet-membership/try-runtime',
+    'pallet-session/try-runtime',
+    'pallet-balances/try-runtime',
+    'sp-distance/try-runtime',
 ]
 
 [dependencies]
+getrandom = { version = "0.2.12", features = ["js"], default-features = false }
 
 pallet-authority-members = { path = "../authority-members", default-features = false }
+
+pallet-balances = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', optional = true, default-features = false }
 pallet-identity = { path = "../identity", default-features = false }
 pallet-membership = { path = "../membership", default-features = false }
-sp-distance = { path = "../../primitives/distance", default-features = false }
-sp-consensus-babe = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false, optional = true }
-getrandom = { version = "0.2", features = ["js"] }
 
 # substrate
-scale-info = { version = "2.1.1", default-features = false, features = [
+scale-info = { version = "2.10.0", default-features = false, features = [
     "derive",
 ] }
-
-pallet-balances = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', optional = true, default-features = false }
+sp-distance = { path = "../../primitives/distance", default-features = false }
 
 [dependencies.codec]
 default-features = false
 features = ['derive']
 package = 'parity-scale-codec'
-version = '3.1.5'
+version = '3.6.9'
 
 [dependencies.frame-benchmarking]
 default-features = false
-git = 'https://github.com/duniter/substrate'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
 optional = true
-branch = 'duniter-substrate-v0.9.42'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-support]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-system]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.pallet-authorship]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.pallet-session]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-core]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-inherents]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-runtime]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
-[dependencies.sp-std]
-default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 ### DOC ###
 
 [package.metadata.docs.rs]
+default-features = false
 targets = ['x86_64-unknown-linux-gnu']
 
+[dependencies.sp-std]
+default-features = false
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
+
+[dependencies.sp-consensus-babe]
+default-features = false
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
+
 [dev-dependencies]
-pallet-balances = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-io = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-keystore = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
+sp-io = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-keystore = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
diff --git a/pallets/distance/src/benchmarking.rs b/pallets/distance/src/benchmarking.rs
index c762bde19..4b5fb9557 100644
--- a/pallets/distance/src/benchmarking.rs
+++ b/pallets/distance/src/benchmarking.rs
@@ -19,8 +19,9 @@
 use super::*;
 
 use codec::Encode;
-use frame_benchmarking::{benchmarks, vec};
+use frame_benchmarking::benchmarks;
 use frame_support::traits::{Currency, OnFinalize};
+use frame_system::pallet_prelude::BlockNumberFor;
 use frame_system::RawOrigin;
 use pallet_balances::Pallet as Balances;
 use sp_runtime::traits::{Bounded, One};
@@ -48,7 +49,7 @@ benchmarks! {
     where_clause {
         where
         T: pallet_balances::Config, T::Balance: From<u64>,
-        T::BlockNumber: From<u32>,
+        BlockNumberFor<T>: From<u32>,
     }
 
     // request distance evaluation
diff --git a/pallets/distance/src/lib.rs b/pallets/distance/src/lib.rs
index 1790134a0..ddcff5218 100644
--- a/pallets/distance/src/lib.rs
+++ b/pallets/distance/src/lib.rs
@@ -332,6 +332,7 @@ pub mod pallet {
                 _ => unreachable!("index % 3 < 3"),
             }
         }
+
         /// Mutate the evaluation pool containing the results sent by evaluators on this session.
         fn mutate_next_pool<
             R,
@@ -581,6 +582,7 @@ pub mod pallet {
                     computation_result: inherent_data,
                 })
         }
+
         fn is_inherent(call: &Self::Call) -> bool {
             matches!(call, Self::Call::update_evaluation { .. })
         }
diff --git a/pallets/distance/src/mock.rs b/pallets/distance/src/mock.rs
index 6861b3c43..c95da0875 100644
--- a/pallets/distance/src/mock.rs
+++ b/pallets/distance/src/mock.rs
@@ -19,23 +19,23 @@ use crate::{self as pallet_distance};
 use core::marker::PhantomData;
 use frame_support::{
     parameter_types,
-    traits::{Everything, GenesisBuild, OnFinalize, OnInitialize},
+    traits::{Everything, OnFinalize, OnInitialize},
 };
 use frame_system as system;
 use pallet_balances::AccountData;
 use pallet_session::ShouldEndSession;
 use sp_core::{ConstU32, H256};
+use sp_runtime::BuildStorage;
 use sp_runtime::{
     impl_opaque_keys,
     key_types::DUMMY,
-    testing::{Header, TestSignature, UintAuthorityId},
+    testing::{TestSignature, UintAuthorityId},
     traits::{BlakeTwo256, ConvertInto, IdentityLookup, IsMember, OpaqueKeys},
     KeyTypeId, Perbill,
 };
 
 type Balance = u64;
 type Block = frame_system::mocking::MockBlock<Test>;
-type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic<Test>;
 pub type AccountId = u64;
 
 impl_opaque_keys! {
@@ -52,18 +52,14 @@ impl From<UintAuthorityId> for MockSessionKeys {
 
 // Configure a mock runtime to test the pallet.
 frame_support::construct_runtime!(
-    pub enum Test where
-        Block = Block,
-        NodeBlock = Block,
-        UncheckedExtrinsic = UncheckedExtrinsic,
-    {
-        System: frame_system::{Pallet, Call, Config, Storage, Event<T>},
-        Session: pallet_session::{Pallet, Call, Storage, Config<T>, Event},
-        Authorship: pallet_authorship::{Pallet, Storage},
-        AuthorityMembers: pallet_authority_members::{Pallet, Call, Storage, Config<T>, Event<T>},
-        Balances: pallet_balances::{Pallet, Call, Storage, Config<T>, Event<T>},
-        Identity: pallet_identity::{Pallet, Call, Storage, Config<T>, Event<T>},
-        Distance: pallet_distance::{Pallet, Call, Storage, Event<T>},
+    pub enum Test    {
+        System: frame_system,
+        Session: pallet_session,
+        Authorship: pallet_authorship,
+        AuthorityMembers: pallet_authority_members,
+        Balances: pallet_balances,
+        Identity: pallet_identity,
+        Distance: pallet_distance,
     }
 );
 
@@ -73,30 +69,30 @@ parameter_types! {
 }
 
 impl system::Config for Test {
+    type AccountData = AccountData<u64>;
+    type AccountId = AccountId;
     type BaseCallFilter = Everything;
-    type BlockWeights = ();
+    type Block = Block;
+    type BlockHashCount = BlockHashCount;
     type BlockLength = ();
+    type BlockWeights = ();
     type DbWeight = ();
-    type RuntimeOrigin = RuntimeOrigin;
-    type RuntimeCall = RuntimeCall;
-    type Index = u64;
-    type BlockNumber = u64;
     type Hash = H256;
     type Hashing = BlakeTwo256;
-    type AccountId = AccountId;
     type Lookup = IdentityLookup<Self::AccountId>;
-    type Header = Header;
-    type RuntimeEvent = RuntimeEvent;
-    type BlockHashCount = BlockHashCount;
-    type Version = ();
-    type PalletInfo = PalletInfo;
-    type AccountData = AccountData<u64>;
-    type OnNewAccount = ();
+    type MaxConsumers = frame_support::traits::ConstU32<16>;
+    type Nonce = u64;
     type OnKilledAccount = ();
-    type SystemWeightInfo = ();
-    type SS58Prefix = SS58Prefix;
+    type OnNewAccount = ();
     type OnSetCode = ();
-    type MaxConsumers = frame_support::traits::ConstU32<16>;
+    type PalletInfo = PalletInfo;
+    type RuntimeCall = RuntimeCall;
+    type RuntimeEvent = RuntimeEvent;
+    type RuntimeOrigin = RuntimeOrigin;
+    type RuntimeTask = ();
+    type SS58Prefix = SS58Prefix;
+    type SystemWeightInfo = ();
+    type Version = ();
 }
 
 pub struct TestSessionHandler;
@@ -124,14 +120,14 @@ impl ShouldEndSession<u64> for TestShouldEndSession {
 }
 
 impl pallet_session::Config for Test {
+    type Keys = MockSessionKeys;
+    type NextSessionRotation = ();
     type RuntimeEvent = RuntimeEvent;
+    type SessionHandler = TestSessionHandler;
+    type SessionManager = AuthorityMembers;
+    type ShouldEndSession = TestShouldEndSession;
     type ValidatorId = AccountId;
     type ValidatorIdOf = ConvertInto;
-    type ShouldEndSession = TestShouldEndSession;
-    type NextSessionRotation = ();
-    type SessionManager = AuthorityMembers;
-    type SessionHandler = TestSessionHandler;
-    type Keys = MockSessionKeys;
     type WeightInfo = ();
 }
 
@@ -158,8 +154,8 @@ impl<T: From<u64>> frame_support::traits::FindAuthor<T> for ConstantAuthor<T> {
 }
 
 impl pallet_authorship::Config for Test {
-    type FindAuthor = ConstantAuthor<Self::AccountId>;
     type EventHandler = ();
+    type FindAuthor = ConstantAuthor<Self::AccountId>;
 }
 
 pub struct TestIsSmithMember;
@@ -184,12 +180,12 @@ impl pallet_authority_members::Config for Test {
     type MaxAuthorities = ConstU32<4>;
     type MemberId = u32;
     type MemberIdOf = IdentityIndexOf<Self>;
+    type OnIncomingMember = ();
     type OnNewSession = ();
+    type OnOutgoingMember = ();
     type RemoveMemberOrigin = system::EnsureRoot<AccountId>;
     type RuntimeEvent = RuntimeEvent;
     type WeightInfo = ();
-    type OnOutgoingMember = ();
-    type OnIncomingMember = ();
 }
 
 parameter_types! {
@@ -198,19 +194,20 @@ parameter_types! {
 }
 
 impl pallet_balances::Config for Test {
+    type AccountStore = System;
     type Balance = Balance;
     type DustRemoval = ();
     type ExistentialDeposit = ExistentialDeposit;
-    type AccountStore = System;
-    type WeightInfo = pallet_balances::weights::SubstrateWeight<Test>;
+    type FreezeIdentifier = ();
+    type MaxFreezes = ConstU32<0>;
+    type MaxHolds = ConstU32<0>;
     type MaxLocks = MaxLocks;
     type MaxReserves = ();
     type ReserveIdentifier = [u8; 8];
     type RuntimeEvent = RuntimeEvent;
-    type HoldIdentifier = ();
-    type FreezeIdentifier = ();
-    type MaxHolds = ConstU32<0>;
-    type MaxFreezes = ConstU32<0>;
+    type RuntimeFreezeReason = ();
+    type RuntimeHoldReason = ();
+    type WeightInfo = pallet_balances::weights::SubstrateWeight<Test>;
 }
 
 parameter_types! {
@@ -230,21 +227,21 @@ impl pallet_identity::traits::IdtyNameValidator for IdtyNameValidatorTestImpl {
 }
 
 impl pallet_identity::Config for Test {
+    type AccountLinker = ();
+    type AutorevocationPeriod = AutorevocationPeriod;
     type ChangeOwnerKeyPeriod = ChangeOwnerKeyPeriod;
+    type CheckIdtyCallAllowed = ();
     type ConfirmPeriod = ConfirmPeriod;
-    type ValidationPeriod = ValidationPeriod;
-    type AutorevocationPeriod = AutorevocationPeriod;
     type DeletionPeriod = DeletionPeriod;
-    type CheckIdtyCallAllowed = ();
     type IdtyCreationPeriod = IdtyCreationPeriod;
     type IdtyData = ();
-    type IdtyNameValidator = IdtyNameValidatorTestImpl;
     type IdtyIndex = u32;
-    type AccountLinker = ();
-    type Signer = UintAuthorityId;
-    type Signature = TestSignature;
+    type IdtyNameValidator = IdtyNameValidatorTestImpl;
     type OnIdtyChange = ();
     type RuntimeEvent = RuntimeEvent;
+    type Signature = TestSignature;
+    type Signer = UintAuthorityId;
+    type ValidationPeriod = ValidationPeriod;
     type WeightInfo = ();
 }
 
@@ -252,21 +249,21 @@ parameter_types! {
     pub const MinAccessibleReferees: Perbill = Perbill::from_percent(80);
 }
 impl pallet_distance::Config for Test {
+    type CheckRequestDistanceEvaluation = ();
     type Currency = Balances;
     type EvaluationPrice = frame_support::traits::ConstU64<1000>;
     type MaxRefereeDistance = frame_support::traits::ConstU32<5>;
     type MinAccessibleReferees = MinAccessibleReferees;
+    type OnValidDistanceStatus = ();
     type RuntimeEvent = RuntimeEvent;
     type WeightInfo = ();
-    type OnValidDistanceStatus = ();
-    type CheckRequestDistanceEvaluation = ();
 }
 
 // Build genesis storage according to the mock runtime.
 #[allow(dead_code)] // ??? Clippy triggers dead code for new_test_ext while it is used during test benchmark
 pub fn new_test_ext() -> sp_io::TestExternalities {
-    let mut t = frame_system::GenesisConfig::default()
-        .build_storage::<Test>()
+    let mut t = frame_system::GenesisConfig::<Test>::default()
+        .build_storage()
         .unwrap();
 
     pub const NAMES: [&str; 6] = ["Alice", "Bob", "Charlie", "Dave", "Eve", "Ferdie"];
diff --git a/pallets/duniter-account/Cargo.toml b/pallets/duniter-account/Cargo.toml
index 71bb9afe7..8e1dca7dc 100644
--- a/pallets/duniter-account/Cargo.toml
+++ b/pallets/duniter-account/Cargo.toml
@@ -13,22 +13,45 @@ version = '3.0.0'
 default = ['std']
 runtime-benchmarks = [
     'frame-benchmarking/runtime-benchmarks',
+    'frame-support/runtime-benchmarks',
+    'frame-system/runtime-benchmarks',
+    'sp-runtime/runtime-benchmarks',
+    'pallet-identity/runtime-benchmarks',
+    'pallet-provide-randomness/runtime-benchmarks',
+    'pallet-treasury/runtime-benchmarks',
+    'pallet-quota/runtime-benchmarks',
+    'pallet-balances/runtime-benchmarks',
 ]
 std = [
     'codec/std',
     'frame-support/std',
     'frame-system/std',
-    'frame-benchmarking/std',
+    'frame-benchmarking?/std',
     'pallet-balances/std',
+    'pallet-transaction-payment/std',
+    'pallet-identity/std',
     'pallet-provide-randomness/std',
     'pallet-treasury/std',
-    'serde',
+    'pallet-quota/std',
+    'serde/std',
+    'log/std',
+    'scale-info/std',
     'sp-core/std',
     'sp-io/std',
     'sp-runtime/std',
     'sp-std/std',
 ]
-try-runtime = ['frame-support/try-runtime']
+try-runtime = [
+    'frame-support/try-runtime',
+    'frame-system/try-runtime',
+    'sp-runtime/try-runtime',
+    'pallet-identity/try-runtime',
+    'pallet-provide-randomness/try-runtime',
+    'pallet-treasury/try-runtime',
+    'pallet-quota/try-runtime',
+    'pallet-balances/try-runtime',
+    'pallet-transaction-payment/try-runtime',
+]
 
 [dependencies]
 # local
@@ -37,84 +60,75 @@ pallet-identity = { path = "../identity", default-features = false }
 pallet-provide-randomness = { path = "../provide-randomness", default-features = false }
 
 # crates.io
-codec = { package = 'parity-scale-codec', version = "3.1.5", default-features = false, features = ["derive"] }
-log = { version = "0.4.14", default-features = false }
-scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
+codec = { package = 'parity-scale-codec', version = "3.6.9", default-features = false, features = ["derive"] }
+log = { version = "0.4.20", default-features = false }
+scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
 
 # substrate
 [dependencies.frame-benchmarking]
 default-features = false
-git = 'https://github.com/duniter/substrate'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
 optional = true
-branch = 'duniter-substrate-v0.9.42'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-support]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-system]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.pallet-balances]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.pallet-transaction-payment]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.pallet-treasury]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.serde]
-version = "1.0.101"
-optional = true
+default-features = false
+version = "1.0.195"
 features = ["derive"]
 
 [dependencies.sp-core]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-io]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-runtime]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-std]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 ### DOC ###
 
 [package.metadata.docs.rs]
+default-features = false
 targets = ['x86_64-unknown-linux-gnu']
 
 ### DEV ###
 
-[dev-dependencies.pallet-balances]
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
 [dev-dependencies.maplit]
+default-features = false
 version = '1.0.2'
-
-[dev-dependencies.serde]
-version = '1.0.119'
-
-[dev-dependencies.sp-io]
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
\ No newline at end of file
diff --git a/pallets/duniter-account/src/benchmarking.rs b/pallets/duniter-account/src/benchmarking.rs
index 6c99b5532..27a839e1a 100644
--- a/pallets/duniter-account/src/benchmarking.rs
+++ b/pallets/duniter-account/src/benchmarking.rs
@@ -65,13 +65,13 @@ benchmarks! {
     }: _<T::RuntimeOrigin>(origin.into())
     on_initialize_sufficient  {
         let i in 0 .. T::MaxNewAccountsPerBlock::get() => create_pending_accounts::<T>(i, false, true)?;
-    }: { Pallet::<T>::on_initialize(T::BlockNumber::one()); }
+    }: { Pallet::<T>::on_initialize(BlockNumberFor::<T>::one()); }
     on_initialize_with_balance {
         let i in 0 .. T::MaxNewAccountsPerBlock::get() => create_pending_accounts::<T>(i, true, false)?;
-    }: { Pallet::<T>::on_initialize(T::BlockNumber::one()); }
+    }: { Pallet::<T>::on_initialize(BlockNumberFor::<T>::one()); }
     on_initialize_no_balance {
         let i in 0 .. T::MaxNewAccountsPerBlock::get() => create_pending_accounts::<T>(i, false, false)?;
-    }: { Pallet::<T>::on_initialize(T::BlockNumber::one()); }
+    }: { Pallet::<T>::on_initialize(BlockNumberFor::<T>::one()); }
     on_filled_randomness_pending {
         let caller: T::AccountId = whitelisted_caller();
         let randomness = H256(T::AccountIdToSalt::convert(caller.clone()));
diff --git a/pallets/duniter-account/src/lib.rs b/pallets/duniter-account/src/lib.rs
index 21b72affa..05f0c69e3 100644
--- a/pallets/duniter-account/src/lib.rs
+++ b/pallets/duniter-account/src/lib.rs
@@ -104,7 +104,6 @@ pub mod pallet {
         pub treasury_balance: T::Balance,
     }
 
-    #[cfg(feature = "std")]
     impl<T: Config> Default for GenesisConfig<T> {
         fn default() -> Self {
             Self {
@@ -115,7 +114,7 @@ pub mod pallet {
     }
 
     #[pallet::genesis_build]
-    impl<T: Config> GenesisBuild<T> for GenesisConfig<T> {
+    impl<T: Config> BuildGenesisConfig for GenesisConfig<T> {
         fn build(&self) {
             // Treasury
             frame_system::Account::<T>::mutate(
@@ -132,7 +131,7 @@ pub mod pallet {
                 .accounts
                 .keys()
                 .cloned()
-                .collect::<std::collections::BTreeSet<_>>();
+                .collect::<sp_std::collections::btree_set::BTreeSet<_>>();
 
             assert!(
                 endowed_accounts.len() == self.accounts.len(),
@@ -236,7 +235,7 @@ pub mod pallet {
     #[pallet::hooks]
     impl<T: Config> Hooks<BlockNumberFor<T>> for Pallet<T> {
         // on initialize, withdraw account creation tax
-        fn on_initialize(_: T::BlockNumber) -> Weight {
+        fn on_initialize(_: BlockNumberFor<T>) -> Weight {
             let mut total_weight = Weight::zero();
             for account_id in PendingNewAccounts::<T>::iter_keys()
                 .drain()
diff --git a/pallets/duniter-account/src/types.rs b/pallets/duniter-account/src/types.rs
index c9b9a02cf..77553c4db 100644
--- a/pallets/duniter-account/src/types.rs
+++ b/pallets/duniter-account/src/types.rs
@@ -74,8 +74,20 @@ impl<Balance: Zero, IdtyId> From<AccountData<Balance, IdtyId>>
     }
 }
 
-#[derive(Clone, Decode, Default, Encode, Eq, MaxEncodedLen, PartialEq, RuntimeDebug, TypeInfo)]
-#[cfg_attr(feature = "std", derive(serde::Deserialize, serde::Serialize))]
+#[derive(
+    Clone,
+    Decode,
+    Default,
+    Encode,
+    Eq,
+    MaxEncodedLen,
+    PartialEq,
+    RuntimeDebug,
+    TypeInfo,
+    serde::Serialize,
+    serde::Deserialize,
+)]
+#[serde(deny_unknown_fields)]
 pub struct GenesisAccountData<Balance, IdtyId> {
     pub random_id: H256,
     pub balance: Balance,
diff --git a/pallets/duniter-account/src/weights.rs b/pallets/duniter-account/src/weights.rs
index 212eb7fe4..d8ccf6bb5 100644
--- a/pallets/duniter-account/src/weights.rs
+++ b/pallets/duniter-account/src/weights.rs
@@ -41,6 +41,7 @@ impl WeightInfo for () {
             .saturating_add(Weight::from_parts(0, 3591))
             .saturating_add(RocksDbWeight::get().reads(1))
     }
+
     // Storage: Account PendingNewAccounts (r:1 w:0)
     // Storage: ProvideRandomness RequestIdProvider (r:1 w:1)
     // Storage: ProvideRandomness RequestsIds (r:1 w:1)
@@ -59,6 +60,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads((6 as u64).saturating_mul(i as u64)))
             .saturating_add(RocksDbWeight::get().writes((6 as u64).saturating_mul(i as u64)))
     }
+
     // Storage: Account PendingNewAccounts (r:1 w:0)
     // Storage: ProvideRandomness RequestIdProvider (r:1 w:1)
     // Storage: ProvideRandomness RequestsIds (r:1 w:1)
@@ -77,6 +79,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads((6 as u64).saturating_mul(i as u64)))
             .saturating_add(RocksDbWeight::get().writes((6 as u64).saturating_mul(i as u64)))
     }
+
     // Storage: Account PendingNewAccounts (r:1 w:0)
     /// The range of component `i` is `[0, 1]`.
     fn on_initialize_no_balance(i: u32) -> Weight {
@@ -87,6 +90,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads(1 as u64))
             .saturating_add(RocksDbWeight::get().writes((1 as u64).saturating_mul(i as u64)))
     }
+
     // Storage: Account PendingRandomIdAssignments (r:1 w:1)
     fn on_filled_randomness_pending() -> Weight {
         // Minimum execution time: 66_963 nanoseconds.
@@ -94,6 +98,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads(1 as u64))
             .saturating_add(RocksDbWeight::get().writes(1 as u64))
     }
+
     // Storage: Account PendingRandomIdAssignments (r:1 w:0)
     fn on_filled_randomness_no_pending() -> Weight {
         // Minimum execution time: 16_088 nanoseconds.
diff --git a/pallets/duniter-test-parameters/Cargo.toml b/pallets/duniter-test-parameters/Cargo.toml
index 1fe4019fd..faf557e6a 100644
--- a/pallets/duniter-test-parameters/Cargo.toml
+++ b/pallets/duniter-test-parameters/Cargo.toml
@@ -10,63 +10,74 @@ version = '3.0.0'
 
 [features]
 default = ['std']
-runtime-benchmarks = ['frame-benchmarking']
+runtime-benchmarks = [
+    'frame-benchmarking/runtime-benchmarks',
+    'frame-support/runtime-benchmarks',
+    'frame-system/runtime-benchmarks',
+    'sp-runtime/runtime-benchmarks',
+]
 std = [
+    'scale-info/std',
+    'serde/std',
     'codec/std',
+    'frame-benchmarking?/std',
     'frame-support/std',
     'frame-system/std',
-    'frame-benchmarking/std',
-    'serde',
     "sp-io/std",
+    "sp-runtime/std",
     "sp-std/std",
 ]
-try-runtime = ['frame-support/try-runtime']
+try-runtime = [
+    'frame-support/try-runtime',
+    'frame-system/try-runtime',
+    'sp-runtime/try-runtime',
+]
 
 [dependencies]
-pallet-duniter-test-parameters-macro = { path = "macro" }
-serde = { version = "1.0.101", features = ["derive"], optional = true }
+pallet-duniter-test-parameters-macro = { path = "macro", default-features = false }
 
 # substrate
-scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
+scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
+serde = { version = "1.0.195", features = ["derive"], default-features = false }
 
 [dependencies.codec]
 default-features = false
 features = ['derive']
 package = 'parity-scale-codec'
-version = "3.1.5"
+version = "3.6.9"
 
 [dependencies.frame-benchmarking]
 default-features = false
-git = 'https://github.com/duniter/substrate'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
 optional = true
-branch = 'duniter-substrate-v0.9.42'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-support]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-system]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
+### DOC ###
 
-[dependencies.sp-io]
+[package.metadata.docs.rs]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+targets = ['x86_64-unknown-linux-gnu']
 
-[dependencies.sp-std]
+[dependencies.sp-io]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-runtime]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
-### DOC ###
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
-[package.metadata.docs.rs]
-targets = ['x86_64-unknown-linux-gnu']
+[dependencies.sp-std]
+default-features = false
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
diff --git a/pallets/duniter-test-parameters/macro/Cargo.toml b/pallets/duniter-test-parameters/macro/Cargo.toml
index 4faec3d4b..a7d9b0701 100644
--- a/pallets/duniter-test-parameters/macro/Cargo.toml
+++ b/pallets/duniter-test-parameters/macro/Cargo.toml
@@ -12,7 +12,7 @@ version = '3.0.0'
 proc-macro = true
 
 [dependencies]
-num_enum = { version = "0.5.3", default-features = false }
-proc-macro2 = "1.0"
-quote = "1.0"
-syn = { version = "1.0", features = [ "extra-traits", "fold", "full", "visit" ] }
+num_enum = { version = "0.7.2", default-features = false }
+proc-macro2 = { version = "1.0.76", default-features = false }
+quote = { version = "1.0.35", default-features = false }
+syn = { version = "2.0.48", features = [ "extra-traits", "fold", "full", "visit" ] }
diff --git a/pallets/duniter-test-parameters/src/lib.rs b/pallets/duniter-test-parameters/src/lib.rs
index 55ca1c612..98db19954 100644
--- a/pallets/duniter-test-parameters/src/lib.rs
+++ b/pallets/duniter-test-parameters/src/lib.rs
@@ -24,13 +24,18 @@ pub mod types {
     use codec::{Decode, Encode};
     use frame_support::pallet_prelude::*;
     use pallet_duniter_test_parameters_macro::generate_fields_getters;
-    use scale_info::TypeInfo;
-    #[cfg(feature = "std")]
-    use serde::{Deserialize, Serialize};
 
     #[generate_fields_getters]
-    #[cfg_attr(feature = "std", derive(Deserialize, Serialize))]
-    #[derive(Encode, Decode, Default, Clone, Copy, PartialEq, Eq, RuntimeDebug, TypeInfo)]
+    #[derive(
+        Default,
+        Encode,
+        Decode,
+        Clone,
+        PartialEq,
+        serde::Serialize,
+        serde::Deserialize,
+        scale_info::TypeInfo,
+    )]
     pub struct Parameters<
         BlockNumber: Default + Parameter,
         CertCount: Default + Parameter,
@@ -75,6 +80,7 @@ pub mod pallet {
 
     #[pallet::config]
     pub trait Config: frame_system::Config {
+        type BlockNumber: Default + MaybeSerializeDeserialize + Parameter;
         type CertCount: Default + MaybeSerializeDeserialize + Parameter;
         type PeriodCount: Default + MaybeSerializeDeserialize + Parameter;
         type SessionCount: Default + MaybeSerializeDeserialize + Parameter;
@@ -97,7 +103,6 @@ pub mod pallet {
         pub parameters: Parameters<T::BlockNumber, T::CertCount, T::PeriodCount, T::SessionCount>,
     }
 
-    #[cfg(feature = "std")]
     impl<T: Config> Default for GenesisConfig<T> {
         fn default() -> Self {
             Self {
@@ -107,7 +112,7 @@ pub mod pallet {
     }
 
     #[pallet::genesis_build]
-    impl<T: Config> GenesisBuild<T> for GenesisConfig<T> {
+    impl<T: Config> BuildGenesisConfig for GenesisConfig<T> {
         fn build(&self) {
             <ParametersStorage<T>>::put(self.parameters.clone());
         }
diff --git a/pallets/duniter-wot/Cargo.toml b/pallets/duniter-wot/Cargo.toml
index 403af9bce..7e17bd127 100644
--- a/pallets/duniter-wot/Cargo.toml
+++ b/pallets/duniter-wot/Cargo.toml
@@ -11,93 +11,105 @@ version = '3.0.0'
 
 [features]
 default = ['std']
-runtime-benchmarks = ['frame-benchmarking', 'pallet-membership/runtime-benchmarks', 'pallet-identity/runtime-benchmarks']
+runtime-benchmarks = [
+    'frame-benchmarking/runtime-benchmarks',
+    'frame-support/runtime-benchmarks',
+    'frame-system/runtime-benchmarks',
+    'sp-runtime/runtime-benchmarks',
+    'pallet-identity/runtime-benchmarks',
+    'pallet-distance/runtime-benchmarks',
+    'pallet-membership/runtime-benchmarks',
+    'pallet-certification/runtime-benchmarks',
+]
 std = [
     'codec/std',
     'frame-support/std',
     'frame-system/std',
-    'frame-benchmarking/std',
+    'frame-benchmarking?/std',
     'pallet-certification/std',
     'pallet-distance/std',
     'pallet-identity/std',
     'pallet-membership/std',
-    'serde',
+    'scale-info/std',
     'sp-core/std',
     'sp-io/std',
     'sp-membership/std',
     'sp-runtime/std',
     'sp-std/std',
+    'sp-state-machine/std',
+]
+try-runtime = [
+    'frame-support/try-runtime',
+    'frame-system/try-runtime',
+    'sp-runtime/try-runtime',
+    'sp-membership/try-runtime',
+    'pallet-identity/try-runtime',
+    'pallet-certification/try-runtime',
+    'pallet-membership/try-runtime',
+    'pallet-distance/try-runtime',
 ]
-try-runtime = ['frame-support/try-runtime']
 
 [dependencies]
 pallet-certification = { path = "../certification", default-features = false }
-pallet-identity = { path = "../identity", default-features = false }
 pallet-distance = { path = "../distance", default-features = false }
+pallet-identity = { path = "../identity", default-features = false }
 pallet-membership = { path = "../membership", default-features = false }
-sp-membership = { path = "../../primitives/membership", default-features = false }
 
 # substrate
-scale-info = { version = "2.1.1", default-features = false, features = [
+scale-info = { version = "2.10.0", default-features = false, features = [
     "derive",
 ] }
+sp-membership = { path = "../../primitives/membership", default-features = false }
 
 [dependencies.codec]
 default-features = false
 features = ['derive']
 package = 'parity-scale-codec'
-version = "3.1.5"
+version = "3.6.9"
 
 [dependencies.frame-benchmarking]
 default-features = false
-git = 'https://github.com/duniter/substrate'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
 optional = true
-branch = 'duniter-substrate-v0.9.42'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-support]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-system]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
-[dependencies.serde]
-version = "1.0.101"
-optional = true
-features = ["derive"]
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-core]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-io]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-runtime]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
-[dependencies.sp-std]
-default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 ### DOC ###
 
 [package.metadata.docs.rs]
+default-features = false
 targets = ['x86_64-unknown-linux-gnu']
-[dev-dependencies.serde]
-version = '1.0.119'
 
+[dependencies.sp-std]
+default-features = false
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 ### DEV ###
 
-[dev-dependencies.sp-io]
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+[dev-dependencies.sp-state-machine]
+default-features = false
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
diff --git a/pallets/duniter-wot/src/lib.rs b/pallets/duniter-wot/src/lib.rs
index 7051c922c..9985c6822 100644
--- a/pallets/duniter-wot/src/lib.rs
+++ b/pallets/duniter-wot/src/lib.rs
@@ -60,7 +60,7 @@ pub mod pallet {
         + pallet_membership::Config<IdtyId = IdtyIndex>
     {
         #[pallet::constant]
-        type FirstIssuableOn: Get<Self::BlockNumber>;
+        type FirstIssuableOn: Get<frame_system::pallet_prelude::BlockNumberFor<Self>>;
         #[pallet::constant]
         type MinCertForMembership: Get<u32>;
         #[pallet::constant]
diff --git a/pallets/duniter-wot/src/mock.rs b/pallets/duniter-wot/src/mock.rs
index 7d2c1f27e..c7be1ef55 100644
--- a/pallets/duniter-wot/src/mock.rs
+++ b/pallets/duniter-wot/src/mock.rs
@@ -19,15 +19,16 @@ use crate::{self as pallet_duniter_wot};
 use frame_support::{parameter_types, traits::Everything};
 use frame_system as system;
 use sp_core::H256;
+use sp_runtime::BuildStorage;
 use sp_runtime::{
-    testing::{Header, TestSignature, UintAuthorityId},
+    testing::{TestSignature, UintAuthorityId},
     traits::{BlakeTwo256, IdentityLookup},
 };
+use sp_state_machine::BasicExternalities;
 use std::collections::BTreeMap;
 
 type AccountId = u64;
 type Block = frame_system::mocking::MockBlock<Test>;
-type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic<Test>;
 
 pub struct IdentityIndexOf<T: pallet_identity::Config>(PhantomData<T>);
 impl<T: pallet_identity::Config> sp_runtime::traits::Convert<T::AccountId, Option<T::IdtyIndex>>
@@ -40,16 +41,12 @@ impl<T: pallet_identity::Config> sp_runtime::traits::Convert<T::AccountId, Optio
 
 // Configure a mock runtime to test the pallet.
 frame_support::construct_runtime!(
-    pub enum Test where
-        Block = Block,
-        NodeBlock = Block,
-        UncheckedExtrinsic = UncheckedExtrinsic,
-    {
-        System: frame_system::{Pallet, Call, Config, Storage, Event<T>},
-        DuniterWot: pallet_duniter_wot::{Pallet},
-        Identity: pallet_identity::{Pallet, Call, Config<T>, Storage, Event<T>},
-        Membership: pallet_membership::{Pallet, Config<T>, Storage, Event<T>},
-        Cert: pallet_certification::{Pallet, Call, Config<T>, Storage, Event<T>},
+    pub enum Test {
+        System: frame_system,
+        DuniterWot: pallet_duniter_wot,
+        Identity: pallet_identity,
+        Membership: pallet_membership,
+        Cert: pallet_certification,
     }
 );
 
@@ -60,30 +57,30 @@ parameter_types! {
 }
 
 impl system::Config for Test {
+    type AccountData = ();
+    type AccountId = AccountId;
     type BaseCallFilter = Everything;
-    type BlockWeights = ();
+    type Block = Block;
+    type BlockHashCount = BlockHashCount;
     type BlockLength = ();
+    type BlockWeights = ();
     type DbWeight = ();
-    type RuntimeOrigin = RuntimeOrigin;
-    type RuntimeCall = RuntimeCall;
-    type Index = u64;
-    type BlockNumber = u64;
     type Hash = H256;
     type Hashing = BlakeTwo256;
-    type AccountId = AccountId;
     type Lookup = IdentityLookup<Self::AccountId>;
-    type Header = Header;
-    type RuntimeEvent = RuntimeEvent;
-    type BlockHashCount = BlockHashCount;
-    type Version = ();
-    type PalletInfo = PalletInfo;
-    type AccountData = ();
-    type OnNewAccount = ();
+    type MaxConsumers = frame_support::traits::ConstU32<16>;
+    type Nonce = u64;
     type OnKilledAccount = ();
-    type SystemWeightInfo = ();
-    type SS58Prefix = SS58Prefix;
+    type OnNewAccount = ();
     type OnSetCode = ();
-    type MaxConsumers = frame_support::traits::ConstU32<16>;
+    type PalletInfo = PalletInfo;
+    type RuntimeCall = RuntimeCall;
+    type RuntimeEvent = RuntimeEvent;
+    type RuntimeOrigin = RuntimeOrigin;
+    type RuntimeTask = ();
+    type SS58Prefix = SS58Prefix;
+    type SystemWeightInfo = ();
+    type Version = ();
 }
 
 // DuniterWot
@@ -94,9 +91,9 @@ parameter_types! {
 }
 
 impl pallet_duniter_wot::Config for Test {
-    type MinCertForMembership = MinCertForMembership;
-    type MinCertForCreateIdtyRight = MinCertForCreateIdtyRight;
     type FirstIssuableOn = FirstIssuableOn;
+    type MinCertForCreateIdtyRight = MinCertForCreateIdtyRight;
+    type MinCertForMembership = MinCertForMembership;
 }
 
 // Identity
@@ -117,21 +114,21 @@ impl pallet_identity::traits::IdtyNameValidator for IdtyNameValidatorTestImpl {
 }
 
 impl pallet_identity::Config for Test {
+    type AccountLinker = ();
+    type AutorevocationPeriod = AutorevocationPeriod;
     type ChangeOwnerKeyPeriod = ChangeOwnerKeyPeriod;
-    type ConfirmPeriod = ConfirmPeriod;
     type CheckIdtyCallAllowed = DuniterWot;
-    type IdtyCreationPeriod = IdtyCreationPeriod;
-    type ValidationPeriod = ValidationPeriod;
-    type AutorevocationPeriod = AutorevocationPeriod;
+    type ConfirmPeriod = ConfirmPeriod;
     type DeletionPeriod = DeletionPeriod;
+    type IdtyCreationPeriod = IdtyCreationPeriod;
     type IdtyData = ();
-    type IdtyNameValidator = IdtyNameValidatorTestImpl;
     type IdtyIndex = IdtyIndex;
-    type AccountLinker = ();
-    type Signer = UintAuthorityId;
-    type Signature = TestSignature;
+    type IdtyNameValidator = IdtyNameValidatorTestImpl;
     type OnIdtyChange = DuniterWot;
     type RuntimeEvent = RuntimeEvent;
+    type Signature = TestSignature;
+    type Signer = UintAuthorityId;
+    type ValidationPeriod = ValidationPeriod;
     type WeightInfo = ();
 }
 
@@ -142,17 +139,17 @@ parameter_types! {
 }
 
 impl pallet_membership::Config for Test {
+    type AccountIdOf = ();
+    #[cfg(feature = "runtime-benchmarks")]
+    type BenchmarkSetupHandler = ();
     type CheckMembershipOpAllowed = DuniterWot;
     type IdtyId = IdtyIndex;
     type IdtyIdOf = IdentityIndexOf<Self>;
-    type AccountIdOf = ();
     type MembershipPeriod = MembershipPeriod;
     type MembershipRenewalPeriod = MembershipRenewalPeriod;
     type OnEvent = DuniterWot;
     type RuntimeEvent = RuntimeEvent;
     type WeightInfo = ();
-    #[cfg(feature = "runtime-benchmarks")]
-    type BenchmarkSetupHandler = ();
 }
 
 // Cert
@@ -165,24 +162,24 @@ parameter_types! {
 
 impl pallet_certification::Config for Test {
     type CertPeriod = CertPeriod;
-    type IdtyIndex = IdtyIndex;
-    type IdtyAttr = Identity;
     type CheckCertAllowed = DuniterWot;
+    type IdtyAttr = Identity;
+    type IdtyIndex = IdtyIndex;
     type MaxByIssuer = MaxByIssuer;
     type MinReceivedCertToBeAbleToIssueCert = MinReceivedCertToBeAbleToIssueCert;
     type OnNewcert = DuniterWot;
     type OnRemovedCert = DuniterWot;
     type RuntimeEvent = RuntimeEvent;
-    type WeightInfo = ();
     type ValidityPeriod = ValidityPeriod;
+    type WeightInfo = ();
 }
 
 pub const NAMES: [&str; 6] = ["Alice", "Bob", "Charlie", "Dave", "Eve", "Ferdie"];
 
 // Build genesis storage according to the mock runtime.
 pub fn new_test_ext(initial_identities_len: usize) -> sp_io::TestExternalities {
-    let mut t = frame_system::GenesisConfig::default()
-        .build_storage::<Test>()
+    let mut t = frame_system::GenesisConfig::<Test>::default()
+        .build_storage()
         .unwrap();
 
     pallet_identity::GenesisConfig::<Test> {
@@ -226,7 +223,7 @@ pub fn new_test_ext(initial_identities_len: usize) -> sp_io::TestExternalities {
     .assimilate_storage(&mut t)
     .unwrap();
 
-    frame_support::BasicExternalities::execute_with_storage(&mut t, || {
+    BasicExternalities::execute_with_storage(&mut t, || {
         // manually increment genesis identities sufficient counter
         // In real world, this is done by pallet-identity
         for i in 1..=initial_identities_len {
diff --git a/pallets/identity/Cargo.toml b/pallets/identity/Cargo.toml
index 156fa8e8a..9a52d0896 100644
--- a/pallets/identity/Cargo.toml
+++ b/pallets/identity/Cargo.toml
@@ -11,70 +11,86 @@ version = '3.0.0'
 
 [features]
 default = ['std']
-runtime-benchmarks = ['frame-benchmarking/runtime-benchmarks']
+runtime-benchmarks = [
+    'frame-benchmarking/runtime-benchmarks',
+    'frame-support/runtime-benchmarks',
+    'frame-system/runtime-benchmarks',
+    'sp-runtime/runtime-benchmarks',
+]
 std = [
     'codec/std',
     'frame-support/std',
+    'scale-info/std',
+    'serde/std',
+    'frame-benchmarking?/std',
+    'frame-support/std',
     'frame-system/std',
-    'frame-benchmarking/std',
-    'serde',
     'sp-core/std',
+    'sp-io/std',
     'sp-runtime/std',
     'sp-std/std',
+    'sp-keystore/std',
+    'sp-state-machine/std',
+]
+try-runtime = [
+    'frame-support/try-runtime',
+    'frame-system/try-runtime',
+    'sp-runtime/try-runtime',
 ]
-try-runtime = ['frame-support/try-runtime']
 
 [package.metadata.docs.rs]
+default-features = false
 targets = ['x86_64-unknown-linux-gnu']
 
+[build-dependencies]
+substrate-wasm-builder = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = "duniter-substrate-v1.6.0" }
+
 [dependencies]
 duniter-primitives = { path = "../../primitives/duniter", default-features = false }
 
 # crates.io
-codec = { package = 'parity-scale-codec', version = "3.1.5", features = ['derive'], default-features = false }
-impl-trait-for-tuples = "0.2.1"
-scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
-serde = { version = "1.0.101", features = ["derive"], optional = true }
-
+codec = { package = 'parity-scale-codec', version = "3.6.9", features = ['derive'], default-features = false }
+impl-trait-for-tuples = { version = "0.2.2", default-features = false }
+scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
+serde = { version = "1.0.195", features = ["derive"], default-features = false }
 # substrate
 
 [dependencies.frame-benchmarking]
 default-features = false
-git = 'https://github.com/duniter/substrate'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
 optional = true
-branch = 'duniter-substrate-v0.9.42'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-support]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-system]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-core]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
-[dependencies.sp-runtime]
+[dependencies.sp-io]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
-[dependencies.sp-std]
+[dependencies.sp-runtime]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
-[dependencies.sp-io]
+[dependencies.sp-std]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dev-dependencies]
-serde = '1.0.119'
-sp-io = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42' }
-sp-keystore = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42' }
+sp-keystore = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-state-machine = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
diff --git a/pallets/identity/src/benchmarking.rs b/pallets/identity/src/benchmarking.rs
index f7ba053f6..0d4fe93e4 100644
--- a/pallets/identity/src/benchmarking.rs
+++ b/pallets/identity/src/benchmarking.rs
@@ -69,7 +69,7 @@ fn create_one_identity<T: Config>(owner_key: T::AccountId) -> Result<Account<T>,
     // Reset next_creatable_identity_on to add more identities with Alice
     <Identities<T>>::mutate_exists(T::IdtyIndex::from(1u32), |idty_val_opt| {
         if let Some(ref mut idty_val) = idty_val_opt {
-            idty_val.next_creatable_identity_on = T::BlockNumber::zero();
+            idty_val.next_creatable_identity_on = BlockNumberFor::<T>::zero();
         }
     });
     Ok(Account {
@@ -84,10 +84,10 @@ fn create_one_identity<T: Config>(owner_key: T::AccountId) -> Result<Account<T>,
 fn create_dummy_identity<T: Config>(i: u32) -> Result<(), &'static str> {
     let idty_index: T::IdtyIndex = i.into();
     let owner_key: T::AccountId = account("Bob", i, SEED);
-    let next_scheduled = T::BlockNumber::zero();
+    let next_scheduled = BlockNumberFor::<T>::zero();
     let value = IdtyValue {
         data: Default::default(),
-        next_creatable_identity_on: T::BlockNumber::zero(),
+        next_creatable_identity_on: BlockNumberFor::<T>::zero(),
         old_owner_key: None,
         owner_key: owner_key.clone(),
         next_scheduled,
@@ -155,7 +155,7 @@ benchmarks! {
         let account: Account<T> = create_one_identity(old_key.clone())?;
 
         // Change key a first time to add an old-old key
-        let genesis_hash = frame_system::Pallet::<T>::block_hash(T::BlockNumber::zero());
+        let genesis_hash = frame_system::Pallet::<T>::block_hash(BlockNumberFor::<T>::zero());
         let new_key_payload = IdtyIndexAccountIdPayload {
             genesis_hash: &genesis_hash,
             idty_index: account.index,
@@ -170,7 +170,7 @@ benchmarks! {
         // Change key a second time to benchmark
         //  The sufficients for the old_old key will drop to 0 during benchmark
         let caller_origin: <T as frame_system::Config>::RuntimeOrigin = RawOrigin::Signed(caller.clone()).into();
-        let genesis_hash = frame_system::Pallet::<T>::block_hash(T::BlockNumber::zero());
+        let genesis_hash = frame_system::Pallet::<T>::block_hash(BlockNumberFor::<T>::zero());
         let new_key_payload = IdtyIndexAccountIdPayload {
             genesis_hash: &genesis_hash,
             idty_index: account.index,
@@ -194,7 +194,7 @@ benchmarks! {
 
         // Change key
         //  The sufficients for the old key will drop to 0 during benchmark (not for revoke, only for remove)
-        let genesis_hash = frame_system::Pallet::<T>::block_hash(T::BlockNumber::zero());
+        let genesis_hash = frame_system::Pallet::<T>::block_hash(BlockNumberFor::<T>::zero());
         let new_key_payload = IdtyIndexAccountIdPayload {
             genesis_hash: &genesis_hash,
             idty_index: account.index,
@@ -206,7 +206,7 @@ benchmarks! {
         let signature = sr25519_sign(0.into(), &caller_public, &message).unwrap().into();
         Pallet::<T>::change_owner_key(account.origin.clone(), caller.clone(), signature)?;
 
-        let genesis_hash = frame_system::Pallet::<T>::block_hash(T::BlockNumber::zero());
+        let genesis_hash = frame_system::Pallet::<T>::block_hash(BlockNumberFor::<T>::zero());
         let revocation_payload = RevocationPayload {
             genesis_hash: &genesis_hash,
             idty_index: account.index,
@@ -255,7 +255,7 @@ benchmarks! {
         let bob_public = sr25519_generate(0.into(), None);
         let bob: T::AccountId = MultiSigner::Sr25519(bob_public).into_account().into();
         frame_system::Pallet::<T>::inc_providers(&bob);
-        let genesis_hash = frame_system::Pallet::<T>::block_hash(T::BlockNumber::zero());
+        let genesis_hash = frame_system::Pallet::<T>::block_hash(BlockNumberFor::<T>::zero());
         let payload = (
             LINK_IDTY_PAYLOAD_PREFIX, genesis_hash, T::IdtyIndex::one(), bob.clone(),
         ).encode();
@@ -308,21 +308,21 @@ benchmarks! {
 
     // --- prune identities
     prune_identities_noop {
-        assert!(IdentityChangeSchedule::<T>::try_get(T::BlockNumber::zero()).is_err());
-    }: {Pallet::<T>::prune_identities(T::BlockNumber::zero());}
+        assert!(IdentityChangeSchedule::<T>::try_get(BlockNumberFor::<T>::zero()).is_err());
+    }: {Pallet::<T>::prune_identities(BlockNumberFor::<T>::zero());}
 
     prune_identities_none {
         let idty_index: T::IdtyIndex = 100u32.into();
-        IdentityChangeSchedule::<T>::append(T::BlockNumber::zero(), idty_index);
-        assert!(IdentityChangeSchedule::<T>::try_get(T::BlockNumber::zero()).is_ok());
+        IdentityChangeSchedule::<T>::append(BlockNumberFor::<T>::zero(), idty_index);
+        assert!(IdentityChangeSchedule::<T>::try_get(BlockNumberFor::<T>::zero()).is_ok());
         assert!(<Identities<T>>::try_get(idty_index).is_err());
-    }: {Pallet::<T>::prune_identities(T::BlockNumber::zero());}
+    }: {Pallet::<T>::prune_identities(BlockNumberFor::<T>::zero());}
 
     prune_identities_err {
         let idty_index: T::IdtyIndex = 100u32.into();
         create_dummy_identity::<T>(100u32)?;
-        IdentityChangeSchedule::<T>::append(T::BlockNumber::zero(), idty_index);
-    }: {Pallet::<T>::prune_identities(T::BlockNumber::zero());}
+        IdentityChangeSchedule::<T>::append(BlockNumberFor::<T>::zero(), idty_index);
+    }: {Pallet::<T>::prune_identities(BlockNumberFor::<T>::zero());}
 
     impl_benchmark_test_suite!(
         Pallet,
diff --git a/pallets/identity/src/lib.rs b/pallets/identity/src/lib.rs
index 2063481cd..eac91bda1 100644
--- a/pallets/identity/src/lib.rs
+++ b/pallets/identity/src/lib.rs
@@ -36,7 +36,7 @@ pub use weights::WeightInfo;
 
 use crate::traits::*;
 use codec::Codec;
-use frame_support::dispatch::Weight;
+use frame_support::pallet_prelude::Weight;
 use sp_runtime::traits::{AtLeast32BitUnsigned, IdentifyAccount, One, Saturating, Verify, Zero};
 use sp_std::fmt::Debug;
 use sp_std::prelude::*;
@@ -70,26 +70,26 @@ pub mod pallet {
         /// Period during which the owner can confirm the new identity.
         // something like 2 days but this should be done quickly as the first certifier is helping
         #[pallet::constant]
-        type ConfirmPeriod: Get<Self::BlockNumber>;
+        type ConfirmPeriod: Get<BlockNumberFor<Self>>;
         /// Period before which the identity has to be validated (become member).
         // this is the 2 month period in v1
         #[pallet::constant]
-        type ValidationPeriod: Get<Self::BlockNumber>;
+        type ValidationPeriod: Get<BlockNumberFor<Self>>;
         /// Period before which an identity who lost membership is automatically revoked.
         // this is the 1 year period in v1
         #[pallet::constant]
-        type AutorevocationPeriod: Get<Self::BlockNumber>;
+        type AutorevocationPeriod: Get<BlockNumberFor<Self>>;
         /// Period after which a revoked identity is removed and the keys are freed.
         #[pallet::constant]
-        type DeletionPeriod: Get<Self::BlockNumber>;
+        type DeletionPeriod: Get<BlockNumberFor<Self>>;
         /// Minimum duration between two owner key changes.
         // to avoid stealing the identity without means to revoke
         #[pallet::constant]
-        type ChangeOwnerKeyPeriod: Get<Self::BlockNumber>;
+        type ChangeOwnerKeyPeriod: Get<BlockNumberFor<Self>>;
         /// Minimum duration between the creation of 2 identities by the same creator.
         // it should be greater or equal than the certification period in certification pallet
         #[pallet::constant]
-        type IdtyCreationPeriod: Get<Self::BlockNumber>;
+        type IdtyCreationPeriod: Get<BlockNumberFor<Self>>;
         /// Management of the authorizations of the different calls.
         /// The default implementation allows everything.
         type CheckIdtyCallAllowed: CheckIdtyCallAllowed<Self>;
@@ -129,12 +129,12 @@ pub mod pallet {
 
     // GENESIS STUFF //
 
-    #[cfg_attr(feature = "std", derive(serde::Deserialize, serde::Serialize))]
-    #[derive(Encode, Decode, Clone, PartialEq, Eq)]
+    #[derive(Encode, Decode, Clone, PartialEq, serde::Serialize, serde::Deserialize)]
+    #[serde(deny_unknown_fields, bound(serialize = ""), bound(deserialize = ""))]
     pub struct GenesisIdty<T: Config> {
         pub index: T::IdtyIndex,
         pub name: IdtyName,
-        pub value: IdtyValue<T::BlockNumber, T::AccountId, T::IdtyData>,
+        pub value: IdtyValue<BlockNumberFor<T>, T::AccountId, T::IdtyData>,
     }
 
     #[pallet::genesis_config]
@@ -142,7 +142,6 @@ pub mod pallet {
         pub identities: Vec<GenesisIdty<T>>,
     }
 
-    #[cfg(feature = "std")]
     impl<T: Config> Default for GenesisConfig<T> {
         fn default() -> Self {
             Self {
@@ -152,7 +151,7 @@ pub mod pallet {
     }
 
     #[pallet::genesis_build]
-    impl<T: Config> GenesisBuild<T> for GenesisConfig<T> {
+    impl<T: Config> BuildGenesisConfig for GenesisConfig<T> {
         fn build(&self) {
             let mut names = sp_std::collections::btree_set::BTreeSet::new();
             for idty in &self.identities {
@@ -173,7 +172,7 @@ pub mod pallet {
                 let _ = Pallet::<T>::get_next_idty_index();
                 // use instead custom provided index
                 let idty_index = idty.index;
-                if idty.value.next_scheduled > T::BlockNumber::zero() {
+                if idty.value.next_scheduled > BlockNumberFor::<T>::zero() {
                     <IdentityChangeSchedule<T>>::append(idty.value.next_scheduled, idty_index)
                 }
                 <Identities<T>>::insert(idty_index, idty.value.clone());
@@ -196,7 +195,7 @@ pub mod pallet {
         _,
         Twox64Concat,
         T::IdtyIndex,
-        IdtyValue<T::BlockNumber, T::AccountId, T::IdtyData>,
+        IdtyValue<BlockNumberFor<T>, T::AccountId, T::IdtyData>,
         OptionQuery,
     >;
 
@@ -220,14 +219,14 @@ pub mod pallet {
     #[pallet::storage]
     #[pallet::getter(fn next_scheduled)]
     pub type IdentityChangeSchedule<T: Config> =
-        StorageMap<_, Twox64Concat, T::BlockNumber, Vec<T::IdtyIndex>, ValueQuery>;
+        StorageMap<_, Twox64Concat, BlockNumberFor<T>, Vec<T::IdtyIndex>, ValueQuery>;
 
     // HOOKS //
 
     #[pallet::hooks]
     impl<T: Config> Hooks<BlockNumberFor<T>> for Pallet<T> {
-        fn on_initialize(n: T::BlockNumber) -> Weight {
-            if n > T::BlockNumber::zero() {
+        fn on_initialize(n: BlockNumberFor<T>) -> Weight {
+            if n > BlockNumberFor::<T>::zero() {
                 Self::prune_identities(n).saturating_add(T::WeightInfo::on_initialize())
             } else {
                 T::WeightInfo::on_initialize()
@@ -309,7 +308,7 @@ pub mod pallet {
                 idty_index,
                 IdtyValue {
                     data: Default::default(),
-                    next_creatable_identity_on: T::BlockNumber::zero(),
+                    next_creatable_identity_on: BlockNumberFor::<T>::zero(),
                     old_owner_key: None,
                     owner_key: owner_key.clone(),
                     next_scheduled: Self::schedule_identity_change(
@@ -426,7 +425,7 @@ pub mod pallet {
                     None
                 };
 
-            let genesis_hash = frame_system::Pallet::<T>::block_hash(T::BlockNumber::zero());
+            let genesis_hash = frame_system::Pallet::<T>::block_hash(BlockNumberFor::<T>::zero());
             let new_key_payload = IdtyIndexAccountIdPayload {
                 genesis_hash: &genesis_hash,
                 idty_index,
@@ -501,7 +500,7 @@ pub mod pallet {
             );
 
             // then check payload signature
-            let genesis_hash = frame_system::Pallet::<T>::block_hash(T::BlockNumber::zero());
+            let genesis_hash = frame_system::Pallet::<T>::block_hash(BlockNumberFor::<T>::zero());
             let revocation_payload = RevocationPayload {
                 genesis_hash,
                 idty_index,
@@ -569,7 +568,7 @@ pub mod pallet {
             let who = ensure_signed(origin)?;
             let idty_index =
                 IdentityIndexOf::<T>::get(&who).ok_or(Error::<T>::IdtyIndexNotFound)?;
-            let genesis_hash = frame_system::Pallet::<T>::block_hash(T::BlockNumber::zero());
+            let genesis_hash = frame_system::Pallet::<T>::block_hash(BlockNumberFor::<T>::zero());
             let payload = IdtyIndexAccountIdPayload {
                 genesis_hash: &genesis_hash,
                 idty_index,
@@ -642,7 +641,7 @@ pub mod pallet {
         pub fn membership_added(idty_index: T::IdtyIndex) {
             if let Some(mut idty_value) = Identities::<T>::get(idty_index) {
                 Self::unschedule_identity_change(idty_index, idty_value.next_scheduled);
-                idty_value.next_scheduled = T::BlockNumber::zero();
+                idty_value.next_scheduled = BlockNumberFor::<T>::zero();
                 if idty_value.status == IdtyStatus::Unvalidated {
                     // only submit event first time, after that, only membership events are relevant
                     Self::deposit_event(Event::IdtyValidated { idty_index });
@@ -731,7 +730,7 @@ pub mod pallet {
         }
 
         /// remove identities planned for removal at the given block
-        pub fn prune_identities(block_number: T::BlockNumber) -> Weight {
+        pub fn prune_identities(block_number: BlockNumberFor<T>) -> Weight {
             let mut total_weight = Weight::zero();
 
             for idty_index in IdentityChangeSchedule::<T>::take(block_number) {
@@ -774,9 +773,9 @@ pub mod pallet {
         /// change identity status and reschedule next action
         fn update_identity_status(
             idty_index: T::IdtyIndex,
-            mut idty_value: IdtyValue<T::BlockNumber, T::AccountId, T::IdtyData>,
+            mut idty_value: IdtyValue<BlockNumberFor<T>, T::AccountId, T::IdtyData>,
             new_status: IdtyStatus,
-            period: T::BlockNumber,
+            period: BlockNumberFor<T>,
         ) {
             Self::unschedule_identity_change(idty_index, idty_value.next_scheduled);
             idty_value.next_scheduled = Self::schedule_identity_change(idty_index, period);
@@ -785,18 +784,19 @@ pub mod pallet {
         }
 
         /// unschedule identity change
-        fn unschedule_identity_change(idty_id: T::IdtyIndex, block_number: T::BlockNumber) {
+        fn unschedule_identity_change(idty_id: T::IdtyIndex, block_number: BlockNumberFor<T>) {
             let mut scheduled = IdentityChangeSchedule::<T>::get(block_number);
             if let Some(pos) = scheduled.iter().position(|x| *x == idty_id) {
                 scheduled.swap_remove(pos);
                 IdentityChangeSchedule::<T>::set(block_number, scheduled);
             }
         }
+
         /// schedule identity change after given period
         fn schedule_identity_change(
             idty_id: T::IdtyIndex,
-            period: T::BlockNumber,
-        ) -> T::BlockNumber {
+            period: BlockNumberFor<T>,
+        ) -> BlockNumberFor<T> {
             let block_number = frame_system::pallet::Pallet::<T>::block_number();
             let next_scheduled = block_number + period;
             IdentityChangeSchedule::<T>::append(next_scheduled, idty_id);
@@ -809,7 +809,7 @@ pub mod pallet {
         fn check_create_identity(
             issuer_key: &T::AccountId,
             receiver_key: &T::AccountId,
-            block_number: T::BlockNumber,
+            block_number: BlockNumberFor<T>,
         ) -> Result<T::IdtyIndex, DispatchError> {
             // first get issuer details
             let creator_index = IdentityIndexOf::<T>::try_get(issuer_key)
@@ -856,6 +856,7 @@ impl<T: Config> duniter_primitives::Idty<T::IdtyIndex, T::AccountId> for Pallet<
     fn idty_index(owner_key: T::AccountId) -> Option<T::IdtyIndex> {
         IdentityIndexOf::<T>::get(owner_key)
     }
+
     fn owner_key(idty_index: T::IdtyIndex) -> Option<T::AccountId> {
         Identities::<T>::get(idty_index).map(|idty_val| idty_val.owner_key)
     }
@@ -878,6 +879,7 @@ where
             Default::default()
         }
     }
+
     /// mutate an account given a function of its data
     fn try_mutate_exists<R, E: From<sp_runtime::DispatchError>>(
         key: &T::AccountId,
diff --git a/pallets/identity/src/mock.rs b/pallets/identity/src/mock.rs
index 59242164b..894154414 100644
--- a/pallets/identity/src/mock.rs
+++ b/pallets/identity/src/mock.rs
@@ -18,20 +18,20 @@ use super::*;
 use crate::{self as pallet_identity};
 use frame_support::{
     parameter_types,
-    traits::{Everything, GenesisBuild, OnFinalize, OnInitialize},
+    traits::{Everything, OnFinalize, OnInitialize},
 };
 use frame_system as system;
 use sp_core::{Pair, H256};
 use sp_keystore::{testing::MemoryKeystore, KeystoreExt};
+use sp_runtime::BuildStorage;
 use sp_runtime::{
-    testing::Header,
     traits::{BlakeTwo256, IdentityLookup},
     MultiSignature, MultiSigner,
 };
+use sp_state_machine::BasicExternalities;
 use std::sync::Arc;
 
 type Block = frame_system::mocking::MockBlock<Test>;
-type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic<Test>;
 pub type Signature = MultiSignature;
 pub type AccountPublic = <Signature as Verify>::Signer;
 pub type AccountId = <AccountPublic as IdentifyAccount>::AccountId;
@@ -43,13 +43,10 @@ fn account(id: u8) -> AccountId {
 
 // Configure a mock runtime to test the pallet.
 frame_support::construct_runtime!(
-    pub enum Test where
-        Block = Block,
-        NodeBlock = Block,
-        UncheckedExtrinsic = UncheckedExtrinsic,
+    pub enum Test
     {
-        System: frame_system::{Pallet, Call, Config, Storage, Event<T>},
-        Identity: pallet_identity::{Pallet, Call, Storage, Config<T>, Event<T>},
+        System: frame_system,
+        Identity: pallet_identity,
     }
 );
 
@@ -59,30 +56,30 @@ parameter_types! {
 }
 
 impl system::Config for Test {
+    type AccountData = ();
+    type AccountId = AccountId;
     type BaseCallFilter = Everything;
-    type BlockWeights = ();
+    type Block = Block;
+    type BlockHashCount = BlockHashCount;
     type BlockLength = ();
+    type BlockWeights = ();
     type DbWeight = ();
-    type RuntimeOrigin = RuntimeOrigin;
-    type RuntimeCall = RuntimeCall;
-    type Index = u64;
-    type BlockNumber = u64;
     type Hash = H256;
     type Hashing = BlakeTwo256;
-    type AccountId = AccountId;
     type Lookup = IdentityLookup<Self::AccountId>;
-    type Header = Header;
-    type RuntimeEvent = RuntimeEvent;
-    type BlockHashCount = BlockHashCount;
-    type Version = ();
-    type PalletInfo = PalletInfo;
-    type AccountData = ();
-    type OnNewAccount = ();
+    type MaxConsumers = frame_support::traits::ConstU32<16>;
+    type Nonce = u64;
     type OnKilledAccount = ();
-    type SystemWeightInfo = ();
-    type SS58Prefix = SS58Prefix;
+    type OnNewAccount = ();
     type OnSetCode = ();
-    type MaxConsumers = frame_support::traits::ConstU32<16>;
+    type PalletInfo = PalletInfo;
+    type RuntimeCall = RuntimeCall;
+    type RuntimeEvent = RuntimeEvent;
+    type RuntimeOrigin = RuntimeOrigin;
+    type RuntimeTask = ();
+    type SS58Prefix = SS58Prefix;
+    type SystemWeightInfo = ();
+    type Version = ();
 }
 
 parameter_types! {
@@ -102,33 +99,33 @@ impl pallet_identity::traits::IdtyNameValidator for IdtyNameValidatorTestImpl {
 }
 
 impl pallet_identity::Config for Test {
+    type AccountLinker = ();
+    type AutorevocationPeriod = AutorevocationPeriod;
     type ChangeOwnerKeyPeriod = ChangeOwnerKeyPeriod;
+    type CheckIdtyCallAllowed = ();
     type ConfirmPeriod = ConfirmPeriod;
-    type ValidationPeriod = ValidationPeriod;
-    type AutorevocationPeriod = AutorevocationPeriod;
     type DeletionPeriod = DeletionPeriod;
-    type CheckIdtyCallAllowed = ();
     type IdtyCreationPeriod = IdtyCreationPeriod;
     type IdtyData = ();
-    type IdtyNameValidator = IdtyNameValidatorTestImpl;
     type IdtyIndex = u64;
-    type AccountLinker = ();
-    type Signer = AccountPublic;
-    type Signature = Signature;
+    type IdtyNameValidator = IdtyNameValidatorTestImpl;
     type OnIdtyChange = ();
     type RuntimeEvent = RuntimeEvent;
+    type Signature = Signature;
+    type Signer = AccountPublic;
+    type ValidationPeriod = ValidationPeriod;
     type WeightInfo = ();
 }
 
 // Build genesis storage according to the mock runtime.
 pub fn new_test_ext(gen_conf: pallet_identity::GenesisConfig<Test>) -> sp_io::TestExternalities {
-    let mut t = frame_system::GenesisConfig::default()
-        .build_storage::<Test>()
+    let mut t = frame_system::GenesisConfig::<Test>::default()
+        .build_storage()
         .unwrap();
 
     gen_conf.assimilate_storage(&mut t).unwrap();
 
-    frame_support::BasicExternalities::execute_with_storage(&mut t, || {
+    BasicExternalities::execute_with_storage(&mut t, || {
         frame_system::Pallet::<Test>::inc_providers(&account(2));
         frame_system::Pallet::<Test>::inc_providers(&account(3));
     });
diff --git a/pallets/identity/src/types.rs b/pallets/identity/src/types.rs
index f8bff333c..e3c8b35db 100644
--- a/pallets/identity/src/types.rs
+++ b/pallets/identity/src/types.rs
@@ -17,9 +17,9 @@
 //! Various basic types for use in the identity pallet.
 
 use codec::{Decode, Encode};
+use core::primitive::str;
 use frame_support::pallet_prelude::*;
 use scale_info::TypeInfo;
-#[cfg(feature = "std")]
 use serde::{Deserialize, Serialize};
 use sp_std::vec::Vec;
 
@@ -66,45 +66,43 @@ pub enum RemovalReason {
 }
 
 /// name of the identity, ascii encoded
-#[derive(Encode, Decode, Default, Clone, PartialEq, Eq, PartialOrd, Ord, RuntimeDebug)]
+#[derive(
+    Encode,
+    Decode,
+    Default,
+    Clone,
+    PartialEq,
+    Eq,
+    PartialOrd,
+    Ord,
+    RuntimeDebug,
+    Serialize,
+    Deserialize,
+    TypeInfo,
+)]
 pub struct IdtyName(pub Vec<u8>);
 
-/// implement scale string typeinfo for encoding
-impl scale_info::TypeInfo for IdtyName {
-    type Identity = str;
-
-    fn type_info() -> scale_info::Type {
-        Self::Identity::type_info()
-    }
-}
-
-#[cfg(feature = "std")]
 impl From<&str> for IdtyName {
     fn from(s: &str) -> Self {
         Self(s.as_bytes().to_vec())
     }
 }
 
-#[cfg(feature = "std")]
-impl serde::Serialize for IdtyName {
-    fn serialize<S: serde::Serializer>(&self, serializer: S) -> Result<S::Ok, S::Error> {
-        std::str::from_utf8(&self.0)
-            .map_err(|e| serde::ser::Error::custom(format!("{:?}", e)))?
-            .serialize(serializer)
-    }
-}
-
-#[cfg(feature = "std")]
-impl<'de> serde::Deserialize<'de> for IdtyName {
-    fn deserialize<D: serde::Deserializer<'de>>(de: D) -> Result<Self, D::Error> {
-        Ok(Self(String::deserialize(de)?.as_bytes().to_vec()))
-    }
-}
-
 /// status of the identity
 // this is a kind of index to tell the state of the identity
-#[cfg_attr(feature = "std", derive(Deserialize, Serialize))]
-#[derive(Encode, Decode, Default, Clone, Copy, PartialEq, Eq, RuntimeDebug, TypeInfo)]
+#[derive(
+    Encode,
+    Decode,
+    Default,
+    Clone,
+    Copy,
+    PartialEq,
+    Eq,
+    RuntimeDebug,
+    TypeInfo,
+    Deserialize,
+    Serialize,
+)]
 pub enum IdtyStatus {
     /// created through a first certification but unconfirmed
     #[default]
@@ -121,8 +119,7 @@ pub enum IdtyStatus {
 }
 
 /// identity value (as in key/value)
-#[cfg_attr(feature = "std", derive(Debug, Deserialize, Serialize))]
-#[derive(Encode, Decode, Clone, PartialEq, Eq, TypeInfo)]
+#[derive(Serialize, Deserialize, Debug, Encode, Decode, Clone, PartialEq, Eq, TypeInfo)]
 pub struct IdtyValue<BlockNumber, AccountId, IdtyData> {
     /// data shared between pallets defined by runtime
     /// only contains first_eligible_ud in our case
diff --git a/pallets/identity/src/weights.rs b/pallets/identity/src/weights.rs
index ee07fdec9..879cbe3f4 100644
--- a/pallets/identity/src/weights.rs
+++ b/pallets/identity/src/weights.rs
@@ -48,6 +48,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads(14))
             .saturating_add(RocksDbWeight::get().writes(12))
     }
+
     fn confirm_identity() -> Weight {
         // Proof Size summary in bytes:
         //  Measured:  `661`
@@ -58,6 +59,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads(5))
             .saturating_add(RocksDbWeight::get().writes(4))
     }
+
     fn change_owner_key() -> Weight {
         // Proof Size summary in bytes:
         //  Measured:  `837`
@@ -68,6 +70,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads(7))
             .saturating_add(RocksDbWeight::get().writes(5))
     }
+
     fn revoke_identity() -> Weight {
         // Proof Size summary in bytes:
         //  Measured:  `778`
@@ -78,6 +81,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads(6))
             .saturating_add(RocksDbWeight::get().writes(6))
     }
+
     fn prune_item_identities_names(i: u32) -> Weight {
         // Proof Size summary in bytes:
         //  Measured:  `0`
@@ -89,6 +93,7 @@ impl WeightInfo for () {
             .saturating_add(Weight::from_parts(30_016_649, 0).saturating_mul(i.into()))
             .saturating_add(RocksDbWeight::get().writes((1_u64).saturating_mul(i.into())))
     }
+
     fn fix_sufficients() -> Weight {
         // Proof Size summary in bytes:
         //  Measured:  `67`
@@ -99,6 +104,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads(1))
             .saturating_add(RocksDbWeight::get().writes(1))
     }
+
     fn link_account() -> Weight {
         // Proof Size summary in bytes:
         //  Measured:  `307`
@@ -109,6 +115,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads(3))
             .saturating_add(RocksDbWeight::get().writes(1))
     }
+
     fn on_initialize() -> Weight {
         // Proof Size summary in bytes:
         //  Measured:  `0`
@@ -116,6 +123,7 @@ impl WeightInfo for () {
         // Minimum execution time: 4_529_000 picoseconds.
         Weight::from_parts(7_360_000, 0).saturating_add(Weight::from_parts(0, 0))
     }
+
     fn do_revoke_identity_noop() -> Weight {
         // Proof Size summary in bytes:
         //  Measured:  `269`
@@ -125,6 +133,7 @@ impl WeightInfo for () {
             .saturating_add(Weight::from_parts(0, 3734))
             .saturating_add(RocksDbWeight::get().reads(1))
     }
+
     fn do_revoke_identity() -> Weight {
         // Proof Size summary in bytes:
         //  Measured:  `1525`
@@ -135,6 +144,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads(17))
             .saturating_add(RocksDbWeight::get().writes(20))
     }
+
     fn do_remove_identity_noop() -> Weight {
         // Proof Size summary in bytes:
         //  Measured:  `269`
@@ -144,6 +154,7 @@ impl WeightInfo for () {
             .saturating_add(Weight::from_parts(0, 3734))
             .saturating_add(RocksDbWeight::get().reads(1))
     }
+
     fn do_remove_identity() -> Weight {
         // Proof Size summary in bytes:
         //  Measured:  `1432`
@@ -154,6 +165,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads(16))
             .saturating_add(RocksDbWeight::get().writes(22))
     }
+
     fn prune_identities_noop() -> Weight {
         // Proof Size summary in bytes:
         //  Measured:  `108`
@@ -163,6 +175,7 @@ impl WeightInfo for () {
             .saturating_add(Weight::from_parts(0, 3573))
             .saturating_add(RocksDbWeight::get().reads(1))
     }
+
     fn prune_identities_none() -> Weight {
         // Proof Size summary in bytes:
         //  Measured:  `292`
@@ -173,6 +186,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads(2))
             .saturating_add(RocksDbWeight::get().writes(1))
     }
+
     fn prune_identities_err() -> Weight {
         // Proof Size summary in bytes:
         //  Measured:  `1177`
diff --git a/pallets/membership/Cargo.toml b/pallets/membership/Cargo.toml
index 442167096..ea0bc3465 100644
--- a/pallets/membership/Cargo.toml
+++ b/pallets/membership/Cargo.toml
@@ -12,83 +12,83 @@ version = '3.0.0'
 [features]
 default = ['std']
 runtime-benchmarks = [
-	"frame-benchmarking/runtime-benchmarks",
+    'frame-benchmarking/runtime-benchmarks',
+    'frame-support/runtime-benchmarks',
+    'frame-system/runtime-benchmarks',
+    'sp-runtime/runtime-benchmarks',
 ]
 std = [
+    'scale-info/std',
+    'sp-membership/std',
     'codec/std',
+    'frame-benchmarking?/std',
     'frame-support/std',
     'frame-system/std',
-    'frame-benchmarking/std',
-    'serde',
     'sp-core/std',
-    'sp-membership/std',
     'sp-runtime/std',
     'sp-std/std',
+    'sp-io/std',
+]
+try-runtime = [
+    'frame-support/try-runtime',
+    'frame-system/try-runtime',
+    'sp-runtime/try-runtime',
+    'sp-membership/try-runtime',
 ]
-try-runtime = ['frame-support/try-runtime']
 
 [dependencies]
-sp-membership = { path = "../../primitives/membership", default-features = false }
 
 # substrate
-scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
+scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
+sp-membership = { path = "../../primitives/membership", default-features = false }
 
 [dependencies.codec]
 default-features = false
 features = ['derive']
 package = 'parity-scale-codec'
-version = "3.1.5"
+version = "3.6.9"
 
 [dependencies.frame-benchmarking]
 default-features = false
-git = 'https://github.com/duniter/substrate'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
 optional = true
-branch = 'duniter-substrate-v0.9.42'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-support]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-system]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
-[dependencies.serde]
-version = "1.0.101"
-optional = true
-features = ["derive"]
+### DOC ###
+
+[package.metadata.docs.rs]
+targets = ['x86_64-unknown-linux-gnu']
 
 [dependencies.sp-core]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-runtime]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-std]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
-
-### DOC ###
-
-[package.metadata.docs.rs]
-targets = ['x86_64-unknown-linux-gnu']
-[dev-dependencies.serde]
-version = '1.0.119'
-
-### DEV ###
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dev-dependencies.maplit]
+default-features = false
 version = '1.0.2'
 
 [dev-dependencies.sp-io]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
diff --git a/pallets/membership/src/benchmarking.rs b/pallets/membership/src/benchmarking.rs
index 84216da89..a3475c7d0 100644
--- a/pallets/membership/src/benchmarking.rs
+++ b/pallets/membership/src/benchmarking.rs
@@ -34,7 +34,7 @@ benchmarks! {
     where_clause {
         where
             T::IdtyId: From<u32>,
-            <T as frame_system::Config>::BlockNumber: From<u32>,
+            BlockNumberFor<T>: From<u32>,
     }
 
     // TODO membership add and renewal should be included to distance on_new_session as worst case scenario
@@ -52,7 +52,7 @@ benchmarks! {
         let mut idties: Vec<T::IdtyId> = Vec::new();
         for j in 1..i+1 {
             let j: T::IdtyId = j.into();
-            Membership::<T>::insert(j, MembershipData::<T::BlockNumber>::default());
+            Membership::<T>::insert(j, MembershipData::<BlockNumberFor<T>>::default());
             idties.push(j);
         }
         MembershipsExpireOn::<T>::insert(block_number, idties);
diff --git a/pallets/membership/src/lib.rs b/pallets/membership/src/lib.rs
index 16d30e968..d1fb52e35 100644
--- a/pallets/membership/src/lib.rs
+++ b/pallets/membership/src/lib.rs
@@ -31,14 +31,13 @@ pub mod weights;
 pub use pallet::*;
 pub use weights::WeightInfo;
 
-use frame_support::dispatch::Weight;
+use frame_support::pallet_prelude::Weight;
 use frame_support::pallet_prelude::*;
 use sp_membership::traits::*;
 use sp_membership::MembershipData;
 use sp_runtime::traits::Zero;
+use sp_std::collections::btree_map::BTreeMap;
 use sp_std::prelude::*;
-#[cfg(feature = "std")]
-use std::collections::BTreeMap;
 
 #[cfg(feature = "runtime-benchmarks")]
 pub trait SetupBenchmark<IdtyId, AccountId> {
@@ -49,6 +48,7 @@ pub trait SetupBenchmark<IdtyId, AccountId> {
 #[cfg(feature = "runtime-benchmarks")]
 impl<IdtyId, AccountId> SetupBenchmark<IdtyId, AccountId> for () {
     fn force_valid_distance_status(_idty_id: &IdtyId) {}
+
     fn add_cert(_issuer: &IdtyId, _receiver: &IdtyId) {}
 }
 
@@ -94,11 +94,11 @@ pub mod pallet {
         /// Maximum life span of a single membership (in number of blocks)
         // (this could be renamed "validity" or "duration")
         #[pallet::constant]
-        type MembershipPeriod: Get<Self::BlockNumber>;
+        type MembershipPeriod: Get<BlockNumberFor<Self>>;
         /// Minimum delay to wait before renewing membership
         // i.e. asking for distance evaluation
         #[pallet::constant]
-        type MembershipRenewalPeriod: Get<Self::BlockNumber>;
+        type MembershipRenewalPeriod: Get<BlockNumberFor<Self>>;
         /// On event handler
         type OnEvent: OnEvent<Self::IdtyId>;
         /// Because this pallet emits events, it depends on the runtime's definition of an event.
@@ -112,10 +112,9 @@ pub mod pallet {
 
     #[pallet::genesis_config]
     pub struct GenesisConfig<T: Config> {
-        pub memberships: BTreeMap<T::IdtyId, MembershipData<T::BlockNumber>>,
+        pub memberships: BTreeMap<T::IdtyId, MembershipData<BlockNumberFor<T>>>,
     }
 
-    #[cfg(feature = "std")]
     impl<T: Config> Default for GenesisConfig<T> {
         fn default() -> Self {
             Self {
@@ -125,7 +124,7 @@ pub mod pallet {
     }
 
     #[pallet::genesis_build]
-    impl<T: Config> GenesisBuild<T> for GenesisConfig<T> {
+    impl<T: Config> BuildGenesisConfig for GenesisConfig<T> {
         fn build(&self) {
             for (idty_id, membership_data) in &self.memberships {
                 MembershipsExpireOn::<T>::append(membership_data.expire_on, idty_id);
@@ -140,14 +139,19 @@ pub mod pallet {
     // (expiration block for instance)
     #[pallet::storage]
     #[pallet::getter(fn membership)]
-    pub type Membership<T: Config> =
-        CountedStorageMap<_, Twox64Concat, T::IdtyId, MembershipData<T::BlockNumber>, OptionQuery>;
+    pub type Membership<T: Config> = CountedStorageMap<
+        _,
+        Twox64Concat,
+        T::IdtyId,
+        MembershipData<BlockNumberFor<T>>,
+        OptionQuery,
+    >;
 
     /// maps block number to the list of identity id set to expire at this block
     #[pallet::storage]
     #[pallet::getter(fn memberships_expire_on)]
     pub type MembershipsExpireOn<T: Config> =
-        StorageMap<_, Twox64Concat, T::BlockNumber, Vec<T::IdtyId>, ValueQuery>;
+        StorageMap<_, Twox64Concat, BlockNumberFor<T>, Vec<T::IdtyId>, ValueQuery>;
 
     // EVENTS //
 
@@ -185,8 +189,8 @@ pub mod pallet {
 
     #[pallet::hooks]
     impl<T: Config> Hooks<BlockNumberFor<T>> for Pallet<T> {
-        fn on_initialize(n: T::BlockNumber) -> Weight {
-            if n > T::BlockNumber::zero() {
+        fn on_initialize(n: BlockNumberFor<T>) -> Weight {
+            if n > BlockNumberFor::<T>::zero() {
                 T::WeightInfo::on_initialize().saturating_add(Self::expire_memberships(n))
             } else {
                 T::WeightInfo::on_initialize()
@@ -203,7 +207,7 @@ pub mod pallet {
     // INTERNAL FUNCTIONS //
     impl<T: Config> Pallet<T> {
         /// unschedule membership expiry
-        fn unschedule_membership_expiry(idty_id: T::IdtyId, block_number: T::BlockNumber) {
+        fn unschedule_membership_expiry(idty_id: T::IdtyId, block_number: BlockNumberFor<T>) {
             let mut scheduled = MembershipsExpireOn::<T>::get(block_number);
 
             if let Some(pos) = scheduled.iter().position(|x| *x == idty_id) {
@@ -211,8 +215,9 @@ pub mod pallet {
                 MembershipsExpireOn::<T>::set(block_number, scheduled);
             }
         }
+
         /// schedule membership expiry
-        fn insert_membership_and_schedule_expiry(idty_id: T::IdtyId) -> T::BlockNumber {
+        fn insert_membership_and_schedule_expiry(idty_id: T::IdtyId) -> BlockNumberFor<T> {
             let block_number = frame_system::pallet::Pallet::<T>::block_number();
             let expire_on = block_number + T::MembershipPeriod::get();
 
@@ -237,7 +242,7 @@ pub mod pallet {
         /// check that membership can be renewed
         pub fn check_renew_membership(
             idty_id: T::IdtyId,
-        ) -> Result<MembershipData<T::BlockNumber>, DispatchError> {
+        ) -> Result<MembershipData<BlockNumberFor<T>>, DispatchError> {
             let membership_data =
                 Membership::<T>::get(idty_id).ok_or(Error::<T>::MembershipNotFound)?;
 
@@ -273,7 +278,7 @@ pub mod pallet {
         /// perform membership renewal
         fn do_renew_membership(
             idty_id: T::IdtyId,
-            membership_data: MembershipData<T::BlockNumber>,
+            membership_data: MembershipData<BlockNumberFor<T>>,
         ) {
             Self::unschedule_membership_expiry(idty_id, membership_data.expire_on);
             let expire_on = Self::insert_membership_and_schedule_expiry(idty_id);
@@ -297,7 +302,7 @@ pub mod pallet {
         }
 
         /// perform the membership expiry scheduled at given block
-        pub fn expire_memberships(block_number: T::BlockNumber) -> Weight {
+        pub fn expire_memberships(block_number: BlockNumberFor<T>) -> Weight {
             let mut expired_idty_count = 0u32;
 
             for idty_id in MembershipsExpireOn::<T>::take(block_number) {
diff --git a/pallets/membership/src/mock.rs b/pallets/membership/src/mock.rs
index f19769127..27070cd5f 100644
--- a/pallets/membership/src/mock.rs
+++ b/pallets/membership/src/mock.rs
@@ -22,7 +22,6 @@ use frame_support::{
 use frame_system as system;
 use sp_core::H256;
 use sp_runtime::{
-    testing::Header,
     traits::{BlakeTwo256, ConvertInto, IdentityLookup},
     BuildStorage,
 };
@@ -31,17 +30,12 @@ type AccountId = u64;
 type BlockNumber = u64;
 type Block = frame_system::mocking::MockBlock<Test>;
 pub type IdtyId = u64;
-type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic<Test>;
 
 // Configure a mock runtime to test the pallet.
 frame_support::construct_runtime!(
-    pub enum Test where
-        Block = Block,
-        NodeBlock = Block,
-        UncheckedExtrinsic = UncheckedExtrinsic,
-    {
-        System: frame_system::{Pallet, Call, Config, Storage, Event<T>},
-        Membership: pallet_membership::{Pallet, Event<T>, Storage, Config<T>},
+    pub enum Test{
+        System: frame_system,
+        Membership: pallet_membership,
     }
 );
 
@@ -51,30 +45,30 @@ parameter_types! {
 }
 
 impl system::Config for Test {
+    type AccountData = ();
+    type AccountId = AccountId;
     type BaseCallFilter = Everything;
-    type BlockWeights = ();
+    type Block = Block;
+    type BlockHashCount = BlockHashCount;
     type BlockLength = ();
+    type BlockWeights = ();
     type DbWeight = ();
-    type RuntimeOrigin = RuntimeOrigin;
-    type RuntimeCall = RuntimeCall;
-    type Index = u64;
-    type BlockNumber = BlockNumber;
     type Hash = H256;
     type Hashing = BlakeTwo256;
-    type AccountId = AccountId;
     type Lookup = IdentityLookup<Self::AccountId>;
-    type Header = Header;
-    type RuntimeEvent = RuntimeEvent;
-    type BlockHashCount = BlockHashCount;
-    type Version = ();
-    type PalletInfo = PalletInfo;
-    type AccountData = ();
-    type OnNewAccount = ();
+    type MaxConsumers = frame_support::traits::ConstU32<16>;
+    type Nonce = u64;
     type OnKilledAccount = ();
-    type SystemWeightInfo = ();
-    type SS58Prefix = SS58Prefix;
+    type OnNewAccount = ();
     type OnSetCode = ();
-    type MaxConsumers = frame_support::traits::ConstU32<16>;
+    type PalletInfo = PalletInfo;
+    type RuntimeCall = RuntimeCall;
+    type RuntimeEvent = RuntimeEvent;
+    type RuntimeOrigin = RuntimeOrigin;
+    type RuntimeTask = ();
+    type SS58Prefix = SS58Prefix;
+    type SystemWeightInfo = ();
+    type Version = ();
 }
 
 parameter_types! {
@@ -83,22 +77,22 @@ parameter_types! {
 }
 
 impl pallet_membership::Config for Test {
+    type AccountIdOf = ConvertInto;
+    #[cfg(feature = "runtime-benchmarks")]
+    type BenchmarkSetupHandler = ();
     type CheckMembershipOpAllowed = ();
     type IdtyId = IdtyId;
     type IdtyIdOf = ConvertInto;
-    type AccountIdOf = ConvertInto;
     type MembershipPeriod = MembershipPeriod;
     type MembershipRenewalPeriod = MembershipRenewalPeriod;
     type OnEvent = ();
     type RuntimeEvent = RuntimeEvent;
     type WeightInfo = ();
-    #[cfg(feature = "runtime-benchmarks")]
-    type BenchmarkSetupHandler = ();
 }
 
 // Build genesis storage according to the mock runtime.
 pub fn new_test_ext(gen_conf: pallet_membership::GenesisConfig<Test>) -> sp_io::TestExternalities {
-    GenesisConfig {
+    RuntimeGenesisConfig {
         system: SystemConfig::default(),
         membership: gen_conf,
     }
diff --git a/pallets/membership/src/weights.rs b/pallets/membership/src/weights.rs
index e8024faf0..e5ad97827 100644
--- a/pallets/membership/src/weights.rs
+++ b/pallets/membership/src/weights.rs
@@ -33,6 +33,7 @@ impl WeightInfo for () {
         // Minimum execution time: 4_012_000 picoseconds.
         Weight::from_parts(4_629_000, 0).saturating_add(Weight::from_parts(0, 0))
     }
+
     fn expire_memberships(i: u32) -> Weight {
         // Proof Size summary in bytes:
         //  Measured:  `567 + i * (23 ±0)`
diff --git a/pallets/offences/Cargo.toml b/pallets/offences/Cargo.toml
index e3214bab5..fb7737eb1 100644
--- a/pallets/offences/Cargo.toml
+++ b/pallets/offences/Cargo.toml
@@ -13,20 +13,19 @@ readme = "README.md"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-codec = { package = "parity-scale-codec", version = "3.1.5", features = ["derive"], default-features = false }
-log = { version = "0.4.17", default-features = false }
-scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
-serde = { version = "1.0.101", default-features = false, optional = true }
-frame-support = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-frame-system = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-balances = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-runtime = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-staking = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-std = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
+codec = { package = "parity-scale-codec", version = "3.6.9", features = ["derive"], default-features = false }
+log = { version = "0.4.20", default-features = false }
+scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
+frame-support = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+frame-system = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-balances = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-runtime = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-staking = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-std = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 
 [dev-dependencies]
-sp-core = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-io = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42' }
+sp-core = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-io = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 
 [features]
 default = ["std"]
@@ -37,10 +36,22 @@ std = [
 	"log/std",
 	"pallet-balances/std",
 	"scale-info/std",
-	"serde",
 	"sp-runtime/std",
 	"sp-staking/std",
 	"sp-std/std",
+	"sp-io/std",
+	"sp-core/std",
+]
+runtime-benchmarks = [
+	"frame-support/runtime-benchmarks",
+	"frame-system/runtime-benchmarks",
+	"pallet-balances/runtime-benchmarks",
+	"sp-runtime/runtime-benchmarks",
+	"sp-staking/runtime-benchmarks",
+]
+try-runtime = [
+    'frame-support/try-runtime',
+    'frame-system/try-runtime',
+    'pallet-balances/runtime-benchmarks',
+    'sp-runtime/try-runtime',
 ]
-runtime-benchmarks = []
-try-runtime = ["frame-support/try-runtime"]
diff --git a/pallets/offences/src/mock.rs b/pallets/offences/src/mock.rs
index 57f8e7399..11b2b4109 100644
--- a/pallets/offences/src/mock.rs
+++ b/pallets/offences/src/mock.rs
@@ -25,8 +25,8 @@ use frame_support::{
     weights::{constants::RocksDbWeight, Weight},
 };
 use sp_core::H256;
+use sp_runtime::BuildStorage;
 use sp_runtime::{
-    testing::Header,
     traits::{BlakeTwo256, IdentityLookup},
     Perbill,
 };
@@ -54,56 +54,51 @@ impl<Reporter, Offender> pallet_offences::OnOffenceHandler<Reporter, Offender, W
     }
 }
 
-type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic<Runtime>;
 type Block = frame_system::mocking::MockBlock<Runtime>;
 
 frame_support::construct_runtime!(
-    pub struct Runtime where
-        Block = Block,
-        NodeBlock = Block,
-        UncheckedExtrinsic = UncheckedExtrinsic,
-    {
-        System: frame_system::{Pallet, Call, Config, Storage, Event<T>},
-        Offences: pallet_offences::{Pallet, Storage, Event},
+    pub struct Runtime {
+        System: frame_system,
+        Offences: pallet_offences,
     }
 );
 
 impl frame_system::Config for Runtime {
+    type AccountData = ();
+    type AccountId = u64;
     type BaseCallFilter = frame_support::traits::Everything;
-    type BlockWeights = ();
+    type Block = Block;
+    type BlockHashCount = ConstU64<250>;
     type BlockLength = ();
+    type BlockWeights = ();
     type DbWeight = RocksDbWeight;
-    type RuntimeOrigin = RuntimeOrigin;
-    type Index = u64;
-    type BlockNumber = u64;
-    type RuntimeCall = RuntimeCall;
     type Hash = H256;
     type Hashing = BlakeTwo256;
-    type AccountId = u64;
     type Lookup = IdentityLookup<Self::AccountId>;
-    type Header = Header;
-    type RuntimeEvent = RuntimeEvent;
-    type BlockHashCount = ConstU64<250>;
-    type Version = ();
-    type PalletInfo = PalletInfo;
-    type AccountData = ();
-    type OnNewAccount = ();
+    type MaxConsumers = ConstU32<16>;
+    type Nonce = u64;
     type OnKilledAccount = ();
-    type SystemWeightInfo = ();
-    type SS58Prefix = ();
+    type OnNewAccount = ();
     type OnSetCode = ();
-    type MaxConsumers = ConstU32<16>;
+    type PalletInfo = PalletInfo;
+    type RuntimeCall = RuntimeCall;
+    type RuntimeEvent = RuntimeEvent;
+    type RuntimeOrigin = RuntimeOrigin;
+    type RuntimeTask = ();
+    type SS58Prefix = ();
+    type SystemWeightInfo = ();
+    type Version = ();
 }
 
 impl Config for Runtime {
-    type RuntimeEvent = RuntimeEvent;
     type IdentificationTuple = u64;
     type OnOffenceHandler = OnOffenceHandler;
+    type RuntimeEvent = RuntimeEvent;
 }
 
 pub fn new_test_ext() -> sp_io::TestExternalities {
-    let t = frame_system::GenesisConfig::default()
-        .build_storage::<Runtime>()
+    let t = frame_system::GenesisConfig::<Runtime>::default()
+        .build_storage()
         .unwrap();
     let mut ext = sp_io::TestExternalities::new(t);
     ext.execute_with(|| System::set_block_number(1));
@@ -131,9 +126,10 @@ pub struct Offence {
 }
 
 impl pallet_offences::Offence<u64> for Offence {
-    const ID: pallet_offences::Kind = KIND;
     type TimeSlot = u128;
 
+    const ID: pallet_offences::Kind = KIND;
+
     fn offenders(&self) -> Vec<u64> {
         self.offenders.clone()
     }
diff --git a/pallets/oneshot-account/Cargo.toml b/pallets/oneshot-account/Cargo.toml
index fc39c81a3..b3d33e6ff 100644
--- a/pallets/oneshot-account/Cargo.toml
+++ b/pallets/oneshot-account/Cargo.toml
@@ -12,83 +12,90 @@ version = '3.0.0'
 [features]
 default = ['std']
 runtime-benchmarks = [
-	"frame-benchmarking/runtime-benchmarks",
-	"pallet-balances",
+  "frame-benchmarking/runtime-benchmarks",
+	"frame-support/runtime-benchmarks",
+	"frame-system/runtime-benchmarks",
+	"pallet-balances/runtime-benchmarks",
+	"sp-runtime/runtime-benchmarks",
+]
+try-runtime = [
+    'frame-support/try-runtime',
+    'frame-system/try-runtime',
+    'pallet-balances/runtime-benchmarks',
+    'sp-runtime/try-runtime',
 ]
 std = [
     'codec/std',
+    'log/std',
+    'pallet-balances/std',
+    'scale-info/std',
     'frame-support/std',
     'frame-system/std',
-    'frame-benchmarking/std',
+    'frame-benchmarking?/std',
     'sp-core/std',
     'sp-io/std',
     'sp-runtime/std',
     'sp-std/std',
+    'pallet-transaction-payment/std',
 ]
-try-runtime = ['frame-support/try-runtime']
 
 [dependencies]
 # crates.io
-codec = { package = 'parity-scale-codec', version = "3.1.5", default-features = false, features = ["derive"] }
-log = { version = "0.4.14", default-features = false }
-scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
+codec = { package = 'parity-scale-codec', version = "3.6.9", default-features = false, features = ["derive"] }
+log = { version = "0.4.20", default-features = false }
 
 # benchmarks
-pallet-balances = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', optional = true, default-features = false }
+pallet-balances = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', optional = true, default-features = false }
+scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
 
 # substrate
 [dependencies.frame-benchmarking]
 default-features = false
-git = 'https://github.com/duniter/substrate'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
 optional = true
-branch = 'duniter-substrate-v0.9.42'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-support]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-system]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.pallet-transaction-payment]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-core]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-io]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-runtime]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
-[dependencies.sp-std]
-default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 ### DOC ###
 
 [package.metadata.docs.rs]
+default-features = false
 targets = ['x86_64-unknown-linux-gnu']
 
-### DEV ###
-
-[dev-dependencies.sp-io]
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+[dependencies.sp-std]
+default-features = false
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dev-dependencies.pallet-balances]
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+default-features = false
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
diff --git a/pallets/oneshot-account/src/benchmarking.rs b/pallets/oneshot-account/src/benchmarking.rs
index 69bdf381d..dcc72ff2e 100644
--- a/pallets/oneshot-account/src/benchmarking.rs
+++ b/pallets/oneshot-account/src/benchmarking.rs
@@ -71,7 +71,7 @@ benchmarks! {
         let _ = T::Currency::make_free_balance_be(&recipient, existential_deposit.into());
     }: _(
         RawOrigin::Signed(caller.clone()),
-        T::BlockNumber::zero(),
+        BlockNumberFor::<T>::zero(),
         Account::<<T::Lookup as StaticLookup>::Source>::Normal(recipient_lookup)
     )
     verify {
@@ -104,7 +104,7 @@ benchmarks! {
         let _ = T::Currency::make_free_balance_be(&recipient2, existential_deposit.into());
     }: _(
         RawOrigin::Signed(caller.clone()),
-        T::BlockNumber::zero(),
+        BlockNumberFor::<T>::zero(),
         Account::<<T::Lookup as StaticLookup>::Source>::Normal(recipient1_lookup),
         Account::<<T::Lookup as StaticLookup>::Source>::Normal(recipient2_lookup),
         existential_deposit.into()
diff --git a/pallets/oneshot-account/src/check_nonce.rs b/pallets/oneshot-account/src/check_nonce.rs
index fc2103a16..83bd7494f 100644
--- a/pallets/oneshot-account/src/check_nonce.rs
+++ b/pallets/oneshot-account/src/check_nonce.rs
@@ -53,9 +53,10 @@ where
     T::RuntimeCall: Dispatchable<Info = DispatchInfo> + IsSubType<crate::Call<T>>,
 {
     type AccountId = <T as frame_system::Config>::AccountId;
-    type Call = <T as frame_system::Config>::RuntimeCall;
     type AdditionalSigned = ();
+    type Call = <T as frame_system::Config>::RuntimeCall;
     type Pre = ();
+
     const IDENTIFIER: &'static str = "CheckNonce";
 
     fn additional_signed(&self) -> sp_std::result::Result<(), TransactionValidityError> {
diff --git a/pallets/oneshot-account/src/lib.rs b/pallets/oneshot-account/src/lib.rs
index acee3cd7a..0c86b3ce4 100644
--- a/pallets/oneshot-account/src/lib.rs
+++ b/pallets/oneshot-account/src/lib.rs
@@ -162,6 +162,7 @@ pub mod pallet {
 
             Ok(())
         }
+
         /// Consume a oneshot account and transfer its balance to an account
         ///
         /// - `block_height`: Must be a recent block number. The limit is `BlockHashCount` in the past. (this is to prevent replay attacks)
@@ -171,7 +172,7 @@ pub mod pallet {
         #[pallet::weight(T::WeightInfo::consume_oneshot_account())]
         pub fn consume_oneshot_account(
             origin: OriginFor<T>,
-            block_height: T::BlockNumber,
+            block_height: BlockNumberFor<T>,
             dest: Account<<T::Lookup as StaticLookup>::Source>,
         ) -> DispatchResult {
             let transactor = ensure_signed(origin)?;
@@ -216,6 +217,7 @@ pub mod pallet {
 
             Ok(())
         }
+
         /// Consume a oneshot account then transfer some amount to an account,
         /// and the remaining amount to another account.
         ///
@@ -230,7 +232,7 @@ pub mod pallet {
         #[pallet::weight(T::WeightInfo::consume_oneshot_account_with_remaining())]
         pub fn consume_oneshot_account_with_remaining(
             origin: OriginFor<T>,
-            block_height: T::BlockNumber,
+            block_height: BlockNumberFor<T>,
             dest: Account<<T::Lookup as StaticLookup>::Source>,
             remaining_to: Account<<T::Lookup as StaticLookup>::Source>,
             #[pallet::compact] balance: <T::Currency as Currency<T::AccountId>>::Balance,
@@ -328,6 +330,7 @@ where
 {
     type Balance = <T::Currency as Currency<T::AccountId>>::Balance;
     type LiquidityInfo = Option<<T::Currency as Currency<T::AccountId>>::NegativeImbalance>;
+
     fn withdraw_fee(
         who: &T::AccountId,
         call: &T::RuntimeCall,
@@ -364,6 +367,7 @@ where
             T::InnerOnChargeTransaction::withdraw_fee(who, call, dispatch_info, fee, tip)
         }
     }
+
     fn correct_and_deposit_fee(
         who: &T::AccountId,
         dispatch_info: &DispatchInfoOf<T::RuntimeCall>,
diff --git a/pallets/oneshot-account/src/mock.rs b/pallets/oneshot-account/src/mock.rs
index 4353000ad..7e35d0efe 100644
--- a/pallets/oneshot-account/src/mock.rs
+++ b/pallets/oneshot-account/src/mock.rs
@@ -20,27 +20,22 @@ use frame_system as system;
 use pallet_transaction_payment::CurrencyAdapter;
 use sp_core::{ConstU32, H256};
 use sp_runtime::{
-    testing::Header,
     traits::{BlakeTwo256, IdentityLookup},
     BuildStorage,
 };
 use sp_std::convert::{TryFrom, TryInto};
 
 type Balance = u64;
-type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic<Test>;
 type Block = frame_system::mocking::MockBlock<Test>;
 
 // Configure a mock runtime to test the pallet.
 frame_support::construct_runtime!(
-    pub enum Test where
-        Block = Block,
-        NodeBlock = Block,
-        UncheckedExtrinsic = UncheckedExtrinsic,
+    pub enum Test
     {
-        System: frame_system::{Pallet, Call, Config, Storage, Event<T>},
-        Balances: pallet_balances::{Pallet, Call, Storage, Config<T>, Event<T>},
-        TransactionPayment: pallet_transaction_payment::{Pallet, Storage, Event<T>},
-        OneshotAccount: pallet_oneshot_account::{Pallet, Call, Storage, Event<T>},
+        System: frame_system,
+        Balances: pallet_balances,
+        TransactionPayment: pallet_transaction_payment,
+        OneshotAccount: pallet_oneshot_account,
     }
 );
 
@@ -50,30 +45,30 @@ parameter_types! {
 }
 
 impl system::Config for Test {
+    type AccountData = pallet_balances::AccountData<Balance>;
+    type AccountId = u64;
     type BaseCallFilter = Everything;
-    type BlockWeights = ();
+    type Block = Block;
+    type BlockHashCount = BlockHashCount;
     type BlockLength = ();
+    type BlockWeights = ();
     type DbWeight = ();
-    type RuntimeOrigin = RuntimeOrigin;
-    type RuntimeCall = RuntimeCall;
-    type Index = u64;
-    type BlockNumber = u64;
     type Hash = H256;
     type Hashing = BlakeTwo256;
-    type AccountId = u64;
     type Lookup = IdentityLookup<Self::AccountId>;
-    type Header = Header;
-    type RuntimeEvent = RuntimeEvent;
-    type BlockHashCount = BlockHashCount;
-    type Version = ();
-    type PalletInfo = PalletInfo;
-    type AccountData = pallet_balances::AccountData<Balance>;
-    type OnNewAccount = ();
+    type MaxConsumers = frame_support::traits::ConstU32<16>;
+    type Nonce = u64;
     type OnKilledAccount = ();
-    type SystemWeightInfo = ();
-    type SS58Prefix = SS58Prefix;
+    type OnNewAccount = ();
     type OnSetCode = ();
-    type MaxConsumers = frame_support::traits::ConstU32<16>;
+    type PalletInfo = PalletInfo;
+    type RuntimeCall = RuntimeCall;
+    type RuntimeEvent = RuntimeEvent;
+    type RuntimeOrigin = RuntimeOrigin;
+    type RuntimeTask = ();
+    type SS58Prefix = SS58Prefix;
+    type SystemWeightInfo = ();
+    type Version = ();
 }
 
 parameter_types! {
@@ -82,27 +77,28 @@ parameter_types! {
 }
 
 impl pallet_balances::Config for Test {
+    type AccountStore = System;
     type Balance = Balance;
     type DustRemoval = ();
     type ExistentialDeposit = ExistentialDeposit;
-    type AccountStore = System;
-    type WeightInfo = pallet_balances::weights::SubstrateWeight<Test>;
+    type FreezeIdentifier = ();
+    type MaxFreezes = ConstU32<0>;
+    type MaxHolds = ConstU32<0>;
     type MaxLocks = MaxLocks;
     type MaxReserves = ();
     type ReserveIdentifier = [u8; 8];
     type RuntimeEvent = RuntimeEvent;
-    type HoldIdentifier = ();
-    type FreezeIdentifier = ();
-    type MaxHolds = ConstU32<0>;
-    type MaxFreezes = ConstU32<0>;
+    type RuntimeFreezeReason = ();
+    type RuntimeHoldReason = ();
+    type WeightInfo = pallet_balances::weights::SubstrateWeight<Test>;
 }
 impl pallet_transaction_payment::Config for Test {
-    type RuntimeEvent = RuntimeEvent;
+    type FeeMultiplierUpdate = ();
+    type LengthToFee = IdentityFee<u64>;
     type OnChargeTransaction = OneshotAccount;
     type OperationalFeeMultiplier = frame_support::traits::ConstU8<5>;
+    type RuntimeEvent = RuntimeEvent;
     type WeightToFee = IdentityFee<u64>;
-    type LengthToFee = IdentityFee<u64>;
-    type FeeMultiplierUpdate = ();
 }
 impl pallet_oneshot_account::Config for Test {
     type Currency = Balances;
@@ -120,9 +116,10 @@ impl frame_support::traits::OnUnbalanced<NegativeImbalance> for HandleFees {
 // Build genesis storage according to the mock runtime.
 #[allow(dead_code)]
 pub fn new_test_ext() -> sp_io::TestExternalities {
-    GenesisConfig {
+    RuntimeGenesisConfig {
         system: SystemConfig::default(),
         balances: BalancesConfig::default(), // FIXME (explicit absence of oneshot account in genesis)
+        transaction_payment: TransactionPaymentConfig::default(),
     }
     .build_storage()
     .unwrap()
diff --git a/pallets/oneshot-account/src/weights.rs b/pallets/oneshot-account/src/weights.rs
index 5308ff1d0..f8fabe3cc 100644
--- a/pallets/oneshot-account/src/weights.rs
+++ b/pallets/oneshot-account/src/weights.rs
@@ -33,6 +33,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads(1))
             .saturating_add(RocksDbWeight::get().writes(1))
     }
+
     // Storage: OneshotAccount OneshotAccounts (r:1 w:1)
     // Storage: System BlockHash (r:1 w:0)
     // Storage: System Account (r:1 w:1)
@@ -41,6 +42,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads(3))
             .saturating_add(RocksDbWeight::get().writes(2))
     }
+
     // Storage: OneshotAccount OneshotAccounts (r:1 w:1)
     // Storage: System BlockHash (r:1 w:0)
     // Storage: System Account (r:2 w:2)
diff --git a/pallets/provide-randomness/Cargo.toml b/pallets/provide-randomness/Cargo.toml
index b5d6f5b28..e845c2d85 100644
--- a/pallets/provide-randomness/Cargo.toml
+++ b/pallets/provide-randomness/Cargo.toml
@@ -11,71 +11,83 @@ version = '3.0.0'
 [features]
 default = ['std']
 runtime-benchmarks = [
-    'frame-benchmarking/runtime-benchmarks',
-	'pallet-balances',
+	"frame-support/runtime-benchmarks",
+	"frame-system/runtime-benchmarks",
+	"pallet-balances/runtime-benchmarks",
+  "frame-benchmarking/runtime-benchmarks",
+	"sp-runtime/runtime-benchmarks",
+]
+try-runtime = [
+    'frame-support/try-runtime',
+    'frame-system/try-runtime',
+    'pallet-balances/runtime-benchmarks',
+    'sp-runtime/try-runtime',
 ]
 std = [
     'codec/std',
+    'scale-info/std',
+    'pallet-balances/std',
     'frame-support/std',
     'frame-system/std',
-    'frame-benchmarking/std',
+    'sp-runtime/std',
+    'frame-benchmarking?/std',
     "sp-core/std",
     "sp-io/std",
     "sp-std/std",
 ]
-try-runtime = ['frame-support/try-runtime']
 
 [dependencies]
 
 # substrate
-scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
+scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
 
 # benchmarks
-pallet-balances = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', optional = true, default-features = false }
+pallet-balances = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', optional = true, default-features = false }
 
 [dependencies.codec]
 default-features = false
 features = ['derive']
 package = 'parity-scale-codec'
-version = "3.1.5"
+version = "3.6.9"
 
 [dependencies.frame-benchmarking]
 default-features = false
-git = 'https://github.com/duniter/substrate'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
 optional = true
-branch = 'duniter-substrate-v0.9.42'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-support]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-system]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-core]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-io]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-std]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-runtime]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 ### DOC ###
 
 [package.metadata.docs.rs]
-targets = ['x86_64-unknown-linux-gnu']
\ No newline at end of file
+default-features = false
+targets = ['x86_64-unknown-linux-gnu']
diff --git a/pallets/provide-randomness/src/benchmarking.rs b/pallets/provide-randomness/src/benchmarking.rs
index cbbf0f685..56dfe1590 100644
--- a/pallets/provide-randomness/src/benchmarking.rs
+++ b/pallets/provide-randomness/src/benchmarking.rs
@@ -23,6 +23,7 @@ use frame_support::ensure;
 use frame_support::pallet_prelude::IsType;
 use frame_support::sp_runtime::{traits::One, Saturating};
 use frame_support::traits::{Currency, Get, OnInitialize};
+use frame_system::pallet_prelude::BlockNumberFor;
 use frame_system::RawOrigin;
 use sp_core::H256;
 
@@ -64,7 +65,7 @@ benchmarks! {
         T: pallet_balances::Config,
         T::Balance: From<u64>,
         <T::Currency as Currency<T::AccountId>>::Balance: IsType<T::Balance>,
-        T::BlockNumber: From<u32>,
+        BlockNumberFor<T>: From<u32>,
     }
     request {
         // Get account
@@ -94,7 +95,7 @@ benchmarks! {
             core::mem::replace(next_in, next_in.saturating_sub(1))
         });
         ensure!(next_epoch_hook_in != 1, "Will be next epoch.");
-    }: { Pallet::<T>::on_initialize(T::BlockNumber::one()); }
+    }: { Pallet::<T>::on_initialize(BlockNumberFor::<T>::one()); }
     verify {
         ensure!(RequestsIds::<T>::count() == 0, "List not processed.");
         ensure!(RequestsReadyAtNextBlock::<T>::get().is_empty(), "List not processed.");
diff --git a/pallets/provide-randomness/src/lib.rs b/pallets/provide-randomness/src/lib.rs
index 5cce15f70..b6c36c345 100644
--- a/pallets/provide-randomness/src/lib.rs
+++ b/pallets/provide-randomness/src/lib.rs
@@ -84,9 +84,9 @@ pub mod pallet {
         /// Handler for the unbalanced reduction when the requestor pays fees.
         type OnUnbalanced: OnUnbalanced<NegativeImbalanceOf<Self>>;
         /// A safe source of randomness from the parent block
-        type ParentBlockRandomness: Randomness<Option<H256>, Self::BlockNumber>;
+        type ParentBlockRandomness: Randomness<Option<H256>, BlockNumberFor<Self>>;
         /// A safe source of randomness from one epoch ago
-        type RandomnessFromOneEpochAgo: Randomness<H256, Self::BlockNumber>;
+        type RandomnessFromOneEpochAgo: Randomness<H256, BlockNumberFor<Self>>;
         /// The overarching event type.
         type RuntimeEvent: From<Event> + IsType<<Self as frame_system::Config>::RuntimeEvent>;
         /// Type representing the weight of this pallet
@@ -171,7 +171,7 @@ pub mod pallet {
 
     #[pallet::hooks]
     impl<T: Config> Hooks<BlockNumberFor<T>> for Pallet<T> {
-        fn on_initialize(_: T::BlockNumber) -> Weight {
+        fn on_initialize(_: BlockNumberFor<T>) -> Weight {
             // Overhead to process an empty request
             let mut total_weight = T::WeightInfo::on_initialize(0);
 
@@ -234,9 +234,11 @@ pub mod pallet {
             // Apply phase
             Ok(Self::apply_request(randomness_type, salt))
         }
+
         pub fn force_request(randomness_type: RandomnessType, salt: H256) -> RequestId {
             Self::apply_request(randomness_type, salt)
         }
+
         pub fn on_new_epoch() {
             NexEpochHookIn::<T>::put(5)
         }
@@ -255,6 +257,7 @@ pub mod pallet {
             T::OnUnbalanced::on_unbalanced(imbalance);
             Ok(())
         }
+
         fn apply_request(randomness_type: RandomnessType, salt: H256) -> RequestId {
             let request_id = RequestIdProvider::<T>::mutate(|next_request_id| {
                 core::mem::replace(next_request_id, next_request_id.saturating_add(1))
diff --git a/pallets/provide-randomness/src/weights.rs b/pallets/provide-randomness/src/weights.rs
index be2f03e87..94e99db3b 100644
--- a/pallets/provide-randomness/src/weights.rs
+++ b/pallets/provide-randomness/src/weights.rs
@@ -39,6 +39,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads(6 as u64))
             .saturating_add(RocksDbWeight::get().writes(4 as u64))
     }
+
     // Storage: ProvideRandomness RequestsReadyAtNextBlock (r:1 w:1)
     // Storage: Babe AuthorVrfRandomness (r:1 w:0)
     // Storage: ProvideRandomness RequestsIds (r:1 w:1)
@@ -56,6 +57,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().writes(3 as u64))
             .saturating_add(RocksDbWeight::get().writes((1 as u64).saturating_mul(i as u64)))
     }
+
     fn on_initialize_epoch(i: u32) -> Weight {
         // Minimum execution time: 175_645 nanoseconds.
         Weight::from_parts(461_442_906 as u64, 0)
diff --git a/pallets/quota/Cargo.toml b/pallets/quota/Cargo.toml
index efcc0dcfb..c2133c79e 100644
--- a/pallets/quota/Cargo.toml
+++ b/pallets/quota/Cargo.toml
@@ -12,69 +12,80 @@ version = '3.0.0'
 [features]
 default = ['std']
 runtime-benchmarks = [
-    'frame-benchmarking/runtime-benchmarks',
+	"frame-support/runtime-benchmarks",
+	"frame-system/runtime-benchmarks",
+  "frame-benchmarking/runtime-benchmarks",
+	"pallet-balances/runtime-benchmarks",
+	"pallet-identity/runtime-benchmarks",
+	"sp-runtime/runtime-benchmarks",
+]
+try-runtime = [
+    'frame-support/try-runtime',
+    'frame-system/try-runtime',
+    'pallet-balances/runtime-benchmarks',
     'pallet-identity/runtime-benchmarks',
+    'sp-runtime/try-runtime',
 ]
 std = [
     'codec/std',
+    'scale-info/std',
     'frame-support/std',
     'frame-system/std',
-    'frame-benchmarking/std',
+    'frame-benchmarking?/std',
     'sp-core/std',
     'sp-runtime/std',
     'sp-std/std',
+    'sp-io/std',
     'pallet-identity/std',
     'pallet-balances/std',
 ]
-try-runtime = ['frame-support/try-runtime']
 
 [package.metadata.docs.rs]
 targets = ['x86_64-unknown-linux-gnu']
 
 [dependencies]
-pallet-identity = { path = "../identity", default-features = false }
 
 # crates.io
-codec = { package = 'parity-scale-codec', version = "3.1.5", features = ['derive'], default-features = false }
-scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
-
-# substrate
-
-[dependencies.pallet-balances]
-default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+codec = { package = 'parity-scale-codec', version = "3.6.9", features = ['derive'], default-features = false }
+pallet-identity = { path = "../identity", default-features = false }
+scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
 
 [dependencies.frame-benchmarking]
 default-features = false
-git = 'https://github.com/duniter/substrate'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
 optional = true
-branch = 'duniter-substrate-v0.9.42'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-support]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-system]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
+# substrate
+
+[dependencies.pallet-balances]
+default-features = false
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-core]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-runtime]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-std]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dev-dependencies]
-sp-io = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42' }
+sp-io = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
diff --git a/pallets/quota/src/benchmarking.rs b/pallets/quota/src/benchmarking.rs
index 124f2e66f..bae829e73 100644
--- a/pallets/quota/src/benchmarking.rs
+++ b/pallets/quota/src/benchmarking.rs
@@ -59,14 +59,14 @@ benchmarks! {
         IdtyQuota::<T>::insert(
             idty_id,
             Quota {
-                last_use: T::BlockNumber::zero(),
+                last_use: BlockNumberFor::<T>::zero(),
                 amount: quota_amount.into(),
             },
         );
     }: { Pallet::<T>::spend_quota(idty_id, amount.into()) }
     verify {
         let quota_growth = sp_runtime::Perbill::from_rational(
-            T::BlockNumber::one(),
+            BlockNumberFor::<T>::one(),
             T::ReloadRate::get(),
         ).mul_floor(T::MaxQuota::get());
         assert_eq!(IdtyQuota::<T>::get(idty_id).unwrap().amount,  quota_growth +quota_amount.into() - amount.into());
@@ -77,7 +77,7 @@ benchmarks! {
         IdtyQuota::<T>::insert(
             idty_id,
             Quota {
-                last_use: T::BlockNumber::zero(),
+                last_use: BlockNumberFor::<T>::zero(),
                 amount: 10u64.into(),
             },
         );
@@ -127,7 +127,7 @@ benchmarks! {
         IdtyQuota::<T>::insert(
             idty_id,
             Quota {
-                last_use: T::BlockNumber::zero(),
+                last_use: BlockNumberFor::<T>::zero(),
                 amount: 10u64.into(),
             },
         );
diff --git a/pallets/quota/src/lib.rs b/pallets/quota/src/lib.rs
index e618281ea..8a063dcb1 100644
--- a/pallets/quota/src/lib.rs
+++ b/pallets/quota/src/lib.rs
@@ -36,6 +36,7 @@ pub use pallet::*;
 use pallet_identity::IdtyEvent;
 use sp_runtime::traits::Zero;
 use sp_std::fmt::Debug;
+use sp_std::vec::Vec;
 pub use weights::WeightInfo;
 
 #[frame_support::pallet]
@@ -63,7 +64,7 @@ pub mod pallet {
         /// Because this pallet emits events, it depends on the runtime's definition of an event.
         type RuntimeEvent: From<Event<Self>> + IsType<<Self as frame_system::Config>::RuntimeEvent>;
         /// number of blocks in which max quota is replenished
-        type ReloadRate: Get<Self::BlockNumber>;
+        type ReloadRate: Get<BlockNumberFor<Self>>;
         /// maximum amount of quota an identity can get
         type MaxQuota: Get<BalanceOf<Self>>;
         /// Account used to refund fee
@@ -97,7 +98,7 @@ pub mod pallet {
     #[pallet::storage]
     #[pallet::getter(fn quota)]
     pub type IdtyQuota<T: Config> =
-        StorageMap<_, Twox64Concat, IdtyId<T>, Quota<T::BlockNumber, BalanceOf<T>>, OptionQuery>;
+        StorageMap<_, Twox64Concat, IdtyId<T>, Quota<BlockNumberFor<T>, BalanceOf<T>>, OptionQuery>;
 
     /// fees waiting for refund
     #[pallet::storage]
@@ -246,7 +247,7 @@ pub mod pallet {
         }
 
         /// update quota according to the growth rate, max value, and last use
-        fn update_quota(quota: &mut Quota<T::BlockNumber, BalanceOf<T>>) {
+        fn update_quota(quota: &mut Quota<BlockNumberFor<T>, BalanceOf<T>>) {
             let current_block = frame_system::pallet::Pallet::<T>::block_number();
             let quota_growth = sp_runtime::Perbill::from_rational(
                 current_block - quota.last_use,
@@ -257,9 +258,10 @@ pub mod pallet {
             quota.last_use = current_block;
             quota.amount = core::cmp::min(quota.amount + quota_growth, T::MaxQuota::get());
         }
+
         /// spend a certain amount of quota and return what was spent
         fn do_spend_quota(
-            quota: &mut Quota<T::BlockNumber, BalanceOf<T>>,
+            quota: &mut Quota<BlockNumberFor<T>, BalanceOf<T>>,
             amount: BalanceOf<T>,
         ) -> BalanceOf<T> {
             let old_amount = quota.amount;
@@ -282,7 +284,6 @@ pub mod pallet {
         pub identities: Vec<IdtyId<T>>,
     }
 
-    #[cfg(feature = "std")]
     impl<T: Config> Default for GenesisConfig<T> {
         fn default() -> Self {
             Self {
@@ -292,13 +293,13 @@ pub mod pallet {
     }
 
     #[pallet::genesis_build]
-    impl<T: Config> GenesisBuild<T> for GenesisConfig<T> {
+    impl<T: Config> BuildGenesisConfig for GenesisConfig<T> {
         fn build(&self) {
             for idty in self.identities.iter() {
                 IdtyQuota::<T>::insert(
                     idty,
                     Quota {
-                        last_use: T::BlockNumber::zero(),
+                        last_use: BlockNumberFor::<T>::zero(),
                         amount: BalanceOf::<T>::zero(),
                     },
                 );
@@ -310,7 +311,7 @@ pub mod pallet {
     #[pallet::hooks]
     impl<T: Config> Hooks<BlockNumberFor<T>> for Pallet<T> {
         // process refund queue if space left on block
-        fn on_idle(_block: T::BlockNumber, remaining_weight: Weight) -> Weight {
+        fn on_idle(_block: BlockNumberFor<T>, remaining_weight: Weight) -> Weight {
             Self::process_refund_queue(remaining_weight)
         }
     }
diff --git a/pallets/quota/src/mock.rs b/pallets/quota/src/mock.rs
index 06548263b..5f7f79a2f 100644
--- a/pallets/quota/src/mock.rs
+++ b/pallets/quota/src/mock.rs
@@ -28,7 +28,6 @@ use sp_runtime::traits::IdentifyAccount;
 use sp_runtime::traits::Verify;
 use sp_runtime::BuildStorage;
 use sp_runtime::{
-    testing::Header,
     traits::{BlakeTwo256, IdentityLookup},
     MultiSignature, MultiSigner,
 };
@@ -36,7 +35,6 @@ use sp_runtime::{
 type BlockNumber = u64;
 type Balance = u64;
 type Block = frame_system::mocking::MockBlock<Test>;
-type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic<Test>;
 pub type Signature = MultiSignature;
 pub type AccountPublic = <Signature as Verify>::Signer;
 pub type AccountId = <AccountPublic as IdentifyAccount>::AccountId;
@@ -48,15 +46,11 @@ pub fn account(id: u8) -> AccountId {
 
 // Configure a mock runtime to test the pallet.
 frame_support::construct_runtime!(
-    pub enum Test where
-        Block = Block,
-        NodeBlock = Block,
-        UncheckedExtrinsic = UncheckedExtrinsic,
-    {
-        System: frame_system::{Pallet, Call, Config, Storage, Event<T>},
-        Quota: pallet_quota::{Pallet, Storage, Config<T>, Event<T>},
-        Balances: pallet_balances::{Pallet, Call, Storage, Config<T>, Event<T>},
-        Identity: pallet_identity::{Pallet, Call, Storage, Config<T>, Event<T>},
+    pub enum Test{
+        System: frame_system,
+        Quota: pallet_quota,
+        Balances: pallet_balances,
+        Identity: pallet_identity,
     }
 );
 
@@ -72,10 +66,10 @@ parameter_types! {
     pub const MaxQuota: u64 = 1000;
 }
 impl Config for Test {
-    type RuntimeEvent = RuntimeEvent;
-    type ReloadRate = ReloadRate;
     type MaxQuota = MaxQuota;
     type RefundAccount = TreasuryAccountId;
+    type ReloadRate = ReloadRate;
+    type RuntimeEvent = RuntimeEvent;
     type WeightInfo = ();
 }
 
@@ -85,30 +79,30 @@ parameter_types! {
     pub const SS58Prefix: u8 = 42;
 }
 impl system::Config for Test {
+    type AccountData = pallet_balances::AccountData<Balance>;
+    type AccountId = AccountId;
     type BaseCallFilter = Everything;
-    type BlockWeights = ();
+    type Block = Block;
+    type BlockHashCount = BlockHashCount;
     type BlockLength = ();
+    type BlockWeights = ();
     type DbWeight = ();
-    type RuntimeOrigin = RuntimeOrigin;
-    type RuntimeCall = RuntimeCall;
-    type Index = u64;
-    type BlockNumber = BlockNumber;
     type Hash = H256;
     type Hashing = BlakeTwo256;
-    type AccountId = AccountId;
     type Lookup = IdentityLookup<Self::AccountId>;
-    type Header = Header;
-    type RuntimeEvent = RuntimeEvent;
-    type BlockHashCount = BlockHashCount;
-    type Version = ();
-    type PalletInfo = PalletInfo;
-    type AccountData = pallet_balances::AccountData<Balance>;
-    type OnNewAccount = ();
+    type MaxConsumers = frame_support::traits::ConstU32<16>;
+    type Nonce = u64;
     type OnKilledAccount = ();
-    type SystemWeightInfo = ();
-    type SS58Prefix = SS58Prefix;
+    type OnNewAccount = ();
     type OnSetCode = ();
-    type MaxConsumers = frame_support::traits::ConstU32<16>;
+    type PalletInfo = PalletInfo;
+    type RuntimeCall = RuntimeCall;
+    type RuntimeEvent = RuntimeEvent;
+    type RuntimeOrigin = RuntimeOrigin;
+    type RuntimeTask = ();
+    type SS58Prefix = SS58Prefix;
+    type SystemWeightInfo = ();
+    type Version = ();
 }
 
 // BALANCES //
@@ -117,19 +111,20 @@ parameter_types! {
     pub const MaxLocks: u32 = 50;
 }
 impl pallet_balances::Config for Test {
+    type AccountStore = System;
     type Balance = Balance;
     type DustRemoval = ();
     type ExistentialDeposit = ExistentialDeposit;
-    type AccountStore = System;
-    type WeightInfo = pallet_balances::weights::SubstrateWeight<Test>;
+    type FreezeIdentifier = ();
+    type MaxFreezes = ConstU32<0>;
+    type MaxHolds = ConstU32<0>;
     type MaxLocks = MaxLocks;
     type MaxReserves = ();
     type ReserveIdentifier = [u8; 8];
     type RuntimeEvent = RuntimeEvent;
-    type HoldIdentifier = ();
-    type FreezeIdentifier = ();
-    type MaxHolds = ConstU32<0>;
-    type MaxFreezes = ConstU32<0>;
+    type RuntimeFreezeReason = ();
+    type RuntimeHoldReason = ();
+    type WeightInfo = pallet_balances::weights::SubstrateWeight<Test>;
 }
 
 // IDENTITY //
@@ -148,27 +143,27 @@ impl pallet_identity::traits::IdtyNameValidator for IdtyNameValidatorTestImpl {
     }
 }
 impl pallet_identity::Config for Test {
+    type AccountLinker = ();
+    type AutorevocationPeriod = AutorevocationPeriod;
     type ChangeOwnerKeyPeriod = ChangeOwnerKeyPeriod;
+    type CheckIdtyCallAllowed = ();
     type ConfirmPeriod = ConfirmPeriod;
-    type ValidationPeriod = ValidationPeriod;
-    type AutorevocationPeriod = AutorevocationPeriod;
     type DeletionPeriod = DeletionPeriod;
-    type CheckIdtyCallAllowed = ();
     type IdtyCreationPeriod = IdtyCreationPeriod;
     type IdtyData = ();
-    type IdtyNameValidator = IdtyNameValidatorTestImpl;
     type IdtyIndex = u64;
-    type AccountLinker = ();
-    type Signer = AccountPublic;
-    type Signature = Signature;
+    type IdtyNameValidator = IdtyNameValidatorTestImpl;
     type OnIdtyChange = ();
     type RuntimeEvent = RuntimeEvent;
+    type Signature = Signature;
+    type Signer = AccountPublic;
+    type ValidationPeriod = ValidationPeriod;
     type WeightInfo = ();
 }
 
 // Build genesis storage according to the mock runtime.
 pub fn new_test_ext(gen_conf: pallet_quota::GenesisConfig<Test>) -> sp_io::TestExternalities {
-    GenesisConfig {
+    RuntimeGenesisConfig {
         system: SystemConfig::default(),
         balances: BalancesConfig::default(),
         quota: gen_conf,
diff --git a/pallets/quota/src/weights.rs b/pallets/quota/src/weights.rs
index 076daa4b1..23a9f7774 100644
--- a/pallets/quota/src/weights.rs
+++ b/pallets/quota/src/weights.rs
@@ -15,18 +15,23 @@ impl WeightInfo for () {
     fn queue_refund() -> Weight {
         Weight::from_parts(100u64, 0)
     }
+
     fn spend_quota() -> Weight {
         Weight::from_parts(25u64, 0)
     }
+
     fn try_refund() -> Weight {
         Weight::from_parts(100u64, 0)
     }
+
     fn do_refund() -> Weight {
         Weight::from_parts(25u64, 0)
     }
+
     fn on_process_refund_queue() -> Weight {
         Weight::from_parts(1u64, 0)
     }
+
     fn on_process_refund_queue_elements(_i: u32) -> Weight {
         Weight::from_parts(1u64, 0)
     }
diff --git a/pallets/session-benchmarking/Cargo.toml b/pallets/session-benchmarking/Cargo.toml
index 1ef5f2892..b1658a6c6 100644
--- a/pallets/session-benchmarking/Cargo.toml
+++ b/pallets/session-benchmarking/Cargo.toml
@@ -13,45 +13,45 @@ readme = "README.md"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
+scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
 
 pallet-authority-members = { path = "../authority-members", default-features = false }
 
 [dependencies.frame-benchmarking]
 default-features = false
-git = 'https://github.com/duniter/substrate'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
 optional = true
-branch = 'duniter-substrate-v0.9.42'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-support]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-system]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.pallet-session]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-runtime]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-session]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-std]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.parity-scale-codec]
 default-features = false
@@ -61,40 +61,53 @@ version = "3.1.5"
 
 [dev-dependencies.pallet-balances]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dev-dependencies.pallet-timestamp]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dev-dependencies.sp-core]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dev-dependencies.sp-io]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [features]
 default = ["std"]
 std = [
 	"parity-scale-codec/std",
-	"frame-benchmarking/std",
+	"frame-benchmarking?/std",
 	"frame-support/std",
 	"frame-system/std",
 	"pallet-session/std",
+	"pallet-balances/std",
+	"pallet-timestamp/std",
 	"sp-runtime/std",
 	"sp-session/std",
 	"sp-std/std",
+	"sp-core/std",
+	"sp-io/std",
+]
+try-runtime = [
+    'frame-support/try-runtime',
+    'frame-system/try-runtime',
+    'pallet-balances/runtime-benchmarks',
+    'pallet-timestamp/runtime-benchmarks',
+    'sp-runtime/try-runtime',
 ]
-
 runtime-benchmarks = [
     'frame-benchmarking/runtime-benchmarks',
-	'frame-support/runtime-benchmarks',
-	'frame-system/runtime-benchmarks',
+    'frame-support/runtime-benchmarks',
+    'frame-system/runtime-benchmarks',
+    'pallet-balances/runtime-benchmarks',
+    'pallet-timestamp/runtime-benchmarks',
+    'sp-runtime/runtime-benchmarks',
 ]
 
diff --git a/pallets/smith-members/Cargo.toml b/pallets/smith-members/Cargo.toml
index 5ced90e2c..8949b9149 100644
--- a/pallets/smith-members/Cargo.toml
+++ b/pallets/smith-members/Cargo.toml
@@ -13,22 +13,27 @@ readme = "README.md"
 targets = ["x86_64-unknown-linux-gnu"]
 
 [dependencies]
-codec = { package = "parity-scale-codec", version = "3.1.5", features = ["derive"], default-features = false }
-log = { version = "0.4.17", default-features = false }
-scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
-serde = { version = "1.0.101", default-features = false, optional = true }
+codec = { package = "parity-scale-codec", version = "3.6.9", features = ["derive"], default-features = false }
+frame-support = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+frame-system = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+log = { version = "0.4.20", default-features = false }
 pallet-authority-members = { path = "../authority-members", default-features = false }
-frame-support = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-frame-system = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-balances = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-runtime = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-staking = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-std = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
+pallet-balances = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
+sp-runtime = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-staking = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-std = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+
+[dependencies.frame-benchmarking]
+default-features = false
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+optional = true
+branch = 'duniter-substrate-v1.6.0'
 
 [dev-dependencies]
-maplit = "1.0.2"
-sp-core = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-io = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42' }
+maplit = { version = "1.0.2", default-features = false }
+sp-core = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-io = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 
 [features]
 default = ["std"]
@@ -36,21 +41,28 @@ std = [
 	"codec/std",
 	"frame-support/std",
 	"frame-system/std",
-	'frame-benchmarking/std',
+	'frame-benchmarking?/std',
 	"log/std",
 	"pallet-balances/std",
 	"pallet-authority-members/std",
 	"scale-info/std",
-	"serde",
 	"sp-runtime/std",
 	"sp-staking/std",
 	"sp-std/std",
 ]
-runtime-benchmarks = ["frame-benchmarking/runtime-benchmarks"]
-try-runtime = ["frame-support/try-runtime"]
-
-[dependencies.frame-benchmarking]
-default-features = false
-git = 'https://github.com/duniter/substrate'
-optional = true
-branch = 'duniter-substrate-v0.9.42'
\ No newline at end of file
+runtime-benchmarks = [
+  "frame-benchmarking/runtime-benchmarks",
+	"frame-support/runtime-benchmarks",
+	"frame-system/runtime-benchmarks",
+	"pallet-balances/runtime-benchmarks",
+	"pallet-authority-members/runtime-benchmarks",
+	"sp-runtime/runtime-benchmarks",
+	"sp-staking/runtime-benchmarks",
+]
+try-runtime = [
+    'frame-support/try-runtime',
+    'frame-system/try-runtime',
+    'pallet-balances/runtime-benchmarks',
+    'pallet-authority-members/runtime-benchmarks',
+    'sp-runtime/try-runtime',
+]
diff --git a/pallets/smith-members/src/lib.rs b/pallets/smith-members/src/lib.rs
index bf8527957..f9e126a18 100644
--- a/pallets/smith-members/src/lib.rs
+++ b/pallets/smith-members/src/lib.rs
@@ -31,11 +31,13 @@ pub mod weights;
 mod benchmarking;
 
 use codec::{Codec, Decode, Encode};
-use frame_support::dispatch::{DispatchResultWithPostInfo, TypeInfo};
+use frame_support::dispatch::DispatchResultWithPostInfo;
+use frame_support::ensure;
 use frame_support::pallet_prelude::Get;
-use frame_support::{ensure, RuntimeDebug};
+use frame_support::pallet_prelude::RuntimeDebug;
 use frame_system::ensure_signed;
 use frame_system::pallet_prelude::OriginFor;
+use scale_info::TypeInfo;
 use sp_runtime::traits::AtLeast32BitUnsigned;
 use sp_runtime::traits::IsMember;
 use sp_std::fmt::Debug;
@@ -156,7 +158,6 @@ pub mod pallet {
         pub initial_smiths: BTreeMap<T::IdtyIndex, (bool, Vec<T::IdtyIndex>)>,
     }
 
-    #[cfg(feature = "std")]
     impl<T: Config> Default for GenesisConfig<T> {
         fn default() -> Self {
             Self {
@@ -166,7 +167,7 @@ pub mod pallet {
     }
 
     #[pallet::genesis_build]
-    impl<T: Config> GenesisBuild<T> for GenesisConfig<T> {
+    impl<T: Config> BuildGenesisConfig for GenesisConfig<T> {
         fn build(&self) {
             CurrentSession::<T>::put(0);
             let mut cert_meta_by_issuer = BTreeMap::<T::IdtyIndex, Vec<T::IdtyIndex>>::new();
diff --git a/pallets/smith-members/src/mock.rs b/pallets/smith-members/src/mock.rs
index cd2398e4d..2e7ddf15b 100644
--- a/pallets/smith-members/src/mock.rs
+++ b/pallets/smith-members/src/mock.rs
@@ -26,7 +26,6 @@ use frame_support::{
 use sp_core::H256;
 use sp_runtime::traits::{ConvertInto, IsMember};
 use sp_runtime::{
-    testing::Header,
     traits::{BlakeTwo256, IdentityLookup},
     BuildStorage, Perbill,
 };
@@ -36,45 +35,40 @@ parameter_types! {
     pub static OffenceWeight: Weight = Default::default();
 }
 
-type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic<Runtime>;
 type Block = frame_system::mocking::MockBlock<Runtime>;
 
 frame_support::construct_runtime!(
-    pub struct Runtime where
-        Block = Block,
-        NodeBlock = Block,
-        UncheckedExtrinsic = UncheckedExtrinsic,
-    {
-        System: frame_system::{Pallet, Call, Config, Storage, Event<T>},
-        Smith: pallet_smith_members::{Pallet, Config<T>, Storage, Event<T>},
+    pub struct Runtime {
+        System: frame_system,
+        Smith: pallet_smith_members,
     }
 );
 
 impl frame_system::Config for Runtime {
+    type AccountData = ();
+    type AccountId = u64;
     type BaseCallFilter = frame_support::traits::Everything;
-    type BlockWeights = ();
+    type Block = Block;
+    type BlockHashCount = ConstU64<250>;
     type BlockLength = ();
+    type BlockWeights = ();
     type DbWeight = RocksDbWeight;
-    type RuntimeOrigin = RuntimeOrigin;
-    type Index = u64;
-    type BlockNumber = u64;
-    type RuntimeCall = RuntimeCall;
     type Hash = H256;
     type Hashing = BlakeTwo256;
-    type AccountId = u64;
     type Lookup = IdentityLookup<Self::AccountId>;
-    type Header = Header;
-    type RuntimeEvent = RuntimeEvent;
-    type BlockHashCount = ConstU64<250>;
-    type Version = ();
-    type PalletInfo = PalletInfo;
-    type AccountData = ();
-    type OnNewAccount = ();
+    type MaxConsumers = ConstU32<16>;
+    type Nonce = u64;
     type OnKilledAccount = ();
-    type SystemWeightInfo = ();
-    type SS58Prefix = ();
+    type OnNewAccount = ();
     type OnSetCode = ();
-    type MaxConsumers = ConstU32<16>;
+    type PalletInfo = PalletInfo;
+    type RuntimeCall = RuntimeCall;
+    type RuntimeEvent = RuntimeEvent;
+    type RuntimeOrigin = RuntimeOrigin;
+    type RuntimeTask = ();
+    type SS58Prefix = ();
+    type SystemWeightInfo = ();
+    type Version = ();
 }
 
 pub struct EveryoneExceptIdZero;
@@ -85,24 +79,24 @@ impl IsMember<u64> for EveryoneExceptIdZero {
 }
 
 impl pallet_smith_members::Config for Runtime {
-    type RuntimeEvent = RuntimeEvent;
+    type IdtyIdOf = ConvertInto;
+    type IdtyIdOfAuthorityId = ConvertInto;
     type IdtyIndex = u64;
     type IsWoTMember = EveryoneExceptIdZero;
-    type IdtyIdOf = ConvertInto;
-    type MinCertForMembership = ConstU32<2>;
     type MaxByIssuer = ConstU32<3>;
-    type SmithInactivityMaxDuration = ConstU32<5>;
-    type OnSmithDelete = ();
-    type IdtyIdOfAuthorityId = ConvertInto;
     type MemberId = u64;
+    type MinCertForMembership = ConstU32<2>;
+    type OnSmithDelete = ();
     type OwnerKeyOf = ConvertInto;
+    type RuntimeEvent = RuntimeEvent;
+    type SmithInactivityMaxDuration = ConstU32<5>;
     type WeightInfo = ();
 }
 
 pub fn new_test_ext(
     genesis_config: crate::pallet::GenesisConfig<Runtime>,
 ) -> sp_io::TestExternalities {
-    GenesisConfig {
+    RuntimeGenesisConfig {
         system: SystemConfig::default(),
         smith: genesis_config,
     }
diff --git a/pallets/smith-members/src/weights.rs b/pallets/smith-members/src/weights.rs
index b18e0cef9..76a6d6af7 100644
--- a/pallets/smith-members/src/weights.rs
+++ b/pallets/smith-members/src/weights.rs
@@ -29,9 +29,11 @@ impl WeightInfo for () {
     fn invite_smith() -> Weight {
         Weight::zero()
     }
+
     fn accept_invitation() -> Weight {
         Weight::zero()
     }
+
     fn certify_smith() -> Weight {
         Weight::zero()
     }
diff --git a/pallets/universal-dividend/Cargo.toml b/pallets/universal-dividend/Cargo.toml
index 53172924b..bb15b5881 100644
--- a/pallets/universal-dividend/Cargo.toml
+++ b/pallets/universal-dividend/Cargo.toml
@@ -11,90 +11,88 @@ version = '3.0.0'
 [features]
 default = ['std']
 runtime-benchmarks = [
-	"frame-benchmarking/runtime-benchmarks",
-	"pallet-balances",
+  "frame-benchmarking/runtime-benchmarks",
+	"frame-support/runtime-benchmarks",
+	"frame-system/runtime-benchmarks",
+	"pallet-balances/runtime-benchmarks",
+	"pallet-timestamp/runtime-benchmarks",
+	"sp-runtime/runtime-benchmarks",
+]
+try-runtime = [
+    'frame-support/try-runtime',
+    'frame-system/try-runtime',
+    'pallet-balances/runtime-benchmarks',
+    'pallet-timestamp/runtime-benchmarks',
+    'sp-runtime/try-runtime',
 ]
 std = [
     'codec/std',
     'frame-support/std',
     'frame-system/std',
-    'frame-benchmarking/std',
+    'frame-benchmarking?/std',
     'pallet-timestamp/std',
-	"serde",
+    'pallet-balances/std',
+    'scale-info/std',
+    "serde/std",
     "sp-arithmetic/std",
     "sp-io/std",
+    "sp-core/std",
     "sp-std/std",
+    "sp-runtime/std",
 ]
-try-runtime = ['frame-support/try-runtime']
 
 [dependencies]
 # crates.io
-codec = { package = 'parity-scale-codec', version = "3.1.5", default-features = false, features = ["derive", "max-encoded-len"] }
-scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
-serde = { version = "1.0.101", features = ["derive"], optional = true }
+codec = { package = 'parity-scale-codec', version = "3.6.9", default-features = false, features = ["derive", "max-encoded-len"] }
 
 # substrate bencharks
-frame-benchmarking = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', optional = true, default-features = false }
-pallet-balances = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', optional = true, default-features = false }
+frame-benchmarking = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', optional = true, default-features = false }
+pallet-balances = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', optional = true, default-features = false }
+scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
+serde = { version = "1.0.195", features = ["derive"], default-features = false }
 
 [dependencies.frame-support]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-system]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.pallet-timestamp]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-arithmetic]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-io]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
-[dependencies.sp-std]
-default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-runtime]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 ### DOC ###
 
 [package.metadata.docs.rs]
+default-features = false
 targets = ['x86_64-unknown-linux-gnu']
 
-
+[dependencies.sp-std]
+default-features = false
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 ### DEV ###
 
-[dev-dependencies]
-serde = { version = "1.0.101", features = ["derive"] }
-
-[dev-dependencies.pallet-balances]
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
 [dev-dependencies.sp-core]
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
-[dev-dependencies.sp-io]
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
-[dev-dependencies.sp-runtime]
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+default-features = false
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
diff --git a/pallets/universal-dividend/src/lib.rs b/pallets/universal-dividend/src/lib.rs
index b52482709..d475f974c 100644
--- a/pallets/universal-dividend/src/lib.rs
+++ b/pallets/universal-dividend/src/lib.rs
@@ -170,7 +170,6 @@ pub mod pallet {
         pub ud: BalanceOf<T>,
     }
 
-    #[cfg(feature = "std")]
     impl<T: Config> Default for GenesisConfig<T>
     where
         <T as pallet_timestamp::Config>::Moment: MaybeSerializeDeserialize,
@@ -188,7 +187,7 @@ pub mod pallet {
     }
 
     #[pallet::genesis_build]
-    impl<T: Config> GenesisBuild<T> for GenesisConfig<T>
+    impl<T: Config> BuildGenesisConfig for GenesisConfig<T>
     where
         <T as pallet_timestamp::Config>::Moment: MaybeSerializeDeserialize,
     {
@@ -403,6 +402,7 @@ pub mod pallet {
             let who = ensure_signed(origin)?;
             Self::do_claim_uds(&who)
         }
+
         /// Transfer some liquid free balance to another account, in milliUD.
         #[pallet::call_index(1)]
         #[pallet::weight(<T as pallet::Config>::WeightInfo::transfer_ud())]
@@ -432,6 +432,7 @@ pub mod pallet {
         pub fn init_first_eligible_ud() -> FirstEligibleUd {
             CurrentUdIndex::<T>::get().into()
         }
+
         /// function to call when removing a member
         /// auto-claims UDs
         pub fn on_removed_member(first_ud_index: UdIndex, who: &T::AccountId) -> Weight {
diff --git a/pallets/universal-dividend/src/mock.rs b/pallets/universal-dividend/src/mock.rs
index a753ac163..ada04634e 100644
--- a/pallets/universal-dividend/src/mock.rs
+++ b/pallets/universal-dividend/src/mock.rs
@@ -23,7 +23,6 @@ use frame_support::{
 use frame_system as system;
 use sp_core::{ConstU32, H256};
 use sp_runtime::{
-    testing::Header,
     traits::{BlakeTwo256, IdentityLookup},
     BuildStorage,
 };
@@ -34,20 +33,16 @@ use sp_runtime::traits::ConvertInto;
 pub const BLOCK_TIME: u64 = 6_000;
 
 type Balance = u64;
-type UncheckedExtrinsic = frame_system::mocking::MockUncheckedExtrinsic<Test>;
 type Block = frame_system::mocking::MockBlock<Test>;
 
 // Configure a mock runtime to test the pallet.
 frame_support::construct_runtime!(
-    pub enum Test where
-        Block = Block,
-        NodeBlock = Block,
-        UncheckedExtrinsic = UncheckedExtrinsic,
+    pub enum Test
     {
-        System: frame_system::{Pallet, Call, Config, Storage, Event<T>},
-        Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent},
-        Balances: pallet_balances::{Pallet, Call, Storage, Config<T>, Event<T>},
-        UniversalDividend: pallet_universal_dividend::{Pallet, Storage, Config<T>, Event<T>},
+        System: frame_system,
+        Timestamp: pallet_timestamp,
+        Balances: pallet_balances,
+        UniversalDividend: pallet_universal_dividend,
     }
 );
 
@@ -57,30 +52,30 @@ parameter_types! {
 }
 
 impl system::Config for Test {
+    type AccountData = pallet_balances::AccountData<Balance>;
+    type AccountId = u32;
     type BaseCallFilter = Everything;
-    type BlockWeights = ();
+    type Block = Block;
+    type BlockHashCount = BlockHashCount;
     type BlockLength = ();
+    type BlockWeights = ();
     type DbWeight = ();
-    type RuntimeOrigin = RuntimeOrigin;
-    type RuntimeCall = RuntimeCall;
-    type Index = u64;
-    type BlockNumber = u64;
     type Hash = H256;
     type Hashing = BlakeTwo256;
-    type AccountId = u32;
     type Lookup = IdentityLookup<Self::AccountId>;
-    type Header = Header;
-    type RuntimeEvent = RuntimeEvent;
-    type BlockHashCount = BlockHashCount;
-    type Version = ();
-    type PalletInfo = PalletInfo;
-    type AccountData = pallet_balances::AccountData<Balance>;
-    type OnNewAccount = ();
+    type MaxConsumers = frame_support::traits::ConstU32<16>;
+    type Nonce = u64;
     type OnKilledAccount = ();
-    type SystemWeightInfo = ();
-    type SS58Prefix = SS58Prefix;
+    type OnNewAccount = ();
     type OnSetCode = ();
-    type MaxConsumers = frame_support::traits::ConstU32<16>;
+    type PalletInfo = PalletInfo;
+    type RuntimeCall = RuntimeCall;
+    type RuntimeEvent = RuntimeEvent;
+    type RuntimeOrigin = RuntimeOrigin;
+    type RuntimeTask = ();
+    type SS58Prefix = SS58Prefix;
+    type SystemWeightInfo = ();
+    type Version = ();
 }
 
 parameter_types! {
@@ -88,9 +83,9 @@ parameter_types! {
 }
 
 impl pallet_timestamp::Config for Test {
+    type MinimumPeriod = MinimumPeriod;
     type Moment = u64;
     type OnTimestampSet = UniversalDividend;
-    type MinimumPeriod = MinimumPeriod;
     type WeightInfo = ();
 }
 
@@ -100,19 +95,20 @@ parameter_types! {
 }
 
 impl pallet_balances::Config for Test {
+    type AccountStore = System;
     type Balance = Balance;
     type DustRemoval = ();
     type ExistentialDeposit = ExistentialDeposit;
-    type AccountStore = System;
-    type WeightInfo = pallet_balances::weights::SubstrateWeight<Test>;
+    type FreezeIdentifier = ();
+    type MaxFreezes = ConstU32<0>;
+    type MaxHolds = ConstU32<0>;
     type MaxLocks = MaxLocks;
     type MaxReserves = ();
     type ReserveIdentifier = [u8; 8];
     type RuntimeEvent = RuntimeEvent;
-    type HoldIdentifier = ();
-    type FreezeIdentifier = ();
-    type MaxHolds = ConstU32<0>;
-    type MaxFreezes = ConstU32<0>;
+    type RuntimeFreezeReason = ();
+    type RuntimeHoldReason = ();
+    type WeightInfo = pallet_balances::weights::SubstrateWeight<Test>;
 }
 
 parameter_types! {
@@ -127,6 +123,7 @@ impl frame_support::traits::StoredMap<u32, FirstEligibleUd> for TestMembersStora
     fn get(key: &u32) -> FirstEligibleUd {
         crate::TestMembers::<Test>::get(key)
     }
+
     fn try_mutate_exists<R, E: From<sp_runtime::DispatchError>>(
         key: &u32,
         f: impl FnOnce(&mut Option<FirstEligibleUd>) -> Result<R, E>,
@@ -141,26 +138,26 @@ impl frame_support::traits::StoredMap<u32, FirstEligibleUd> for TestMembersStora
 }
 
 impl pallet_universal_dividend::Config for Test {
-    type MomentIntoBalance = sp_runtime::traits::ConvertInto;
+    #[cfg(feature = "runtime-benchmarks")]
+    type AccountIdOf = ConvertInto;
     type Currency = pallet_balances::Pallet<Test>;
     type MaxPastReeval = frame_support::traits::ConstU32<2>;
     type MembersCount = MembersCount;
     type MembersStorage = TestMembersStorage;
+    type MomentIntoBalance = sp_runtime::traits::ConvertInto;
     type RuntimeEvent = RuntimeEvent;
     type SquareMoneyGrowthRate = SquareMoneyGrowthRate;
     type UdCreationPeriod = UdCreationPeriod;
     type UdReevalPeriod = UdReevalPeriod;
     type UnitsPerUd = frame_support::traits::ConstU64<1_000>;
     type WeightInfo = ();
-    #[cfg(feature = "runtime-benchmarks")]
-    type AccountIdOf = ConvertInto;
 }
 
 // Build genesis storage according to the mock runtime.
 pub fn new_test_ext(
     gen_conf: pallet_universal_dividend::GenesisConfig<Test>,
 ) -> sp_io::TestExternalities {
-    GenesisConfig {
+    RuntimeGenesisConfig {
         system: SystemConfig::default(),
         balances: BalancesConfig {
             total_issuance: gen_conf.initial_monetary_mass,
diff --git a/pallets/universal-dividend/src/types.rs b/pallets/universal-dividend/src/types.rs
index 000ac0017..da94dd22d 100644
--- a/pallets/universal-dividend/src/types.rs
+++ b/pallets/universal-dividend/src/types.rs
@@ -16,18 +16,16 @@
 
 use codec::{Decode, Encode, Error, Input, MaxEncodedLen, Output};
 use core::num::NonZeroU16;
-#[cfg(feature = "std")]
-use serde::{Deserialize, Serialize};
 use sp_runtime::RuntimeDebug;
 use sp_std::vec::Vec;
 
 pub type UdIndex = u16;
 
-#[cfg_attr(feature = "std", derive(Deserialize, Serialize))]
-#[derive(Clone, Copy, Default, Eq, PartialEq, RuntimeDebug)]
+#[derive(
+    Clone, Copy, Default, Eq, PartialEq, RuntimeDebug, serde::Deserialize, serde::Serialize,
+)]
 pub struct FirstEligibleUd(pub Option<NonZeroU16>);
 
-#[cfg(feature = "std")]
 impl FirstEligibleUd {
     pub fn min() -> Self {
         Self(Some(NonZeroU16::new(1).expect("unreachable")))
diff --git a/pallets/universal-dividend/src/weights.rs b/pallets/universal-dividend/src/weights.rs
index 75eb80a58..27d0f739c 100644
--- a/pallets/universal-dividend/src/weights.rs
+++ b/pallets/universal-dividend/src/weights.rs
@@ -35,6 +35,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads(4))
             .saturating_add(RocksDbWeight::get().writes(1))
     }
+
     // Storage: UniversalDividend CurrentUd (r:1 w:0)
     // Storage: System Account (r:1 w:1)
     // Storage: Account PendingNewAccounts (r:0 w:1)
@@ -43,6 +44,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads(2))
             .saturating_add(RocksDbWeight::get().writes(2))
     }
+
     // Storage: UniversalDividend CurrentUd (r:1 w:0)
     // Storage: System Account (r:1 w:1)
     // Storage: Account PendingNewAccounts (r:0 w:1)
@@ -51,6 +53,7 @@ impl WeightInfo for () {
             .saturating_add(RocksDbWeight::get().reads(2))
             .saturating_add(RocksDbWeight::get().writes(2))
     }
+
     fn on_removed_member(i: u32) -> Weight {
         Weight::from_parts(32_514_000, 0)
             // Standard Error: 32_000
diff --git a/pallets/upgrade-origin/Cargo.toml b/pallets/upgrade-origin/Cargo.toml
index 54c322852..6aabbaeb0 100644
--- a/pallets/upgrade-origin/Cargo.toml
+++ b/pallets/upgrade-origin/Cargo.toml
@@ -10,60 +10,71 @@ version = '3.0.0'
 
 [features]
 default = ['std']
-runtime-benchmarks = ['frame-benchmarking/runtime-benchmarks']
+runtime-benchmarks = [
+	"frame-support/runtime-benchmarks",
+	"frame-system/runtime-benchmarks",
+  "frame-benchmarking/runtime-benchmarks",
+	"sp-runtime/runtime-benchmarks",
+]
+try-runtime = [
+    'frame-support/try-runtime',
+    'frame-system/try-runtime',
+    'sp-runtime/try-runtime',
+]
 std = [
     'codec/std',
+    'scale-info/std',
     'frame-support/std',
     'frame-system/std',
-    'frame-benchmarking/std',
+    'frame-benchmarking?/std',
     "sp-io/std",
+    "sp-runtime/std",
     "sp-std/std",
 ]
-try-runtime = ['frame-support/try-runtime']
 
 [dependencies]
 
 # substrate
-scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
+scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
 
 [dependencies.codec]
 default-features = false
 features = ['derive']
 package = 'parity-scale-codec'
-version = "3.1.5"
+version = "3.6.9"
 
 [dependencies.frame-benchmarking]
 default-features = false
-git = 'https://github.com/duniter/substrate'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
 optional = true
-branch = 'duniter-substrate-v0.9.42'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-support]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.frame-system]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-io]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
-[dependencies.sp-std]
-default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-runtime]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 ### DOC ###
 
 [package.metadata.docs.rs]
+default-features = false
 targets = ['x86_64-unknown-linux-gnu']
+
+[dependencies.sp-std]
+default-features = false
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
diff --git a/pallets/upgrade-origin/src/lib.rs b/pallets/upgrade-origin/src/lib.rs
index 00bdfd255..15ebd1ae9 100644
--- a/pallets/upgrade-origin/src/lib.rs
+++ b/pallets/upgrade-origin/src/lib.rs
@@ -104,18 +104,20 @@ pub mod pallet {
             });
             Ok(Pays::No.into())
         }
+
         /// Dispatches a function call from root origin.
         /// This function does not check the weight of the call, and instead allows the
         /// caller to specify the weight of the call.
         ///
         /// The weight of this call is defined by the caller.
         #[pallet::call_index(1)]
-        #[pallet::weight((*_weight, call.get_dispatch_info().class))]
+        #[pallet::weight((*weight, call.get_dispatch_info().class))]
         pub fn dispatch_as_root_unchecked_weight(
             origin: OriginFor<T>,
             call: Box<<T as Config>::Call>,
-            _weight: Weight,
+            weight: Weight,
         ) -> DispatchResultWithPostInfo {
+            let _ = weight; // We dont need to check the weight witness.
             T::UpgradableOrigin::ensure_origin(origin)?;
 
             let res = call.dispatch_bypass_filter(frame_system::RawOrigin::Root.into());
diff --git a/primitives/distance/Cargo.toml b/primitives/distance/Cargo.toml
index fce822d7c..afd7e3c3c 100644
--- a/primitives/distance/Cargo.toml
+++ b/primitives/distance/Cargo.toml
@@ -13,55 +13,59 @@ version = '3.0.0'
 default = ['std']
 std = [
     'async-trait',
+    'scale-info/std',
     'codec/std',
     'frame-support/std',
-    'serde',
+    'serde/std',
     'sp-inherents/std',
     'sp-runtime/std',
     'sp-std/std',
     'thiserror'
 ]
-try-runtime = ['frame-support/try-runtime']
+try-runtime = [
+    'frame-support/try-runtime',
+    'sp-runtime/try-runtime',
+]
 
 [dependencies]
-async-trait = { version = "0.1", optional = true }
-thiserror = { version = "1.0.30", optional = true }
+async-trait = { version = "0.1", optional = true, default-features = false }
 
 # substrate
-scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
+scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
+thiserror = { version = "1.0.56", optional = true, default-features = false }
 
 [dependencies.codec]
 default-features = false
 features = ['derive']
 package = 'parity-scale-codec'
-version = "3.1.5"
+version = "3.6.9"
 
 [dependencies.frame-support]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.serde]
-version = "1.0.101"
-optional = true
+default-features = false
+version = "1.0.195"
 features = ["derive"]
 
 [dependencies.sp-inherents]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-runtime]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
-[dependencies.sp-std]
-default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 ### DOC ###
 
 [package.metadata.docs.rs]
+default-features = false
 targets = ['x86_64-unknown-linux-gnu']
+
+[dependencies.sp-std]
+default-features = false
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
diff --git a/primitives/distance/src/lib.rs b/primitives/distance/src/lib.rs
index f2e893345..bf878cc9b 100644
--- a/primitives/distance/src/lib.rs
+++ b/primitives/distance/src/lib.rs
@@ -20,7 +20,7 @@
 #![allow(clippy::type_complexity)]
 
 use codec::{Decode, Encode};
-use frame_support::RuntimeDebug;
+use frame_support::pallet_prelude::RuntimeDebug;
 use scale_info::TypeInfo;
 //#[cfg(feature = "std")]
 //use serde::{Deserialize, Serialize};
diff --git a/primitives/duniter/Cargo.toml b/primitives/duniter/Cargo.toml
index 12c7c9275..9cb227fb8 100644
--- a/primitives/duniter/Cargo.toml
+++ b/primitives/duniter/Cargo.toml
@@ -12,40 +12,45 @@ version = '3.0.0'
 [features]
 default = ['std']
 std = [
+    'scale-info/std',
     'codec/std',
     'frame-support/std',
     'sp-runtime/std',
     'sp-std/std',
 ]
-try-runtime = ['frame-support/try-runtime']
+try-runtime = [
+    'frame-support/try-runtime',
+    'sp-runtime/try-runtime',
+]
 
 [dependencies]
 
 # substrate
-scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
+scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
 
 [dependencies.codec]
 default-features = false
 features = ['derive']
 package = 'parity-scale-codec'
-version = "3.1.5"
+version = "3.6.9"
 
 [dependencies.frame-support]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-runtime]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.sp-std]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 ### DOC ###
 
 [package.metadata.docs.rs]
+default-features = false
 targets = ['x86_64-unknown-linux-gnu']
diff --git a/primitives/duniter/src/lib.rs b/primitives/duniter/src/lib.rs
index e70509771..44c1257da 100644
--- a/primitives/duniter/src/lib.rs
+++ b/primitives/duniter/src/lib.rs
@@ -39,6 +39,7 @@ impl<T> Idty<T, T> for () {
     fn owner_key(t: T) -> Option<T> {
         Some(t)
     }
+
     fn idty_index(t: T) -> Option<T> {
         Some(t)
     }
diff --git a/primitives/membership/Cargo.toml b/primitives/membership/Cargo.toml
index d0f391814..a66bc91dc 100644
--- a/primitives/membership/Cargo.toml
+++ b/primitives/membership/Cargo.toml
@@ -12,49 +12,53 @@ version = '3.0.0'
 [features]
 default = ['std']
 std = [
+    'scale-info/std',
     'codec/std',
     'frame-support/std',
-    'serde',
+    'serde/std',
     'sp-runtime/std',
     'sp-std/std',
 ]
-try-runtime = ['frame-support/try-runtime']
+try-runtime = [
+    'frame-support/try-runtime',
+    'sp-runtime/try-runtime',
+]
 
 [dependencies]
 
 # crates.io
-impl-trait-for-tuples = "0.2.1"
+impl-trait-for-tuples = { version = "0.2.2", default-features = false }
 
 # substrate
-scale-info = { version = "2.1.1", default-features = false, features = ["derive"] }
+scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
 
 [dependencies.codec]
 default-features = false
 features = ['derive']
 package = 'parity-scale-codec'
-version = "3.1.5"
+version = "3.6.9"
 
 [dependencies.frame-support]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 
 [dependencies.serde]
-version = "1.0.101"
-optional = true
+default-features = false
+version = "1.0.195"
 features = ["derive"]
 
 [dependencies.sp-runtime]
 default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
-[dependencies.sp-std]
-default-features = false
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
 ### DOC ###
 
 [package.metadata.docs.rs]
+default-features = false
 targets = ['x86_64-unknown-linux-gnu']
+
+[dependencies.sp-std]
+default-features = false
+git = 'https://github.com/duniter/duniter-polkadot-sdk'
+branch = 'duniter-substrate-v1.6.0'
diff --git a/primitives/membership/src/lib.rs b/primitives/membership/src/lib.rs
index 897bf64ff..64f7f821f 100644
--- a/primitives/membership/src/lib.rs
+++ b/primitives/membership/src/lib.rs
@@ -22,9 +22,9 @@
 pub mod traits;
 
 use codec::{Decode, Encode};
-use frame_support::RuntimeDebug;
+use frame_support::pallet_prelude::RuntimeDebug;
+
 use scale_info::TypeInfo;
-#[cfg(feature = "std")]
 use serde::{Deserialize, Serialize};
 
 /// membership events
@@ -37,8 +37,19 @@ pub enum Event<IdtyId> {
     MembershipRenewed(IdtyId),
 }
 
-#[cfg_attr(feature = "std", derive(Deserialize, Serialize))]
-#[derive(Encode, Decode, Default, Clone, Copy, PartialEq, Eq, RuntimeDebug, TypeInfo)]
+#[derive(
+    Encode,
+    Decode,
+    Default,
+    Clone,
+    Copy,
+    PartialEq,
+    Eq,
+    RuntimeDebug,
+    TypeInfo,
+    Deserialize,
+    Serialize,
+)]
 pub struct MembershipData<BlockNumber: Decode + Encode + TypeInfo> {
     pub expire_on: BlockNumber,
 }
diff --git a/primitives/membership/src/traits.rs b/primitives/membership/src/traits.rs
index 9e54c148b..a877fa9fb 100644
--- a/primitives/membership/src/traits.rs
+++ b/primitives/membership/src/traits.rs
@@ -25,6 +25,7 @@ impl<IdtyId> CheckMembershipOpAllowed<IdtyId> for () {
     fn check_add_membership(_: IdtyId) -> Result<(), DispatchError> {
         Ok(())
     }
+
     fn check_renew_membership(_: IdtyId) -> Result<(), DispatchError> {
         Ok(())
     }
diff --git a/resources/metadata.scale b/resources/metadata.scale
index c4eca41e6ceadbd432352ebe02627014d155b358..f963c977883e0d240b34d87f1b77b461ffcdee71 100644
GIT binary patch
delta 30824
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
LcU`D;pI!RD6eg2w

literal 128583
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

diff --git a/resources/weight_analyzer/Cargo.toml b/resources/weight_analyzer/Cargo.toml
index 56c59b7e2..9a935bd0f 100644
--- a/resources/weight_analyzer/Cargo.toml
+++ b/resources/weight_analyzer/Cargo.toml
@@ -13,7 +13,7 @@ name = "weightanalyzer"
 path = "src/lib.rs"
 
 [dependencies]
-subweight-core = "3.3.1"
 convert_case = "0.6.0"
 glob = "0.3.1"
 serde = { version = "1.0.101", features = ["derive"] }
+subweight-core = "3.3.1"
diff --git a/resources/weight_analyzer/src/lib.rs b/resources/weight_analyzer/src/lib.rs
index 5403efab3..14e8bf7ae 100644
--- a/resources/weight_analyzer/src/lib.rs
+++ b/resources/weight_analyzer/src/lib.rs
@@ -24,6 +24,7 @@ impl Default for MaxBlockWeight {
 }
 impl Div<&MaxBlockWeight> for f64 {
     type Output = Self;
+
     fn div(self, max_block_weight: &MaxBlockWeight) -> Self::Output {
         self / max_block_weight.0
     }
diff --git a/runtime/common/Cargo.toml b/runtime/common/Cargo.toml
index c4206e8db..11e953e40 100644
--- a/runtime/common/Cargo.toml
+++ b/runtime/common/Cargo.toml
@@ -7,126 +7,167 @@ authors = ['Axiom-Team Developers <https://axiom-team.fr>']
 edition = "2021"
 
 [features]
+default = ['std']
+no_std = []
 constant-fees = []
 runtime-benchmarks = [
-    "frame-benchmarking/runtime-benchmarks",
-    'frame-support/runtime-benchmarks',
+    'frame-benchmarking/runtime-benchmarks',
     'frame-system-benchmarking/runtime-benchmarks',
+    'frame-support/runtime-benchmarks',
     'frame-system/runtime-benchmarks',
     "pallet-babe/runtime-benchmarks",
     'pallet-balances/runtime-benchmarks',
     'pallet-certification/runtime-benchmarks',
+    'pallet-offences/runtime-benchmarks',
     'pallet-collective/runtime-benchmarks',
     'pallet-duniter-wot/runtime-benchmarks',
     'pallet-identity/runtime-benchmarks',
     'pallet-membership/runtime-benchmarks',
+    'pallet-quota/runtime-benchmarks',
+    'pallet-provide-randomness/runtime-benchmarks',
     'pallet-im-online/runtime-benchmarks',
+    'pallet-universal-dividend/runtime-benchmarks',
+    'pallet-oneshot-account/runtime-benchmarks',
     'pallet-multisig/runtime-benchmarks',
     'pallet-proxy/runtime-benchmarks',
     'pallet-preimage/runtime-benchmarks',
-    'pallet-session-benchmarking/runtime-benchmarks',
     'pallet-treasury/runtime-benchmarks',
     'pallet-upgrade-origin/runtime-benchmarks',
     'sp-runtime/runtime-benchmarks',
 ]
 std = [
     'codec/std',
-    'duniter-primitives/std',
+    'frame-benchmarking/std',
+    'frame-system-benchmarking?/std',
     'frame-support/std',
     'frame-system/std',
-    'log/std',
     'pallet-authority-members/std',
-    'pallet-smith-members/std',
     'pallet-babe/std',
     'pallet-balances/std',
     'pallet-certification/std',
-    'pallet-distance/std',
+    'pallet-collective/std',
     'pallet-duniter-account/std',
-    'pallet-quota/std',
     'pallet-duniter-wot/std',
     'pallet-grandpa/std',
     'pallet-identity/std',
+    'pallet-im-online/std',
     'pallet-membership/std',
     'pallet-multisig/std',
+    "pallet-offences/std",
     'pallet-oneshot-account/std',
+    'pallet-preimage/std',
     'pallet-provide-randomness/std',
     'pallet-proxy/std',
-    'pallet-scheduler/std',
+    'pallet-quota/std',
+    'pallet-multisig/std',
+    "pallet-scheduler/std",
+    'pallet-session/std',
+    'pallet-smith-members/std',
+    'pallet-sudo/std',
     'pallet-timestamp/std',
     'pallet-treasury/std',
     'pallet-universal-dividend/std',
+    'pallet-upgrade-origin/std',
+    'pallet-utility/std',
+    'scale-info/std',
     "serde/std",
-    "serde_derive",
     'sp-arithmetic/std',
+    'sp-consensus-babe/std',
     'sp-core/std',
-    'sp-distance/std',
     'sp-membership/std',
     'sp-runtime/std',
+    'sp-staking/std',
     'sp-std/std',
     'sp-weights/std',
+    'node-primitives/std',
 ]
 try-runtime = [
-    "frame-support/try-runtime",
-    "frame-system/try-runtime",
-    "pallet-babe/try-runtime",
-    "pallet-grandpa/try-runtime",
+    'frame-support/try-runtime',
+    'frame-system/try-runtime',
+    'pallet-babe/try-runtime',
+    'pallet-balances/try-runtime',
+    'pallet-certification/try-runtime',
+    'pallet-collective/try-runtime',
+    'pallet-duniter-account/try-runtime',
+    'pallet-duniter-wot/try-runtime',
+    'pallet-grandpa/try-runtime',
+    'pallet-identity/try-runtime',
+    'pallet-im-online/try-runtime',
+    'pallet-membership/try-runtime',
+    'pallet-multisig/try-runtime',
+    "pallet-offences/try-runtime",
+    'pallet-oneshot-account/try-runtime',
+    'pallet-preimage/try-runtime',
+    'pallet-provide-randomness/try-runtime',
+    'pallet-proxy/try-runtime',
+    'pallet-quota/try-runtime',
+    'pallet-multisig/try-runtime',
+    "pallet-scheduler/try-runtime",
+    'pallet-session/try-runtime',
+    'pallet-smith-members/try-runtime',
+    'pallet-sudo/try-runtime',
+    'pallet-timestamp/try-runtime',
+    'pallet-treasury/try-runtime',
+    'pallet-universal-dividend/try-runtime',
+    'pallet-upgrade-origin/try-runtime',
+    'pallet-utility/try-runtime',
 ]
 
 [dependencies]
+
+# Crates.io
+codec = { package = "parity-scale-codec", version = "3.6.9", features = ["derive"], default-features = false }
 duniter-primitives = { path = '../../primitives/duniter', default-features = false }
+
+# substrate benchmarks
+frame-system-benchmarking = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = 'duniter-substrate-v1.6.0', default-features = false, optional = true }
+frame-benchmarking = { git = "https://github.com/duniter/duniter-polkadot-sdk", branch = 'duniter-substrate-v1.6.0', default-features = false, optional = true }
+frame-support = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+frame-system = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+
+# Substrate
 pallet-authority-members = { path = '../../pallets/authority-members', default-features = false }
-pallet-smith-members = { path = '../../pallets/smith-members', default-features = false }
+pallet-babe = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-balances = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-certification = { path = '../../pallets/certification', default-features = false }
+pallet-collective = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-distance = { path = "../../pallets/distance", default-features = false }
 pallet-duniter-account = { path = '../../pallets/duniter-account', default-features = false }
-pallet-quota = { path = '../../pallets/quota', default-features = false }
 pallet-duniter-wot = { path = '../../pallets/duniter-wot', default-features = false }
+pallet-grandpa = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-identity = { path = '../../pallets/identity', default-features = false }
+pallet-im-online = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-membership = { path = '../../pallets/membership', default-features = false }
+pallet-multisig = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-offences = { path = '../../pallets/offences', default-features = false }
 pallet-oneshot-account = { path = '../../pallets/oneshot-account', default-features = false }
+pallet-preimage = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-provide-randomness = { path = '../../pallets/provide-randomness', default-features = false }
-pallet-upgrade-origin = { path = '../../pallets/upgrade-origin', default-features = false }
+pallet-proxy = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-quota = { path = '../../pallets/quota', default-features = false }
+pallet-scheduler = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-session = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-smith-members = { path = '../../pallets/smith-members', default-features = false }
+pallet-sudo = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-timestamp = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-treasury = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-universal-dividend = { path = '../../pallets/universal-dividend', default-features = false }
-pallet-session-benchmarking = { path = '../../pallets/session-benchmarking', default-features = false }
-sp-distance = { path = '../../primitives/distance', default-features = false }
+pallet-upgrade-origin = { path = '../../pallets/upgrade-origin', default-features = false }
+pallet-utility = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
+serde = { version = "1.0.195", default-features = false }
+smallvec = { version = "1.13.1", default-features = false }
+sp-arithmetic = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-consensus-babe = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-core = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 sp-membership = { path = '../../primitives/membership', default-features = false }
-
-# Crates.io
-codec = { package = "parity-scale-codec", version = "3.4.0", features = ["derive"], default-features = false }
-log = { version = "0.4.17", default-features = false }
-scale-info = { version = "2.5.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.139", default-features = false }
-serde_derive = { version = "1.0.117", optional = true, default-features = false }
-smallvec = { version = "1.8.0", default-features = false }
-
-# Substrate
-frame-support = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-frame-system = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-babe = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-balances = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-collective = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-grandpa = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-im-online = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-multisig = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-preimage = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-proxy = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-scheduler = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-session = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-timestamp = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-treasury = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-utility = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-arithmetic = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-consensus-babe = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-consensus-grandpa = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-core = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-runtime = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-std = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-weights = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-
-
-# substrate benchmarks
-frame-benchmarking = { git = "https://github.com/duniter/substrate", branch = 'duniter-substrate-v0.9.42', default-features = false, optional = true }
-frame-system-benchmarking = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false, optional = true }
+sp-runtime = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 
 # TODO: there is a bad coupling in substrate that force to add this dependency
-sp-staking = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
+sp-staking = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-std = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-weights = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+node-primitives = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+
+[package.metadata.docs.rs]
+targets = ['x86_64-unknown-linux-gnu']
diff --git a/runtime/common/src/apis.rs b/runtime/common/src/apis.rs
index acea484d8..ef895c58c 100644
--- a/runtime/common/src/apis.rs
+++ b/runtime/common/src/apis.rs
@@ -268,9 +268,9 @@ macro_rules! runtime_apis {
 					Vec<frame_benchmarking::BenchmarkBatch>,
 					sp_runtime::RuntimeString,
 				> {
-					use frame_benchmarking::{Benchmarking, BenchmarkBatch, TrackedStorageKey};
-					// Trying to add benchmarks directly to some pallets caused cyclic dependency issues.
-					// To get around that, we separated the benchmarks into its own crate.
+					use frame_benchmarking::{Benchmarking, BenchmarkBatch};
+use frame_support::traits::TrackedStorageKey;
+use frame_support::traits::WhitelistedStorageKeys;
                     use pallet_session_benchmarking::Pallet as SessionBench;
 					use frame_system_benchmarking::Pallet as SystemBench;
 					use frame_benchmarking::baseline::Pallet as Baseline;
@@ -279,7 +279,7 @@ macro_rules! runtime_apis {
 					impl frame_system_benchmarking::Config for Runtime {}
 					impl frame_benchmarking::baseline::Config for Runtime {}
 
-					let whitelist: Vec<TrackedStorageKey> = vec![
+					/*let whitelist: Vec<TrackedStorageKey> = vec![
 						// Block Number
 						hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef702a5c1b19ab7a04f536c519aca4983ac").to_vec().into(),
 						// Total Issuance
@@ -292,8 +292,9 @@ macro_rules! runtime_apis {
 						hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef780d41e5e16056765bc8461851072c9d7").to_vec().into(),
 						// Treasury Account
 						hex_literal::hex!("26aa394eea5630e07c48ae0c9558cef7b99d880ec681799c0cf30e8886371da95ecffd7b6c0f78751baa9d281e0bfa3a6d6f646c70792f74727372790000000000000000000000000000000000000000").to_vec().into(),
-					];
+					];*/
 
+let whitelist: Vec<TrackedStorageKey> = AllPalletsWithSystem::whitelisted_storage_keys();
 					let mut batches = Vec::<BenchmarkBatch>::new();
 					let params = (&config, &whitelist);
                     add_benchmarks!(params, batches);
diff --git a/runtime/common/src/entities.rs b/runtime/common/src/entities.rs
index 7ee895b7f..4f21fa71b 100644
--- a/runtime/common/src/entities.rs
+++ b/runtime/common/src/entities.rs
@@ -16,8 +16,6 @@
 
 use frame_support::pallet_prelude::*;
 use scale_info::TypeInfo;
-#[cfg(feature = "std")]
-use serde::{Deserialize, Serialize};
 
 #[macro_export]
 macro_rules! declare_session_keys {
@@ -37,8 +35,19 @@ macro_rules! declare_session_keys {
     }
 }
 
-#[cfg_attr(feature = "std", derive(Deserialize, Serialize))]
-#[derive(Clone, Encode, Decode, Default, Eq, PartialEq, RuntimeDebug, TypeInfo, MaxEncodedLen)]
+#[derive(
+    Clone,
+    Encode,
+    Decode,
+    Default,
+    Eq,
+    PartialEq,
+    RuntimeDebug,
+    TypeInfo,
+    MaxEncodedLen,
+    serde::Deserialize,
+    serde::Serialize,
+)]
 pub struct IdtyData {
     /// number of the first claimable UD
     pub first_eligible_ud: pallet_universal_dividend::FirstEligibleUd,
@@ -59,8 +68,19 @@ impl From<IdtyData> for pallet_universal_dividend::FirstEligibleUd {
     }
 }
 
-#[cfg_attr(feature = "std", derive(Deserialize, Serialize))]
 #[derive(
-    Encode, Decode, Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, RuntimeDebug, TypeInfo,
+    Encode,
+    Decode,
+    Default,
+    Clone,
+    Copy,
+    PartialEq,
+    Eq,
+    PartialOrd,
+    Ord,
+    RuntimeDebug,
+    TypeInfo,
+    serde::Deserialize,
+    serde::Serialize,
 )]
 pub struct ValidatorFullIdentification;
diff --git a/runtime/common/src/fees.rs b/runtime/common/src/fees.rs
index fb43d4f1f..1bea9d575 100644
--- a/runtime/common/src/fees.rs
+++ b/runtime/common/src/fees.rs
@@ -47,6 +47,7 @@ where
     fn weight_to_fee(length_in_bytes: &Weight) -> Self::Balance {
         Self::Balance::saturated_from(length_in_bytes.ref_time() / 100u64)
     }
+
     #[cfg(feature = "constant-fees")]
     fn weight_to_fee(_length_in_bytes: &Weight) -> Self::Balance {
         0u32.into()
diff --git a/runtime/common/src/handlers.rs b/runtime/common/src/handlers.rs
index c52925272..1942c4195 100644
--- a/runtime/common/src/handlers.rs
+++ b/runtime/common/src/handlers.rs
@@ -16,8 +16,8 @@
 
 use super::entities::*;
 use super::{AccountId, IdtyIndex};
-use frame_support::dispatch::UnfilteredDispatchable;
 use frame_support::pallet_prelude::Weight;
+use frame_support::traits::UnfilteredDispatchable;
 use pallet_smith_members::SmithRemovalReason;
 
 // new session handler
diff --git a/runtime/common/src/pallets_config.rs b/runtime/common/src/pallets_config.rs
index 7e6c19e2c..d1893985c 100644
--- a/runtime/common/src/pallets_config.rs
+++ b/runtime/common/src/pallets_config.rs
@@ -38,16 +38,10 @@ macro_rules! pallets_config {
             type RuntimeCall = RuntimeCall;
             /// The lookup mechanism to get account ID from whatever is passed in dispatchers.
             type Lookup = AccountIdLookup<AccountId, ()>;
-            /// The index type for storing how many extrinsics an account has signed.
-            type Index = Index;
-            /// The index type for blocks.
-            type BlockNumber = BlockNumber;
             /// The type for hashing blocks and tries.
             type Hash = Hash;
             /// The hashing algorithm used.
             type Hashing = BlakeTwo256;
-            /// The header type.
-            type Header = generic::Header<BlockNumber, BlakeTwo256>;
             /// The ubiquitous event type.
             type RuntimeEvent = RuntimeEvent;
             /// The ubiquitous origin type.
@@ -75,6 +69,11 @@ macro_rules! pallets_config {
             /// The set code logic, just the default since we're not a parachain.
             type OnSetCode = ();
             type MaxConsumers = frame_support::traits::ConstU32<16>;
+	/// The type for storing how many extrinsics an account has signed.
+	type Nonce = node_primitives::Nonce;
+	/// The block type for the runtime.
+	type Block = Block;
+type RuntimeTask = ();
         }
 
         // SCHEDULER //
@@ -123,6 +122,8 @@ macro_rules! pallets_config {
         parameter_types! {
             pub const ReloadRate: BlockNumber = 1 * HOURS; // faster than DAYS
             pub const MaxQuota: Balance = 1000; // 10 ÄžD
+			pub const MaxNominators: u32 = 64;
+pub TreasuryAccount: AccountId = Treasury::account_id(); // TODO
         }
         impl pallet_quota::Config for Runtime {
             type RuntimeEvent = RuntimeEvent;
@@ -149,6 +150,7 @@ macro_rules! pallets_config {
                 pallet_babe::EquivocationReportSystem<Self, Offences, Historical, ReportLongevity>;
             type WeightInfo = common_runtime::weights::pallet_babe::WeightInfo<Runtime>;
             type MaxAuthorities = MaxAuthorities;
+type MaxNominators = MaxNominators;
         }
 
         impl pallet_timestamp::Config for Runtime {
@@ -161,6 +163,8 @@ macro_rules! pallets_config {
         // MONEY MANAGEMENT //
 
         impl pallet_balances::Config for Runtime {
+type RuntimeHoldReason = ();
+type RuntimeFreezeReason = ();
             type RuntimeEvent = RuntimeEvent;
             type MaxLocks = MaxLocks;
             type MaxReserves = frame_support::pallet_prelude::ConstU32<5>;
@@ -170,7 +174,6 @@ macro_rules! pallets_config {
             type DustRemoval = HandleDust;
             type ExistentialDeposit = ExistentialDeposit;
             type AccountStore = Account;
-			type HoldIdentifier = ();
 			type FreezeIdentifier = ();
 			type MaxHolds = frame_support::pallet_prelude::ConstU32<0>;
 			type MaxFreezes = frame_support::pallet_prelude::ConstU32<0>;
@@ -260,7 +263,6 @@ macro_rules! pallets_config {
             #[cfg(feature = "runtime-benchmarks")]
             type MaxKeys = frame_support::traits::ConstU32<1_000>; // At least 1000 to be benchmarkable see https://github.com/paritytech/substrate/blob/e94cb0dafd4f30ff29512c1c00ec513ada7d2b5d/frame/im-online/src/benchmarking.rs#L35
             type MaxPeerInHeartbeats = MaxPeerInHeartbeats;
-            type MaxPeerDataEncodingSize = MaxPeerDataEncodingSize;
         }
         impl pallet_offences::Config for Runtime {
             type RuntimeEvent = RuntimeEvent;
@@ -291,6 +293,7 @@ macro_rules! pallets_config {
             type WeightInfo = common_runtime::weights::pallet_grandpa::WeightInfo<Runtime>;
             type MaxAuthorities = MaxAuthorities;
 			type MaxSetIdSessionEntries = MaxSetIdSessionEntries;
+			type MaxNominators = frame_support::traits::ConstU32<64>;
 		}
         parameter_types! {
             // BondingDuration::get() * SessionsPerEra::get();
@@ -327,8 +330,7 @@ macro_rules! pallets_config {
             type WeightInfo = common_runtime::weights::pallet_preimage::WeightInfo<Runtime>;
             type Currency = Balances;
             type ManagerOrigin = EnsureRoot<AccountId>;
-            type BaseDeposit = PreimageBaseDeposit;
-            type ByteDeposit = PreimageByteDeposit;
+			type Consideration = ();
         }
 
         // UTILITIES //
@@ -420,8 +422,16 @@ macro_rules! pallets_config {
             type RejectOrigin = TreasuryRejectOrigin;
             type SpendFunds = TreasurySpendFunds<Self>;
             type SpendPeriod = SpendPeriod;
-            type SpendOrigin = frame_support::traits::NeverEnsureOrigin<u64>;
-			type WeightInfo = common_runtime::weights::pallet_treasury::WeightInfo<Runtime>;
+            type SpendOrigin = frame_support::traits::NeverEnsureOrigin<Balance>;
+            type WeightInfo = common_runtime::weights::pallet_treasury::WeightInfo<Runtime>;
+            type AssetKind = ();
+            type Beneficiary = AccountId;
+            type BeneficiaryLookup = AccountIdLookup<AccountId, ()>;
+            type Paymaster = frame_support::traits::tokens::pay::PayFromAccount<Balances, TreasuryAccount>;
+            type BalanceConverter = frame_support::traits::tokens::UnityAssetBalanceConversion;
+            type PayoutPeriod = sp_core::ConstU32<10>;
+            #[cfg(feature = "runtime-benchmarks")]
+            type BenchmarkHelper = ();
         }
 
         // UNIVERSAL DIVIDEND //
@@ -480,6 +490,12 @@ macro_rules! pallets_config {
             type WeightInfo = common_runtime::weights::pallet_identity::WeightInfo<Runtime>;
         }
 
+    impl pallet_sudo::Config for Runtime {
+        type RuntimeEvent = RuntimeEvent;
+        type RuntimeCall = RuntimeCall;
+        type WeightInfo = common_runtime::weights::pallet_sudo::WeightInfo<Runtime>;
+    }
+
         impl pallet_membership::Config for Runtime {
             type CheckMembershipOpAllowed = Wot;
             type IdtyId = IdtyIndex;
diff --git a/runtime/common/src/providers.rs b/runtime/common/src/providers.rs
index 504cf92f8..c947ce588 100644
--- a/runtime/common/src/providers.rs
+++ b/runtime/common/src/providers.rs
@@ -51,6 +51,7 @@ where
     fn get(key: &T::AccountId) -> FirstEligibleUd {
         pallet_identity::Pallet::<T>::get(key).first_eligible_ud
     }
+
     fn try_mutate_exists<R, E: From<sp_runtime::DispatchError>>(
         key: &T::AccountId,
         f: impl FnOnce(&mut Option<FirstEligibleUd>) -> Result<R, E>,
@@ -98,6 +99,7 @@ macro_rules! impl_benchmark_setup_handler {
             fn force_valid_distance_status(idty_id: &IdtyIndex) -> () {
                 let _ = pallet_distance::Pallet::<T>::do_valid_distance_status(*idty_id);
             }
+
             fn add_cert(issuer: &IdtyIndex, receiver: &IdtyIndex) {
                 let _ = pallet_certification::Pallet::<T>::do_add_cert_checked(
                     (*issuer).into(),
diff --git a/runtime/common/src/weights.rs b/runtime/common/src/weights.rs
index feb3b0eaa..1bf51bdbb 100644
--- a/runtime/common/src/weights.rs
+++ b/runtime/common/src/weights.rs
@@ -18,6 +18,7 @@
 #![allow(unused_parens)]
 #![allow(unused_imports)]
 #![allow(clippy::unnecessary_cast)]
+#![allow(unused_doc_comments)]
 
 pub mod block_weights;
 pub mod extrinsic_weights;
@@ -46,5 +47,6 @@ pub mod pallet_oneshot_account;
 pub mod pallet_certification;
 pub mod pallet_membership;
 pub mod pallet_smith_members;
+pub mod pallet_sudo;
 pub mod pallet_authority_members;
 pub mod paritydb_weights;
diff --git a/runtime/common/src/weights/block_weights.rs b/runtime/common/src/weights/block_weights.rs
index 30231d207..13709dc53 100644
--- a/runtime/common/src/weights/block_weights.rs
+++ b/runtime/common/src/weights/block_weights.rs
@@ -1,6 +1,6 @@
 
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2024-01-15 (Y/M/D)
+//! DATE: 2024-01-24 (Y/M/D)
 //! HOSTNAME: `bgallois-ms7d43`, CPU: `12th Gen Intel(R) Core(TM) i3-12100F`
 //!
 //! SHORT-NAME: `block`, LONG-NAME: `BlockExecution`, RUNTIME: `Äždev Local Testnet`
@@ -13,7 +13,6 @@
 //   benchmark
 //   overhead
 //   --chain=dev
-//   --execution=wasm
 //   --wasm-execution=compiled
 //   --weight-path=./runtime/common/src/weights/
 //   --warmup=10
@@ -27,17 +26,17 @@ parameter_types! {
 	/// Calculated by multiplying the *Average* with `1.0` and adding `0`.
 	///
 	/// Stats nanoseconds:
-	///   Min, Max: 143_797, 169_170
-	///   Average:  147_198
-	///   Median:   146_289
-	///   Std-Dev:  3315.16
+	///   Min, Max: 127_953, 157_199
+	///   Average:  136_253
+	///   Median:   134_999
+	///   Std-Dev:  4551.46
 	///
 	/// Percentiles nanoseconds:
-	///   99th: 157_051
-	///   95th: 152_313
-	///   75th: 147_656
+	///   99th: 155_010
+	///   95th: 145_334
+	///   75th: 136_845
 	pub const BlockExecutionWeight: Weight =
-		Weight::from_parts(WEIGHT_REF_TIME_PER_NANOS.saturating_mul(147_198), 0);
+		Weight::from_parts(WEIGHT_REF_TIME_PER_NANOS.saturating_mul(136_253), 0);
 }
 
 #[cfg(test)]
diff --git a/runtime/common/src/weights/extrinsic_weights.rs b/runtime/common/src/weights/extrinsic_weights.rs
index 99cd803d3..cbb74a089 100644
--- a/runtime/common/src/weights/extrinsic_weights.rs
+++ b/runtime/common/src/weights/extrinsic_weights.rs
@@ -1,6 +1,6 @@
 
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2024-01-15 (Y/M/D)
+//! DATE: 2024-01-24 (Y/M/D)
 //! HOSTNAME: `bgallois-ms7d43`, CPU: `12th Gen Intel(R) Core(TM) i3-12100F`
 //!
 //! SHORT-NAME: `extrinsic`, LONG-NAME: `ExtrinsicBase`, RUNTIME: `Äždev Local Testnet`
@@ -13,7 +13,6 @@
 //   benchmark
 //   overhead
 //   --chain=dev
-//   --execution=wasm
 //   --wasm-execution=compiled
 //   --weight-path=./runtime/common/src/weights/
 //   --warmup=10
@@ -27,17 +26,17 @@ parameter_types! {
 	/// Calculated by multiplying the *Average* with `1.0` and adding `0`.
 	///
 	/// Stats nanoseconds:
-	///   Min, Max: 86_213, 89_249
-	///   Average:  88_814
-	///   Median:   89_036
-	///   Std-Dev:  762.64
+	///   Min, Max: 70_783, 71_184
+	///   Average:  70_943
+	///   Median:   70_929
+	///   Std-Dev:  83.18
 	///
 	/// Percentiles nanoseconds:
-	///   99th: 89_245
-	///   95th: 89_207
-	///   75th: 89_105
+	///   99th: 71_160
+	///   95th: 71_090
+	///   75th: 70_988
 	pub const ExtrinsicBaseWeight: Weight =
-		Weight::from_parts(WEIGHT_REF_TIME_PER_NANOS.saturating_mul(88_814), 0);
+		Weight::from_parts(WEIGHT_REF_TIME_PER_NANOS.saturating_mul(70_943), 0);
 }
 
 #[cfg(test)]
diff --git a/runtime/common/src/weights/frame_benchmarking_baseline.rs b/runtime/common/src/weights/frame_benchmarking_baseline.rs
index 16f7bbd00..1c6d684c8 100644
--- a/runtime/common/src/weights/frame_benchmarking_baseline.rs
+++ b/runtime/common/src/weights/frame_benchmarking_baseline.rs
@@ -31,7 +31,6 @@
 // --repeat=2
 // --pallet=*
 // --extrinsic=*
-// --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --header=./file_header.txt
diff --git a/runtime/common/src/weights/frame_system.rs b/runtime/common/src/weights/frame_system.rs
index d445a4911..ca4024d06 100644
--- a/runtime/common/src/weights/frame_system.rs
+++ b/runtime/common/src/weights/frame_system.rs
@@ -31,7 +31,6 @@
 // --repeat=2
 // --pallet=*
 // --extrinsic=*
-// --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --header=./file_header.txt
@@ -70,10 +69,10 @@ impl<T: frame_system::Config> frame_system::WeightInfo for WeightInfo<T> {
 			// Standard Error: 145
 			.saturating_add(Weight::from_parts(1_760, 0).saturating_mul(b.into()))
 	}
-	/// Storage: System Digest (r:1 w:1)
-	/// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: unknown `0x3a686561707061676573` (r:0 w:1)
-	/// Proof Skipped: unknown `0x3a686561707061676573` (r:0 w:1)
+	/// Storage: `System::Digest` (r:1 w:1)
+	/// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1)
+	/// Proof: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1)
 	fn set_heap_pages() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
@@ -84,8 +83,22 @@ impl<T: frame_system::Config> frame_system::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(2))
 	}
-	/// Storage: Skipped Metadata (r:0 w:0)
-	/// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `System::Digest` (r:1 w:1)
+	/// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: UNKNOWN KEY `0x3a636f6465` (r:0 w:1)
+	/// Proof: UNKNOWN KEY `0x3a636f6465` (r:0 w:1)
+	fn set_code() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `0`
+		//  Estimated: `1485`
+		// Minimum execution time: 77_630_689_000 picoseconds.
+		Weight::from_parts(78_881_053_000, 0)
+			.saturating_add(Weight::from_parts(0, 1485))
+			.saturating_add(T::DbWeight::get().reads(1))
+			.saturating_add(T::DbWeight::get().writes(2))
+	}
+	/// Storage: `Skipped::Metadata` (r:0 w:0)
+	/// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	/// The range of component `i` is `[0, 1000]`.
 	fn set_storage(i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
@@ -98,8 +111,8 @@ impl<T: frame_system::Config> frame_system::WeightInfo for WeightInfo<T> {
 			.saturating_add(Weight::from_parts(1_380_876, 0).saturating_mul(i.into()))
 			.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into())))
 	}
-	/// Storage: Skipped Metadata (r:0 w:0)
-	/// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `Skipped::Metadata` (r:0 w:0)
+	/// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	/// The range of component `i` is `[0, 1000]`.
 	fn kill_storage(i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
@@ -112,8 +125,8 @@ impl<T: frame_system::Config> frame_system::WeightInfo for WeightInfo<T> {
 			.saturating_add(Weight::from_parts(841_068, 0).saturating_mul(i.into()))
 			.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into())))
 	}
-	/// Storage: Skipped Metadata (r:0 w:0)
-	/// Proof Skipped: Skipped Metadata (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `Skipped::Metadata` (r:0 w:0)
+	/// Proof: `Skipped::Metadata` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	/// The range of component `p` is `[0, 1000]`.
 	fn kill_prefix(p: u32, ) -> Weight {
 		// Proof Size summary in bytes:
@@ -128,4 +141,31 @@ impl<T: frame_system::Config> frame_system::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into())))
 			.saturating_add(Weight::from_parts(0, 70).saturating_mul(p.into()))
 	}
+	/// Storage: `System::AuthorizedUpgrade` (r:0 w:1)
+	/// Proof: `System::AuthorizedUpgrade` (`max_values`: Some(1), `max_size`: Some(33), added: 528, mode: `MaxEncodedLen`)
+	fn authorize_upgrade() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `0`
+		//  Estimated: `0`
+		// Minimum execution time: 7_879_000 picoseconds.
+		Weight::from_parts(8_896_000, 0)
+			.saturating_add(Weight::from_parts(0, 0))
+			.saturating_add(T::DbWeight::get().writes(1))
+	}
+	/// Storage: `System::AuthorizedUpgrade` (r:1 w:1)
+	/// Proof: `System::AuthorizedUpgrade` (`max_values`: Some(1), `max_size`: Some(33), added: 528, mode: `MaxEncodedLen`)
+	/// Storage: `System::Digest` (r:1 w:1)
+	/// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: UNKNOWN KEY `0x3a636f6465` (r:0 w:1)
+	/// Proof: UNKNOWN KEY `0x3a636f6465` (r:0 w:1)
+	fn apply_authorized_upgrade() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `22`
+		//  Estimated: `1518`
+		// Minimum execution time: 81_052_498_000 picoseconds.
+		Weight::from_parts(81_887_122_000, 0)
+			.saturating_add(Weight::from_parts(0, 1518))
+			.saturating_add(T::DbWeight::get().reads(2))
+			.saturating_add(T::DbWeight::get().writes(3))
+	}
 }
diff --git a/runtime/common/src/weights/pallet_authority_members.rs b/runtime/common/src/weights/pallet_authority_members.rs
index 505b818d8..59950c97f 100644
--- a/runtime/common/src/weights/pallet_authority_members.rs
+++ b/runtime/common/src/weights/pallet_authority_members.rs
@@ -31,7 +31,6 @@
 // --repeat=2
 // --pallet=*
 // --extrinsic=*
-// --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --header=./file_header.txt
@@ -48,18 +47,18 @@ use core::marker::PhantomData;
 /// Weight functions for `pallet_authority_members`.
 pub struct WeightInfo<T>(PhantomData<T>);
 impl<T: frame_system::Config> pallet_authority_members::WeightInfo for WeightInfo<T> {
-	/// Storage: Identity IdentityIndexOf (r:1 w:0)
-	/// Proof Skipped: Identity IdentityIndexOf (max_values: None, max_size: None, mode: Measured)
-	/// Storage: SmithMembers Smiths (r:1 w:0)
-	/// Proof Skipped: SmithMembers Smiths (max_values: None, max_size: None, mode: Measured)
-	/// Storage: AuthorityMembers Members (r:1 w:0)
-	/// Proof Skipped: AuthorityMembers Members (max_values: None, max_size: None, mode: Measured)
-	/// Storage: AuthorityMembers OutgoingAuthorities (r:1 w:1)
-	/// Proof Skipped: AuthorityMembers OutgoingAuthorities (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: AuthorityMembers IncomingAuthorities (r:1 w:0)
-	/// Proof Skipped: AuthorityMembers IncomingAuthorities (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: AuthorityMembers OnlineAuthorities (r:1 w:0)
-	/// Proof Skipped: AuthorityMembers OnlineAuthorities (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: `Identity::IdentityIndexOf` (r:1 w:0)
+	/// Proof: `Identity::IdentityIndexOf` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `SmithMembers::Smiths` (r:1 w:0)
+	/// Proof: `SmithMembers::Smiths` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `AuthorityMembers::Members` (r:1 w:0)
+	/// Proof: `AuthorityMembers::Members` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `AuthorityMembers::OutgoingAuthorities` (r:1 w:1)
+	/// Proof: `AuthorityMembers::OutgoingAuthorities` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `AuthorityMembers::IncomingAuthorities` (r:1 w:0)
+	/// Proof: `AuthorityMembers::IncomingAuthorities` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `AuthorityMembers::OnlineAuthorities` (r:1 w:0)
+	/// Proof: `AuthorityMembers::OnlineAuthorities` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
 	fn go_offline() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `717`
@@ -70,22 +69,22 @@ impl<T: frame_system::Config> pallet_authority_members::WeightInfo for WeightInf
 			.saturating_add(T::DbWeight::get().reads(6))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Identity IdentityIndexOf (r:1 w:0)
-	/// Proof Skipped: Identity IdentityIndexOf (max_values: None, max_size: None, mode: Measured)
-	/// Storage: SmithMembers Smiths (r:1 w:0)
-	/// Proof Skipped: SmithMembers Smiths (max_values: None, max_size: None, mode: Measured)
-	/// Storage: AuthorityMembers Blacklist (r:1 w:0)
-	/// Proof Skipped: AuthorityMembers Blacklist (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: AuthorityMembers Members (r:1 w:0)
-	/// Proof Skipped: AuthorityMembers Members (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Session NextKeys (r:1 w:0)
-	/// Proof Skipped: Session NextKeys (max_values: None, max_size: None, mode: Measured)
-	/// Storage: AuthorityMembers IncomingAuthorities (r:1 w:1)
-	/// Proof Skipped: AuthorityMembers IncomingAuthorities (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: AuthorityMembers OutgoingAuthorities (r:1 w:0)
-	/// Proof Skipped: AuthorityMembers OutgoingAuthorities (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: AuthorityMembers OnlineAuthorities (r:1 w:0)
-	/// Proof Skipped: AuthorityMembers OnlineAuthorities (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: `Identity::IdentityIndexOf` (r:1 w:0)
+	/// Proof: `Identity::IdentityIndexOf` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `SmithMembers::Smiths` (r:1 w:0)
+	/// Proof: `SmithMembers::Smiths` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `AuthorityMembers::Blacklist` (r:1 w:0)
+	/// Proof: `AuthorityMembers::Blacklist` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `AuthorityMembers::Members` (r:1 w:0)
+	/// Proof: `AuthorityMembers::Members` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Session::NextKeys` (r:1 w:0)
+	/// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `AuthorityMembers::IncomingAuthorities` (r:1 w:1)
+	/// Proof: `AuthorityMembers::IncomingAuthorities` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `AuthorityMembers::OutgoingAuthorities` (r:1 w:0)
+	/// Proof: `AuthorityMembers::OutgoingAuthorities` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `AuthorityMembers::OnlineAuthorities` (r:1 w:0)
+	/// Proof: `AuthorityMembers::OnlineAuthorities` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
 	fn go_online() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `1108`
@@ -96,18 +95,18 @@ impl<T: frame_system::Config> pallet_authority_members::WeightInfo for WeightInf
 			.saturating_add(T::DbWeight::get().reads(8))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Identity IdentityIndexOf (r:1 w:0)
-	/// Proof Skipped: Identity IdentityIndexOf (max_values: None, max_size: None, mode: Measured)
-	/// Storage: SmithMembers Smiths (r:1 w:0)
-	/// Proof Skipped: SmithMembers Smiths (max_values: None, max_size: None, mode: Measured)
-	/// Storage: System Account (r:1 w:0)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
-	/// Storage: Session NextKeys (r:1 w:1)
-	/// Proof Skipped: Session NextKeys (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Session KeyOwner (r:4 w:0)
-	/// Proof Skipped: Session KeyOwner (max_values: None, max_size: None, mode: Measured)
-	/// Storage: AuthorityMembers Members (r:0 w:1)
-	/// Proof Skipped: AuthorityMembers Members (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `Identity::IdentityIndexOf` (r:1 w:0)
+	/// Proof: `Identity::IdentityIndexOf` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `SmithMembers::Smiths` (r:1 w:0)
+	/// Proof: `SmithMembers::Smiths` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `System::Account` (r:1 w:0)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
+	/// Storage: `Session::NextKeys` (r:1 w:1)
+	/// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Session::KeyOwner` (r:4 w:0)
+	/// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `AuthorityMembers::Members` (r:0 w:1)
+	/// Proof: `AuthorityMembers::Members` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn set_session_keys() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `1512`
@@ -118,20 +117,20 @@ impl<T: frame_system::Config> pallet_authority_members::WeightInfo for WeightInf
 			.saturating_add(T::DbWeight::get().reads(8))
 			.saturating_add(T::DbWeight::get().writes(2))
 	}
-	/// Storage: AuthorityMembers Members (r:1 w:1)
-	/// Proof Skipped: AuthorityMembers Members (max_values: None, max_size: None, mode: Measured)
-	/// Storage: AuthorityMembers OnlineAuthorities (r:1 w:1)
-	/// Proof Skipped: AuthorityMembers OnlineAuthorities (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: AuthorityMembers OutgoingAuthorities (r:1 w:1)
-	/// Proof Skipped: AuthorityMembers OutgoingAuthorities (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: AuthorityMembers IncomingAuthorities (r:1 w:1)
-	/// Proof Skipped: AuthorityMembers IncomingAuthorities (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: Session NextKeys (r:1 w:1)
-	/// Proof Skipped: Session NextKeys (max_values: None, max_size: None, mode: Measured)
-	/// Storage: System Account (r:1 w:1)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
-	/// Storage: Session KeyOwner (r:0 w:4)
-	/// Proof Skipped: Session KeyOwner (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `AuthorityMembers::Members` (r:1 w:1)
+	/// Proof: `AuthorityMembers::Members` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `AuthorityMembers::OnlineAuthorities` (r:1 w:1)
+	/// Proof: `AuthorityMembers::OnlineAuthorities` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `AuthorityMembers::OutgoingAuthorities` (r:1 w:1)
+	/// Proof: `AuthorityMembers::OutgoingAuthorities` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `AuthorityMembers::IncomingAuthorities` (r:1 w:1)
+	/// Proof: `AuthorityMembers::IncomingAuthorities` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `Session::NextKeys` (r:1 w:1)
+	/// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `System::Account` (r:1 w:1)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
+	/// Storage: `Session::KeyOwner` (r:0 w:4)
+	/// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn remove_member() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `750`
@@ -142,8 +141,8 @@ impl<T: frame_system::Config> pallet_authority_members::WeightInfo for WeightInf
 			.saturating_add(T::DbWeight::get().reads(6))
 			.saturating_add(T::DbWeight::get().writes(10))
 	}
-	/// Storage: AuthorityMembers Blacklist (r:1 w:1)
-	/// Proof Skipped: AuthorityMembers Blacklist (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: `AuthorityMembers::Blacklist` (r:1 w:1)
+	/// Proof: `AuthorityMembers::Blacklist` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
 	fn remove_member_from_blacklist() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `199`
diff --git a/runtime/common/src/weights/pallet_babe.rs b/runtime/common/src/weights/pallet_babe.rs
index ea526bb2e..caa37df09 100644
--- a/runtime/common/src/weights/pallet_babe.rs
+++ b/runtime/common/src/weights/pallet_babe.rs
@@ -33,7 +33,7 @@ impl<T: frame_system::Config> pallet_babe::WeightInfo for WeightInfo<T> {
         T::DbWeight::get().writes(1)
     }
 
-    fn report_equivocation(validator_count: u32) -> Weight {
+    fn report_equivocation(validator_count: u32, _p: u32) -> Weight {
         // we take the validator set count from the membership proof to
         // calculate the weight but we set a floor of 100 validators.
         let validator_count = validator_count.max(100) as u64;
diff --git a/runtime/common/src/weights/pallet_balances.rs b/runtime/common/src/weights/pallet_balances.rs
index d274a3ebd..20d538cb4 100644
--- a/runtime/common/src/weights/pallet_balances.rs
+++ b/runtime/common/src/weights/pallet_balances.rs
@@ -31,7 +31,6 @@
 // --repeat=2
 // --pallet=*
 // --extrinsic=*
-// --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --header=./file_header.txt
@@ -48,10 +47,10 @@ use core::marker::PhantomData;
 /// Weight functions for `pallet_balances`.
 pub struct WeightInfo<T>(PhantomData<T>);
 impl<T: frame_system::Config> pallet_balances::WeightInfo for WeightInfo<T> {
-	/// Storage: System Account (r:1 w:1)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
-	/// Storage: Account PendingNewAccounts (r:0 w:1)
-	/// Proof Skipped: Account PendingNewAccounts (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `System::Account` (r:2 w:2)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
+	/// Storage: `Account::PendingNewAccounts` (r:0 w:1)
+	/// Proof: `Account::PendingNewAccounts` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn transfer_allow_death() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
@@ -76,60 +75,60 @@ impl<T: frame_system::Config> pallet_balances::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(2))
 	}
-	/// Storage: System Account (r:1 w:1)
+	/// Storage: System Account (r:2 w:2)
 	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
+	/// Storage: Account PendingNewAccounts (r:0 w:1)
+	/// Proof Skipped: Account PendingNewAccounts (max_values: None, max_size: None, mode: Measured)
+	fn force_transfer() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `64`
+		//  Estimated: `6192`
+		// Minimum execution time: 105_518_000 picoseconds.
+		Weight::from_parts(226_206_000, 0)
+			.saturating_add(Weight::from_parts(0, 6192))
+			.saturating_add(T::DbWeight::get().reads(2))
+			.saturating_add(T::DbWeight::get().writes(3))
+	}
+	/// Storage: `System::Account` (r:1 w:1)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
 	fn force_set_balance_creating() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `101`
 		//  Estimated: `3591`
-		// Minimum execution time: 27_197_000 picoseconds.
-		Weight::from_parts(30_641_000, 0)
+		// Minimum execution time: 9_693_000 picoseconds.
+		Weight::from_parts(10_211_000, 0)
 			.saturating_add(Weight::from_parts(0, 3591))
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: System Account (r:1 w:1)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
+	/// Storage: `System::Account` (r:1 w:1)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
 	fn force_set_balance_killing() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `101`
 		//  Estimated: `3591`
-		// Minimum execution time: 38_585_000 picoseconds.
-		Weight::from_parts(42_563_000, 0)
+		// Minimum execution time: 14_040_000 picoseconds.
+		Weight::from_parts(14_480_000, 0)
 			.saturating_add(Weight::from_parts(0, 3591))
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: System Account (r:2 w:2)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
-	/// Storage: Account PendingNewAccounts (r:0 w:1)
-	/// Proof Skipped: Account PendingNewAccounts (max_values: None, max_size: None, mode: Measured)
-	fn force_transfer() -> Weight {
-		// Proof Size summary in bytes:
-		//  Measured:  `64`
-		//  Estimated: `6192`
-		// Minimum execution time: 105_518_000 picoseconds.
-		Weight::from_parts(226_206_000, 0)
-			.saturating_add(Weight::from_parts(0, 6192))
-			.saturating_add(T::DbWeight::get().reads(2))
-			.saturating_add(T::DbWeight::get().writes(3))
-	}
-	/// Storage: System Account (r:1 w:1)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
-	/// Storage: Account PendingNewAccounts (r:0 w:1)
-	/// Proof Skipped: Account PendingNewAccounts (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `System::Account` (r:1 w:1)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
+	/// Storage: `Account::PendingNewAccounts` (r:0 w:1)
+	/// Proof: `Account::PendingNewAccounts` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn transfer_all() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `3591`
-		// Minimum execution time: 81_086_000 picoseconds.
-		Weight::from_parts(84_267_000, 0)
+		// Minimum execution time: 38_912_000 picoseconds.
+		Weight::from_parts(40_985_000, 0)
 			.saturating_add(Weight::from_parts(0, 3591))
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(2))
 	}
-	/// Storage: System Account (r:1 w:1)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
+	/// Storage: `System::Account` (r:1 w:1)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
 	fn force_unreserve() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `101`
diff --git a/runtime/common/src/weights/pallet_certification.rs b/runtime/common/src/weights/pallet_certification.rs
index 467920334..948c3caf2 100644
--- a/runtime/common/src/weights/pallet_certification.rs
+++ b/runtime/common/src/weights/pallet_certification.rs
@@ -31,7 +31,6 @@
 // --repeat=2
 // --pallet=*
 // --extrinsic=*
-// --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --header=./file_header.txt
diff --git a/runtime/common/src/weights/pallet_collective.rs b/runtime/common/src/weights/pallet_collective.rs
index cf7b510b8..3aa7a37d9 100644
--- a/runtime/common/src/weights/pallet_collective.rs
+++ b/runtime/common/src/weights/pallet_collective.rs
@@ -31,7 +31,6 @@
 // --repeat=2
 // --pallet=*
 // --extrinsic=*
-// --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --header=./file_header.txt
@@ -48,14 +47,14 @@ use core::marker::PhantomData;
 /// Weight functions for `pallet_collective`.
 pub struct WeightInfo<T>(PhantomData<T>);
 impl<T: frame_system::Config> pallet_collective::WeightInfo for WeightInfo<T> {
-	/// Storage: TechnicalCommittee Members (r:1 w:1)
-	/// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: TechnicalCommittee Proposals (r:1 w:0)
-	/// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: TechnicalCommittee Voting (r:20 w:20)
-	/// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured)
-	/// Storage: TechnicalCommittee Prime (r:0 w:1)
-	/// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: `TechnicalCommittee::Members` (r:1 w:1)
+	/// Proof: `TechnicalCommittee::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `TechnicalCommittee::Proposals` (r:1 w:0)
+	/// Proof: `TechnicalCommittee::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `TechnicalCommittee::Voting` (r:20 w:20)
+	/// Proof: `TechnicalCommittee::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `TechnicalCommittee::Prime` (r:0 w:1)
+	/// Proof: `TechnicalCommittee::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
 	/// The range of component `m` is `[0, 100]`.
 	/// The range of component `n` is `[0, 100]`.
 	/// The range of component `p` is `[0, 20]`.
@@ -77,8 +76,8 @@ impl<T: frame_system::Config> pallet_collective::WeightInfo for WeightInfo<T> {
 			.saturating_add(Weight::from_parts(0, 9624).saturating_mul(m.into()))
 			.saturating_add(Weight::from_parts(0, 1918).saturating_mul(p.into()))
 	}
-	/// Storage: TechnicalCommittee Members (r:1 w:0)
-	/// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: `TechnicalCommittee::Members` (r:1 w:0)
+	/// Proof: `TechnicalCommittee::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
 	/// The range of component `b` is `[2, 1024]`.
 	/// The range of component `m` is `[1, 100]`.
 	fn execute(b: u32, m: u32, ) -> Weight {
@@ -95,10 +94,10 @@ impl<T: frame_system::Config> pallet_collective::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into()))
 	}
-	/// Storage: TechnicalCommittee Members (r:1 w:0)
-	/// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: TechnicalCommittee ProposalOf (r:1 w:0)
-	/// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `TechnicalCommittee::Members` (r:1 w:0)
+	/// Proof: `TechnicalCommittee::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `TechnicalCommittee::ProposalOf` (r:1 w:0)
+	/// Proof: `TechnicalCommittee::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	/// The range of component `b` is `[2, 1024]`.
 	/// The range of component `m` is `[1, 100]`.
 	fn propose_execute(b: u32, m: u32, ) -> Weight {
@@ -115,16 +114,16 @@ impl<T: frame_system::Config> pallet_collective::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into()))
 	}
-	/// Storage: TechnicalCommittee Members (r:1 w:0)
-	/// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: TechnicalCommittee ProposalOf (r:1 w:1)
-	/// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured)
-	/// Storage: TechnicalCommittee Proposals (r:1 w:1)
-	/// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: TechnicalCommittee ProposalCount (r:1 w:1)
-	/// Proof Skipped: TechnicalCommittee ProposalCount (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: TechnicalCommittee Voting (r:0 w:1)
-	/// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `TechnicalCommittee::Members` (r:1 w:0)
+	/// Proof: `TechnicalCommittee::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `TechnicalCommittee::ProposalOf` (r:1 w:1)
+	/// Proof: `TechnicalCommittee::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `TechnicalCommittee::Proposals` (r:1 w:1)
+	/// Proof: `TechnicalCommittee::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `TechnicalCommittee::ProposalCount` (r:1 w:1)
+	/// Proof: `TechnicalCommittee::ProposalCount` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `TechnicalCommittee::Voting` (r:0 w:1)
+	/// Proof: `TechnicalCommittee::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	/// The range of component `b` is `[2, 1024]`.
 	/// The range of component `m` is `[2, 100]`.
 	/// The range of component `p` is `[1, 20]`.
@@ -144,10 +143,10 @@ impl<T: frame_system::Config> pallet_collective::WeightInfo for WeightInfo<T> {
 			.saturating_add(Weight::from_parts(0, 32).saturating_mul(m.into()))
 			.saturating_add(Weight::from_parts(0, 58).saturating_mul(p.into()))
 	}
-	/// Storage: TechnicalCommittee Members (r:1 w:0)
-	/// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: TechnicalCommittee Voting (r:1 w:1)
-	/// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `TechnicalCommittee::Members` (r:1 w:0)
+	/// Proof: `TechnicalCommittee::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `TechnicalCommittee::Voting` (r:1 w:1)
+	/// Proof: `TechnicalCommittee::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	/// The range of component `m` is `[5, 100]`.
 	fn vote(m: u32, ) -> Weight {
 		// Proof Size summary in bytes:
@@ -160,14 +159,14 @@ impl<T: frame_system::Config> pallet_collective::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().writes(1))
 			.saturating_add(Weight::from_parts(0, 64).saturating_mul(m.into()))
 	}
-	/// Storage: TechnicalCommittee Voting (r:1 w:1)
-	/// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured)
-	/// Storage: TechnicalCommittee Members (r:1 w:0)
-	/// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: TechnicalCommittee Proposals (r:1 w:1)
-	/// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: TechnicalCommittee ProposalOf (r:0 w:1)
-	/// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `TechnicalCommittee::Voting` (r:1 w:1)
+	/// Proof: `TechnicalCommittee::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `TechnicalCommittee::Members` (r:1 w:0)
+	/// Proof: `TechnicalCommittee::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `TechnicalCommittee::Proposals` (r:1 w:1)
+	/// Proof: `TechnicalCommittee::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `TechnicalCommittee::ProposalOf` (r:0 w:1)
+	/// Proof: `TechnicalCommittee::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	/// The range of component `m` is `[4, 100]`.
 	/// The range of component `p` is `[1, 20]`.
 	fn close_early_disapproved(m: u32, p: u32, ) -> Weight {
@@ -184,14 +183,14 @@ impl<T: frame_system::Config> pallet_collective::WeightInfo for WeightInfo<T> {
 			.saturating_add(Weight::from_parts(0, 64).saturating_mul(m.into()))
 			.saturating_add(Weight::from_parts(0, 55).saturating_mul(p.into()))
 	}
-	/// Storage: TechnicalCommittee Voting (r:1 w:1)
-	/// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured)
-	/// Storage: TechnicalCommittee Members (r:1 w:0)
-	/// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: TechnicalCommittee ProposalOf (r:1 w:1)
-	/// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured)
-	/// Storage: TechnicalCommittee Proposals (r:1 w:1)
-	/// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: `TechnicalCommittee::Voting` (r:1 w:1)
+	/// Proof: `TechnicalCommittee::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `TechnicalCommittee::Members` (r:1 w:0)
+	/// Proof: `TechnicalCommittee::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `TechnicalCommittee::ProposalOf` (r:1 w:1)
+	/// Proof: `TechnicalCommittee::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `TechnicalCommittee::Proposals` (r:1 w:1)
+	/// Proof: `TechnicalCommittee::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
 	/// The range of component `b` is `[2, 1024]`.
 	/// The range of component `m` is `[4, 100]`.
 	/// The range of component `p` is `[1, 20]`.
@@ -212,16 +211,16 @@ impl<T: frame_system::Config> pallet_collective::WeightInfo for WeightInfo<T> {
 			.saturating_add(Weight::from_parts(0, 64).saturating_mul(m.into()))
 			.saturating_add(Weight::from_parts(0, 79).saturating_mul(p.into()))
 	}
-	/// Storage: TechnicalCommittee Voting (r:1 w:1)
-	/// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured)
-	/// Storage: TechnicalCommittee Members (r:1 w:0)
-	/// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: TechnicalCommittee Prime (r:1 w:0)
-	/// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: TechnicalCommittee Proposals (r:1 w:1)
-	/// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: TechnicalCommittee ProposalOf (r:0 w:1)
-	/// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `TechnicalCommittee::Voting` (r:1 w:1)
+	/// Proof: `TechnicalCommittee::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `TechnicalCommittee::Members` (r:1 w:0)
+	/// Proof: `TechnicalCommittee::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `TechnicalCommittee::Prime` (r:1 w:0)
+	/// Proof: `TechnicalCommittee::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `TechnicalCommittee::Proposals` (r:1 w:1)
+	/// Proof: `TechnicalCommittee::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `TechnicalCommittee::ProposalOf` (r:0 w:1)
+	/// Proof: `TechnicalCommittee::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	/// The range of component `m` is `[4, 100]`.
 	/// The range of component `p` is `[1, 20]`.
 	fn close_disapproved(m: u32, p: u32, ) -> Weight {
@@ -240,16 +239,16 @@ impl<T: frame_system::Config> pallet_collective::WeightInfo for WeightInfo<T> {
 			.saturating_add(Weight::from_parts(0, 64).saturating_mul(m.into()))
 			.saturating_add(Weight::from_parts(0, 55).saturating_mul(p.into()))
 	}
-	/// Storage: TechnicalCommittee Voting (r:1 w:1)
-	/// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured)
-	/// Storage: TechnicalCommittee Members (r:1 w:0)
-	/// Proof Skipped: TechnicalCommittee Members (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: TechnicalCommittee Prime (r:1 w:0)
-	/// Proof Skipped: TechnicalCommittee Prime (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: TechnicalCommittee ProposalOf (r:1 w:1)
-	/// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured)
-	/// Storage: TechnicalCommittee Proposals (r:1 w:1)
-	/// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: `TechnicalCommittee::Voting` (r:1 w:1)
+	/// Proof: `TechnicalCommittee::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `TechnicalCommittee::Members` (r:1 w:0)
+	/// Proof: `TechnicalCommittee::Members` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `TechnicalCommittee::Prime` (r:1 w:0)
+	/// Proof: `TechnicalCommittee::Prime` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `TechnicalCommittee::ProposalOf` (r:1 w:1)
+	/// Proof: `TechnicalCommittee::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `TechnicalCommittee::Proposals` (r:1 w:1)
+	/// Proof: `TechnicalCommittee::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
 	/// The range of component `b` is `[2, 1024]`.
 	/// The range of component `m` is `[4, 100]`.
 	/// The range of component `p` is `[1, 20]`.
@@ -268,12 +267,12 @@ impl<T: frame_system::Config> pallet_collective::WeightInfo for WeightInfo<T> {
 			.saturating_add(Weight::from_parts(0, 64).saturating_mul(m.into()))
 			.saturating_add(Weight::from_parts(0, 79).saturating_mul(p.into()))
 	}
-	/// Storage: TechnicalCommittee Proposals (r:1 w:1)
-	/// Proof Skipped: TechnicalCommittee Proposals (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: TechnicalCommittee Voting (r:0 w:1)
-	/// Proof Skipped: TechnicalCommittee Voting (max_values: None, max_size: None, mode: Measured)
-	/// Storage: TechnicalCommittee ProposalOf (r:0 w:1)
-	/// Proof Skipped: TechnicalCommittee ProposalOf (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `TechnicalCommittee::Proposals` (r:1 w:1)
+	/// Proof: `TechnicalCommittee::Proposals` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `TechnicalCommittee::Voting` (r:0 w:1)
+	/// Proof: `TechnicalCommittee::Voting` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `TechnicalCommittee::ProposalOf` (r:0 w:1)
+	/// Proof: `TechnicalCommittee::ProposalOf` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	/// The range of component `p` is `[1, 20]`.
 	fn disapprove_proposal(p: u32, ) -> Weight {
 		// Proof Size summary in bytes:
diff --git a/runtime/common/src/weights/pallet_distance.rs b/runtime/common/src/weights/pallet_distance.rs
index 52551ece6..b930f6744 100644
--- a/runtime/common/src/weights/pallet_distance.rs
+++ b/runtime/common/src/weights/pallet_distance.rs
@@ -19,8 +19,8 @@
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
 //! DATE: 2024-01-22, STEPS: `2`, REPEAT: `2`, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! WORST CASE MAP SIZE: `1000000`
-//! HOSTNAME: `squirrel`, CPU: `Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz`
-//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024
+//! HOSTNAME: `bgallois-ms7d43`, CPU: `12th Gen Intel(R) Core(TM) i3-12100F`
+//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: 1024
 
 // Executed Command:
 // ./target/release/duniter
@@ -31,7 +31,6 @@
 // --repeat=2
 // --pallet=*
 // --extrinsic=*
-// --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --header=./file_header.txt
@@ -104,18 +103,18 @@ impl<T: frame_system::Config> pallet_distance::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(10))
 			.saturating_add(T::DbWeight::get().writes(3))
 	}
-	/// Storage: Distance DidUpdate (r:1 w:1)
-	/// Proof Skipped: Distance DidUpdate (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: Authorship Author (r:1 w:1)
-	/// Proof: Authorship Author (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen)
-	/// Storage: System Digest (r:1 w:0)
-	/// Proof Skipped: System Digest (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: Session Validators (r:1 w:0)
-	/// Proof Skipped: Session Validators (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: Session CurrentIndex (r:1 w:0)
-	/// Proof Skipped: Session CurrentIndex (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: Distance EvaluationPool0 (r:1 w:1)
-	/// Proof Skipped: Distance EvaluationPool0 (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: `Distance::DidUpdate` (r:1 w:1)
+	/// Proof: `Distance::DidUpdate` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `Authorship::Author` (r:1 w:1)
+	/// Proof: `Authorship::Author` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`)
+	/// Storage: `System::Digest` (r:1 w:0)
+	/// Proof: `System::Digest` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `Session::Validators` (r:1 w:0)
+	/// Proof: `Session::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `Session::CurrentIndex` (r:1 w:0)
+	/// Proof: `Session::CurrentIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `Distance::EvaluationPool0` (r:1 w:1)
+	/// Proof: `Distance::EvaluationPool0` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
 	/// The range of component `i` is `[1, 600]`.
 	fn update_evaluation(i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
@@ -130,10 +129,10 @@ impl<T: frame_system::Config> pallet_distance::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().writes(3))
 			.saturating_add(Weight::from_parts(0, 10).saturating_mul(i.into()))
 	}
-	/// Storage: Session CurrentIndex (r:1 w:0)
-	/// Proof Skipped: Session CurrentIndex (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: Distance EvaluationPool0 (r:1 w:1)
-	/// Proof Skipped: Distance EvaluationPool0 (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: `Session::CurrentIndex` (r:1 w:0)
+	/// Proof: `Session::CurrentIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `Distance::EvaluationPool0` (r:1 w:1)
+	/// Proof: `Distance::EvaluationPool0` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
 	/// The range of component `i` is `[1, 600]`.
 	fn force_update_evaluation(i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
@@ -166,8 +165,8 @@ impl<T: frame_system::Config> pallet_distance::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(5))
 			.saturating_add(T::DbWeight::get().writes(3))
 	}
-	/// Storage: Distance DidUpdate (r:1 w:1)
-	/// Proof Skipped: Distance DidUpdate (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: `Distance::DidUpdate` (r:1 w:1)
+	/// Proof: `Distance::DidUpdate` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
 	fn on_finalize() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `170`
diff --git a/runtime/common/src/weights/pallet_duniter_account.rs b/runtime/common/src/weights/pallet_duniter_account.rs
index 6a911afdf..797603e66 100644
--- a/runtime/common/src/weights/pallet_duniter_account.rs
+++ b/runtime/common/src/weights/pallet_duniter_account.rs
@@ -31,7 +31,6 @@
 // --repeat=2
 // --pallet=*
 // --extrinsic=*
-// --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --header=./file_header.txt
@@ -48,8 +47,8 @@ use core::marker::PhantomData;
 /// Weight functions for `pallet_duniter_account`.
 pub struct WeightInfo<T>(PhantomData<T>);
 impl<T: frame_system::Config> pallet_duniter_account::WeightInfo for WeightInfo<T> {
-	/// Storage: System Account (r:1 w:1)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
+	/// Storage: `System::Account` (r:1 w:1)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
 	fn unlink_identity() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
@@ -60,22 +59,22 @@ impl<T: frame_system::Config> pallet_duniter_account::WeightInfo for WeightInfo<
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Account PendingNewAccounts (r:1 w:1)
-	/// Proof Skipped: Account PendingNewAccounts (max_values: None, max_size: None, mode: Measured)
-	/// Storage: ProvideRandomness RequestIdProvider (r:1 w:1)
-	/// Proof Skipped: ProvideRandomness RequestIdProvider (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: ProvideRandomness RequestsIds (r:1 w:1)
-	/// Proof Skipped: ProvideRandomness RequestsIds (max_values: None, max_size: None, mode: Measured)
-	/// Storage: ProvideRandomness CounterForRequestsIds (r:1 w:1)
-	/// Proof: ProvideRandomness CounterForRequestsIds (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen)
-	/// Storage: Babe EpochIndex (r:1 w:0)
-	/// Proof: Babe EpochIndex (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen)
-	/// Storage: ProvideRandomness NexEpochHookIn (r:1 w:0)
-	/// Proof Skipped: ProvideRandomness NexEpochHookIn (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: ProvideRandomness RequestsReadyAtEpoch (r:1 w:1)
-	/// Proof Skipped: ProvideRandomness RequestsReadyAtEpoch (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Account PendingRandomIdAssignments (r:0 w:1)
-	/// Proof Skipped: Account PendingRandomIdAssignments (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `Account::PendingNewAccounts` (r:1 w:1)
+	/// Proof: `Account::PendingNewAccounts` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `ProvideRandomness::RequestIdProvider` (r:1 w:1)
+	/// Proof: `ProvideRandomness::RequestIdProvider` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `ProvideRandomness::RequestsIds` (r:1 w:1)
+	/// Proof: `ProvideRandomness::RequestsIds` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `ProvideRandomness::CounterForRequestsIds` (r:1 w:1)
+	/// Proof: `ProvideRandomness::CounterForRequestsIds` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
+	/// Storage: `Babe::EpochIndex` (r:1 w:0)
+	/// Proof: `Babe::EpochIndex` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
+	/// Storage: `ProvideRandomness::NexEpochHookIn` (r:1 w:0)
+	/// Proof: `ProvideRandomness::NexEpochHookIn` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `ProvideRandomness::RequestsReadyAtEpoch` (r:1 w:1)
+	/// Proof: `ProvideRandomness::RequestsReadyAtEpoch` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Account::PendingRandomIdAssignments` (r:0 w:1)
+	/// Proof: `Account::PendingRandomIdAssignments` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	/// The range of component `i` is `[0, 1]`.
 	fn on_initialize_sufficient(i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
@@ -91,22 +90,24 @@ impl<T: frame_system::Config> pallet_duniter_account::WeightInfo for WeightInfo<
 			.saturating_add(T::DbWeight::get().writes((6_u64).saturating_mul(i.into())))
 			.saturating_add(Weight::from_parts(0, 309).saturating_mul(i.into()))
 	}
-	/// Storage: Account PendingNewAccounts (r:1 w:1)
-	/// Proof Skipped: Account PendingNewAccounts (max_values: None, max_size: None, mode: Measured)
-	/// Storage: ProvideRandomness RequestIdProvider (r:1 w:1)
-	/// Proof Skipped: ProvideRandomness RequestIdProvider (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: ProvideRandomness RequestsIds (r:1 w:1)
-	/// Proof Skipped: ProvideRandomness RequestsIds (max_values: None, max_size: None, mode: Measured)
-	/// Storage: ProvideRandomness CounterForRequestsIds (r:1 w:1)
-	/// Proof: ProvideRandomness CounterForRequestsIds (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen)
-	/// Storage: Babe EpochIndex (r:1 w:0)
-	/// Proof: Babe EpochIndex (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen)
-	/// Storage: ProvideRandomness NexEpochHookIn (r:1 w:0)
-	/// Proof Skipped: ProvideRandomness NexEpochHookIn (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: ProvideRandomness RequestsReadyAtEpoch (r:1 w:1)
-	/// Proof Skipped: ProvideRandomness RequestsReadyAtEpoch (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Account PendingRandomIdAssignments (r:0 w:1)
-	/// Proof Skipped: Account PendingRandomIdAssignments (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `Account::PendingNewAccounts` (r:1 w:1)
+	/// Proof: `Account::PendingNewAccounts` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `System::Account` (r:1 w:1)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
+	/// Storage: `ProvideRandomness::RequestIdProvider` (r:1 w:1)
+	/// Proof: `ProvideRandomness::RequestIdProvider` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `ProvideRandomness::RequestsIds` (r:1 w:1)
+	/// Proof: `ProvideRandomness::RequestsIds` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `ProvideRandomness::CounterForRequestsIds` (r:1 w:1)
+	/// Proof: `ProvideRandomness::CounterForRequestsIds` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
+	/// Storage: `Babe::EpochIndex` (r:1 w:0)
+	/// Proof: `Babe::EpochIndex` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
+	/// Storage: `ProvideRandomness::NexEpochHookIn` (r:1 w:0)
+	/// Proof: `ProvideRandomness::NexEpochHookIn` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `ProvideRandomness::RequestsReadyAtEpoch` (r:1 w:1)
+	/// Proof: `ProvideRandomness::RequestsReadyAtEpoch` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Account::PendingRandomIdAssignments` (r:0 w:1)
+	/// Proof: `Account::PendingRandomIdAssignments` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	/// The range of component `i` is `[0, 1]`.
 	fn on_initialize_with_balance(i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
@@ -122,8 +123,8 @@ impl<T: frame_system::Config> pallet_duniter_account::WeightInfo for WeightInfo<
 			.saturating_add(T::DbWeight::get().writes((6_u64).saturating_mul(i.into())))
 			.saturating_add(Weight::from_parts(0, 309).saturating_mul(i.into()))
 	}
-	/// Storage: Account PendingNewAccounts (r:1 w:1)
-	/// Proof Skipped: Account PendingNewAccounts (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `Account::PendingNewAccounts` (r:1 w:1)
+	/// Proof: `Account::PendingNewAccounts` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	/// The range of component `i` is `[0, 1]`.
 	fn on_initialize_no_balance(i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
@@ -138,8 +139,8 @@ impl<T: frame_system::Config> pallet_duniter_account::WeightInfo for WeightInfo<
 			.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into())))
 			.saturating_add(Weight::from_parts(0, 74).saturating_mul(i.into()))
 	}
-	/// Storage: Account PendingRandomIdAssignments (r:1 w:1)
-	/// Proof Skipped: Account PendingRandomIdAssignments (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `Account::PendingRandomIdAssignments` (r:1 w:1)
+	/// Proof: `Account::PendingRandomIdAssignments` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn on_filled_randomness_pending() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `116`
@@ -150,8 +151,8 @@ impl<T: frame_system::Config> pallet_duniter_account::WeightInfo for WeightInfo<
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Account PendingRandomIdAssignments (r:1 w:0)
-	/// Proof Skipped: Account PendingRandomIdAssignments (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `Account::PendingRandomIdAssignments` (r:1 w:0)
+	/// Proof: `Account::PendingRandomIdAssignments` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn on_filled_randomness_no_pending() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `42`
diff --git a/runtime/common/src/weights/pallet_grandpa.rs b/runtime/common/src/weights/pallet_grandpa.rs
index c30daf261..3c6528f7f 100644
--- a/runtime/common/src/weights/pallet_grandpa.rs
+++ b/runtime/common/src/weights/pallet_grandpa.rs
@@ -29,7 +29,7 @@ use sp_std::marker::PhantomData;
 /// Weight functions for `pallet_grandpa`.
 pub struct WeightInfo<T>(PhantomData<T>);
 impl<T: frame_system::Config> pallet_grandpa::WeightInfo for WeightInfo<T> {
-    fn report_equivocation(validator_count: u32) -> Weight {
+    fn report_equivocation(validator_count: u32, _p: u32) -> Weight {
         // we take the validator set count from the membership proof to
         // calculate the weight but we set a floor of 100 validators.
         let validator_count = validator_count.max(100) as u64;
diff --git a/runtime/common/src/weights/pallet_identity.rs b/runtime/common/src/weights/pallet_identity.rs
index 448e28da1..7f7761256 100644
--- a/runtime/common/src/weights/pallet_identity.rs
+++ b/runtime/common/src/weights/pallet_identity.rs
@@ -31,7 +31,6 @@
 // --repeat=2
 // --pallet=*
 // --extrinsic=*
-// --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --header=./file_header.txt
@@ -80,14 +79,14 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(13))
 			.saturating_add(T::DbWeight::get().writes(12))
 	}
-	/// Storage: Identity IdentityIndexOf (r:1 w:0)
-	/// Proof Skipped: Identity IdentityIndexOf (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Identity Identities (r:1 w:1)
-	/// Proof Skipped: Identity Identities (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Identity IdentitiesNames (r:1 w:1)
-	/// Proof Skipped: Identity IdentitiesNames (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Identity IdentityChangeSchedule (r:2 w:2)
-	/// Proof Skipped: Identity IdentityChangeSchedule (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `Identity::IdentityIndexOf` (r:1 w:0)
+	/// Proof: `Identity::IdentityIndexOf` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Identity::Identities` (r:1 w:1)
+	/// Proof: `Identity::Identities` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Identity::IdentitiesNames` (r:1 w:1)
+	/// Proof: `Identity::IdentitiesNames` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Identity::IdentityChangeSchedule` (r:2 w:2)
+	/// Proof: `Identity::IdentityChangeSchedule` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn confirm_identity() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `661`
@@ -98,14 +97,14 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(5))
 			.saturating_add(T::DbWeight::get().writes(4))
 	}
-	/// Storage: Identity IdentityIndexOf (r:2 w:2)
-	/// Proof Skipped: Identity IdentityIndexOf (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Identity Identities (r:1 w:1)
-	/// Proof Skipped: Identity Identities (max_values: None, max_size: None, mode: Measured)
-	/// Storage: System BlockHash (r:1 w:0)
-	/// Proof: System BlockHash (max_values: None, max_size: Some(44), added: 2519, mode: MaxEncodedLen)
-	/// Storage: System Account (r:2 w:2)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
+	/// Storage: `Identity::IdentityIndexOf` (r:2 w:2)
+	/// Proof: `Identity::IdentityIndexOf` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Identity::Identities` (r:1 w:1)
+	/// Proof: `Identity::Identities` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `System::BlockHash` (r:1 w:0)
+	/// Proof: `System::BlockHash` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`)
+	/// Storage: `System::Account` (r:2 w:2)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
 	fn change_owner_key() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `714`
@@ -116,16 +115,16 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(6))
 			.saturating_add(T::DbWeight::get().writes(5))
 	}
-	/// Storage: Identity Identities (r:1 w:1)
-	/// Proof Skipped: Identity Identities (max_values: None, max_size: None, mode: Measured)
-	/// Storage: System BlockHash (r:1 w:0)
-	/// Proof: System BlockHash (max_values: None, max_size: Some(44), added: 2519, mode: MaxEncodedLen)
-	/// Storage: Identity IdentityChangeSchedule (r:2 w:2)
-	/// Proof Skipped: Identity IdentityChangeSchedule (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Membership Membership (r:1 w:1)
-	/// Proof Skipped: Membership Membership (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Quota IdtyQuota (r:0 w:1)
-	/// Proof: Quota IdtyQuota (max_values: None, max_size: Some(24), added: 2499, mode: MaxEncodedLen)
+	/// Storage: `Identity::Identities` (r:1 w:1)
+	/// Proof: `Identity::Identities` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `System::BlockHash` (r:1 w:0)
+	/// Proof: `System::BlockHash` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`)
+	/// Storage: `Identity::IdentityChangeSchedule` (r:2 w:2)
+	/// Proof: `Identity::IdentityChangeSchedule` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Membership::Membership` (r:1 w:1)
+	/// Proof: `Membership::Membership` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Quota::IdtyQuota` (r:0 w:1)
+	/// Proof: `Quota::IdtyQuota` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`)
 	fn revoke_identity() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `631`
@@ -150,11 +149,11 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 			.saturating_add(Weight::from_parts(2_138_979, 0).saturating_mul(i.into()))
 			.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into())))
 	}
-	/// Storage: System Account (r:1 w:1)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
+	/// Storage: `System::Account` (r:1 w:1)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
 	fn fix_sufficients() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `67`
+		//  Measured:  `105`
 		//  Estimated: `3591`
 		// Minimum execution time: 13_275_000 picoseconds.
 		Weight::from_parts(14_053_000, 0)
@@ -162,12 +161,12 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Identity IdentityIndexOf (r:1 w:0)
-	/// Proof Skipped: Identity IdentityIndexOf (max_values: None, max_size: None, mode: Measured)
-	/// Storage: System BlockHash (r:1 w:0)
-	/// Proof: System BlockHash (max_values: None, max_size: Some(44), added: 2519, mode: MaxEncodedLen)
-	/// Storage: System Account (r:1 w:1)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
+	/// Storage: `Identity::IdentityIndexOf` (r:1 w:0)
+	/// Proof: `Identity::IdentityIndexOf` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `System::BlockHash` (r:1 w:0)
+	/// Proof: `System::BlockHash` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`)
+	/// Storage: `System::Account` (r:1 w:1)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
 	fn link_account() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `371`
@@ -186,8 +185,8 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 		Weight::from_parts(492_000, 0)
 			.saturating_add(Weight::from_parts(0, 0))
 	}
-	/// Storage: Identity Identities (r:1 w:0)
-	/// Proof Skipped: Identity Identities (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `Identity::Identities` (r:1 w:0)
+	/// Proof: `Identity::Identities` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn do_revoke_identity_noop() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `269`
@@ -197,36 +196,36 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 			.saturating_add(Weight::from_parts(0, 3734))
 			.saturating_add(T::DbWeight::get().reads(1))
 	}
-	/// Storage: Identity Identities (r:1 w:1)
-	/// Proof Skipped: Identity Identities (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Identity IdentityChangeSchedule (r:2 w:1)
-	/// Proof Skipped: Identity IdentityChangeSchedule (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Membership Membership (r:1 w:1)
-	/// Proof Skipped: Membership Membership (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Membership CounterForMembership (r:1 w:1)
-	/// Proof: Membership CounterForMembership (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen)
-	/// Storage: Membership MembershipsExpireOn (r:1 w:1)
-	/// Proof Skipped: Membership MembershipsExpireOn (max_values: None, max_size: None, mode: Measured)
-	/// Storage: UniversalDividend CurrentUdIndex (r:1 w:0)
-	/// Proof: UniversalDividend CurrentUdIndex (max_values: Some(1), max_size: Some(2), added: 497, mode: MaxEncodedLen)
-	/// Storage: SmithMembers Smiths (r:3 w:3)
-	/// Proof Skipped: SmithMembers Smiths (max_values: None, max_size: None, mode: Measured)
-	/// Storage: AuthorityMembers Members (r:1 w:1)
-	/// Proof Skipped: AuthorityMembers Members (max_values: None, max_size: None, mode: Measured)
-	/// Storage: AuthorityMembers OnlineAuthorities (r:1 w:1)
-	/// Proof Skipped: AuthorityMembers OnlineAuthorities (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: AuthorityMembers OutgoingAuthorities (r:1 w:1)
-	/// Proof Skipped: AuthorityMembers OutgoingAuthorities (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: AuthorityMembers IncomingAuthorities (r:1 w:1)
-	/// Proof Skipped: AuthorityMembers IncomingAuthorities (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: Session NextKeys (r:1 w:1)
-	/// Proof Skipped: Session NextKeys (max_values: None, max_size: None, mode: Measured)
-	/// Storage: System Account (r:1 w:1)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
-	/// Storage: Quota IdtyQuota (r:0 w:1)
-	/// Proof: Quota IdtyQuota (max_values: None, max_size: Some(24), added: 2499, mode: MaxEncodedLen)
-	/// Storage: Session KeyOwner (r:0 w:4)
-	/// Proof Skipped: Session KeyOwner (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `Identity::Identities` (r:1 w:1)
+	/// Proof: `Identity::Identities` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Identity::IdentityChangeSchedule` (r:2 w:1)
+	/// Proof: `Identity::IdentityChangeSchedule` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Membership::Membership` (r:1 w:1)
+	/// Proof: `Membership::Membership` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Membership::CounterForMembership` (r:1 w:1)
+	/// Proof: `Membership::CounterForMembership` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
+	/// Storage: `Membership::MembershipsExpireOn` (r:1 w:1)
+	/// Proof: `Membership::MembershipsExpireOn` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `UniversalDividend::CurrentUdIndex` (r:1 w:0)
+	/// Proof: `UniversalDividend::CurrentUdIndex` (`max_values`: Some(1), `max_size`: Some(2), added: 497, mode: `MaxEncodedLen`)
+	/// Storage: `SmithMembers::Smiths` (r:3 w:3)
+	/// Proof: `SmithMembers::Smiths` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `AuthorityMembers::Members` (r:1 w:1)
+	/// Proof: `AuthorityMembers::Members` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `AuthorityMembers::OnlineAuthorities` (r:1 w:1)
+	/// Proof: `AuthorityMembers::OnlineAuthorities` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `AuthorityMembers::OutgoingAuthorities` (r:1 w:1)
+	/// Proof: `AuthorityMembers::OutgoingAuthorities` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `AuthorityMembers::IncomingAuthorities` (r:1 w:1)
+	/// Proof: `AuthorityMembers::IncomingAuthorities` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `Session::NextKeys` (r:1 w:1)
+	/// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `System::Account` (r:1 w:1)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
+	/// Storage: `Quota::IdtyQuota` (r:0 w:1)
+	/// Proof: `Quota::IdtyQuota` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`)
+	/// Storage: `Session::KeyOwner` (r:0 w:4)
+	/// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn do_revoke_identity() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `1540`
@@ -237,8 +236,8 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(16))
 			.saturating_add(T::DbWeight::get().writes(19))
 	}
-	/// Storage: Identity Identities (r:1 w:0)
-	/// Proof Skipped: Identity Identities (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `Identity::Identities` (r:1 w:0)
+	/// Proof: `Identity::Identities` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn do_remove_identity_noop() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `269`
@@ -248,36 +247,36 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 			.saturating_add(Weight::from_parts(0, 3734))
 			.saturating_add(T::DbWeight::get().reads(1))
 	}
-	/// Storage: Identity Identities (r:1 w:1)
-	/// Proof Skipped: Identity Identities (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Identity CounterForIdentities (r:1 w:1)
-	/// Proof: Identity CounterForIdentities (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen)
-	/// Storage: System Account (r:2 w:2)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
-	/// Storage: Membership Membership (r:1 w:1)
-	/// Proof Skipped: Membership Membership (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Membership CounterForMembership (r:1 w:1)
-	/// Proof: Membership CounterForMembership (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen)
-	/// Storage: Membership MembershipsExpireOn (r:1 w:1)
-	/// Proof Skipped: Membership MembershipsExpireOn (max_values: None, max_size: None, mode: Measured)
-	/// Storage: SmithMembers Smiths (r:3 w:3)
-	/// Proof Skipped: SmithMembers Smiths (max_values: None, max_size: None, mode: Measured)
-	/// Storage: AuthorityMembers Members (r:1 w:1)
-	/// Proof Skipped: AuthorityMembers Members (max_values: None, max_size: None, mode: Measured)
-	/// Storage: AuthorityMembers OnlineAuthorities (r:1 w:1)
-	/// Proof Skipped: AuthorityMembers OnlineAuthorities (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: AuthorityMembers OutgoingAuthorities (r:1 w:1)
-	/// Proof Skipped: AuthorityMembers OutgoingAuthorities (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: AuthorityMembers IncomingAuthorities (r:1 w:1)
-	/// Proof Skipped: AuthorityMembers IncomingAuthorities (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: Session NextKeys (r:1 w:1)
-	/// Proof Skipped: Session NextKeys (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Identity IdentityIndexOf (r:0 w:1)
-	/// Proof Skipped: Identity IdentityIndexOf (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Quota IdtyQuota (r:0 w:1)
-	/// Proof: Quota IdtyQuota (max_values: None, max_size: Some(24), added: 2499, mode: MaxEncodedLen)
-	/// Storage: Session KeyOwner (r:0 w:4)
-	/// Proof Skipped: Session KeyOwner (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `Identity::Identities` (r:1 w:1)
+	/// Proof: `Identity::Identities` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Identity::CounterForIdentities` (r:1 w:1)
+	/// Proof: `Identity::CounterForIdentities` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
+	/// Storage: `System::Account` (r:2 w:2)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
+	/// Storage: `Membership::Membership` (r:1 w:1)
+	/// Proof: `Membership::Membership` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Membership::CounterForMembership` (r:1 w:1)
+	/// Proof: `Membership::CounterForMembership` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
+	/// Storage: `Membership::MembershipsExpireOn` (r:1 w:1)
+	/// Proof: `Membership::MembershipsExpireOn` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `SmithMembers::Smiths` (r:3 w:3)
+	/// Proof: `SmithMembers::Smiths` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `AuthorityMembers::Members` (r:1 w:1)
+	/// Proof: `AuthorityMembers::Members` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `AuthorityMembers::OnlineAuthorities` (r:1 w:1)
+	/// Proof: `AuthorityMembers::OnlineAuthorities` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `AuthorityMembers::OutgoingAuthorities` (r:1 w:1)
+	/// Proof: `AuthorityMembers::OutgoingAuthorities` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `AuthorityMembers::IncomingAuthorities` (r:1 w:1)
+	/// Proof: `AuthorityMembers::IncomingAuthorities` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `Session::NextKeys` (r:1 w:1)
+	/// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Identity::IdentityIndexOf` (r:0 w:1)
+	/// Proof: `Identity::IdentityIndexOf` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Quota::IdtyQuota` (r:0 w:1)
+	/// Proof: `Quota::IdtyQuota` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`)
+	/// Storage: `Session::KeyOwner` (r:0 w:4)
+	/// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn do_remove_identity() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `1447`
@@ -288,8 +287,8 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(15))
 			.saturating_add(T::DbWeight::get().writes(21))
 	}
-	/// Storage: Identity IdentityChangeSchedule (r:1 w:0)
-	/// Proof Skipped: Identity IdentityChangeSchedule (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `Identity::IdentityChangeSchedule` (r:1 w:0)
+	/// Proof: `Identity::IdentityChangeSchedule` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn prune_identities_noop() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `108`
@@ -299,10 +298,10 @@ impl<T: frame_system::Config> pallet_identity::WeightInfo for WeightInfo<T> {
 			.saturating_add(Weight::from_parts(0, 3573))
 			.saturating_add(T::DbWeight::get().reads(1))
 	}
-	/// Storage: Identity IdentityChangeSchedule (r:1 w:1)
-	/// Proof Skipped: Identity IdentityChangeSchedule (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Identity Identities (r:1 w:0)
-	/// Proof Skipped: Identity Identities (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `Identity::IdentityChangeSchedule` (r:1 w:1)
+	/// Proof: `Identity::IdentityChangeSchedule` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Identity::Identities` (r:1 w:0)
+	/// Proof: `Identity::Identities` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn prune_identities_none() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `292`
diff --git a/runtime/common/src/weights/pallet_im_online.rs b/runtime/common/src/weights/pallet_im_online.rs
index be113f033..82e221d7b 100644
--- a/runtime/common/src/weights/pallet_im_online.rs
+++ b/runtime/common/src/weights/pallet_im_online.rs
@@ -17,21 +17,20 @@
 //! Autogenerated weights for `pallet_im_online`
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2024-01-22, STEPS: `2`, REPEAT: `2`, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2024-01-24, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! WORST CASE MAP SIZE: `1000000`
-//! HOSTNAME: `squirrel`, CPU: `Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz`
-//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024
+//! HOSTNAME: `bgallois-ms7d43`, CPU: `12th Gen Intel(R) Core(TM) i3-12100F`
+//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: 1024
 
 // Executed Command:
-// ./target/release/duniter
+// target/release/duniter
 // benchmark
 // pallet
 // --chain=dev
-// --steps=2
-// --repeat=2
+// --steps=50
+// --repeat=20
 // --pallet=*
 // --extrinsic=*
-// --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --header=./file_header.txt
@@ -48,31 +47,30 @@ use core::marker::PhantomData;
 /// Weight functions for `pallet_im_online`.
 pub struct WeightInfo<T>(PhantomData<T>);
 impl<T: frame_system::Config> pallet_im_online::WeightInfo for WeightInfo<T> {
-	/// Storage: Session Validators (r:1 w:0)
-	/// Proof Skipped: Session Validators (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: Session CurrentIndex (r:1 w:0)
-	/// Proof Skipped: Session CurrentIndex (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: ImOnline Keys (r:1 w:0)
-	/// Proof: ImOnline Keys (max_values: Some(1), max_size: Some(32002), added: 32497, mode: MaxEncodedLen)
-	/// Storage: Parameters ParametersStorage (r:1 w:0)
-	/// Proof Skipped: Parameters ParametersStorage (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: ImOnline ReceivedHeartbeats (r:1 w:1)
-	/// Proof: ImOnline ReceivedHeartbeats (max_values: None, max_size: Some(10021032), added: 10023507, mode: MaxEncodedLen)
-	/// Storage: ImOnline AuthoredBlocks (r:1 w:0)
-	/// Proof: ImOnline AuthoredBlocks (max_values: None, max_size: Some(56), added: 2531, mode: MaxEncodedLen)
+	/// Storage: `Session::Validators` (r:1 w:0)
+	/// Proof: `Session::Validators` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `Session::CurrentIndex` (r:1 w:0)
+	/// Proof: `Session::CurrentIndex` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `ImOnline::Keys` (r:1 w:0)
+	/// Proof: `ImOnline::Keys` (`max_values`: Some(1), `max_size`: Some(32002), added: 32497, mode: `MaxEncodedLen`)
+	/// Storage: `Parameters::ParametersStorage` (r:1 w:0)
+	/// Proof: `Parameters::ParametersStorage` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `ImOnline::ReceivedHeartbeats` (r:1 w:1)
+	/// Proof: `ImOnline::ReceivedHeartbeats` (`max_values`: None, `max_size`: Some(25), added: 2500, mode: `MaxEncodedLen`)
+	/// Storage: `ImOnline::AuthoredBlocks` (r:1 w:0)
+	/// Proof: `ImOnline::AuthoredBlocks` (`max_values`: None, `max_size`: Some(56), added: 2531, mode: `MaxEncodedLen`)
 	/// The range of component `k` is `[1, 1000]`.
-	/// The range of component `e` is `[1, 100]`.
-	fn validate_unsigned_and_then_heartbeat(k: u32, e: u32, ) -> Weight {
+	fn validate_unsigned_and_then_heartbeat(k: u32, ) -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `601 + k * (32 ±0)`
-		//  Estimated: `10024497 + k * (32 ±0)`
-		// Minimum execution time: 133_175_000 picoseconds.
-		Weight::from_parts(151_343_214, 0)
-			.saturating_add(Weight::from_parts(0, 10024497))
-			// Standard Error: 409_251
-			.saturating_add(Weight::from_parts(588_858, 0).saturating_mul(e.into()))
-			.saturating_add(T::DbWeight::get().reads(6))
+		//  Measured:  `603 + k * (32 ±0)`
+		//  Estimated: `33487 + k * (1761 ±0)`
+		// Minimum execution time: 53_722_000 picoseconds.
+		Weight::from_parts(66_607_466, 0)
+			.saturating_add(Weight::from_parts(0, 33487))
+			// Standard Error: 482
+			.saturating_add(Weight::from_parts(28_435, 0).saturating_mul(k.into()))
+			.saturating_add(T::DbWeight::get().reads(5))
 			.saturating_add(T::DbWeight::get().writes(1))
-			.saturating_add(Weight::from_parts(0, 32).saturating_mul(k.into()))
+			.saturating_add(Weight::from_parts(0, 1761).saturating_mul(k.into()))
 	}
 }
diff --git a/runtime/common/src/weights/pallet_membership.rs b/runtime/common/src/weights/pallet_membership.rs
index d7bba69b0..624d14353 100644
--- a/runtime/common/src/weights/pallet_membership.rs
+++ b/runtime/common/src/weights/pallet_membership.rs
@@ -31,7 +31,6 @@
 // --repeat=2
 // --pallet=*
 // --extrinsic=*
-// --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --header=./file_header.txt
@@ -56,34 +55,34 @@ impl<T: frame_system::Config> pallet_membership::WeightInfo for WeightInfo<T> {
 		Weight::from_parts(511_000, 0)
 			.saturating_add(Weight::from_parts(0, 0))
 	}
-	/// Storage: Membership MembershipsExpireOn (r:2 w:2)
-	/// Proof Skipped: Membership MembershipsExpireOn (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Membership Membership (r:3 w:3)
-	/// Proof Skipped: Membership Membership (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Membership CounterForMembership (r:1 w:1)
-	/// Proof: Membership CounterForMembership (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen)
-	/// Storage: Identity Identities (r:3 w:3)
-	/// Proof Skipped: Identity Identities (max_values: None, max_size: None, mode: Measured)
-	/// Storage: UniversalDividend CurrentUdIndex (r:1 w:0)
-	/// Proof: UniversalDividend CurrentUdIndex (max_values: Some(1), max_size: Some(2), added: 497, mode: MaxEncodedLen)
-	/// Storage: SmithMembers Smiths (r:3 w:3)
-	/// Proof Skipped: SmithMembers Smiths (max_values: None, max_size: None, mode: Measured)
-	/// Storage: AuthorityMembers Members (r:3 w:3)
-	/// Proof Skipped: AuthorityMembers Members (max_values: None, max_size: None, mode: Measured)
-	/// Storage: AuthorityMembers OnlineAuthorities (r:1 w:1)
-	/// Proof Skipped: AuthorityMembers OnlineAuthorities (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: AuthorityMembers OutgoingAuthorities (r:1 w:1)
-	/// Proof Skipped: AuthorityMembers OutgoingAuthorities (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: AuthorityMembers IncomingAuthorities (r:1 w:1)
-	/// Proof Skipped: AuthorityMembers IncomingAuthorities (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: Session NextKeys (r:3 w:3)
-	/// Proof Skipped: Session NextKeys (max_values: None, max_size: None, mode: Measured)
-	/// Storage: System Account (r:3 w:3)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
-	/// Storage: Identity IdentityChangeSchedule (r:2 w:1)
-	/// Proof Skipped: Identity IdentityChangeSchedule (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Session KeyOwner (r:0 w:12)
-	/// Proof Skipped: Session KeyOwner (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `Membership::MembershipsExpireOn` (r:2 w:2)
+	/// Proof: `Membership::MembershipsExpireOn` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Membership::Membership` (r:3 w:3)
+	/// Proof: `Membership::Membership` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Membership::CounterForMembership` (r:1 w:1)
+	/// Proof: `Membership::CounterForMembership` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
+	/// Storage: `Identity::Identities` (r:3 w:3)
+	/// Proof: `Identity::Identities` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `UniversalDividend::CurrentUdIndex` (r:1 w:0)
+	/// Proof: `UniversalDividend::CurrentUdIndex` (`max_values`: Some(1), `max_size`: Some(2), added: 497, mode: `MaxEncodedLen`)
+	/// Storage: `SmithMembers::Smiths` (r:3 w:3)
+	/// Proof: `SmithMembers::Smiths` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `AuthorityMembers::Members` (r:3 w:3)
+	/// Proof: `AuthorityMembers::Members` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `AuthorityMembers::OnlineAuthorities` (r:1 w:1)
+	/// Proof: `AuthorityMembers::OnlineAuthorities` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `AuthorityMembers::OutgoingAuthorities` (r:1 w:1)
+	/// Proof: `AuthorityMembers::OutgoingAuthorities` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `AuthorityMembers::IncomingAuthorities` (r:1 w:1)
+	/// Proof: `AuthorityMembers::IncomingAuthorities` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `Session::NextKeys` (r:3 w:3)
+	/// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `System::Account` (r:3 w:3)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
+	/// Storage: `Identity::IdentityChangeSchedule` (r:2 w:1)
+	/// Proof: `Identity::IdentityChangeSchedule` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Session::KeyOwner` (r:0 w:12)
+	/// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	/// The range of component `i` is `[0, 3]`.
 	fn expire_memberships(i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
diff --git a/runtime/common/src/weights/pallet_multisig.rs b/runtime/common/src/weights/pallet_multisig.rs
index 365ea7dde..bc0bc453d 100644
--- a/runtime/common/src/weights/pallet_multisig.rs
+++ b/runtime/common/src/weights/pallet_multisig.rs
@@ -31,7 +31,6 @@
 // --repeat=2
 // --pallet=*
 // --extrinsic=*
-// --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --header=./file_header.txt
@@ -59,8 +58,8 @@ impl<T: frame_system::Config> pallet_multisig::WeightInfo for WeightInfo<T> {
 			// Standard Error: 947
 			.saturating_add(Weight::from_parts(221, 0).saturating_mul(z.into()))
 	}
-	/// Storage: Multisig Multisigs (r:1 w:1)
-	/// Proof: Multisig Multisigs (max_values: None, max_size: Some(457), added: 2932, mode: MaxEncodedLen)
+	/// Storage: `Multisig::Multisigs` (r:1 w:1)
+	/// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(457), added: 2932, mode: `MaxEncodedLen`)
 	/// The range of component `s` is `[2, 10]`.
 	/// The range of component `z` is `[0, 10000]`.
 	fn as_multi_create(s: u32, z: u32, ) -> Weight {
@@ -77,8 +76,8 @@ impl<T: frame_system::Config> pallet_multisig::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Multisig Multisigs (r:1 w:1)
-	/// Proof: Multisig Multisigs (max_values: None, max_size: Some(457), added: 2932, mode: MaxEncodedLen)
+	/// Storage: `Multisig::Multisigs` (r:1 w:1)
+	/// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(457), added: 2932, mode: `MaxEncodedLen`)
 	/// The range of component `s` is `[3, 10]`.
 	/// The range of component `z` is `[0, 10000]`.
 	fn as_multi_approve(s: u32, z: u32, ) -> Weight {
@@ -95,10 +94,10 @@ impl<T: frame_system::Config> pallet_multisig::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Multisig Multisigs (r:1 w:1)
-	/// Proof: Multisig Multisigs (max_values: None, max_size: Some(457), added: 2932, mode: MaxEncodedLen)
-	/// Storage: System Account (r:1 w:1)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
+	/// Storage: `Multisig::Multisigs` (r:1 w:1)
+	/// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(457), added: 2932, mode: `MaxEncodedLen`)
+	/// Storage: `System::Account` (r:1 w:1)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
 	/// The range of component `s` is `[2, 10]`.
 	/// The range of component `z` is `[0, 10000]`.
 	fn as_multi_complete(s: u32, z: u32, ) -> Weight {
@@ -115,8 +114,8 @@ impl<T: frame_system::Config> pallet_multisig::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(2))
 	}
-	/// Storage: Multisig Multisigs (r:1 w:1)
-	/// Proof: Multisig Multisigs (max_values: None, max_size: Some(457), added: 2932, mode: MaxEncodedLen)
+	/// Storage: `Multisig::Multisigs` (r:1 w:1)
+	/// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(457), added: 2932, mode: `MaxEncodedLen`)
 	/// The range of component `s` is `[2, 10]`.
 	fn approve_as_multi_create(s: u32, ) -> Weight {
 		// Proof Size summary in bytes:
@@ -130,8 +129,8 @@ impl<T: frame_system::Config> pallet_multisig::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Multisig Multisigs (r:1 w:1)
-	/// Proof: Multisig Multisigs (max_values: None, max_size: Some(457), added: 2932, mode: MaxEncodedLen)
+	/// Storage: `Multisig::Multisigs` (r:1 w:1)
+	/// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(457), added: 2932, mode: `MaxEncodedLen`)
 	/// The range of component `s` is `[2, 10]`.
 	fn approve_as_multi_approve(s: u32, ) -> Weight {
 		// Proof Size summary in bytes:
@@ -145,8 +144,8 @@ impl<T: frame_system::Config> pallet_multisig::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Multisig Multisigs (r:1 w:1)
-	/// Proof: Multisig Multisigs (max_values: None, max_size: Some(457), added: 2932, mode: MaxEncodedLen)
+	/// Storage: `Multisig::Multisigs` (r:1 w:1)
+	/// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(457), added: 2932, mode: `MaxEncodedLen`)
 	/// The range of component `s` is `[2, 10]`.
 	fn cancel_as_multi(_s: u32, ) -> Weight {
 		// Proof Size summary in bytes:
diff --git a/runtime/common/src/weights/pallet_oneshot_account.rs b/runtime/common/src/weights/pallet_oneshot_account.rs
index 1139d09b9..763fc1210 100644
--- a/runtime/common/src/weights/pallet_oneshot_account.rs
+++ b/runtime/common/src/weights/pallet_oneshot_account.rs
@@ -31,7 +31,6 @@
 // --repeat=2
 // --pallet=*
 // --extrinsic=*
-// --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --header=./file_header.txt
@@ -48,8 +47,8 @@ use core::marker::PhantomData;
 /// Weight functions for `pallet_oneshot_account`.
 pub struct WeightInfo<T>(PhantomData<T>);
 impl<T: frame_system::Config> pallet_oneshot_account::WeightInfo for WeightInfo<T> {
-	/// Storage: OneshotAccount OneshotAccounts (r:1 w:1)
-	/// Proof Skipped: OneshotAccount OneshotAccounts (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `OneshotAccount::OneshotAccounts` (r:1 w:1)
+	/// Proof: `OneshotAccount::OneshotAccounts` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn create_oneshot_account() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `42`
@@ -60,12 +59,12 @@ impl<T: frame_system::Config> pallet_oneshot_account::WeightInfo for WeightInfo<
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: OneshotAccount OneshotAccounts (r:1 w:1)
-	/// Proof Skipped: OneshotAccount OneshotAccounts (max_values: None, max_size: None, mode: Measured)
-	/// Storage: System BlockHash (r:1 w:0)
-	/// Proof: System BlockHash (max_values: None, max_size: Some(44), added: 2519, mode: MaxEncodedLen)
-	/// Storage: System Account (r:1 w:1)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
+	/// Storage: `OneshotAccount::OneshotAccounts` (r:1 w:1)
+	/// Proof: `OneshotAccount::OneshotAccounts` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `System::BlockHash` (r:1 w:0)
+	/// Proof: `System::BlockHash` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`)
+	/// Storage: `System::Account` (r:1 w:1)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
 	fn consume_oneshot_account() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `242`
@@ -76,12 +75,12 @@ impl<T: frame_system::Config> pallet_oneshot_account::WeightInfo for WeightInfo<
 			.saturating_add(T::DbWeight::get().reads(3))
 			.saturating_add(T::DbWeight::get().writes(2))
 	}
-	/// Storage: OneshotAccount OneshotAccounts (r:1 w:1)
-	/// Proof Skipped: OneshotAccount OneshotAccounts (max_values: None, max_size: None, mode: Measured)
-	/// Storage: System BlockHash (r:1 w:0)
-	/// Proof: System BlockHash (max_values: None, max_size: Some(44), added: 2519, mode: MaxEncodedLen)
-	/// Storage: System Account (r:2 w:2)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
+	/// Storage: `OneshotAccount::OneshotAccounts` (r:1 w:1)
+	/// Proof: `OneshotAccount::OneshotAccounts` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `System::BlockHash` (r:1 w:0)
+	/// Proof: `System::BlockHash` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`)
+	/// Storage: `System::Account` (r:2 w:2)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
 	fn consume_oneshot_account_with_remaining() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `306`
diff --git a/runtime/common/src/weights/pallet_preimage.rs b/runtime/common/src/weights/pallet_preimage.rs
index b789f054a..8cea5d517 100644
--- a/runtime/common/src/weights/pallet_preimage.rs
+++ b/runtime/common/src/weights/pallet_preimage.rs
@@ -31,7 +31,6 @@
 // --repeat=2
 // --pallet=*
 // --extrinsic=*
-// --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --header=./file_header.txt
@@ -48,14 +47,16 @@ use core::marker::PhantomData;
 /// Weight functions for `pallet_preimage`.
 pub struct WeightInfo<T>(PhantomData<T>);
 impl<T: frame_system::Config> pallet_preimage::WeightInfo for WeightInfo<T> {
-	/// Storage: Preimage StatusFor (r:1 w:1)
-	/// Proof: Preimage StatusFor (max_values: None, max_size: Some(83), added: 2558, mode: MaxEncodedLen)
-	/// Storage: Preimage PreimageFor (r:0 w:1)
-	/// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen)
+	/// Storage: `Preimage::StatusFor` (r:1 w:0)
+	/// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(83), added: 2558, mode: `MaxEncodedLen`)
+	/// Storage: `Preimage::RequestStatusFor` (r:1 w:1)
+	/// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(75), added: 2550, mode: `MaxEncodedLen`)
+	/// Storage: `Preimage::PreimageFor` (r:0 w:1)
+	/// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `MaxEncodedLen`)
 	/// The range of component `s` is `[0, 4194304]`.
 	fn note_preimage(s: u32, ) -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `104`
+		//  Measured:  `42`
 		//  Estimated: `3548`
 		// Minimum execution time: 38_160_000 picoseconds.
 		Weight::from_parts(39_633_500, 0)
@@ -65,10 +66,12 @@ impl<T: frame_system::Config> pallet_preimage::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(2))
 	}
-	/// Storage: Preimage StatusFor (r:1 w:1)
-	/// Proof: Preimage StatusFor (max_values: None, max_size: Some(83), added: 2558, mode: MaxEncodedLen)
-	/// Storage: Preimage PreimageFor (r:0 w:1)
-	/// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen)
+	/// Storage: `Preimage::StatusFor` (r:1 w:0)
+	/// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(83), added: 2558, mode: `MaxEncodedLen`)
+	/// Storage: `Preimage::RequestStatusFor` (r:1 w:1)
+	/// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(75), added: 2550, mode: `MaxEncodedLen`)
+	/// Storage: `Preimage::PreimageFor` (r:0 w:1)
+	/// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `MaxEncodedLen`)
 	/// The range of component `s` is `[0, 4194304]`.
 	fn note_requested_preimage(s: u32, ) -> Weight {
 		// Proof Size summary in bytes:
@@ -82,10 +85,12 @@ impl<T: frame_system::Config> pallet_preimage::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(2))
 	}
-	/// Storage: Preimage StatusFor (r:1 w:1)
-	/// Proof: Preimage StatusFor (max_values: None, max_size: Some(83), added: 2558, mode: MaxEncodedLen)
-	/// Storage: Preimage PreimageFor (r:0 w:1)
-	/// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen)
+	/// Storage: `Preimage::StatusFor` (r:1 w:0)
+	/// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(83), added: 2558, mode: `MaxEncodedLen`)
+	/// Storage: `Preimage::RequestStatusFor` (r:1 w:1)
+	/// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(75), added: 2550, mode: `MaxEncodedLen`)
+	/// Storage: `Preimage::PreimageFor` (r:0 w:1)
+	/// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `MaxEncodedLen`)
 	/// The range of component `s` is `[0, 4194304]`.
 	fn note_no_deposit_preimage(s: u32, ) -> Weight {
 		// Proof Size summary in bytes:
@@ -99,24 +104,28 @@ impl<T: frame_system::Config> pallet_preimage::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(2))
 	}
-	/// Storage: Preimage StatusFor (r:1 w:1)
-	/// Proof: Preimage StatusFor (max_values: None, max_size: Some(83), added: 2558, mode: MaxEncodedLen)
-	/// Storage: Preimage PreimageFor (r:0 w:1)
-	/// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen)
+	/// Storage: `Preimage::StatusFor` (r:1 w:0)
+	/// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(83), added: 2558, mode: `MaxEncodedLen`)
+	/// Storage: `Preimage::RequestStatusFor` (r:1 w:1)
+	/// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(75), added: 2550, mode: `MaxEncodedLen`)
+	/// Storage: `Preimage::PreimageFor` (r:0 w:1)
+	/// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `MaxEncodedLen`)
 	fn unnote_preimage() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `242`
+		//  Measured:  `172`
 		//  Estimated: `3548`
 		// Minimum execution time: 60_607_000 picoseconds.
 		Weight::from_parts(70_545_000, 0)
 			.saturating_add(Weight::from_parts(0, 3548))
-			.saturating_add(T::DbWeight::get().reads(1))
+			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(2))
 	}
-	/// Storage: Preimage StatusFor (r:1 w:1)
-	/// Proof: Preimage StatusFor (max_values: None, max_size: Some(83), added: 2558, mode: MaxEncodedLen)
-	/// Storage: Preimage PreimageFor (r:0 w:1)
-	/// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen)
+	/// Storage: `Preimage::StatusFor` (r:1 w:0)
+	/// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(83), added: 2558, mode: `MaxEncodedLen`)
+	/// Storage: `Preimage::RequestStatusFor` (r:1 w:1)
+	/// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(75), added: 2550, mode: `MaxEncodedLen`)
+	/// Storage: `Preimage::PreimageFor` (r:0 w:1)
+	/// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `MaxEncodedLen`)
 	fn unnote_no_deposit_preimage() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `144`
@@ -124,23 +133,27 @@ impl<T: frame_system::Config> pallet_preimage::WeightInfo for WeightInfo<T> {
 		// Minimum execution time: 38_868_000 picoseconds.
 		Weight::from_parts(46_917_000, 0)
 			.saturating_add(Weight::from_parts(0, 3548))
-			.saturating_add(T::DbWeight::get().reads(1))
+			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(2))
 	}
-	/// Storage: Preimage StatusFor (r:1 w:1)
-	/// Proof: Preimage StatusFor (max_values: None, max_size: Some(83), added: 2558, mode: MaxEncodedLen)
+	/// Storage: `Preimage::StatusFor` (r:1 w:0)
+	/// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(83), added: 2558, mode: `MaxEncodedLen`)
+	/// Storage: `Preimage::RequestStatusFor` (r:1 w:1)
+	/// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(75), added: 2550, mode: `MaxEncodedLen`)
 	fn request_preimage() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `180`
+		//  Measured:  `172`
 		//  Estimated: `3548`
 		// Minimum execution time: 30_541_000 picoseconds.
 		Weight::from_parts(37_066_000, 0)
 			.saturating_add(Weight::from_parts(0, 3548))
-			.saturating_add(T::DbWeight::get().reads(1))
+			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Preimage StatusFor (r:1 w:1)
-	/// Proof: Preimage StatusFor (max_values: None, max_size: Some(83), added: 2558, mode: MaxEncodedLen)
+	/// Storage: `Preimage::StatusFor` (r:1 w:0)
+	/// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(83), added: 2558, mode: `MaxEncodedLen`)
+	/// Storage: `Preimage::RequestStatusFor` (r:1 w:1)
+	/// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(75), added: 2550, mode: `MaxEncodedLen`)
 	fn request_no_deposit_preimage() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `144`
@@ -148,11 +161,13 @@ impl<T: frame_system::Config> pallet_preimage::WeightInfo for WeightInfo<T> {
 		// Minimum execution time: 30_620_000 picoseconds.
 		Weight::from_parts(44_732_000, 0)
 			.saturating_add(Weight::from_parts(0, 3548))
-			.saturating_add(T::DbWeight::get().reads(1))
+			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Preimage StatusFor (r:1 w:1)
-	/// Proof: Preimage StatusFor (max_values: None, max_size: Some(83), added: 2558, mode: MaxEncodedLen)
+	/// Storage: `Preimage::StatusFor` (r:1 w:0)
+	/// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(83), added: 2558, mode: `MaxEncodedLen`)
+	/// Storage: `Preimage::RequestStatusFor` (r:1 w:1)
+	/// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(75), added: 2550, mode: `MaxEncodedLen`)
 	fn request_unnoted_preimage() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `42`
@@ -160,11 +175,13 @@ impl<T: frame_system::Config> pallet_preimage::WeightInfo for WeightInfo<T> {
 		// Minimum execution time: 32_593_000 picoseconds.
 		Weight::from_parts(48_836_000, 0)
 			.saturating_add(Weight::from_parts(0, 3548))
-			.saturating_add(T::DbWeight::get().reads(1))
+			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Preimage StatusFor (r:1 w:1)
-	/// Proof: Preimage StatusFor (max_values: None, max_size: Some(83), added: 2558, mode: MaxEncodedLen)
+	/// Storage: `Preimage::StatusFor` (r:1 w:0)
+	/// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(83), added: 2558, mode: `MaxEncodedLen`)
+	/// Storage: `Preimage::RequestStatusFor` (r:1 w:1)
+	/// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(75), added: 2550, mode: `MaxEncodedLen`)
 	fn request_requested_preimage() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `106`
@@ -172,13 +189,15 @@ impl<T: frame_system::Config> pallet_preimage::WeightInfo for WeightInfo<T> {
 		// Minimum execution time: 18_050_000 picoseconds.
 		Weight::from_parts(20_396_000, 0)
 			.saturating_add(Weight::from_parts(0, 3548))
-			.saturating_add(T::DbWeight::get().reads(1))
+			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Preimage StatusFor (r:1 w:1)
-	/// Proof: Preimage StatusFor (max_values: None, max_size: Some(83), added: 2558, mode: MaxEncodedLen)
-	/// Storage: Preimage PreimageFor (r:0 w:1)
-	/// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: MaxEncodedLen)
+	/// Storage: `Preimage::StatusFor` (r:1 w:0)
+	/// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(83), added: 2558, mode: `MaxEncodedLen`)
+	/// Storage: `Preimage::RequestStatusFor` (r:1 w:1)
+	/// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(75), added: 2550, mode: `MaxEncodedLen`)
+	/// Storage: `Preimage::PreimageFor` (r:0 w:1)
+	/// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `MaxEncodedLen`)
 	fn unrequest_preimage() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `144`
@@ -186,11 +205,13 @@ impl<T: frame_system::Config> pallet_preimage::WeightInfo for WeightInfo<T> {
 		// Minimum execution time: 34_145_000 picoseconds.
 		Weight::from_parts(38_096_000, 0)
 			.saturating_add(Weight::from_parts(0, 3548))
-			.saturating_add(T::DbWeight::get().reads(1))
+			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(2))
 	}
-	/// Storage: Preimage StatusFor (r:1 w:1)
-	/// Proof: Preimage StatusFor (max_values: None, max_size: Some(83), added: 2558, mode: MaxEncodedLen)
+	/// Storage: `Preimage::StatusFor` (r:1 w:0)
+	/// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(83), added: 2558, mode: `MaxEncodedLen`)
+	/// Storage: `Preimage::RequestStatusFor` (r:1 w:1)
+	/// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(75), added: 2550, mode: `MaxEncodedLen`)
 	fn unrequest_unnoted_preimage() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `106`
@@ -198,11 +219,13 @@ impl<T: frame_system::Config> pallet_preimage::WeightInfo for WeightInfo<T> {
 		// Minimum execution time: 11_945_000 picoseconds.
 		Weight::from_parts(15_583_000, 0)
 			.saturating_add(Weight::from_parts(0, 3548))
-			.saturating_add(T::DbWeight::get().reads(1))
+			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Preimage StatusFor (r:1 w:1)
-	/// Proof: Preimage StatusFor (max_values: None, max_size: Some(83), added: 2558, mode: MaxEncodedLen)
+	/// Storage: `Preimage::StatusFor` (r:1 w:0)
+	/// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(83), added: 2558, mode: `MaxEncodedLen`)
+	/// Storage: `Preimage::RequestStatusFor` (r:1 w:1)
+	/// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(75), added: 2550, mode: `MaxEncodedLen`)
 	fn unrequest_multi_referenced_preimage() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `106`
@@ -210,7 +233,27 @@ impl<T: frame_system::Config> pallet_preimage::WeightInfo for WeightInfo<T> {
 		// Minimum execution time: 16_740_000 picoseconds.
 		Weight::from_parts(19_662_000, 0)
 			.saturating_add(Weight::from_parts(0, 3548))
-			.saturating_add(T::DbWeight::get().reads(1))
+			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
+	/// Storage: `Preimage::StatusFor` (r:1023 w:1023)
+	/// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(83), added: 2558, mode: `MaxEncodedLen`)
+	/// Storage: `System::Account` (r:1023 w:1023)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
+	/// Storage: `Preimage::RequestStatusFor` (r:0 w:1023)
+	/// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(75), added: 2550, mode: `MaxEncodedLen`)
+	/// The range of component `n` is `[1, 1024]`.
+	fn ensure_updated(n: u32, ) -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `0 + n * (180 ±0)`
+		//  Estimated: `990 + n * (2601 ±0)`
+		// Minimum execution time: 16_685_000 picoseconds.
+		Weight::from_parts(17_134_000, 0)
+			.saturating_add(Weight::from_parts(0, 990))
+			// Standard Error: 17_297
+			.saturating_add(Weight::from_parts(13_805_632, 0).saturating_mul(n.into()))
+			.saturating_add(T::DbWeight::get().reads((2_u64).saturating_mul(n.into())))
+			.saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(n.into())))
+			.saturating_add(Weight::from_parts(0, 2601).saturating_mul(n.into()))
+	}
 }
diff --git a/runtime/common/src/weights/pallet_provide_randomness.rs b/runtime/common/src/weights/pallet_provide_randomness.rs
index 05a0b44f7..003ec1b3c 100644
--- a/runtime/common/src/weights/pallet_provide_randomness.rs
+++ b/runtime/common/src/weights/pallet_provide_randomness.rs
@@ -31,7 +31,6 @@
 // --repeat=2
 // --pallet=*
 // --extrinsic=*
-// --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --header=./file_header.txt
@@ -48,18 +47,20 @@ use core::marker::PhantomData;
 /// Weight functions for `pallet_provide_randomness`.
 pub struct WeightInfo<T>(PhantomData<T>);
 impl<T: frame_system::Config> pallet_provide_randomness::WeightInfo for WeightInfo<T> {
-	/// Storage: ProvideRandomness CounterForRequestsIds (r:1 w:1)
-	/// Proof: ProvideRandomness CounterForRequestsIds (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen)
-	/// Storage: ProvideRandomness RequestIdProvider (r:1 w:1)
-	/// Proof Skipped: ProvideRandomness RequestIdProvider (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: ProvideRandomness RequestsIds (r:1 w:1)
-	/// Proof Skipped: ProvideRandomness RequestsIds (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Babe EpochIndex (r:1 w:0)
-	/// Proof: Babe EpochIndex (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen)
-	/// Storage: ProvideRandomness NexEpochHookIn (r:1 w:0)
-	/// Proof Skipped: ProvideRandomness NexEpochHookIn (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: ProvideRandomness RequestsReadyAtEpoch (r:1 w:1)
-	/// Proof Skipped: ProvideRandomness RequestsReadyAtEpoch (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `ProvideRandomness::CounterForRequestsIds` (r:1 w:1)
+	/// Proof: `ProvideRandomness::CounterForRequestsIds` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
+	/// Storage: `System::Account` (r:1 w:1)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
+	/// Storage: `ProvideRandomness::RequestIdProvider` (r:1 w:1)
+	/// Proof: `ProvideRandomness::RequestIdProvider` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `ProvideRandomness::RequestsIds` (r:1 w:1)
+	/// Proof: `ProvideRandomness::RequestsIds` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Babe::EpochIndex` (r:1 w:0)
+	/// Proof: `Babe::EpochIndex` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
+	/// Storage: `ProvideRandomness::NexEpochHookIn` (r:1 w:0)
+	/// Proof: `ProvideRandomness::NexEpochHookIn` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `ProvideRandomness::RequestsReadyAtEpoch` (r:1 w:1)
+	/// Proof: `ProvideRandomness::RequestsReadyAtEpoch` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn request() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `235`
@@ -70,18 +71,18 @@ impl<T: frame_system::Config> pallet_provide_randomness::WeightInfo for WeightIn
 			.saturating_add(T::DbWeight::get().reads(6))
 			.saturating_add(T::DbWeight::get().writes(4))
 	}
-	/// Storage: ProvideRandomness RequestsReadyAtNextBlock (r:1 w:1)
-	/// Proof Skipped: ProvideRandomness RequestsReadyAtNextBlock (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: Babe AuthorVrfRandomness (r:1 w:0)
-	/// Proof: Babe AuthorVrfRandomness (max_values: Some(1), max_size: Some(33), added: 528, mode: MaxEncodedLen)
-	/// Storage: ProvideRandomness RequestsIds (r:100 w:100)
-	/// Proof Skipped: ProvideRandomness RequestsIds (max_values: None, max_size: None, mode: Measured)
-	/// Storage: ProvideRandomness CounterForRequestsIds (r:1 w:1)
-	/// Proof: ProvideRandomness CounterForRequestsIds (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen)
-	/// Storage: Account PendingRandomIdAssignments (r:100 w:0)
-	/// Proof Skipped: Account PendingRandomIdAssignments (max_values: None, max_size: None, mode: Measured)
-	/// Storage: ProvideRandomness NexEpochHookIn (r:1 w:1)
-	/// Proof Skipped: ProvideRandomness NexEpochHookIn (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: `ProvideRandomness::RequestsReadyAtNextBlock` (r:1 w:1)
+	/// Proof: `ProvideRandomness::RequestsReadyAtNextBlock` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `Babe::AuthorVrfRandomness` (r:1 w:0)
+	/// Proof: `Babe::AuthorVrfRandomness` (`max_values`: Some(1), `max_size`: Some(33), added: 528, mode: `MaxEncodedLen`)
+	/// Storage: `ProvideRandomness::RequestsIds` (r:100 w:100)
+	/// Proof: `ProvideRandomness::RequestsIds` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `ProvideRandomness::CounterForRequestsIds` (r:1 w:1)
+	/// Proof: `ProvideRandomness::CounterForRequestsIds` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
+	/// Storage: `Account::PendingRandomIdAssignments` (r:100 w:0)
+	/// Proof: `Account::PendingRandomIdAssignments` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `ProvideRandomness::NexEpochHookIn` (r:1 w:1)
+	/// Proof: `ProvideRandomness::NexEpochHookIn` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
 	/// The range of component `i` is `[1, 100]`.
 	fn on_initialize(i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
@@ -98,24 +99,24 @@ impl<T: frame_system::Config> pallet_provide_randomness::WeightInfo for WeightIn
 			.saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into())))
 			.saturating_add(Weight::from_parts(0, 2535).saturating_mul(i.into()))
 	}
-	/// Storage: ProvideRandomness RequestsReadyAtNextBlock (r:1 w:0)
-	/// Proof Skipped: ProvideRandomness RequestsReadyAtNextBlock (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: ProvideRandomness NexEpochHookIn (r:1 w:1)
-	/// Proof Skipped: ProvideRandomness NexEpochHookIn (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: Babe EpochIndex (r:1 w:0)
-	/// Proof: Babe EpochIndex (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen)
-	/// Storage: ProvideRandomness RequestsReadyAtEpoch (r:1 w:1)
-	/// Proof Skipped: ProvideRandomness RequestsReadyAtEpoch (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Babe NextRandomness (r:1 w:0)
-	/// Proof: Babe NextRandomness (max_values: Some(1), max_size: Some(32), added: 527, mode: MaxEncodedLen)
-	/// Storage: Babe EpochStart (r:1 w:0)
-	/// Proof: Babe EpochStart (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen)
-	/// Storage: ProvideRandomness RequestsIds (r:100 w:100)
-	/// Proof Skipped: ProvideRandomness RequestsIds (max_values: None, max_size: None, mode: Measured)
-	/// Storage: ProvideRandomness CounterForRequestsIds (r:1 w:1)
-	/// Proof: ProvideRandomness CounterForRequestsIds (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen)
-	/// Storage: Account PendingRandomIdAssignments (r:100 w:0)
-	/// Proof Skipped: Account PendingRandomIdAssignments (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `ProvideRandomness::RequestsReadyAtNextBlock` (r:1 w:0)
+	/// Proof: `ProvideRandomness::RequestsReadyAtNextBlock` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `ProvideRandomness::NexEpochHookIn` (r:1 w:1)
+	/// Proof: `ProvideRandomness::NexEpochHookIn` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `Babe::EpochIndex` (r:1 w:0)
+	/// Proof: `Babe::EpochIndex` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
+	/// Storage: `ProvideRandomness::RequestsReadyAtEpoch` (r:1 w:1)
+	/// Proof: `ProvideRandomness::RequestsReadyAtEpoch` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Babe::NextRandomness` (r:1 w:0)
+	/// Proof: `Babe::NextRandomness` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`)
+	/// Storage: `Babe::EpochStart` (r:1 w:0)
+	/// Proof: `Babe::EpochStart` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
+	/// Storage: `ProvideRandomness::RequestsIds` (r:100 w:100)
+	/// Proof: `ProvideRandomness::RequestsIds` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `ProvideRandomness::CounterForRequestsIds` (r:1 w:1)
+	/// Proof: `ProvideRandomness::CounterForRequestsIds` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
+	/// Storage: `Account::PendingRandomIdAssignments` (r:100 w:0)
+	/// Proof: `Account::PendingRandomIdAssignments` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	/// The range of component `i` is `[1, 100]`.
 	fn on_initialize_epoch(i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
diff --git a/runtime/common/src/weights/pallet_proxy.rs b/runtime/common/src/weights/pallet_proxy.rs
index e2de5c02f..f21307d47 100644
--- a/runtime/common/src/weights/pallet_proxy.rs
+++ b/runtime/common/src/weights/pallet_proxy.rs
@@ -31,7 +31,6 @@
 // --repeat=2
 // --pallet=*
 // --extrinsic=*
-// --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --header=./file_header.txt
@@ -48,8 +47,8 @@ use core::marker::PhantomData;
 /// Weight functions for `pallet_proxy`.
 pub struct WeightInfo<T>(PhantomData<T>);
 impl<T: frame_system::Config> pallet_proxy::WeightInfo for WeightInfo<T> {
-	/// Storage: Proxy Proxies (r:1 w:0)
-	/// Proof: Proxy Proxies (max_values: None, max_size: Some(1233), added: 3708, mode: MaxEncodedLen)
+	/// Storage: `Proxy::Proxies` (r:1 w:0)
+	/// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1233), added: 3708, mode: `MaxEncodedLen`)
 	/// The range of component `p` is `[1, 31]`.
 	fn proxy(p: u32, ) -> Weight {
 		// Proof Size summary in bytes:
@@ -62,12 +61,12 @@ impl<T: frame_system::Config> pallet_proxy::WeightInfo for WeightInfo<T> {
 			.saturating_add(Weight::from_parts(191_683, 0).saturating_mul(p.into()))
 			.saturating_add(T::DbWeight::get().reads(1))
 	}
-	/// Storage: Proxy Proxies (r:1 w:0)
-	/// Proof: Proxy Proxies (max_values: None, max_size: Some(1233), added: 3708, mode: MaxEncodedLen)
-	/// Storage: Proxy Announcements (r:1 w:1)
-	/// Proof: Proxy Announcements (max_values: None, max_size: Some(2225), added: 4700, mode: MaxEncodedLen)
-	/// Storage: System Account (r:1 w:1)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
+	/// Storage: `Proxy::Proxies` (r:1 w:0)
+	/// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1233), added: 3708, mode: `MaxEncodedLen`)
+	/// Storage: `Proxy::Announcements` (r:1 w:1)
+	/// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2225), added: 4700, mode: `MaxEncodedLen`)
+	/// Storage: `System::Account` (r:1 w:1)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
 	/// The range of component `a` is `[0, 31]`.
 	/// The range of component `p` is `[1, 31]`.
 	fn proxy_announced(a: u32, p: u32, ) -> Weight {
@@ -84,10 +83,10 @@ impl<T: frame_system::Config> pallet_proxy::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(3))
 			.saturating_add(T::DbWeight::get().writes(2))
 	}
-	/// Storage: Proxy Announcements (r:1 w:1)
-	/// Proof: Proxy Announcements (max_values: None, max_size: Some(2225), added: 4700, mode: MaxEncodedLen)
-	/// Storage: System Account (r:1 w:1)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
+	/// Storage: `Proxy::Announcements` (r:1 w:1)
+	/// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2225), added: 4700, mode: `MaxEncodedLen`)
+	/// Storage: `System::Account` (r:1 w:1)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
 	/// The range of component `a` is `[0, 31]`.
 	/// The range of component `p` is `[1, 31]`.
 	fn remove_announcement(_a: u32, _p: u32, ) -> Weight {
@@ -100,10 +99,10 @@ impl<T: frame_system::Config> pallet_proxy::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(2))
 	}
-	/// Storage: Proxy Announcements (r:1 w:1)
-	/// Proof: Proxy Announcements (max_values: None, max_size: Some(2225), added: 4700, mode: MaxEncodedLen)
-	/// Storage: System Account (r:1 w:1)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
+	/// Storage: `Proxy::Announcements` (r:1 w:1)
+	/// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2225), added: 4700, mode: `MaxEncodedLen`)
+	/// Storage: `System::Account` (r:1 w:1)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
 	/// The range of component `a` is `[0, 31]`.
 	/// The range of component `p` is `[1, 31]`.
 	fn reject_announcement(a: u32, p: u32, ) -> Weight {
@@ -120,12 +119,12 @@ impl<T: frame_system::Config> pallet_proxy::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(2))
 	}
-	/// Storage: Proxy Proxies (r:1 w:0)
-	/// Proof: Proxy Proxies (max_values: None, max_size: Some(1233), added: 3708, mode: MaxEncodedLen)
-	/// Storage: Proxy Announcements (r:1 w:1)
-	/// Proof: Proxy Announcements (max_values: None, max_size: Some(2225), added: 4700, mode: MaxEncodedLen)
-	/// Storage: System Account (r:1 w:1)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
+	/// Storage: `Proxy::Proxies` (r:1 w:0)
+	/// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1233), added: 3708, mode: `MaxEncodedLen`)
+	/// Storage: `Proxy::Announcements` (r:1 w:1)
+	/// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(2225), added: 4700, mode: `MaxEncodedLen`)
+	/// Storage: `System::Account` (r:1 w:1)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
 	/// The range of component `a` is `[0, 31]`.
 	/// The range of component `p` is `[1, 31]`.
 	fn announce(a: u32, _p: u32, ) -> Weight {
@@ -140,8 +139,8 @@ impl<T: frame_system::Config> pallet_proxy::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(3))
 			.saturating_add(T::DbWeight::get().writes(2))
 	}
-	/// Storage: Proxy Proxies (r:1 w:1)
-	/// Proof: Proxy Proxies (max_values: None, max_size: Some(1233), added: 3708, mode: MaxEncodedLen)
+	/// Storage: `Proxy::Proxies` (r:1 w:1)
+	/// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1233), added: 3708, mode: `MaxEncodedLen`)
 	/// The range of component `p` is `[1, 31]`.
 	fn add_proxy(_p: u32, ) -> Weight {
 		// Proof Size summary in bytes:
@@ -153,8 +152,8 @@ impl<T: frame_system::Config> pallet_proxy::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Proxy Proxies (r:1 w:1)
-	/// Proof: Proxy Proxies (max_values: None, max_size: Some(1233), added: 3708, mode: MaxEncodedLen)
+	/// Storage: `Proxy::Proxies` (r:1 w:1)
+	/// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1233), added: 3708, mode: `MaxEncodedLen`)
 	/// The range of component `p` is `[1, 31]`.
 	fn remove_proxy(p: u32, ) -> Weight {
 		// Proof Size summary in bytes:
@@ -168,8 +167,8 @@ impl<T: frame_system::Config> pallet_proxy::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Proxy Proxies (r:1 w:1)
-	/// Proof: Proxy Proxies (max_values: None, max_size: Some(1233), added: 3708, mode: MaxEncodedLen)
+	/// Storage: `Proxy::Proxies` (r:1 w:1)
+	/// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1233), added: 3708, mode: `MaxEncodedLen`)
 	/// The range of component `p` is `[1, 31]`.
 	fn remove_proxies(_p: u32, ) -> Weight {
 		// Proof Size summary in bytes:
@@ -181,21 +180,23 @@ impl<T: frame_system::Config> pallet_proxy::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Proxy Proxies (r:1 w:1)
-	/// Proof: Proxy Proxies (max_values: None, max_size: Some(1233), added: 3708, mode: MaxEncodedLen)
+	/// Storage: `Proxy::Proxies` (r:1 w:1)
+	/// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1233), added: 3708, mode: `MaxEncodedLen`)
 	/// The range of component `p` is `[1, 31]`.
-	fn create_pure(_p: u32, ) -> Weight {
+	fn create_pure(p: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `177`
 		//  Estimated: `4698`
 		// Minimum execution time: 44_405_000 picoseconds.
 		Weight::from_parts(71_055_316, 0)
 			.saturating_add(Weight::from_parts(0, 4698))
+			// Standard Error: 1_936
+			.saturating_add(Weight::from_parts(2_195, 0).saturating_mul(p.into()))
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Proxy Proxies (r:1 w:1)
-	/// Proof: Proxy Proxies (max_values: None, max_size: Some(1233), added: 3708, mode: MaxEncodedLen)
+	/// Storage: `Proxy::Proxies` (r:1 w:1)
+	/// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(1233), added: 3708, mode: `MaxEncodedLen`)
 	/// The range of component `p` is `[0, 30]`.
 	fn kill_pure(_p: u32, ) -> Weight {
 		// Proof Size summary in bytes:
diff --git a/runtime/common/src/weights/pallet_quota.rs b/runtime/common/src/weights/pallet_quota.rs
index 2dd5ae83a..2e67c768b 100644
--- a/runtime/common/src/weights/pallet_quota.rs
+++ b/runtime/common/src/weights/pallet_quota.rs
@@ -31,7 +31,6 @@
 // --repeat=2
 // --pallet=*
 // --extrinsic=*
-// --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --header=./file_header.txt
@@ -48,8 +47,8 @@ use core::marker::PhantomData;
 /// Weight functions for `pallet_quota`.
 pub struct WeightInfo<T>(PhantomData<T>);
 impl<T: frame_system::Config> pallet_quota::WeightInfo for WeightInfo<T> {
-	/// Storage: Quota RefundQueue (r:1 w:1)
-	/// Proof: Quota RefundQueue (max_values: Some(1), max_size: Some(11266), added: 11761, mode: MaxEncodedLen)
+	/// Storage: `Quota::RefundQueue` (r:1 w:1)
+	/// Proof: `Quota::RefundQueue` (`max_values`: Some(1), `max_size`: Some(11266), added: 11761, mode: `MaxEncodedLen`)
 	fn queue_refund() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `11288`
@@ -60,8 +59,8 @@ impl<T: frame_system::Config> pallet_quota::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Quota IdtyQuota (r:1 w:1)
-	/// Proof: Quota IdtyQuota (max_values: None, max_size: Some(24), added: 2499, mode: MaxEncodedLen)
+	/// Storage: `Quota::IdtyQuota` (r:1 w:1)
+	/// Proof: `Quota::IdtyQuota` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`)
 	fn spend_quota() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `139`
@@ -72,10 +71,10 @@ impl<T: frame_system::Config> pallet_quota::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Quota IdtyQuota (r:1 w:1)
-	/// Proof: Quota IdtyQuota (max_values: None, max_size: Some(24), added: 2499, mode: MaxEncodedLen)
-	/// Storage: System Account (r:1 w:0)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
+	/// Storage: `Quota::IdtyQuota` (r:1 w:1)
+	/// Proof: `Quota::IdtyQuota` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`)
+	/// Storage: `System::Account` (r:2 w:1)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
 	fn try_refund() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `139`
@@ -86,10 +85,10 @@ impl<T: frame_system::Config> pallet_quota::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Quota IdtyQuota (r:1 w:1)
-	/// Proof: Quota IdtyQuota (max_values: None, max_size: Some(24), added: 2499, mode: MaxEncodedLen)
-	/// Storage: System Account (r:1 w:0)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
+	/// Storage: `Quota::IdtyQuota` (r:1 w:1)
+	/// Proof: `Quota::IdtyQuota` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `MaxEncodedLen`)
+	/// Storage: `System::Account` (r:2 w:1)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
 	fn do_refund() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `139`
@@ -100,8 +99,8 @@ impl<T: frame_system::Config> pallet_quota::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Quota RefundQueue (r:1 w:1)
-	/// Proof: Quota RefundQueue (max_values: Some(1), max_size: Some(11266), added: 11761, mode: MaxEncodedLen)
+	/// Storage: `Quota::RefundQueue` (r:1 w:1)
+	/// Proof: `Quota::RefundQueue` (`max_values`: Some(1), `max_size`: Some(11266), added: 11761, mode: `MaxEncodedLen`)
 	fn on_process_refund_queue() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `43`
@@ -112,12 +111,12 @@ impl<T: frame_system::Config> pallet_quota::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Quota RefundQueue (r:1 w:1)
-	/// Proof: Quota RefundQueue (max_values: Some(1), max_size: Some(11266), added: 11761, mode: Measured)
-	/// Storage: Quota IdtyQuota (r:1 w:1)
-	/// Proof: Quota IdtyQuota (max_values: None, max_size: Some(24), added: 2499, mode: Measured)
-	/// Storage: System Account (r:1 w:0)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: Measured)
+	/// Storage: `Quota::RefundQueue` (r:1 w:1)
+	/// Proof: `Quota::RefundQueue` (`max_values`: Some(1), `max_size`: Some(11266), added: 11761, mode: `Measured`)
+	/// Storage: `Quota::IdtyQuota` (r:1 w:1)
+	/// Proof: `Quota::IdtyQuota` (`max_values`: None, `max_size`: Some(24), added: 2499, mode: `Measured`)
+	/// Storage: `System::Account` (r:2 w:1)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `Measured`)
 	/// The range of component `i` is `[1, 256]`.
 	fn on_process_refund_queue_elements(i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
diff --git a/runtime/common/src/weights/pallet_scheduler.rs b/runtime/common/src/weights/pallet_scheduler.rs
index c792e151f..7a86277ae 100644
--- a/runtime/common/src/weights/pallet_scheduler.rs
+++ b/runtime/common/src/weights/pallet_scheduler.rs
@@ -31,7 +31,6 @@
 // --repeat=2
 // --pallet=*
 // --extrinsic=*
-// --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --header=./file_header.txt
@@ -48,8 +47,8 @@ use core::marker::PhantomData;
 /// Weight functions for `pallet_scheduler`.
 pub struct WeightInfo<T>(PhantomData<T>);
 impl<T: frame_system::Config> pallet_scheduler::WeightInfo for WeightInfo<T> {
-	/// Storage: Scheduler IncompleteSince (r:1 w:1)
-	/// Proof: Scheduler IncompleteSince (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen)
+	/// Storage: `Scheduler::IncompleteSince` (r:1 w:1)
+	/// Proof: `Scheduler::IncompleteSince` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
 	fn service_agendas_base() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `30`
@@ -60,8 +59,8 @@ impl<T: frame_system::Config> pallet_scheduler::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Scheduler Agenda (r:1 w:1)
-	/// Proof: Scheduler Agenda (max_values: None, max_size: Some(10463), added: 12938, mode: MaxEncodedLen)
+	/// Storage: `Scheduler::Agenda` (r:1 w:1)
+	/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(10463), added: 12938, mode: `MaxEncodedLen`)
 	/// The range of component `s` is `[0, 50]`.
 	fn service_agenda_base(s: u32, ) -> Weight {
 		// Proof Size summary in bytes:
@@ -83,10 +82,12 @@ impl<T: frame_system::Config> pallet_scheduler::WeightInfo for WeightInfo<T> {
 		Weight::from_parts(10_122_000, 0)
 			.saturating_add(Weight::from_parts(0, 0))
 	}
-	/// Storage: Preimage PreimageFor (r:1 w:1)
-	/// Proof: Preimage PreimageFor (max_values: None, max_size: Some(4194344), added: 4196819, mode: Measured)
-	/// Storage: Preimage StatusFor (r:1 w:1)
-	/// Proof: Preimage StatusFor (max_values: None, max_size: Some(83), added: 2558, mode: MaxEncodedLen)
+	/// Storage: `Preimage::PreimageFor` (r:1 w:1)
+	/// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `Measured`)
+	/// Storage: `Preimage::StatusFor` (r:1 w:0)
+	/// Proof: `Preimage::StatusFor` (`max_values`: None, `max_size`: Some(83), added: 2558, mode: `MaxEncodedLen`)
+	/// Storage: `Preimage::RequestStatusFor` (r:1 w:1)
+	/// Proof: `Preimage::RequestStatusFor` (`max_values`: None, `max_size`: Some(75), added: 2550, mode: `MaxEncodedLen`)
 	/// The range of component `s` is `[128, 4194304]`.
 	fn service_task_fetched(s: u32, ) -> Weight {
 		// Proof Size summary in bytes:
@@ -101,8 +102,8 @@ impl<T: frame_system::Config> pallet_scheduler::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().writes(2))
 			.saturating_add(Weight::from_parts(0, 1).saturating_mul(s.into()))
 	}
-	/// Storage: Scheduler Lookup (r:0 w:1)
-	/// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen)
+	/// Storage: `Scheduler::Lookup` (r:0 w:1)
+	/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
 	fn service_task_named() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
@@ -136,8 +137,8 @@ impl<T: frame_system::Config> pallet_scheduler::WeightInfo for WeightInfo<T> {
 		Weight::from_parts(6_432_000, 0)
 			.saturating_add(Weight::from_parts(0, 0))
 	}
-	/// Storage: Scheduler Agenda (r:1 w:1)
-	/// Proof: Scheduler Agenda (max_values: None, max_size: Some(10463), added: 12938, mode: MaxEncodedLen)
+	/// Storage: `Scheduler::Agenda` (r:1 w:1)
+	/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(10463), added: 12938, mode: `MaxEncodedLen`)
 	/// The range of component `s` is `[0, 49]`.
 	fn schedule(s: u32, ) -> Weight {
 		// Proof Size summary in bytes:
@@ -151,10 +152,10 @@ impl<T: frame_system::Config> pallet_scheduler::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Scheduler Agenda (r:1 w:1)
-	/// Proof: Scheduler Agenda (max_values: None, max_size: Some(10463), added: 12938, mode: MaxEncodedLen)
-	/// Storage: Scheduler Lookup (r:0 w:1)
-	/// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen)
+	/// Storage: `Scheduler::Agenda` (r:1 w:1)
+	/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(10463), added: 12938, mode: `MaxEncodedLen`)
+	/// Storage: `Scheduler::Lookup` (r:0 w:1)
+	/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
 	/// The range of component `s` is `[1, 50]`.
 	fn cancel(s: u32, ) -> Weight {
 		// Proof Size summary in bytes:
@@ -168,10 +169,10 @@ impl<T: frame_system::Config> pallet_scheduler::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(2))
 	}
-	/// Storage: Scheduler Lookup (r:1 w:1)
-	/// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen)
-	/// Storage: Scheduler Agenda (r:1 w:1)
-	/// Proof: Scheduler Agenda (max_values: None, max_size: Some(10463), added: 12938, mode: MaxEncodedLen)
+	/// Storage: `Scheduler::Lookup` (r:1 w:1)
+	/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
+	/// Storage: `Scheduler::Agenda` (r:1 w:1)
+	/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(10463), added: 12938, mode: `MaxEncodedLen`)
 	/// The range of component `s` is `[0, 49]`.
 	fn schedule_named(s: u32, ) -> Weight {
 		// Proof Size summary in bytes:
@@ -185,10 +186,10 @@ impl<T: frame_system::Config> pallet_scheduler::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(2))
 	}
-	/// Storage: Scheduler Lookup (r:1 w:1)
-	/// Proof: Scheduler Lookup (max_values: None, max_size: Some(48), added: 2523, mode: MaxEncodedLen)
-	/// Storage: Scheduler Agenda (r:1 w:1)
-	/// Proof: Scheduler Agenda (max_values: None, max_size: Some(10463), added: 12938, mode: MaxEncodedLen)
+	/// Storage: `Scheduler::Lookup` (r:1 w:1)
+	/// Proof: `Scheduler::Lookup` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`)
+	/// Storage: `Scheduler::Agenda` (r:1 w:1)
+	/// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(10463), added: 12938, mode: `MaxEncodedLen`)
 	/// The range of component `s` is `[1, 50]`.
 	fn cancel_named(s: u32, ) -> Weight {
 		// Proof Size summary in bytes:
diff --git a/runtime/common/src/weights/pallet_session.rs b/runtime/common/src/weights/pallet_session.rs
index 4138b5b10..249b19475 100644
--- a/runtime/common/src/weights/pallet_session.rs
+++ b/runtime/common/src/weights/pallet_session.rs
@@ -31,7 +31,6 @@
 // --repeat=2
 // --pallet=*
 // --extrinsic=*
-// --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --header=./file_header.txt
@@ -48,10 +47,10 @@ use core::marker::PhantomData;
 /// Weight functions for `pallet_session`.
 pub struct WeightInfo<T>(PhantomData<T>);
 impl<T: frame_system::Config> pallet_session::WeightInfo for WeightInfo<T> {
-	/// Storage: Session NextKeys (r:1 w:1)
-	/// Proof Skipped: Session NextKeys (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Session KeyOwner (r:4 w:4)
-	/// Proof Skipped: Session KeyOwner (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `Session::NextKeys` (r:1 w:1)
+	/// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Session::KeyOwner` (r:4 w:4)
+	/// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn set_keys() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `723`
@@ -62,10 +61,10 @@ impl<T: frame_system::Config> pallet_session::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(5))
 			.saturating_add(T::DbWeight::get().writes(5))
 	}
-	/// Storage: Session NextKeys (r:1 w:1)
-	/// Proof Skipped: Session NextKeys (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Session KeyOwner (r:0 w:4)
-	/// Proof Skipped: Session KeyOwner (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `Session::NextKeys` (r:1 w:1)
+	/// Proof: `Session::NextKeys` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Session::KeyOwner` (r:0 w:4)
+	/// Proof: `Session::KeyOwner` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn purge_keys() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `412`
diff --git a/runtime/common/src/weights/pallet_smith_members.rs b/runtime/common/src/weights/pallet_smith_members.rs
index b27fda004..3e89d16dd 100644
--- a/runtime/common/src/weights/pallet_smith_members.rs
+++ b/runtime/common/src/weights/pallet_smith_members.rs
@@ -31,7 +31,6 @@
 // --repeat=2
 // --pallet=*
 // --extrinsic=*
-// --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --header=./file_header.txt
@@ -48,18 +47,18 @@ use core::marker::PhantomData;
 /// Weight functions for `pallet_smith_members`.
 pub struct WeightInfo<T>(PhantomData<T>);
 impl<T: frame_system::Config> pallet_smith_members::WeightInfo for WeightInfo<T> {
-	/// Storage: Identity IdentityIndexOf (r:1 w:0)
-	/// Proof Skipped: Identity IdentityIndexOf (max_values: None, max_size: None, mode: Measured)
-	/// Storage: SmithMembers Smiths (r:2 w:1)
-	/// Proof Skipped: SmithMembers Smiths (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Membership Membership (r:1 w:0)
-	/// Proof Skipped: Membership Membership (max_values: None, max_size: None, mode: Measured)
-	/// Storage: SmithMembers CurrentSession (r:1 w:0)
-	/// Proof Skipped: SmithMembers CurrentSession (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: Parameters ParametersStorage (r:1 w:0)
-	/// Proof Skipped: Parameters ParametersStorage (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: SmithMembers ExpiresOn (r:1 w:1)
-	/// Proof Skipped: SmithMembers ExpiresOn (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `Identity::IdentityIndexOf` (r:1 w:0)
+	/// Proof: `Identity::IdentityIndexOf` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `SmithMembers::Smiths` (r:2 w:1)
+	/// Proof: `SmithMembers::Smiths` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Membership::Membership` (r:1 w:0)
+	/// Proof: `Membership::Membership` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `SmithMembers::CurrentSession` (r:1 w:0)
+	/// Proof: `SmithMembers::CurrentSession` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `Parameters::ParametersStorage` (r:1 w:0)
+	/// Proof: `Parameters::ParametersStorage` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `SmithMembers::ExpiresOn` (r:1 w:1)
+	/// Proof: `SmithMembers::ExpiresOn` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn invite_smith() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `732`
@@ -70,10 +69,10 @@ impl<T: frame_system::Config> pallet_smith_members::WeightInfo for WeightInfo<T>
 			.saturating_add(T::DbWeight::get().reads(7))
 			.saturating_add(T::DbWeight::get().writes(2))
 	}
-	/// Storage: Identity IdentityIndexOf (r:1 w:0)
-	/// Proof Skipped: Identity IdentityIndexOf (max_values: None, max_size: None, mode: Measured)
-	/// Storage: SmithMembers Smiths (r:1 w:1)
-	/// Proof Skipped: SmithMembers Smiths (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `Identity::IdentityIndexOf` (r:1 w:0)
+	/// Proof: `Identity::IdentityIndexOf` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `SmithMembers::Smiths` (r:1 w:1)
+	/// Proof: `SmithMembers::Smiths` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn accept_invitation() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `463`
@@ -84,14 +83,14 @@ impl<T: frame_system::Config> pallet_smith_members::WeightInfo for WeightInfo<T>
 			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Identity IdentityIndexOf (r:1 w:0)
-	/// Proof Skipped: Identity IdentityIndexOf (max_values: None, max_size: None, mode: Measured)
-	/// Storage: SmithMembers Smiths (r:2 w:2)
-	/// Proof Skipped: SmithMembers Smiths (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Parameters ParametersStorage (r:1 w:0)
-	/// Proof Skipped: Parameters ParametersStorage (max_values: Some(1), max_size: None, mode: Measured)
-	/// Storage: SmithMembers CurrentSession (r:1 w:0)
-	/// Proof Skipped: SmithMembers CurrentSession (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: `Identity::IdentityIndexOf` (r:1 w:0)
+	/// Proof: `Identity::IdentityIndexOf` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `SmithMembers::Smiths` (r:2 w:2)
+	/// Proof: `SmithMembers::Smiths` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Parameters::ParametersStorage` (r:1 w:0)
+	/// Proof: `Parameters::ParametersStorage` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
+	/// Storage: `SmithMembers::CurrentSession` (r:1 w:0)
+	/// Proof: `SmithMembers::CurrentSession` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
 	fn certify_smith() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `577`
diff --git a/runtime/common/src/weights/pallet_sudo.rs b/runtime/common/src/weights/pallet_sudo.rs
new file mode 100644
index 000000000..d66cc41fa
--- /dev/null
+++ b/runtime/common/src/weights/pallet_sudo.rs
@@ -0,0 +1,96 @@
+// Copyright 2021-2022 Axiom-Team
+//
+// This file is part of Duniter-v2S.
+//
+// Duniter-v2S is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Affero General Public License as published by
+// the Free Software Foundation, version 3 of the License.
+//
+// Duniter-v2S is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Affero General Public License for more details.
+//
+// You should have received a copy of the GNU Affero General Public License
+// along with Duniter-v2S. If not, see <https://www.gnu.org/licenses/>.
+
+//! Autogenerated weights for `pallet_sudo`
+//!
+//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
+//! DATE: 2024-01-24, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! WORST CASE MAP SIZE: `1000000`
+//! HOSTNAME: `bgallois-ms7d43`, CPU: `12th Gen Intel(R) Core(TM) i3-12100F`
+//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: 1024
+
+// Executed Command:
+// target/release/duniter
+// benchmark
+// pallet
+// --chain=dev
+// --steps=50
+// --repeat=20
+// --pallet=*
+// --extrinsic=*
+// --wasm-execution=compiled
+// --heap-pages=4096
+// --header=./file_header.txt
+// --output=./runtime/common/src/weights/
+
+#![cfg_attr(rustfmt, rustfmt_skip)]
+#![allow(unused_parens)]
+#![allow(unused_imports)]
+#![allow(missing_docs)]
+
+use frame_support::{traits::Get, weights::Weight};
+use core::marker::PhantomData;
+
+/// Weight functions for `pallet_sudo`.
+pub struct WeightInfo<T>(PhantomData<T>);
+impl<T: frame_system::Config> pallet_sudo::WeightInfo for WeightInfo<T> {
+	/// Storage: `Sudo::Key` (r:1 w:1)
+	/// Proof: `Sudo::Key` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`)
+	fn set_key() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `165`
+		//  Estimated: `1517`
+		// Minimum execution time: 6_941_000 picoseconds.
+		Weight::from_parts(7_451_000, 0)
+			.saturating_add(Weight::from_parts(0, 1517))
+			.saturating_add(T::DbWeight::get().reads(1))
+			.saturating_add(T::DbWeight::get().writes(1))
+	}
+	/// Storage: `Sudo::Key` (r:1 w:0)
+	/// Proof: `Sudo::Key` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`)
+	fn sudo() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `165`
+		//  Estimated: `1517`
+		// Minimum execution time: 7_383_000 picoseconds.
+		Weight::from_parts(7_917_000, 0)
+			.saturating_add(Weight::from_parts(0, 1517))
+			.saturating_add(T::DbWeight::get().reads(1))
+	}
+	/// Storage: `Sudo::Key` (r:1 w:0)
+	/// Proof: `Sudo::Key` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`)
+	fn sudo_as() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `165`
+		//  Estimated: `1517`
+		// Minimum execution time: 7_367_000 picoseconds.
+		Weight::from_parts(7_890_000, 0)
+			.saturating_add(Weight::from_parts(0, 1517))
+			.saturating_add(T::DbWeight::get().reads(1))
+	}
+	/// Storage: `Sudo::Key` (r:1 w:1)
+	/// Proof: `Sudo::Key` (`max_values`: Some(1), `max_size`: Some(32), added: 527, mode: `MaxEncodedLen`)
+	fn remove_key() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `165`
+		//  Estimated: `1517`
+		// Minimum execution time: 6_445_000 picoseconds.
+		Weight::from_parts(6_714_000, 0)
+			.saturating_add(Weight::from_parts(0, 1517))
+			.saturating_add(T::DbWeight::get().reads(1))
+			.saturating_add(T::DbWeight::get().writes(1))
+	}
+}
diff --git a/runtime/common/src/weights/pallet_timestamp.rs b/runtime/common/src/weights/pallet_timestamp.rs
index f7376fb79..6518156f0 100644
--- a/runtime/common/src/weights/pallet_timestamp.rs
+++ b/runtime/common/src/weights/pallet_timestamp.rs
@@ -31,7 +31,6 @@
 // --repeat=2
 // --pallet=*
 // --extrinsic=*
-// --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --header=./file_header.txt
@@ -48,14 +47,14 @@ use core::marker::PhantomData;
 /// Weight functions for `pallet_timestamp`.
 pub struct WeightInfo<T>(PhantomData<T>);
 impl<T: frame_system::Config> pallet_timestamp::WeightInfo for WeightInfo<T> {
-	/// Storage: Timestamp Now (r:1 w:1)
-	/// Proof: Timestamp Now (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen)
-	/// Storage: Babe CurrentSlot (r:1 w:0)
-	/// Proof: Babe CurrentSlot (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen)
-	/// Storage: UniversalDividend NextUd (r:1 w:1)
-	/// Proof: UniversalDividend NextUd (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen)
-	/// Storage: Parameters ParametersStorage (r:1 w:0)
-	/// Proof Skipped: Parameters ParametersStorage (max_values: Some(1), max_size: None, mode: Measured)
+	/// Storage: `Timestamp::Now` (r:1 w:1)
+	/// Proof: `Timestamp::Now` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
+	/// Storage: `Babe::CurrentSlot` (r:1 w:0)
+	/// Proof: `Babe::CurrentSlot` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
+	/// Storage: `UniversalDividend::NextUd` (r:1 w:1)
+	/// Proof: `UniversalDividend::NextUd` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
+	/// Storage: `Parameters::ParametersStorage` (r:1 w:0)
+	/// Proof: `Parameters::ParametersStorage` (`max_values`: Some(1), `max_size`: None, mode: `Measured`)
 	fn set() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `379`
diff --git a/runtime/common/src/weights/pallet_treasury.rs b/runtime/common/src/weights/pallet_treasury.rs
index 977455753..578f56c09 100644
--- a/runtime/common/src/weights/pallet_treasury.rs
+++ b/runtime/common/src/weights/pallet_treasury.rs
@@ -31,7 +31,6 @@
 // --repeat=2
 // --pallet=*
 // --extrinsic=*
-// --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --header=./file_header.txt
@@ -48,7 +47,7 @@ use core::marker::PhantomData;
 /// Weight functions for `pallet_treasury`.
 pub struct WeightInfo<T>(PhantomData<T>);
 impl<T: frame_system::Config> pallet_treasury::WeightInfo for WeightInfo<T> {
-	fn spend() -> Weight {
+	fn spend_local() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `0`
 		//  Estimated: `0`
@@ -56,10 +55,10 @@ impl<T: frame_system::Config> pallet_treasury::WeightInfo for WeightInfo<T> {
 		Weight::from_parts(557_000, 0)
 			.saturating_add(Weight::from_parts(0, 0))
 	}
-	/// Storage: Treasury ProposalCount (r:1 w:1)
-	/// Proof: Treasury ProposalCount (max_values: Some(1), max_size: Some(4), added: 499, mode: MaxEncodedLen)
-	/// Storage: Treasury Proposals (r:0 w:1)
-	/// Proof: Treasury Proposals (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen)
+	/// Storage: `Treasury::ProposalCount` (r:1 w:1)
+	/// Proof: `Treasury::ProposalCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`)
+	/// Storage: `Treasury::Proposals` (r:0 w:1)
+	/// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`)
 	fn propose_spend() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `68`
@@ -70,10 +69,10 @@ impl<T: frame_system::Config> pallet_treasury::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(2))
 	}
-	/// Storage: Treasury Proposals (r:1 w:1)
-	/// Proof: Treasury Proposals (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen)
-	/// Storage: System Account (r:1 w:1)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
+	/// Storage: `Treasury::Proposals` (r:1 w:1)
+	/// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`)
+	/// Storage: `System::Account` (r:2 w:2)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
 	fn reject_proposal() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `210`
@@ -84,10 +83,10 @@ impl<T: frame_system::Config> pallet_treasury::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(2))
 	}
-	/// Storage: Treasury Proposals (r:1 w:0)
-	/// Proof: Treasury Proposals (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen)
-	/// Storage: Treasury Approvals (r:1 w:1)
-	/// Proof: Treasury Approvals (max_values: Some(1), max_size: Some(402), added: 897, mode: MaxEncodedLen)
+	/// Storage: `Treasury::Proposals` (r:1 w:0)
+	/// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`)
+	/// Storage: `Treasury::Approvals` (r:1 w:1)
+	/// Proof: `Treasury::Approvals` (`max_values`: Some(1), `max_size`: Some(402), added: 897, mode: `MaxEncodedLen`)
 	/// The range of component `p` is `[0, 99]`.
 	fn approve_proposal(p: u32, ) -> Weight {
 		// Proof Size summary in bytes:
@@ -101,8 +100,8 @@ impl<T: frame_system::Config> pallet_treasury::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Treasury Approvals (r:1 w:1)
-	/// Proof: Treasury Approvals (max_values: Some(1), max_size: Some(402), added: 897, mode: MaxEncodedLen)
+	/// Storage: `Treasury::Approvals` (r:1 w:1)
+	/// Proof: `Treasury::Approvals` (`max_values`: Some(1), `max_size`: Some(402), added: 897, mode: `MaxEncodedLen`)
 	fn remove_approval() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `90`
@@ -113,19 +112,17 @@ impl<T: frame_system::Config> pallet_treasury::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().reads(1))
 			.saturating_add(T::DbWeight::get().writes(1))
 	}
-	/// Storage: Treasury Deactivated (r:1 w:1)
-	/// Proof: Treasury Deactivated (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen)
-	/// Storage: Balances InactiveIssuance (r:1 w:1)
-	/// Proof: Balances InactiveIssuance (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen)
-	/// Storage: Treasury Approvals (r:1 w:1)
-	/// Proof: Treasury Approvals (max_values: Some(1), max_size: Some(402), added: 897, mode: MaxEncodedLen)
-	/// Storage: Treasury Proposals (r:100 w:100)
-	/// Proof: Treasury Proposals (max_values: None, max_size: Some(92), added: 2567, mode: MaxEncodedLen)
-	/// Storage: System Account (r:200 w:200)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
-	/// Storage: Account PendingNewAccounts (r:0 w:100)
-	/// Proof Skipped: Account PendingNewAccounts (max_values: None, max_size: None, mode: Measured)
-	/// The range of component `p` is `[0, 100]`.
+	/// Storage: `System::Account` (r:199 w:199)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
+	/// Storage: `Treasury::Deactivated` (r:1 w:1)
+	/// Proof: `Treasury::Deactivated` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
+	/// Storage: `Treasury::Approvals` (r:1 w:1)
+	/// Proof: `Treasury::Approvals` (`max_values`: Some(1), `max_size`: Some(402), added: 897, mode: `MaxEncodedLen`)
+	/// Storage: `Treasury::Proposals` (r:99 w:99)
+	/// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(92), added: 2567, mode: `MaxEncodedLen`)
+	/// Storage: `Account::PendingNewAccounts` (r:0 w:99)
+	/// Proof: `Account::PendingNewAccounts` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// The range of component `p` is `[0, 99]`.
 	fn on_initialize_proposals(p: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `6 + p * (194 ±0)`
@@ -140,4 +137,52 @@ impl<T: frame_system::Config> pallet_treasury::WeightInfo for WeightInfo<T> {
 			.saturating_add(T::DbWeight::get().writes(3))
 			.saturating_add(T::DbWeight::get().writes((4_u64).saturating_mul(p.into())))
 	}
+	fn spend() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `0`
+		//  Estimated: `0`
+		// Minimum execution time: 0_000 picoseconds.
+		Weight::from_parts(0, 0)
+			.saturating_add(Weight::from_parts(0, 0))
+	}
+	/// Storage: `Treasury::Spends` (r:1 w:1)
+	/// Proof: `Treasury::Spends` (`max_values`: None, `max_size`: Some(61), added: 2536, mode: `MaxEncodedLen`)
+	/// Storage: `System::Account` (r:2 w:2)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
+	/// Storage: `Account::PendingNewAccounts` (r:0 w:1)
+	/// Proof: `Account::PendingNewAccounts` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	fn payout() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `180`
+		//  Estimated: `6192`
+		// Minimum execution time: 42_526_000 picoseconds.
+		Weight::from_parts(43_552_000, 0)
+			.saturating_add(Weight::from_parts(0, 6192))
+			.saturating_add(T::DbWeight::get().reads(3))
+			.saturating_add(T::DbWeight::get().writes(4))
+	}
+	/// Storage: `Treasury::Spends` (r:1 w:1)
+	/// Proof: `Treasury::Spends` (`max_values`: None, `max_size`: Some(61), added: 2536, mode: `MaxEncodedLen`)
+	fn check_status() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `116`
+		//  Estimated: `3526`
+		// Minimum execution time: 8_915_000 picoseconds.
+		Weight::from_parts(9_287_000, 0)
+			.saturating_add(Weight::from_parts(0, 3526))
+			.saturating_add(T::DbWeight::get().reads(1))
+			.saturating_add(T::DbWeight::get().writes(1))
+	}
+	/// Storage: `Treasury::Spends` (r:1 w:1)
+	/// Proof: `Treasury::Spends` (`max_values`: None, `max_size`: Some(61), added: 2536, mode: `MaxEncodedLen`)
+	fn void_spend() -> Weight {
+		// Proof Size summary in bytes:
+		//  Measured:  `116`
+		//  Estimated: `3526`
+		// Minimum execution time: 7_955_000 picoseconds.
+		Weight::from_parts(8_849_000, 0)
+			.saturating_add(Weight::from_parts(0, 3526))
+			.saturating_add(T::DbWeight::get().reads(1))
+			.saturating_add(T::DbWeight::get().writes(1))
+	}
 }
diff --git a/runtime/common/src/weights/pallet_universal_dividend.rs b/runtime/common/src/weights/pallet_universal_dividend.rs
index e1672e02e..889e7c999 100644
--- a/runtime/common/src/weights/pallet_universal_dividend.rs
+++ b/runtime/common/src/weights/pallet_universal_dividend.rs
@@ -17,21 +17,20 @@
 //! Autogenerated weights for `pallet_universal_dividend`
 //!
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2024-01-22, STEPS: `2`, REPEAT: `2`, LOW RANGE: `[]`, HIGH RANGE: `[]`
+//! DATE: 2024-01-24, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]`
 //! WORST CASE MAP SIZE: `1000000`
-//! HOSTNAME: `squirrel`, CPU: `Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz`
-//! EXECUTION: Some(Wasm), WASM-EXECUTION: Compiled, CHAIN: Some("dev"), DB CACHE: 1024
+//! HOSTNAME: `bgallois-ms7d43`, CPU: `12th Gen Intel(R) Core(TM) i3-12100F`
+//! WASM-EXECUTION: `Compiled`, CHAIN: `Some("dev")`, DB CACHE: 1024
 
 // Executed Command:
-// ./target/release/duniter
+// target/release/duniter
 // benchmark
 // pallet
 // --chain=dev
-// --steps=2
-// --repeat=2
+// --steps=50
+// --repeat=20
 // --pallet=*
 // --extrinsic=*
-// --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --header=./file_header.txt
@@ -48,77 +47,76 @@ use core::marker::PhantomData;
 /// Weight functions for `pallet_universal_dividend`.
 pub struct WeightInfo<T>(PhantomData<T>);
 impl<T: frame_system::Config> pallet_universal_dividend::WeightInfo for WeightInfo<T> {
-	/// Storage: Identity IdentityIndexOf (r:1 w:0)
-	/// Proof Skipped: Identity IdentityIndexOf (max_values: None, max_size: None, mode: Measured)
-	/// Storage: Identity Identities (r:1 w:1)
-	/// Proof Skipped: Identity Identities (max_values: None, max_size: None, mode: Measured)
-	/// Storage: UniversalDividend CurrentUdIndex (r:1 w:0)
-	/// Proof: UniversalDividend CurrentUdIndex (max_values: Some(1), max_size: Some(2), added: 497, mode: MaxEncodedLen)
-	/// Storage: UniversalDividend PastReevals (r:1 w:0)
-	/// Proof: UniversalDividend PastReevals (max_values: Some(1), max_size: Some(1602), added: 2097, mode: MaxEncodedLen)
-	/// Storage: System Account (r:1 w:1)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
+	/// Storage: `Identity::IdentityIndexOf` (r:1 w:0)
+	/// Proof: `Identity::IdentityIndexOf` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `Identity::Identities` (r:1 w:1)
+	/// Proof: `Identity::Identities` (`max_values`: None, `max_size`: None, mode: `Measured`)
+	/// Storage: `UniversalDividend::CurrentUdIndex` (r:1 w:0)
+	/// Proof: `UniversalDividend::CurrentUdIndex` (`max_values`: Some(1), `max_size`: Some(2), added: 497, mode: `MaxEncodedLen`)
+	/// Storage: `UniversalDividend::PastReevals` (r:1 w:0)
+	/// Proof: `UniversalDividend::PastReevals` (`max_values`: Some(1), `max_size`: Some(1602), added: 2097, mode: `MaxEncodedLen`)
+	/// Storage: `System::Account` (r:1 w:1)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
 	/// The range of component `i` is `[1, 160]`.
-	fn claim_uds(i: u32, ) -> Weight {
+	fn claim_uds(_i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `644`
 		//  Estimated: `4109`
-		// Minimum execution time: 57_414_000 picoseconds.
-		Weight::from_parts(60_597_685, 0)
+		// Minimum execution time: 25_591_000 picoseconds.
+		Weight::from_parts(27_628_958, 0)
 			.saturating_add(Weight::from_parts(0, 4109))
-			// Standard Error: 32_554
-			.saturating_add(Weight::from_parts(9_814, 0).saturating_mul(i.into()))
 			.saturating_add(T::DbWeight::get().reads(5))
 			.saturating_add(T::DbWeight::get().writes(2))
 	}
-	/// Storage: UniversalDividend CurrentUd (r:1 w:0)
-	/// Proof: UniversalDividend CurrentUd (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen)
-	/// Storage: System Account (r:1 w:1)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
-	/// Storage: Account PendingNewAccounts (r:0 w:1)
-	/// Proof Skipped: Account PendingNewAccounts (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `UniversalDividend::CurrentUd` (r:1 w:0)
+	/// Proof: `UniversalDividend::CurrentUd` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
+	/// Storage: `System::Account` (r:2 w:2)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
+	/// Storage: `Account::PendingNewAccounts` (r:0 w:1)
+	/// Proof: `Account::PendingNewAccounts` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn transfer_ud() -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `93`
-		//  Estimated: `3591`
-		// Minimum execution time: 105_908_000 picoseconds.
-		Weight::from_parts(109_471_000, 0)
-			.saturating_add(Weight::from_parts(0, 3591))
-			.saturating_add(T::DbWeight::get().reads(2))
-			.saturating_add(T::DbWeight::get().writes(2))
+		//  Measured:  `157`
+		//  Estimated: `6192`
+		// Minimum execution time: 47_742_000 picoseconds.
+		Weight::from_parts(49_561_000, 0)
+			.saturating_add(Weight::from_parts(0, 6192))
+			.saturating_add(T::DbWeight::get().reads(3))
+			.saturating_add(T::DbWeight::get().writes(3))
 	}
-	/// Storage: UniversalDividend CurrentUd (r:1 w:0)
-	/// Proof: UniversalDividend CurrentUd (max_values: Some(1), max_size: Some(8), added: 503, mode: MaxEncodedLen)
-	/// Storage: System Account (r:1 w:1)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
-	/// Storage: Account PendingNewAccounts (r:0 w:1)
-	/// Proof Skipped: Account PendingNewAccounts (max_values: None, max_size: None, mode: Measured)
+	/// Storage: `UniversalDividend::CurrentUd` (r:1 w:0)
+	/// Proof: `UniversalDividend::CurrentUd` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`)
+	/// Storage: `System::Account` (r:1 w:1)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
+	/// Storage: `Account::PendingNewAccounts` (r:0 w:1)
+	/// Proof: `Account::PendingNewAccounts` (`max_values`: None, `max_size`: None, mode: `Measured`)
 	fn transfer_ud_keep_alive() -> Weight {
 		// Proof Size summary in bytes:
 		//  Measured:  `93`
 		//  Estimated: `3591`
-		// Minimum execution time: 72_735_000 picoseconds.
-		Weight::from_parts(80_307_000, 0)
+		// Minimum execution time: 34_158_000 picoseconds.
+		Weight::from_parts(35_312_000, 0)
 			.saturating_add(Weight::from_parts(0, 3591))
 			.saturating_add(T::DbWeight::get().reads(2))
 			.saturating_add(T::DbWeight::get().writes(2))
 	}
-	/// Storage: UniversalDividend CurrentUdIndex (r:1 w:0)
-	/// Proof: UniversalDividend CurrentUdIndex (max_values: Some(1), max_size: Some(2), added: 497, mode: MaxEncodedLen)
-	/// Storage: UniversalDividend PastReevals (r:1 w:0)
-	/// Proof: UniversalDividend PastReevals (max_values: Some(1), max_size: Some(1602), added: 2097, mode: MaxEncodedLen)
-	/// Storage: System Account (r:1 w:1)
-	/// Proof: System Account (max_values: None, max_size: Some(126), added: 2601, mode: MaxEncodedLen)
+	/// Storage: `UniversalDividend::CurrentUdIndex` (r:1 w:0)
+	/// Proof: `UniversalDividend::CurrentUdIndex` (`max_values`: Some(1), `max_size`: Some(2), added: 497, mode: `MaxEncodedLen`)
+	/// Storage: `UniversalDividend::PastReevals` (r:1 w:0)
+	/// Proof: `UniversalDividend::PastReevals` (`max_values`: Some(1), `max_size`: Some(1602), added: 2097, mode: `MaxEncodedLen`)
+	/// Storage: `System::Account` (r:1 w:1)
+	/// Proof: `System::Account` (`max_values`: None, `max_size`: Some(126), added: 2601, mode: `MaxEncodedLen`)
 	/// The range of component `i` is `[0, 160]`.
 	fn on_removed_member(i: u32, ) -> Weight {
 		// Proof Size summary in bytes:
-		//  Measured:  `114`
+		//  Measured:  `215`
 		//  Estimated: `3591`
-		// Minimum execution time: 7_661_000 picoseconds.
-		Weight::from_parts(8_259_500, 0)
+		// Minimum execution time: 3_240_000 picoseconds.
+		Weight::from_parts(14_149_848, 0)
 			.saturating_add(Weight::from_parts(0, 3591))
-			// Standard Error: 8_272
-			.saturating_add(Weight::from_parts(206_050, 0).saturating_mul(i.into()))
-			.saturating_add(T::DbWeight::get().reads(1))
+			// Standard Error: 1_525
+			.saturating_add(Weight::from_parts(5_772, 0).saturating_mul(i.into()))
+			.saturating_add(T::DbWeight::get().reads(3))
+			.saturating_add(T::DbWeight::get().writes(1))
 	}
 }
diff --git a/runtime/common/src/weights/pallet_upgrade_origin.rs b/runtime/common/src/weights/pallet_upgrade_origin.rs
index 6333adfe7..287a8b650 100644
--- a/runtime/common/src/weights/pallet_upgrade_origin.rs
+++ b/runtime/common/src/weights/pallet_upgrade_origin.rs
@@ -31,7 +31,6 @@
 // --repeat=2
 // --pallet=*
 // --extrinsic=*
-// --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --header=./file_header.txt
diff --git a/runtime/common/src/weights/pallet_utility.rs b/runtime/common/src/weights/pallet_utility.rs
index 73d4cb17a..3bbc0e50f 100644
--- a/runtime/common/src/weights/pallet_utility.rs
+++ b/runtime/common/src/weights/pallet_utility.rs
@@ -31,7 +31,6 @@
 // --repeat=2
 // --pallet=*
 // --extrinsic=*
-// --execution=wasm
 // --wasm-execution=compiled
 // --heap-pages=4096
 // --header=./file_header.txt
diff --git a/runtime/common/src/weights/paritydb_weights.rs b/runtime/common/src/weights/paritydb_weights.rs
index ceed82df6..4673b94b3 100644
--- a/runtime/common/src/weights/paritydb_weights.rs
+++ b/runtime/common/src/weights/paritydb_weights.rs
@@ -1,26 +1,25 @@
 
 //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 4.0.0-dev
-//! DATE: 2023-12-26 (Y/M/D)
+//! DATE: 2024-01-24 (Y/M/D)
 //! HOSTNAME: `bgallois-ms7d43`, CPU: `12th Gen Intel(R) Core(TM) i3-12100F`
 //!
-//! DATABASE: `ParityDb`, RUNTIME: `ÄžDev`
+//! DATABASE: `ParityDb`, RUNTIME: `Äždev Local Testnet`
 //! BLOCK-NUM: `BlockId::Number(0)`
 //! SKIP-WRITE: `false`, SKIP-READ: `false`, WARMUPS: `1`
 //! STATE-VERSION: `V1`, STATE-CACHE-SIZE: ``
-//! WEIGHT-PATH: `runtime/common/src/weights/`
+//! WEIGHT-PATH: `./runtime/common/src/weights/`
 //! METRIC: `Average`, WEIGHT-MUL: `2.0`, WEIGHT-ADD: `0`
 
 // Executed Command:
 //   target/release/duniter
 //   benchmark
 //   storage
-//   --chain=gdev
+//   --chain=dev
 //   --mul=2
+//   --weight-path=./runtime/common/src/weights/
 //   --state-version=1
-//   --weight-path
-//   runtime/common/src/weights/
 
-/// Storage DB weights for the `ÄžDev` runtime and `ParityDb`.
+/// Storage DB weights for the `Äždev Local Testnet` runtime and `ParityDb`.
 pub mod constants {
 	use frame_support::weights::constants;
 	use sp_core::parameter_types;
@@ -34,31 +33,31 @@ pub mod constants {
 			/// Calculated by multiplying the *Average* of all values with `2.0` and adding `0`.
 			///
 			/// Stats nanoseconds:
-			///   Min, Max: 1_139, 113_508
-			///   Average:  3_659
-			///   Median:   3_601
-			///   Std-Dev:  820.57
+			///   Min, Max: 951, 1_277_318
+			///   Average:  11_592
+			///   Median:   1_567
+			///   Std-Dev:  111445.56
 			///
 			/// Percentiles nanoseconds:
-			///   99th: 5_347
-			///   95th: 4_760
-			///   75th: 4_064
-			read: 7_318 * constants::WEIGHT_REF_TIME_PER_NANOS,
+			///   99th: 10_193
+			///   95th: 2_928
+			///   75th: 1_855
+			read: 23_184 * constants::WEIGHT_REF_TIME_PER_NANOS,
 
 			/// Time to write one storage item.
 			/// Calculated by multiplying the *Average* of all values with `2.0` and adding `0`.
 			///
 			/// Stats nanoseconds:
-			///   Min, Max: 4_337, 511_811
-			///   Average:  25_862
-			///   Median:   24_782
-			///   Std-Dev:  5817.92
+			///   Min, Max: 3_824, 6_440_944
+			///   Average:  58_440
+			///   Median:   8_907
+			///   Std-Dev:  561954.34
 			///
 			/// Percentiles nanoseconds:
-			///   99th: 47_862
-			///   95th: 37_929
-			///   75th: 27_045
-			write: 51_724 * constants::WEIGHT_REF_TIME_PER_NANOS,
+			///   99th: 18_256
+			///   95th: 13_376
+			///   75th: 10_858
+			write: 116_880 * constants::WEIGHT_REF_TIME_PER_NANOS,
 		};
 	}
 
diff --git a/runtime/g1/Cargo.toml b/runtime/g1/Cargo.toml
index 65207b28d..fb0cc1285 100644
--- a/runtime/g1/Cargo.toml
+++ b/runtime/g1/Cargo.toml
@@ -1,7 +1,3 @@
-[build-dependencies.substrate-wasm-builder]
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
 [package]
 authors = ['Axiom-Team Developers <https://axiom-team.fr>']
 edition = "2021"
@@ -10,18 +6,16 @@ license = 'AGPL-3.0'
 name = 'g1-runtime'
 repository = 'https://git.duniter.org/nodes/rust/duniter-v2s'
 version = '3.0.0'
-[package.metadata.docs.rs]
-targets = ['x86_64-unknown-linux-gnu']
 
 [features]
 default = ['std']
+constant-fees = ['common-runtime/constant-fees']
 runtime-benchmarks = [
     'common-runtime/runtime-benchmarks',
     'frame-benchmarking/runtime-benchmarks',
     'frame-support/runtime-benchmarks',
     'frame-system-benchmarking',
     'frame-system/runtime-benchmarks',
-    'hex-literal',
     'pallet-authority-members/runtime-benchmarks',
     'pallet-smith-members/runtime-benchmarks',
     'pallet-babe/runtime-benchmarks',
@@ -44,6 +38,7 @@ runtime-benchmarks = [
     'pallet-session-benchmarking/runtime-benchmarks',
     'pallet-proxy/runtime-benchmarks',
     'pallet-scheduler/runtime-benchmarks',
+    'pallet-sudo/runtime-benchmarks',
     'pallet-timestamp/runtime-benchmarks',
     'pallet-treasury/runtime-benchmarks',
     'pallet-universal-dividend/runtime-benchmarks',
@@ -53,150 +48,197 @@ runtime-benchmarks = [
 ]
 std = [
     'codec/std',
+    'common-runtime/std',
+    'frame-benchmarking/std',
     'frame-executive/std',
     'frame-support/std',
-    'frame-system-rpc-runtime-api/std',
     'frame-system/std',
+    'frame-system-benchmarking/std',
+    'frame-system-rpc-runtime-api/std',
     "frame-try-runtime/std",
-    'pallet-atomic-swap/std',
     'log/std',
+    'pallet-atomic-swap/std',
     'pallet-authority-discovery/std',
     'pallet-authority-members/std',
-    'pallet-smith-members/std',
+    "pallet-authorship/std",
     'pallet-babe/std',
     'pallet-balances/std',
     'pallet-certification/std',
     'pallet-collective/std',
     'pallet-distance/std',
-    'pallet-duniter-test-parameters/std',
     'pallet-duniter-account/std',
-    'pallet-quota/std',
+    'pallet-duniter-test-parameters/std',
     'pallet-duniter-wot/std',
     'pallet-grandpa/std',
     'pallet-identity/std',
-    'pallet-membership/std',
-    'pallet-provide-randomness/std',
     'pallet-im-online/std',
+    'pallet-membership/std',
     'pallet-multisig/std',
+    "pallet-offences/std",
     'pallet-oneshot-account/std',
     'pallet-preimage/std',
+    'pallet-provide-randomness/std',
     'pallet-proxy/std',
+    'pallet-quota/std',
+    'pallet-multisig/std',
+    "pallet-scheduler/std",
     'pallet-session/std',
+    'pallet-session-benchmarking/std',
+    'pallet-smith-members/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-transaction-payment-rpc-runtime-api/std',
     'pallet-treasury/std',
-    'common-runtime/std',
-    'serde',
+    'pallet-universal-dividend/std',
+    'pallet-upgrade-origin/std',
+    'pallet-utility/std',
+    'scale-info/std',
+    "serde/std",
+    "serde_derive",
     'sp-api/std',
     'sp-arithmetic/std',
     'sp-authority-discovery/std',
     'sp-block-builder/std',
     'sp-consensus-babe/std',
+    'sp-consensus-grandpa/std',
     'sp-core/std',
+    'sp-distance/std',
     'sp-inherents/std',
-    'sp-offchain/std',
     'sp-membership/std',
+    'sp-offchain/std',
     'sp-runtime/std',
     'sp-session/std',
     'sp-std/std',
     'sp-transaction-pool/std',
     'sp-version/std',
+    'sp-staking/std',
+    'node-primitives/std',
+    'substrate-wasm-builder',
 ]
 try-runtime = [
-    "frame-executive/try-runtime",
-    "frame-try-runtime",
-    "frame-system/try-runtime",
-    "pallet-authority-discovery/try-runtime",
+    'common-runtime/try-runtime',
+    'frame-executive/try-runtime',
+    'frame-support/try-runtime',
+    'frame-system/try-runtime',
+    'frame-try-runtime/try-runtime',
+    'pallet-atomic-swap/try-runtime',
+    'pallet-authority-discovery/try-runtime',
+    'pallet-authority-members/try-runtime',
     "pallet-authorship/try-runtime",
-    "pallet-balances/try-runtime",
-    "pallet-transaction-payment/try-runtime",
-    "pallet-collective/try-runtime",
-    "pallet-grandpa/try-runtime",
-    "pallet-im-online/try-runtime",
-    "pallet-multisig/try-runtime",
+    'pallet-babe/try-runtime',
+    'pallet-balances/try-runtime',
+    'pallet-certification/try-runtime',
+    'pallet-collective/try-runtime',
+    'pallet-distance/try-runtime',
+    'pallet-duniter-account/try-runtime',
+    'pallet-duniter-test-parameters/try-runtime',
+    'pallet-duniter-wot/try-runtime',
+    'pallet-grandpa/try-runtime',
+    'pallet-identity/try-runtime',
+    'pallet-im-online/try-runtime',
+    'pallet-membership/try-runtime',
+    'pallet-multisig/try-runtime',
     "pallet-offences/try-runtime",
-    "pallet-proxy/try-runtime",
+    'pallet-oneshot-account/try-runtime',
+    'pallet-preimage/try-runtime',
+    'pallet-provide-randomness/try-runtime',
+    'pallet-proxy/try-runtime',
+    'pallet-quota/try-runtime',
+    'pallet-multisig/try-runtime',
     "pallet-scheduler/try-runtime",
-    "pallet-session/try-runtime",
-    "pallet-timestamp/try-runtime",
-    "pallet-treasury/try-runtime",
-    "pallet-babe/try-runtime",
-    "pallet-utility/try-runtime",
+    'pallet-session/try-runtime',
+    'pallet-smith-members/try-runtime',
+    'pallet-sudo/try-runtime',
+    'pallet-timestamp/try-runtime',
+    'pallet-transaction-payment/try-runtime',
+    'pallet-treasury/try-runtime',
+    'pallet-universal-dividend/try-runtime',
+    'pallet-upgrade-origin/try-runtime',
+    'pallet-utility/try-runtime',
 ]
 
 [dev-dependencies]
-sp-io = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-keyring = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
+sp-keyring = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-staking = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+
+[build-dependencies]
+substrate-wasm-builder = { git = "https://github.com/duniter/duniter-polkadot-sdk", optional = true , branch = "duniter-substrate-v1.6.0" }
 
 [dependencies]
+
+# crates.io
+codec = { package = "parity-scale-codec", version = "3.6.9", features = ["derive"], default-features = false }
 # local
 common-runtime = { path = "../common", default-features = false }
+
+# substrate benchmarking
+frame-benchmarking = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false, optional = false }
+frame-executive = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+frame-support = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+frame-system = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+frame-system-benchmarking = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false, optional = true }
+frame-system-rpc-runtime-api = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+
+# substrate
+frame-try-runtime = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false, optional = true }
+hex-literal = { version = '0.4.1', default-features = false, optional = true }
+log = { version = "0.4.20", default-features = false }
+pallet-atomic-swap = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-authority-discovery = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-authority-members = { path = '../../pallets/authority-members', default-features = false }
-pallet-smith-members = { path = '../../pallets/smith-members', default-features = false }
+pallet-authorship = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-babe = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-balances = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-certification = { path = '../../pallets/certification', default-features = false }
+pallet-collective = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-distance = { path = "../../pallets/distance", 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-quota = { path = '../../pallets/quota', default-features = false }
+pallet-duniter-test-parameters = { path = '../../pallets/duniter-test-parameters', default-features = false }
 pallet-duniter-wot = { path = '../../pallets/duniter-wot', default-features = false }
+pallet-grandpa = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-identity = { path = '../../pallets/identity', default-features = false }
+pallet-im-online = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-membership = { path = '../../pallets/membership', default-features = false }
+pallet-multisig = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-offences = { path = '../../pallets/offences', default-features = false }
 pallet-oneshot-account = { path = '../../pallets/oneshot-account', default-features = false }
+pallet-preimage = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-provide-randomness = { path = '../../pallets/provide-randomness', default-features = false }
+pallet-proxy = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-quota = { path = '../../pallets/quota', default-features = false }
+pallet-scheduler = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-session = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-session-benchmarking = { path = '../../pallets/session-benchmarking', default-features = false }
+pallet-smith-members = { path = '../../pallets/smith-members', default-features = false }
+pallet-sudo = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-timestamp = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-transaction-payment = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-transaction-payment-rpc-runtime-api = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-treasury = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-universal-dividend = { path = '../../pallets/universal-dividend', default-features = false }
 pallet-upgrade-origin = { path = '../../pallets/upgrade-origin', default-features = false }
+pallet-utility = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
+serde = { version = "1.0.195", default-features = false }
+serde_derive = { version = "1.0.195", default-features = false, optional = true }
+sp-api = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-arithmetic = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-authority-discovery = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-block-builder = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-consensus-babe = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-consensus-grandpa = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-core = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-distance = { path = '../../primitives/distance', default-features = false }
+sp-inherents = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 sp-membership = { path = '../../primitives/membership', default-features = false }
-pallet-offences = { path = '../../pallets/offences', default-features = false }
-
-# crates.io
-codec = { package = "parity-scale-codec", version = "3.4.0", features = ["derive"], default-features = false }
-log = { version = "0.4.17", default-features = false }
-hex-literal = { version = '0.4.1', default-features = false, optional = true }
-scale-info = { version = "2.5.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.139", default-features = false, optional = true, features = ["derive"] }
+sp-offchain = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-runtime = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-session = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-std = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-transaction-pool = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-version = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+node-primitives = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 
-# substrate
-frame-benchmarking = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false, optional = true }
-frame-try-runtime = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false, optional = true }
-frame-executive = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-frame-support = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-frame-system = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-frame-system-benchmarking = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false, optional = true }
-frame-system-rpc-runtime-api = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false}
-pallet-atomic-swap = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-authority-discovery = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-authorship = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-babe = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-balances = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-collective = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-grandpa = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-im-online = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-multisig = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-preimage = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-proxy = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-scheduler = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-session = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-session-benchmarking = { path = '../../pallets/session-benchmarking', default-features = false }
-pallet-sudo = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-timestamp = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-transaction-payment = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-transaction-payment-rpc-runtime-api = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-treasury = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-utility = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-api = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-arithmetic = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-authority-discovery = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-block-builder = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-consensus-babe = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-core = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-inherents = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-offchain = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-runtime = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-session = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-std = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-transaction-pool = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-version = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
+[package.metadata.docs.rs]
+targets = ['x86_64-unknown-linux-gnu']
diff --git a/runtime/g1/build.rs b/runtime/g1/build.rs
index decf500c1..b31efa2f0 100644
--- a/runtime/g1/build.rs
+++ b/runtime/g1/build.rs
@@ -14,12 +14,13 @@
 // You should have received a copy of the GNU Affero General Public License
 // along with Duniter-v2S. If not, see <https://www.gnu.org/licenses/>.
 
-use substrate_wasm_builder::WasmBuilder;
-
 fn main() {
-    WasmBuilder::new()
-        .with_current_project()
-        .export_heap_base()
-        .import_memory()
-        .build()
+    #[cfg(feature = "std")]
+    {
+        substrate_wasm_builder::WasmBuilder::new()
+            .with_current_project()
+            .export_heap_base()
+            .import_memory()
+            .build();
+    }
 }
diff --git a/runtime/g1/src/lib.rs b/runtime/g1/src/lib.rs
index 8c9bca67c..e3f5a7228 100644
--- a/runtime/g1/src/lib.rs
+++ b/runtime/g1/src/lib.rs
@@ -154,6 +154,7 @@ mod benches {
         [pallet_balances, Balances]
         [frame_benchmarking::baseline, Baseline::<Runtime>]
         [pallet_collective, TechnicalCommittee]
+        [pallet_sudo, Sudo]
         [pallet_session, SessionBench::<Runtime>]
         [pallet_im_online, ImOnline]
         [pallet_multisig, Multisig]
@@ -189,7 +190,7 @@ impl Contains<RuntimeCall> for BaseCallFilter {
     PartialOrd,
     codec::Encode,
     codec::Decode,
-    frame_support::RuntimeDebug,
+    frame_support::pallet_prelude::RuntimeDebug,
     codec::MaxEncodedLen,
     scale_info::TypeInfo,
 )]
@@ -232,69 +233,62 @@ impl frame_support::traits::InstanceFilter<RuntimeCall> for ProxyType {
     }
 }
 
-common_runtime::pallets_config! {
-    impl pallet_sudo::Config for Runtime {
-        type RuntimeEvent = RuntimeEvent;
-        type RuntimeCall = RuntimeCall;
-    }
-}
+// Configure pallets to include in runtime.
+common_runtime::pallets_config! {}
 
 // Create the runtime by composing the pallets that were previously configured.
 construct_runtime!(
-    pub enum Runtime where
-        Block = Block,
-        NodeBlock = common_runtime::Block,
-        UncheckedExtrinsic = UncheckedExtrinsic
+    pub enum Runtime
     {
         // Basic stuff
-        System: frame_system::{Pallet, Call, Config, Storage, Event<T>} = 0,
-        Account: pallet_duniter_account::{Pallet, Storage, Config<T>, Event<T>} = 1,
-        Scheduler: pallet_scheduler::{Pallet, Call, Storage, Event<T>} = 2,
+        System: frame_system = 0,
+        Account: pallet_duniter_account = 1,
+        Scheduler: pallet_scheduler = 2,
 
         // Block creation
-        Babe: pallet_babe::{Pallet, Call, Storage, Config, ValidateUnsigned} = 3,
-        Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 4,
+        Babe: pallet_babe = 3,
+        Timestamp: pallet_timestamp = 4,
 
         // Money management
-        Balances: pallet_balances::{Pallet, Call, Storage, Config<T>, Event<T>} = 6,
-        TransactionPayment: pallet_transaction_payment::{Pallet, Storage, Event<T>} = 32,
-        OneshotAccount: pallet_oneshot_account::{Pallet, Call, Storage, Event<T>} = 7,
-        Quota: pallet_quota::{Pallet, Storage, Config<T>, Event<T>} = 66,
+        Balances: pallet_balances = 6,
+        TransactionPayment: pallet_transaction_payment = 32,
+        OneshotAccount: pallet_oneshot_account = 7,
+        Quota: pallet_quota = 66,
 
-        // Consensus support.
-        SmithMembers: pallet_smith_members::{Pallet, Call, Storage, Config<T>, Event<T>} = 10,
-        AuthorityMembers: pallet_authority_members::{Pallet, Call, Storage, Config<T>, Event<T>} = 11,
-        Authorship: pallet_authorship::{Pallet, Storage} = 12,
-        Offences: pallet_offences::{Pallet, Storage, Event} = 13,
-        Historical: session_historical::{Pallet} = 14,
-        Session: pallet_session::{Pallet, Call, Storage, Event, Config<T>} = 15,
-        Grandpa: pallet_grandpa::{Pallet, Call, Storage, Config, Event, ValidateUnsigned} = 16,
-        ImOnline: pallet_im_online::{Pallet, Call, Storage, Event<T>, ValidateUnsigned, Config<T>} = 17,
-        AuthorityDiscovery: pallet_authority_discovery::{Pallet, Config} = 18,
+        // Consensus support
+        SmithMembers: pallet_smith_members = 10,
+        AuthorityMembers: pallet_authority_members = 11,
+        Authorship: pallet_authorship = 12,
+        Offences: pallet_offences = 13,
+        Historical: session_historical = 14,
+        Session: pallet_session = 15,
+        Grandpa: pallet_grandpa= 16,
+        ImOnline: pallet_im_online = 17,
+        AuthorityDiscovery: pallet_authority_discovery = 18,
 
-        // Governance stuff.
-        Sudo: pallet_sudo::{Pallet, Call, Config<T>, Storage, Event<T>} = 20,
-        UpgradeOrigin: pallet_upgrade_origin::{Pallet, Call, Event} = 21,
-        Preimage: pallet_preimage::{Pallet, Call, Storage, Event<T>} = 22,
-        TechnicalCommittee: pallet_collective::<Instance2>::{Pallet, Call, Config<T>, Storage, Event<T>, Origin<T>} = 23,
+        // Governance stuff
+        Sudo: pallet_sudo = 20,
+        UpgradeOrigin: pallet_upgrade_origin = 21,
+        Preimage: pallet_preimage = 22,
+        TechnicalCommittee: pallet_collective::<Instance2> = 23,
 
         // Universal dividend
-        UniversalDividend: pallet_universal_dividend::{Pallet, Call, Config<T>, Storage, Event<T>} = 30,
+        UniversalDividend: pallet_universal_dividend = 30,
 
         // Web Of Trust
-        Wot: pallet_duniter_wot::{Pallet} = 40,
-        Identity: pallet_identity::{Pallet, Call, Config<T>, Storage, Event<T>} = 41,
-        Membership: pallet_membership::{Pallet, Config<T>, Storage, Event<T>} = 42,
-        Certification: pallet_certification::{Pallet, Call, Config<T>, Storage, Event<T>} = 43,
-        Distance: pallet_distance::{Pallet, Call, Storage, Inherent, Event<T>} = 44,
+        Wot: pallet_duniter_wot = 40,
+        Identity: pallet_identity = 41,
+        Membership: pallet_membership = 42,
+        Certification: pallet_certification = 43,
+        Distance: pallet_distance = 44,
 
         // Utilities
-        AtomicSwap: pallet_atomic_swap::{Pallet, Call, Storage, Event<T>} = 50,
-        Multisig: pallet_multisig::{Pallet, Call, Storage, Event<T>} = 51,
-        ProvideRandomness: pallet_provide_randomness::{Pallet, Call, Storage, Event} = 52,
-        Proxy: pallet_proxy::{Pallet, Call, Storage, Event<T>} = 53,
-        Utility: pallet_utility::{Pallet, Call, Event} = 54,
-        Treasury: pallet_treasury::{Pallet, Call, Config, Storage, Event<T>} = 55,
+        AtomicSwap: pallet_atomic_swap = 50,
+        Multisig: pallet_multisig = 51,
+        ProvideRandomness: pallet_provide_randomness = 52,
+        Proxy: pallet_proxy = 53,
+        Utility: pallet_utility = 54,
+        Treasury: pallet_treasury = 55,
     }
 );
 
diff --git a/runtime/gdev/Cargo.toml b/runtime/gdev/Cargo.toml
index 716482251..7a1066381 100644
--- a/runtime/gdev/Cargo.toml
+++ b/runtime/gdev/Cargo.toml
@@ -1,7 +1,3 @@
-[build-dependencies.substrate-wasm-builder]
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
 [package]
 authors = ['Axiom-Team Developers <https://axiom-team.fr>']
 edition = "2021"
@@ -10,18 +6,16 @@ license = 'AGPL-3.0'
 name = 'gdev-runtime'
 repository = 'https://git.duniter.org/nodes/rust/duniter-v2s'
 version = '3.0.0'
-[package.metadata.docs.rs]
-targets = ['x86_64-unknown-linux-gnu']
 
 [features]
 default = ['std']
+constant-fees = ['common-runtime/constant-fees']
 runtime-benchmarks = [
     'common-runtime/runtime-benchmarks',
     'frame-benchmarking/runtime-benchmarks',
     'frame-support/runtime-benchmarks',
-    'frame-system-benchmarking',
+    'frame-system-benchmarking/runtime-benchmarks',
     'frame-system/runtime-benchmarks',
-    'hex-literal',
     'pallet-authority-members/runtime-benchmarks',
     'pallet-smith-members/runtime-benchmarks',
     'pallet-babe/runtime-benchmarks',
@@ -44,6 +38,7 @@ runtime-benchmarks = [
     'pallet-session-benchmarking/runtime-benchmarks',
     'pallet-proxy/runtime-benchmarks',
     'pallet-scheduler/runtime-benchmarks',
+    'pallet-sudo/runtime-benchmarks',
     'pallet-timestamp/runtime-benchmarks',
     'pallet-treasury/runtime-benchmarks',
     'pallet-universal-dividend/runtime-benchmarks',
@@ -53,46 +48,53 @@ runtime-benchmarks = [
 ]
 std = [
     'codec/std',
+    'frame-try-runtime?/std',
     'common-runtime/std',
+    'frame-benchmarking?/std',
     'frame-executive/std',
     'frame-support/std',
-    'frame-system-rpc-runtime-api/std',
     'frame-system/std',
+    'frame-system-benchmarking?/std',
+    'frame-system-rpc-runtime-api/std',
     "frame-try-runtime/std",
     'log/std',
     'pallet-atomic-swap/std',
     'pallet-authority-discovery/std',
     'pallet-authority-members/std',
-    'pallet-smith-members/std',
+    "pallet-authorship/std",
     'pallet-babe/std',
     'pallet-balances/std',
     'pallet-certification/std',
     'pallet-collective/std',
     'pallet-distance/std',
-    'pallet-duniter-test-parameters/std',
     'pallet-duniter-account/std',
-    'pallet-quota/std',
+    'pallet-duniter-test-parameters/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-membership/std',
     'pallet-multisig/std',
     "pallet-offences/std",
+    'pallet-oneshot-account/std',
     'pallet-preimage/std',
+    'pallet-provide-randomness/std',
     'pallet-proxy/std',
+    'pallet-quota/std',
+    'pallet-multisig/std',
     "pallet-scheduler/std",
     'pallet-session/std',
+    'pallet-session-benchmarking/std',
+    'pallet-smith-members/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-transaction-payment-rpc-runtime-api/std',
     'pallet-treasury/std',
+    'pallet-universal-dividend/std',
+    'pallet-upgrade-origin/std',
     'pallet-utility/std',
+    'scale-info/std',
     "serde/std",
     "serde_derive",
     'sp-api/std',
@@ -100,115 +102,146 @@ std = [
     'sp-authority-discovery/std',
     'sp-block-builder/std',
     'sp-consensus-babe/std',
+    'sp-consensus-grandpa/std',
     'sp-core/std',
     'sp-distance/std',
     'sp-inherents/std',
-    'sp-offchain/std',
     'sp-membership/std',
+    'sp-offchain/std',
     'sp-runtime/std',
     'sp-session/std',
     'sp-std/std',
     'sp-transaction-pool/std',
     'sp-version/std',
+    'sp-staking/std',
+    'sp-io/std',
+    'node-primitives/std',
+    'substrate-wasm-builder',
 ]
 try-runtime = [
-    "common-runtime/try-runtime",
-    "frame-executive/try-runtime",
-    "frame-try-runtime",
-    "frame-system/try-runtime",
-    "pallet-authority-discovery/try-runtime",
+    'common-runtime/try-runtime',
+    'frame-executive/try-runtime',
+    'frame-support/try-runtime',
+    'frame-system/try-runtime',
+    'frame-try-runtime/try-runtime',
+    'pallet-atomic-swap/try-runtime',
+    'pallet-authority-discovery/try-runtime',
+    'pallet-authority-members/try-runtime',
     "pallet-authorship/try-runtime",
-    "pallet-balances/try-runtime",
-    "pallet-transaction-payment/try-runtime",
-    "pallet-collective/try-runtime",
-    "pallet-grandpa/try-runtime",
-    "pallet-im-online/try-runtime",
-    "pallet-multisig/try-runtime",
+    'pallet-babe/try-runtime',
+    'pallet-balances/try-runtime',
+    'pallet-certification/try-runtime',
+    'pallet-collective/try-runtime',
+    'pallet-distance/try-runtime',
+    'pallet-duniter-account/try-runtime',
+    'pallet-duniter-test-parameters/try-runtime',
+    'pallet-duniter-wot/try-runtime',
+    'pallet-grandpa/try-runtime',
+    'pallet-identity/try-runtime',
+    'pallet-im-online/try-runtime',
+    'pallet-membership/try-runtime',
+    'pallet-multisig/try-runtime',
     "pallet-offences/try-runtime",
-    "pallet-proxy/try-runtime",
+    'pallet-oneshot-account/try-runtime',
+    'pallet-preimage/try-runtime',
+    'pallet-provide-randomness/try-runtime',
+    'pallet-proxy/try-runtime',
+    'pallet-quota/try-runtime',
+    'pallet-multisig/try-runtime',
     "pallet-scheduler/try-runtime",
-    "pallet-session/try-runtime",
-    "pallet-timestamp/try-runtime",
-    "pallet-treasury/try-runtime",
-    "pallet-babe/try-runtime",
-    "pallet-utility/try-runtime",
+    'pallet-session/try-runtime',
+    'pallet-smith-members/try-runtime',
+    'pallet-sudo/try-runtime',
+    'pallet-timestamp/try-runtime',
+    'pallet-transaction-payment/try-runtime',
+    'pallet-treasury/try-runtime',
+    'pallet-universal-dividend/try-runtime',
+    'pallet-upgrade-origin/try-runtime',
+    'pallet-utility/try-runtime',
 ]
 
 [dev-dependencies]
-sp-io = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-keyring = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-staking = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
+sp-keyring = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-staking = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-io = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+
+[build-dependencies]
+substrate-wasm-builder = { git = "https://github.com/duniter/duniter-polkadot-sdk", optional = true , branch = "duniter-substrate-v1.6.0" }
 
 [dependencies]
+
+# crates.io
+codec = { package = "parity-scale-codec", version = "3.6.9", features = ["derive"], default-features = false }
 # local
 common-runtime = { path = "../common", default-features = false }
+
+# substrate benchmarking
+frame-benchmarking = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false, optional = true }
+frame-executive = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+frame-support = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+frame-system = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+frame-system-benchmarking = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false, optional = true }
+frame-system-rpc-runtime-api = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+
+# substrate
+frame-try-runtime = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false, optional = true }
+hex-literal = { version = '0.4.1', default-features = false, optional = true }
+log = { version = "0.4.20", default-features = false }
+pallet-atomic-swap = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-authority-discovery = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-authority-members = { path = '../../pallets/authority-members', default-features = false }
-pallet-smith-members = { path = '../../pallets/smith-members', default-features = false }
+pallet-authorship = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-babe = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-balances = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-certification = { path = '../../pallets/certification', default-features = false }
+pallet-collective = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-distance = { path = "../../pallets/distance", 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-quota = { path = '../../pallets/quota', default-features = false }
+pallet-duniter-test-parameters = { path = '../../pallets/duniter-test-parameters', default-features = false }
 pallet-duniter-wot = { path = '../../pallets/duniter-wot', default-features = false }
+pallet-grandpa = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-identity = { path = '../../pallets/identity', default-features = false }
+pallet-im-online = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-membership = { path = '../../pallets/membership', default-features = false }
+pallet-multisig = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-offences = { path = '../../pallets/offences', default-features = false }
 pallet-oneshot-account = { path = '../../pallets/oneshot-account', default-features = false }
+pallet-preimage = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-provide-randomness = { path = '../../pallets/provide-randomness', default-features = false }
-pallet-universal-dividend = { path = '../../pallets/universal-dividend', default-features = false }
+pallet-proxy = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-quota = { path = '../../pallets/quota', default-features = false }
+pallet-scheduler = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-session = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-session-benchmarking = { path = '../../pallets/session-benchmarking', default-features = false }
+pallet-smith-members = { path = '../../pallets/smith-members', default-features = false }
+pallet-sudo = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-timestamp = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-transaction-payment = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-transaction-payment-rpc-runtime-api = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-treasury = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-universal-dividend = { path = '../../pallets/universal-dividend', default-features = false }
 pallet-upgrade-origin = { path = '../../pallets/upgrade-origin', default-features = false }
+pallet-utility = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
+serde = { version = "1.0.195", default-features = false }
+serde_derive = { version = "1.0.195", default-features = false, optional = true }
+sp-api = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-arithmetic = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-authority-discovery = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-block-builder = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-consensus-babe = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-consensus-grandpa = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-core = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 sp-distance = { path = '../../primitives/distance', default-features = false }
+sp-inherents = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 sp-membership = { path = '../../primitives/membership', default-features = false }
+sp-offchain = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-runtime = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-session = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-std = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-transaction-pool = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-version = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+node-primitives = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 
-# crates.io
-codec = { package = "parity-scale-codec", version = "3.4.0", features = ["derive"], default-features = false }
-log = { version = "0.4.17", default-features = false }
-hex-literal = { version = '0.4.1', default-features = false, optional = true }
-scale-info = { version = "2.5.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.139", default-features = false }
-serde_derive = { version = "1.0.117", default-features = false, optional = true }
-
-# substrate
-frame-try-runtime = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false, optional = true }
-frame-executive = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-frame-support = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-frame-system = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-frame-system-rpc-runtime-api = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false}
-pallet-atomic-swap = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-authority-discovery = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-authorship = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-babe = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-balances = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-collective = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-grandpa = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-im-online = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-multisig = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-preimage = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-proxy = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-scheduler = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-session = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-sudo = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-timestamp = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-transaction-payment = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-transaction-payment-rpc-runtime-api = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-treasury = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-utility = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-api = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-arithmetic = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-authority-discovery = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-block-builder = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-consensus-babe = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-consensus-grandpa = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-core = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-inherents = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-offchain = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-runtime = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-session = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-std = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-transaction-pool = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-version = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-
-# substrate benchmarking
-frame-benchmarking = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false, optional = false }
-frame-system-benchmarking = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false, optional = true }
+[package.metadata.docs.rs]
+targets = ['x86_64-unknown-linux-gnu']
diff --git a/runtime/gdev/build.rs b/runtime/gdev/build.rs
index decf500c1..b31efa2f0 100644
--- a/runtime/gdev/build.rs
+++ b/runtime/gdev/build.rs
@@ -14,12 +14,13 @@
 // You should have received a copy of the GNU Affero General Public License
 // along with Duniter-v2S. If not, see <https://www.gnu.org/licenses/>.
 
-use substrate_wasm_builder::WasmBuilder;
-
 fn main() {
-    WasmBuilder::new()
-        .with_current_project()
-        .export_heap_base()
-        .import_memory()
-        .build()
+    #[cfg(feature = "std")]
+    {
+        substrate_wasm_builder::WasmBuilder::new()
+            .with_current_project()
+            .export_heap_base()
+            .import_memory()
+            .build();
+    }
 }
diff --git a/runtime/gdev/src/lib.rs b/runtime/gdev/src/lib.rs
index d64153d64..485138f83 100644
--- a/runtime/gdev/src/lib.rs
+++ b/runtime/gdev/src/lib.rs
@@ -159,6 +159,7 @@ mod benches {
         [pallet_collective, TechnicalCommittee]
         [pallet_session, SessionBench::<Runtime>]
         [pallet_im_online, ImOnline]
+        [pallet_sudo, Sudo]
         [pallet_multisig, Multisig]
         [pallet_preimage, Preimage]
         [pallet_proxy, Proxy]
@@ -194,7 +195,7 @@ impl Contains<RuntimeCall> for BaseCallFilter {
     PartialOrd,
     codec::Encode,
     codec::Decode,
-    frame_support::RuntimeDebug,
+    frame_support::pallet_prelude::RuntimeDebug,
     codec::MaxEncodedLen,
     scale_info::TypeInfo,
 )]
@@ -270,76 +271,68 @@ common_runtime::pallets_config! {
         pallet_duniter_test_parameters::SmithInactivityMaxDuration<Runtime>;
 
     impl pallet_duniter_test_parameters::Config for Runtime {
+        type BlockNumber = u32;
         type CertCount = u32;
         type PeriodCount = Balance;
         type SessionCount = u32;
     }
-
-    impl pallet_sudo::Config for Runtime {
-        type RuntimeEvent = RuntimeEvent;
-        type RuntimeCall = RuntimeCall;
-    }
 }
 
 // Create the runtime by composing the pallets that were previously configured.
 construct_runtime!(
-    pub enum Runtime where
-        Block = Block,
-        NodeBlock = common_runtime::Block,
-        UncheckedExtrinsic = UncheckedExtrinsic
-    {
+    pub enum Runtime    {
         // Basic stuff
-        System: frame_system::{Pallet, Call, Config, Storage, Event<T>} = 0,
-        Account: pallet_duniter_account::{Pallet, Call, Storage, Config<T>, Event<T>} = 1,
-        Scheduler: pallet_scheduler::{Pallet, Call, Storage, Event<T>} = 2,
+        System: frame_system = 0,
+        Account: pallet_duniter_account = 1,
+        Scheduler: pallet_scheduler = 2,
 
         // Block creation
-        Babe: pallet_babe::{Pallet, Call, Storage, Config, ValidateUnsigned} = 3,
-        Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 4,
+        Babe: pallet_babe = 3,
+        Timestamp: pallet_timestamp = 4,
 
         // Test parameters
-        Parameters: pallet_duniter_test_parameters::{Pallet, Config<T>, Storage} = 5,
+        Parameters: pallet_duniter_test_parameters = 5,
 
         // Money management
-        Balances: pallet_balances::{Pallet, Call, Storage, Config<T>, Event<T>} = 6,
-        TransactionPayment: pallet_transaction_payment::{Pallet, Storage, Event<T>} = 32,
-        OneshotAccount: pallet_oneshot_account::{Pallet, Call, Storage, Event<T>} = 7,
-        Quota: pallet_quota::{Pallet, Storage, Config<T>, Event<T>} = 66,
+        Balances: pallet_balances = 6,
+        TransactionPayment: pallet_transaction_payment = 32,
+        OneshotAccount: pallet_oneshot_account = 7,
+        Quota: pallet_quota = 66,
 
         // Consensus support
-        SmithMembers: pallet_smith_members::{Pallet, Call, Storage, Config<T>, Event<T>} = 10,
-        AuthorityMembers: pallet_authority_members::{Pallet, Call, Storage, Config<T>, Event<T>} = 11,
-        Authorship: pallet_authorship::{Pallet, Storage} = 12,
-        Offences: pallet_offences::{Pallet, Storage, Event} = 13,
-        Historical: session_historical::{Pallet} = 14,
-        Session: pallet_session::{Pallet, Call, Storage, Event, Config<T>} = 15,
-        Grandpa: pallet_grandpa::{Pallet, Call, Storage, Config, Event, ValidateUnsigned} = 16,
-        ImOnline: pallet_im_online::{Pallet, Call, Storage, Event<T>, ValidateUnsigned, Config<T>} = 17,
-        AuthorityDiscovery: pallet_authority_discovery::{Pallet, Config} = 18,
+        SmithMembers: pallet_smith_members = 10,
+        AuthorityMembers: pallet_authority_members = 11,
+        Authorship: pallet_authorship = 12,
+        Offences: pallet_offences = 13,
+        Historical: session_historical = 14,
+        Session: pallet_session = 15,
+        Grandpa: pallet_grandpa= 16,
+        ImOnline: pallet_im_online = 17,
+        AuthorityDiscovery: pallet_authority_discovery = 18,
 
         // Governance stuff
-        Sudo: pallet_sudo::{Pallet, Call, Config<T>, Storage, Event<T>} = 20,
-        UpgradeOrigin: pallet_upgrade_origin::{Pallet, Call, Event} = 21,
-        Preimage: pallet_preimage::{Pallet, Call, Storage, Event<T>} = 22,
-        TechnicalCommittee: pallet_collective::<Instance2>::{Pallet, Call, Config<T>, Storage, Event<T>, Origin<T>} = 23,
+        Sudo: pallet_sudo = 20,
+        UpgradeOrigin: pallet_upgrade_origin = 21,
+        Preimage: pallet_preimage = 22,
+        TechnicalCommittee: pallet_collective::<Instance2> = 23,
 
         // Universal dividend
-        UniversalDividend: pallet_universal_dividend::{Pallet, Call, Config<T>, Storage, Event<T>} = 30,
+        UniversalDividend: pallet_universal_dividend = 30,
 
         // Web Of Trust
-        Wot: pallet_duniter_wot::{Pallet} = 40,
-        Identity: pallet_identity::{Pallet, Call, Config<T>, Storage, Event<T>} = 41,
-        Membership: pallet_membership::{Pallet, Config<T>, Storage, Event<T>} = 42,
-        Certification: pallet_certification::{Pallet, Call, Config<T>, Storage, Event<T>} = 43,
-        Distance: pallet_distance::{Pallet, Call, Storage, Inherent, Event<T>} = 44,
+        Wot: pallet_duniter_wot = 40,
+        Identity: pallet_identity = 41,
+        Membership: pallet_membership = 42,
+        Certification: pallet_certification = 43,
+        Distance: pallet_distance = 44,
 
         // Utilities
-        AtomicSwap: pallet_atomic_swap::{Pallet, Call, Storage, Event<T>} = 50,
-        Multisig: pallet_multisig::{Pallet, Call, Storage, Event<T>} = 51,
-        ProvideRandomness: pallet_provide_randomness::{Pallet, Call, Storage, Event} = 52,
-        Proxy: pallet_proxy::{Pallet, Call, Storage, Event<T>} = 53,
-        Utility: pallet_utility::{Pallet, Call, Event} = 54,
-        Treasury: pallet_treasury::{Pallet, Call, Config, Storage, Event<T>} = 55,
+        AtomicSwap: pallet_atomic_swap = 50,
+        Multisig: pallet_multisig = 51,
+        ProvideRandomness: pallet_provide_randomness = 52,
+        Proxy: pallet_proxy = 53,
+        Utility: pallet_utility = 54,
+        Treasury: pallet_treasury = 55,
     }
 );
 
diff --git a/runtime/gdev/tests/common/mod.rs b/runtime/gdev/tests/common/mod.rs
index 0ca8aa74c..249653ec2 100644
--- a/runtime/gdev/tests/common/mod.rs
+++ b/runtime/gdev/tests/common/mod.rs
@@ -14,18 +14,18 @@
 // You should have received a copy of the GNU Affero General Public License
 // along with Duniter-v2S. If not, see <https://www.gnu.org/licenses/>.
 
-#![allow(dead_code, unused_imports)] // TODO remove this line when we will have more tests
+#![allow(dead_code, unused_imports)]
 
 use common_runtime::constants::*;
 use common_runtime::*;
-use frame_support::traits::{GenesisBuild, OnFinalize, OnInitialize};
+use frame_support::traits::{OnFinalize, OnInitialize};
 use gdev_runtime::opaque::SessionKeys;
 use gdev_runtime::*;
 use pallet_authority_members::OnNewSession;
 use pallet_smith_members::SmithMeta;
 use sp_authority_discovery::AuthorityId as AuthorityDiscoveryId;
 use sp_consensus_babe::{AuthorityId as BabeId, Slot};
-use sp_consensus_babe::{VrfOutput, VrfProof};
+use sp_consensus_babe::{VrfInput, VrfProof};
 use sp_consensus_grandpa::AuthorityId as GrandpaId;
 use sp_core::crypto::IsWrappedBy;
 use sp_core::sr25519;
@@ -155,8 +155,8 @@ impl ExtBuilder {
             parameters,
         } = self;
 
-        let mut t = frame_system::GenesisConfig::default()
-            .build_storage::<Runtime>()
+        let mut t = frame_system::GenesisConfig::<Runtime>::default()
+            .build_storage()
             .unwrap();
 
         // compute total monetary mass
@@ -196,9 +196,11 @@ impl ExtBuilder {
         .assimilate_storage(&mut t)
         .unwrap();
 
-        pallet_duniter_test_parameters::GenesisConfig::<Runtime> { parameters }
-            .assimilate_storage(&mut t)
-            .unwrap();
+        pallet_duniter_test_parameters::GenesisConfig::<Runtime> {
+            parameters: parameters.clone(),
+        }
+        .assimilate_storage(&mut t)
+        .unwrap();
 
         pallet_session::GenesisConfig::<Runtime> {
             keys: initial_smiths
diff --git a/runtime/gdev/tests/integration_tests.rs b/runtime/gdev/tests/integration_tests.rs
index 10efd23dc..4624094d4 100644
--- a/runtime/gdev/tests/integration_tests.rs
+++ b/runtime/gdev/tests/integration_tests.rs
@@ -196,7 +196,7 @@ fn test_identity_below_ed() {
             // new behavior : nobody is able to go below ED without killing the account
             // a transfer below ED will lead to frozen token error
             assert_noop!(
-                Balances::transfer(
+                Balances::transfer_allow_death(
                     frame_system::RawOrigin::Signed(AccountKeyring::Alice.to_account_id()).into(),
                     MultiAddress::Id(AccountKeyring::Bob.to_account_id()),
                     850
@@ -957,7 +957,7 @@ fn test_create_new_account_with_insufficient_balance() {
             assert_eq!(Balances::free_balance(Treasury::account_id()), 100);
 
             // Should be able to transfer 4 units to a new account
-            assert_ok!(Balances::transfer(
+            assert_ok!(Balances::transfer_allow_death(
                 frame_system::RawOrigin::Signed(AccountKeyring::Alice.to_account_id()).into(),
                 MultiAddress::Id(AccountKeyring::Eve.to_account_id()),
                 300
@@ -1014,7 +1014,7 @@ fn test_create_new_account() {
             assert_eq!(Balances::free_balance(Treasury::account_id()), 100);
 
             // Should be able to transfer 5 units to a new account
-            assert_ok!(Balances::transfer(
+            assert_ok!(Balances::transfer_allow_death(
                 frame_system::RawOrigin::Signed(AccountKeyring::Alice.to_account_id()).into(),
                 MultiAddress::Id(AccountKeyring::Eve.to_account_id()),
                 500
@@ -1066,7 +1066,7 @@ fn test_create_new_account() {
             run_to_block(4);
             // can not remove using transfer
             assert_noop!(
-                Balances::transfer(
+                Balances::transfer_allow_death(
                     frame_system::RawOrigin::Signed(AccountKeyring::Eve.to_account_id()).into(),
                     MultiAddress::Id(AccountKeyring::Alice.to_account_id()),
                     200
@@ -1104,7 +1104,7 @@ fn test_create_new_idty() {
             run_to_block(2);
 
             // Should be able to create an identity
-            assert_ok!(Balances::transfer(
+            assert_ok!(Balances::transfer_allow_death(
                 frame_system::RawOrigin::Signed(AccountKeyring::Alice.to_account_id()).into(),
                 MultiAddress::Id(AccountKeyring::Eve.to_account_id()),
                 200
@@ -1158,7 +1158,7 @@ fn test_create_new_idty_without_founds() {
 
             // Deposit some founds on the identity account,
             // this should trigger the random id assignemt
-            assert_ok!(Balances::transfer(
+            assert_ok!(Balances::transfer_allow_death(
                 frame_system::RawOrigin::Signed(AccountKeyring::Alice.to_account_id()).into(),
                 MultiAddress::Id(AccountKeyring::Eve.to_account_id()),
                 200
@@ -1193,7 +1193,7 @@ fn test_validate_new_idty_after_few_uds() {
             run_to_block(21);
 
             // Should be able to create an identity
-            assert_ok!(Balances::transfer(
+            assert_ok!(Balances::transfer_allow_death(
                 frame_system::RawOrigin::Signed(AccountKeyring::Alice.to_account_id()).into(),
                 MultiAddress::Id(AccountKeyring::Eve.to_account_id()),
                 200
@@ -1404,7 +1404,7 @@ fn test_link_account() {
                 pallet_identity::Error::<gdev_runtime::Runtime>::AccountNotExist
             );
 
-            assert_ok!(Balances::transfer(
+            assert_ok!(Balances::transfer_allow_death(
                 frame_system::RawOrigin::Signed(alice.clone()).into(),
                 MultiAddress::Id(ferdie.clone()),
                 1_000
diff --git a/runtime/gdev/tests/xt_tests.rs b/runtime/gdev/tests/xt_tests.rs
index 4635571e3..ab48fdaf7 100644
--- a/runtime/gdev/tests/xt_tests.rs
+++ b/runtime/gdev/tests/xt_tests.rs
@@ -21,13 +21,13 @@ mod common;
 
 use common::*;
 use frame_support::assert_ok;
-use frame_support::inherent::Extrinsic;
 use frame_support::traits::OnIdle;
 use gdev_runtime::*;
 use sp_core::Encode;
 use sp_core::Pair;
 use sp_keyring::AccountKeyring;
 use sp_runtime::generic::SignedPayload;
+use sp_runtime::traits::Extrinsic;
 
 /// get extrinsic for given call
 fn get_unchecked_extrinsic(
diff --git a/runtime/gtest/Cargo.toml b/runtime/gtest/Cargo.toml
index 8e90489b7..9c7a497a0 100644
--- a/runtime/gtest/Cargo.toml
+++ b/runtime/gtest/Cargo.toml
@@ -1,7 +1,3 @@
-[build-dependencies.substrate-wasm-builder]
-git = 'https://github.com/duniter/substrate'
-branch = 'duniter-substrate-v0.9.42'
-
 [package]
 authors = ['Axiom-Team Developers <https://axiom-team.fr>']
 edition = "2021"
@@ -10,18 +6,16 @@ license = 'AGPL-3.0'
 name = 'gtest-runtime'
 repository = 'https://git.duniter.org/nodes/rust/duniter-v2s'
 version = '3.0.0'
-[package.metadata.docs.rs]
-targets = ['x86_64-unknown-linux-gnu']
 
 [features]
 default = ['std']
+constant-fees = ['common-runtime/constant-fees']
 runtime-benchmarks = [
     'common-runtime/runtime-benchmarks',
     'frame-benchmarking/runtime-benchmarks',
     'frame-support/runtime-benchmarks',
     'frame-system-benchmarking',
     'frame-system/runtime-benchmarks',
-    'hex-literal',
     'pallet-authority-members/runtime-benchmarks',
     'pallet-smith-members/runtime-benchmarks',
     'pallet-babe/runtime-benchmarks',
@@ -29,7 +23,9 @@ runtime-benchmarks = [
     'pallet-certification/runtime-benchmarks',
     'pallet-collective/runtime-benchmarks',
     'pallet-distance/runtime-benchmarks',
+    'pallet-duniter-test-parameters/runtime-benchmarks',
     'pallet-duniter-account/runtime-benchmarks',
+    'pallet-quota/runtime-benchmarks',
     'pallet-duniter-wot/runtime-benchmarks',
     'pallet-grandpa/runtime-benchmarks',
     'pallet-identity/runtime-benchmarks',
@@ -42,6 +38,7 @@ runtime-benchmarks = [
     'pallet-session-benchmarking/runtime-benchmarks',
     'pallet-proxy/runtime-benchmarks',
     'pallet-scheduler/runtime-benchmarks',
+    'pallet-sudo/runtime-benchmarks',
     'pallet-timestamp/runtime-benchmarks',
     'pallet-treasury/runtime-benchmarks',
     'pallet-universal-dividend/runtime-benchmarks',
@@ -52,44 +49,51 @@ runtime-benchmarks = [
 std = [
     'codec/std',
     'common-runtime/std',
+    'frame-benchmarking/std',
     'frame-executive/std',
     'frame-support/std',
-    'frame-system-rpc-runtime-api/std',
     'frame-system/std',
+    'frame-system-benchmarking/std',
+    'frame-system-rpc-runtime-api/std',
     "frame-try-runtime/std",
     'log/std',
     'pallet-atomic-swap/std',
     'pallet-authority-discovery/std',
     'pallet-authority-members/std',
-    'pallet-smith-members/std',
+    "pallet-authorship/std",
     'pallet-babe/std',
     'pallet-balances/std',
     'pallet-certification/std',
     'pallet-collective/std',
     'pallet-distance/std',
     'pallet-duniter-account/std',
-    'pallet-quota/std',
+    'pallet-duniter-test-parameters/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-membership/std',
     'pallet-multisig/std',
     "pallet-offences/std",
+    'pallet-oneshot-account/std',
     'pallet-preimage/std',
+    'pallet-provide-randomness/std',
     'pallet-proxy/std',
+    'pallet-quota/std',
+    'pallet-multisig/std',
     "pallet-scheduler/std",
     'pallet-session/std',
+    'pallet-session-benchmarking/std',
+    'pallet-smith-members/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-transaction-payment-rpc-runtime-api/std',
     'pallet-treasury/std',
+    'pallet-universal-dividend/std',
+    'pallet-upgrade-origin/std',
     'pallet-utility/std',
+    'scale-info/std',
     "serde/std",
     "serde_derive",
     'sp-api/std',
@@ -97,112 +101,144 @@ std = [
     'sp-authority-discovery/std',
     'sp-block-builder/std',
     'sp-consensus-babe/std',
+    'sp-consensus-grandpa/std',
     'sp-core/std',
     'sp-distance/std',
     'sp-inherents/std',
-    'sp-offchain/std',
     'sp-membership/std',
+    'sp-offchain/std',
     'sp-runtime/std',
     'sp-session/std',
     'sp-std/std',
     'sp-transaction-pool/std',
     'sp-version/std',
+    'sp-staking/std',
+    'node-primitives/std',
+    'substrate-wasm-builder',
 ]
 try-runtime = [
-    "common-runtime/try-runtime",
-    "frame-executive/try-runtime",
-    "frame-try-runtime",
-    "frame-system/try-runtime",
-    "pallet-authority-discovery/try-runtime",
+    'common-runtime/try-runtime',
+    'frame-executive/try-runtime',
+    'frame-support/try-runtime',
+    'frame-system/try-runtime',
+    'frame-try-runtime/try-runtime',
+    'pallet-atomic-swap/try-runtime',
+    'pallet-authority-discovery/try-runtime',
+    'pallet-authority-members/try-runtime',
     "pallet-authorship/try-runtime",
-    "pallet-balances/try-runtime",
-    "pallet-transaction-payment/try-runtime",
-    "pallet-collective/try-runtime",
-    "pallet-grandpa/try-runtime",
-    "pallet-im-online/try-runtime",
-    "pallet-multisig/try-runtime",
+    'pallet-babe/try-runtime',
+    'pallet-balances/try-runtime',
+    'pallet-certification/try-runtime',
+    'pallet-collective/try-runtime',
+    'pallet-distance/try-runtime',
+    'pallet-duniter-account/try-runtime',
+    'pallet-duniter-test-parameters/try-runtime',
+    'pallet-duniter-wot/try-runtime',
+    'pallet-grandpa/try-runtime',
+    'pallet-identity/try-runtime',
+    'pallet-im-online/try-runtime',
+    'pallet-membership/try-runtime',
+    'pallet-multisig/try-runtime',
     "pallet-offences/try-runtime",
-    "pallet-proxy/try-runtime",
+    'pallet-oneshot-account/try-runtime',
+    'pallet-preimage/try-runtime',
+    'pallet-provide-randomness/try-runtime',
+    'pallet-proxy/try-runtime',
+    'pallet-quota/try-runtime',
+    'pallet-multisig/try-runtime',
     "pallet-scheduler/try-runtime",
-    "pallet-session/try-runtime",
-    "pallet-timestamp/try-runtime",
-    "pallet-treasury/try-runtime",
-    "pallet-babe/try-runtime",
-    "pallet-utility/try-runtime",
+    'pallet-session/try-runtime',
+    'pallet-smith-members/try-runtime',
+    'pallet-sudo/try-runtime',
+    'pallet-timestamp/try-runtime',
+    'pallet-transaction-payment/try-runtime',
+    'pallet-treasury/try-runtime',
+    'pallet-universal-dividend/try-runtime',
+    'pallet-upgrade-origin/try-runtime',
+    'pallet-utility/try-runtime',
 ]
 
 [dev-dependencies]
-sp-io = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-keyring = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
+sp-keyring = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-staking = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+
+[build-dependencies]
+substrate-wasm-builder = { git = "https://github.com/duniter/duniter-polkadot-sdk", optional = true , branch = "duniter-substrate-v1.6.0" }
 
 [dependencies]
+
+# crates.io
+codec = { package = "parity-scale-codec", version = "3.6.9", features = ["derive"], default-features = false }
 # local
 common-runtime = { path = "../common", default-features = false }
+
+# substrate benchmarking
+frame-benchmarking = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false, optional = false }
+frame-executive = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+frame-support = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+frame-system = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+frame-system-benchmarking = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false, optional = true }
+frame-system-rpc-runtime-api = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+
+# substrate
+frame-try-runtime = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false, optional = true }
+hex-literal = { version = '0.4.1', default-features = false, optional = true }
+log = { version = "0.4.20", default-features = false }
+pallet-atomic-swap = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-authority-discovery = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-authority-members = { path = '../../pallets/authority-members', default-features = false }
-pallet-smith-members = { path = '../../pallets/smith-members', default-features = false }
+pallet-authorship = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-babe = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-balances = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-certification = { path = '../../pallets/certification', default-features = false }
+pallet-collective = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-distance = { path = "../../pallets/distance", default-features = false }
 pallet-duniter-account = { path = '../../pallets/duniter-account', default-features = false }
-pallet-quota = { path = '../../pallets/quota', default-features = false }
+pallet-duniter-test-parameters = { path = '../../pallets/duniter-test-parameters', default-features = false }
 pallet-duniter-wot = { path = '../../pallets/duniter-wot', default-features = false }
+pallet-grandpa = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-identity = { path = '../../pallets/identity', default-features = false }
+pallet-im-online = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-membership = { path = '../../pallets/membership', default-features = false }
+pallet-multisig = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-offences = { path = '../../pallets/offences', default-features = false }
 pallet-oneshot-account = { path = '../../pallets/oneshot-account', default-features = false }
+pallet-preimage = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-provide-randomness = { path = '../../pallets/provide-randomness', default-features = false }
-pallet-universal-dividend = { path = '../../pallets/universal-dividend', default-features = false }
+pallet-proxy = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-quota = { path = '../../pallets/quota', default-features = false }
+pallet-scheduler = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-session = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 pallet-session-benchmarking = { path = '../../pallets/session-benchmarking', default-features = false }
+pallet-smith-members = { path = '../../pallets/smith-members', default-features = false }
+pallet-sudo = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-timestamp = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-transaction-payment = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-transaction-payment-rpc-runtime-api = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-treasury = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+pallet-universal-dividend = { path = '../../pallets/universal-dividend', default-features = false }
 pallet-upgrade-origin = { path = '../../pallets/upgrade-origin', default-features = false }
+pallet-utility = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+scale-info = { version = "2.10.0", default-features = false, features = ["derive"] }
+serde = { version = "1.0.195", default-features = false }
+serde_derive = { version = "1.0.195", default-features = false, optional = true }
+sp-api = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-arithmetic = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-authority-discovery = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-block-builder = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-consensus-babe = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-consensus-grandpa = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-core = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 sp-distance = { path = '../../primitives/distance', default-features = false }
+sp-inherents = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 sp-membership = { path = '../../primitives/membership', default-features = false }
+sp-offchain = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-runtime = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-session = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-std = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-transaction-pool = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+sp-version = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
+node-primitives = { git = 'https://github.com/duniter/duniter-polkadot-sdk', branch = 'duniter-substrate-v1.6.0', default-features = false }
 
-# crates.io
-codec = { package = "parity-scale-codec", version = "3.4.0", features = ["derive"], default-features = false }
-log = { version = "0.4.17", default-features = false }
-hex-literal = { version = '0.4.1', default-features = false, optional = true }
-scale-info = { version = "2.5.0", default-features = false, features = ["derive"] }
-serde = { version = "1.0.139", default-features = false }
-serde_derive = { version = "1.0.117", default-features = false, optional = true }
-
-# substrate
-frame-try-runtime = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false, optional = true }
-frame-executive = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-frame-support = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-frame-system = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-frame-system-rpc-runtime-api = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false}
-pallet-atomic-swap = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-authority-discovery = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-authorship = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-babe = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-balances = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-collective = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-grandpa = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-im-online = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-multisig = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-preimage = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-proxy = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-scheduler = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-session = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-sudo = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-timestamp = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-transaction-payment = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-transaction-payment-rpc-runtime-api = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-treasury = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-pallet-utility = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-api = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-arithmetic = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-authority-discovery = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-block-builder = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-consensus-babe = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-core = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-inherents = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-offchain = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-runtime = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-session = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-std = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-transaction-pool = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-sp-version = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false }
-
-# substrate benchmarking
-frame-benchmarking = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false, optional = false }
-frame-system-benchmarking = { git = 'https://github.com/duniter/substrate', branch = 'duniter-substrate-v0.9.42', default-features = false, optional = true }
+[package.metadata.docs.rs]
+targets = ['x86_64-unknown-linux-gnu']
diff --git a/runtime/gtest/build.rs b/runtime/gtest/build.rs
index decf500c1..b31efa2f0 100644
--- a/runtime/gtest/build.rs
+++ b/runtime/gtest/build.rs
@@ -14,12 +14,13 @@
 // You should have received a copy of the GNU Affero General Public License
 // along with Duniter-v2S. If not, see <https://www.gnu.org/licenses/>.
 
-use substrate_wasm_builder::WasmBuilder;
-
 fn main() {
-    WasmBuilder::new()
-        .with_current_project()
-        .export_heap_base()
-        .import_memory()
-        .build()
+    #[cfg(feature = "std")]
+    {
+        substrate_wasm_builder::WasmBuilder::new()
+            .with_current_project()
+            .export_heap_base()
+            .import_memory()
+            .build();
+    }
 }
diff --git a/runtime/gtest/src/lib.rs b/runtime/gtest/src/lib.rs
index 7fe0cfeba..70da1da86 100644
--- a/runtime/gtest/src/lib.rs
+++ b/runtime/gtest/src/lib.rs
@@ -160,6 +160,7 @@ mod benches {
         [pallet_multisig, Multisig]
         [pallet_preimage, Preimage]
         [pallet_proxy, Proxy]
+        [pallet_sudo, Sudo]
         [pallet_scheduler, Scheduler]
         [frame_system, SystemBench::<Runtime>]
         [pallet_timestamp, Timestamp]
@@ -188,7 +189,7 @@ impl Contains<RuntimeCall> for BaseCallFilter {
     PartialOrd,
     codec::Encode,
     codec::Decode,
-    frame_support::RuntimeDebug,
+    frame_support::pallet_prelude::RuntimeDebug,
     codec::MaxEncodedLen,
     scale_info::TypeInfo,
 )]
@@ -239,70 +240,61 @@ impl frame_support::traits::InstanceFilter<RuntimeCall> for ProxyType {
 }
 
 // Configure pallets to include in runtime.
-common_runtime::pallets_config! {
-
-    impl pallet_sudo::Config for Runtime {
-        type RuntimeEvent = RuntimeEvent;
-        type RuntimeCall = RuntimeCall;
-    }
-}
+common_runtime::pallets_config! {}
 
 // Create the runtime by composing the pallets that were previously configured.
 construct_runtime!(
-    pub enum Runtime where
-        Block = Block,
-        NodeBlock = common_runtime::Block,
-        UncheckedExtrinsic = UncheckedExtrinsic
+    pub enum Runtime
     {
         // Basic stuff
-        System: frame_system::{Pallet, Call, Config, Storage, Event<T>} = 0,
-        Account: pallet_duniter_account::{Pallet, Storage, Config<T>, Event<T>} = 1,
-        Scheduler: pallet_scheduler::{Pallet, Call, Storage, Event<T>} = 2,
+        System: frame_system = 0,
+        Account: pallet_duniter_account = 1,
+        Scheduler: pallet_scheduler = 2,
 
         // Block creation
-        Babe: pallet_babe::{Pallet, Call, Storage, Config, ValidateUnsigned} = 3,
-        Timestamp: pallet_timestamp::{Pallet, Call, Storage, Inherent} = 4,
+        Babe: pallet_babe = 3,
+        Timestamp: pallet_timestamp = 4,
 
         // Money management
-        Balances: pallet_balances::{Pallet, Call, Storage, Config<T>, Event<T>} = 6,
-        TransactionPayment: pallet_transaction_payment::{Pallet, Storage, Event<T>} = 32,
-        OneshotAccount: pallet_oneshot_account::{Pallet, Call, Storage, Event<T>} = 7,
-        Quota: pallet_quota::{Pallet, Storage, Config<T>, Event<T>} = 66,
+        Balances: pallet_balances = 6,
+        TransactionPayment: pallet_transaction_payment = 32,
+        OneshotAccount: pallet_oneshot_account = 7,
+        Quota: pallet_quota = 66,
 
         // Consensus support
-        SmithMembers: pallet_smith_members::{Pallet, Call, Storage, Config<T>, Event<T>} = 10,
-        AuthorityMembers: pallet_authority_members::{Pallet, Call, Storage, Config<T>, Event<T>} = 11,
-        Authorship: pallet_authorship::{Pallet, Storage} = 12,
-        Offences: pallet_offences::{Pallet, Storage, Event} = 13,
-        Historical: session_historical::{Pallet} = 14,
-        Session: pallet_session::{Pallet, Call, Storage, Event, Config<T>} = 15,
-        Grandpa: pallet_grandpa::{Pallet, Call, Storage, Config, Event, ValidateUnsigned} = 16,
-        ImOnline: pallet_im_online::{Pallet, Call, Storage, Event<T>, ValidateUnsigned, Config<T>} = 17,
-        AuthorityDiscovery: pallet_authority_discovery::{Pallet, Config} = 18,
+        SmithMembers: pallet_smith_members = 10,
+        AuthorityMembers: pallet_authority_members = 11,
+        Authorship: pallet_authorship = 12,
+        Offences: pallet_offences = 13,
+        Historical: session_historical = 14,
+        Session: pallet_session = 15,
+        Grandpa: pallet_grandpa= 16,
+        ImOnline: pallet_im_online = 17,
+        AuthorityDiscovery: pallet_authority_discovery = 18,
 
         // Governance stuff
-        Sudo: pallet_sudo::{Pallet, Call, Config<T>, Storage, Event<T>} = 20,
-        UpgradeOrigin: pallet_upgrade_origin::{Pallet, Call, Event} = 21,
-        Preimage: pallet_preimage::{Pallet, Call, Storage, Event<T>} = 22,
-        TechnicalCommittee: pallet_collective::<Instance2>::{Pallet, Call, Config<T>, Storage, Event<T>, Origin<T>} = 23,
+        Sudo: pallet_sudo = 20,
+        UpgradeOrigin: pallet_upgrade_origin = 21,
+        Preimage: pallet_preimage = 22,
+        TechnicalCommittee: pallet_collective::<Instance2> = 23,
 
         // Universal dividend
-        UniversalDividend: pallet_universal_dividend::{Pallet, Call, Config<T>, Storage, Event<T>} = 30,
+        UniversalDividend: pallet_universal_dividend = 30,
 
         // Web Of Trust
-        Wot: pallet_duniter_wot::{Pallet} = 40,
-        Identity: pallet_identity::{Pallet, Call, Config<T>, Storage, Event<T>} = 41,
-        Membership: pallet_membership::{Pallet, Config<T>, Storage, Event<T>} = 42,
-        Certification: pallet_certification::{Pallet, Call, Config<T>, Storage, Event<T>} = 43,
-        Distance: pallet_distance::{Pallet, Call, Storage, Inherent, Event<T>} = 44,
+        Wot: pallet_duniter_wot = 40,
+        Identity: pallet_identity = 41,
+        Membership: pallet_membership = 42,
+        Certification: pallet_certification = 43,
+        Distance: pallet_distance = 44,
 
         // Utilities
-        AtomicSwap: pallet_atomic_swap::{Pallet, Call, Storage, Event<T>} = 50,
-        Multisig: pallet_multisig::{Pallet, Call, Storage, Event<T>} = 51,
-        ProvideRandomness: pallet_provide_randomness::{Pallet, Call, Storage, Event} = 52,
-        Proxy: pallet_proxy::{Pallet, Call, Storage, Event<T>} = 53,
-        Utility: pallet_utility::{Pallet, Call, Event} = 54,
-        Treasury: pallet_treasury::{Pallet, Call, Config, Storage, Event<T>} = 55,
+        AtomicSwap: pallet_atomic_swap = 50,
+        Multisig: pallet_multisig = 51,
+        ProvideRandomness: pallet_provide_randomness = 52,
+        Proxy: pallet_proxy = 53,
+        Utility: pallet_utility = 54,
+        Treasury: pallet_treasury = 55,
     }
 );
 
diff --git a/rust-toolchain.toml b/rust-toolchain.toml
index 7c39cc2df..5e98fede2 100644
--- a/rust-toolchain.toml
+++ b/rust-toolchain.toml
@@ -1,5 +1,5 @@
 [toolchain]
-channel = "nightly-2023-08-23"
-components = [ "rustfmt", "clippy" ]
+channel = "nightly-2023-10-31"
+components = [ "rustfmt", "clippy", "rust-std", "cargo", "rust-src" ]
 targets = [ "wasm32-unknown-unknown" ]
 profile = "minimal"
diff --git a/rustfmt.toml b/rustfmt.toml
new file mode 100644
index 000000000..b7ac0b727
--- /dev/null
+++ b/rustfmt.toml
@@ -0,0 +1 @@
+reorder_impl_items = true
diff --git a/scripts/run_all_benchmarks.sh b/scripts/run_all_benchmarks.sh
new file mode 100755
index 000000000..01ec0fe5d
--- /dev/null
+++ b/scripts/run_all_benchmarks.sh
@@ -0,0 +1,5 @@
+cargo build --release --features runtime-benchmarks
+target/release/duniter benchmark storage --chain=dev --mul=2 --weight-path=./runtime/common/src/weights/ --state-version=1
+target/release/duniter benchmark overhead --chain=dev --wasm-execution=compiled --weight-path=./runtime/common/src/weights/ --warmup=10 --repeat=100
+target/release/duniter benchmark pallet --chain=dev --steps=50 --repeat=20 --pallet="*" --extrinsic="*" --wasm-execution=compiled --heap-pages=4096 --header=./file_header.txt --output=./runtime/common/src/weights/
+
diff --git a/xtask/Cargo.toml b/xtask/Cargo.toml
index 43d347a1d..c996fece8 100644
--- a/xtask/Cargo.toml
+++ b/xtask/Cargo.toml
@@ -16,7 +16,7 @@ name = "xtask"
 anyhow = "1.0.32"
 clap = { version = "4.0", features = ["derive"] }
 codec = { package = "parity-scale-codec", version = "3.1.5", default-features = false, features = ["derive", "full", "bit-vec"] }
-frame-metadata = "15.0.0"
+frame-metadata = "16.0.0"
 graphql_client = "0.10.0"
 hex = "0.4"
 memmap2 = "0.5.0"
@@ -24,11 +24,11 @@ placeholder = "1.1.3"
 reqwest = { version = "0.11.11", features = ["json"] }
 run_script = "0.6.3"
 scale-info = { version = "2.1.1", features = ["bit-vec"] }
+scale-value = "0.13.0"
 serde = { version = "1.0.101", features = ["derive"] }
 serde_json = "1.0"
+tera = { version = "1", default-features = false }
 tokio = { version = "1.24.2", features = ["macros"] }
-version_check = "0.9.2"
 version-compare = "0.0.11"
-tera = { version = "1", default-features = false }
-weight-analyzer = {path = "../resources/weight_analyzer"}
-scale-value = "0.13.0"
+version_check = "0.9.2"
+weight-analyzer = { path = "../resources/weight_analyzer" }
diff --git a/xtask/src/gen_doc.rs b/xtask/src/gen_doc.rs
index 979fa59a3..929361633 100644
--- a/xtask/src/gen_doc.rs
+++ b/xtask/src/gen_doc.rs
@@ -229,12 +229,15 @@ impl CallCategory {
             _ => Self::User,
         }
     }
+
     fn is_root(pallet_name: &str, call_name: &str) -> bool {
         matches!(Self::is(pallet_name, call_name), Self::Root)
     }
+
     fn is_user(pallet_name: &str, call_name: &str) -> bool {
         matches!(Self::is(pallet_name, call_name), Self::User)
     }
+
     fn is_disabled(pallet_name: &str, call_name: &str) -> bool {
         matches!(Self::is(pallet_name, call_name), Self::Disabled)
     }
@@ -256,10 +259,10 @@ pub(super) fn gen_doc() -> Result<()> {
     println!("Metadata successfully loaded!");
 
     let (mut runtime, max_weight) =
-        if let frame_metadata::RuntimeMetadata::V14(ref metadata_v14) = metadata.1 {
+        if let frame_metadata::RuntimeMetadata::V15(ref metadata_v15) = metadata.1 {
             (
-                get_from_metadata_v14(metadata_v14.clone())?,
-                get_max_weight_from_metadata_v14(metadata_v14.clone())?,
+                get_from_metadata_v15(metadata_v15.clone())?,
+                get_max_weight_from_metadata_v15(metadata_v15.clone())?,
             )
         } else {
             bail!("unsuported metadata version")
@@ -280,7 +283,6 @@ pub(super) fn gen_doc() -> Result<()> {
     // For pallets with manual or no weight, we define a default value.
     weights.insert("Babe".to_string(), Default::default()); // Manual
     weights.insert("Grandpa".to_string(), Default::default()); // Manual
-    weights.insert("Sudo".to_string(), Default::default()); // Only > v1.0 has WeightInfo TODO at update
     weights.insert("AtomicSwap".to_string(), Default::default()); // No weight
 
     // Insert weights for each call of each pallet.
@@ -320,12 +322,12 @@ pub(super) fn gen_doc() -> Result<()> {
     Ok(())
 }
 
-fn get_max_weight_from_metadata_v14(
-    metadata_v14: frame_metadata::v14::RuntimeMetadataV14,
+fn get_max_weight_from_metadata_v15(
+    metadata_v15: frame_metadata::v15::RuntimeMetadataV15,
 ) -> Result<u128> {
     // Extract the maximal weight available in one block
     // from the metadata.
-    let block_weights = metadata_v14
+    let block_weights = metadata_v15
         .pallets
         .iter()
         .find(|pallet| pallet.name == "System")
@@ -338,29 +340,31 @@ fn get_max_weight_from_metadata_v14(
     let block_weights = scale_value::scale::decode_as_type(
         &mut &*block_weights.value,
         block_weights.ty.id,
-        &metadata_v14.types,
+        &metadata_v15.types,
     )
     .expect("Can't decode max_weight")
     .value;
 
     if let scale_value::ValueDef::Composite(scale_value::Composite::Named(i)) = block_weights
-            && let scale_value::ValueDef::Composite(scale_value::Composite::Named(j)) = &i.iter().find(|name| name.0 == "max_block").unwrap().1.value
-            && let scale_value::ValueDef::Primitive(scale_value::Primitive::U128(k)) = &j.iter().find(|name| name.0 == "ref_time").unwrap().1.value
-        {
-            Ok(*k)
-        } else {
-            bail!("Invalid max_weight")
-        }
+        && let scale_value::ValueDef::Composite(scale_value::Composite::Named(j)) =
+            &i.iter().find(|name| name.0 == "max_block").unwrap().1.value
+        && let scale_value::ValueDef::Primitive(scale_value::Primitive::U128(k)) =
+            &j.iter().find(|name| name.0 == "ref_time").unwrap().1.value
+    {
+        Ok(*k)
+    } else {
+        bail!("Invalid max_weight")
+    }
 }
 
-fn get_from_metadata_v14(
-    metadata_v14: frame_metadata::v14::RuntimeMetadataV14,
+fn get_from_metadata_v15(
+    metadata_v15: frame_metadata::v15::RuntimeMetadataV15,
 ) -> Result<RuntimePallets> {
-    println!("Number of pallets: {}", metadata_v14.pallets.len());
+    println!("Number of pallets: {}", metadata_v15.pallets.len());
     let mut pallets = Vec::new();
-    for pallet in metadata_v14.pallets {
+    for pallet in metadata_v15.pallets {
         let calls_type_def = if let Some(calls) = pallet.calls {
-            let Some(calls_type) = metadata_v14.types.resolve(calls.ty.id) else {
+            let Some(calls_type) = metadata_v15.types.resolve(calls.ty.id) else {
                 bail!("Invalid metadata")
             };
             Some(calls_type.type_def.clone())
@@ -369,7 +373,7 @@ fn get_from_metadata_v14(
             None
         };
         let events_type_def = if let Some(events) = pallet.event {
-            let Some(events_type) = metadata_v14.types.resolve(events.ty.id) else {
+            let Some(events_type) = metadata_v15.types.resolve(events.ty.id) else {
                 bail!("Invalid metadata")
             };
             Some(events_type.type_def.clone())
@@ -378,7 +382,7 @@ fn get_from_metadata_v14(
             None
         };
         let errors_type_def = if let Some(errors) = pallet.error {
-            let Some(errors_type) = metadata_v14.types.resolve(errors.ty.id) else {
+            let Some(errors_type) = metadata_v15.types.resolve(errors.ty.id) else {
                 bail!("Invalid metadata")
             };
             Some(errors_type.type_def.clone())
-- 
GitLab