diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index e6ff343ac89842b677c84e01baed8bfa120c0a8c..a94d25204c3d2dce067068fc1501714adb050b70 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -38,6 +38,35 @@ fmt_and_clippy:
 build_debug:
   extends: .env
   rules:
+    - if: $CI_COMMIT_TAG
+      when: never
+    - if: '$CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_BRANCH == "master"'
+      changes:
+      - Cargo.lock
+    - when: manual
+  stage: build
+  script:
+    - cargo clean -p duniter
+    - cargo build --locked
+    - mkdir build
+    - mv target/debug/duniter build/duniter
+  artifacts:
+    paths:
+      - build/
+  cache:
+    - key:
+        files:
+          - Cargo.lock
+      paths:
+        - target/debug
+      policy: push
+
+build_debug_with_cache:
+  extends: .env
+  rules:
+    - changes:
+      - Cargo.lock
+      when: never
     - if: $CI_COMMIT_TAG
       when: never
     - if: '$CI_PIPELINE_SOURCE == "merge_request_event" || $CI_COMMIT_BRANCH == "master"'
@@ -45,7 +74,7 @@ build_debug:
   stage: build
   script:
     - cargo clean -p duniter
-    - cargo build
+    - cargo build --locked
     - mkdir build
     - mv target/debug/duniter build/duniter
   artifacts:
@@ -57,6 +86,7 @@ build_debug:
           - Cargo.lock
       paths:
         - target/debug
+      policy: pull
 
 build_release:
   extends: .env
@@ -65,7 +95,7 @@ build_release:
     - when: never
   stage: build
   script:
-    - cargo build --release
+    - cargo build --locked --release
     - mkdir build
     - mv target/release/duniter build/duniter
   artifacts:
@@ -128,7 +158,6 @@ deploy_docker_test_image:
       when: manual
     - if: '$CI_COMMIT_TAG || $CI_COMMIT_BRANCH == "master"'
       when: never
-    - if: $CI_MERGE_REQUEST_ID
     - when: manual
   variables:
     DOCKERFILE_PATH: "docker/Dockerfile"
diff --git a/Cargo.lock b/Cargo.lock
index 4cb2d89c8e0e7be6768fb1b9bb8f77ba2b7d0cf0..1f8f7eb35d0438766c0389b24bffc3df7cfabb8f 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -12,22 +12,13 @@ dependencies = [
  "regex",
 ]
 
-[[package]]
-name = "addr2line"
-version = "0.16.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e61f2b7f93d2c7d2b08263acaa4a363b3e276806c68af6134c44f523bf1aacd"
-dependencies = [
- "gimli 0.25.0",
-]
-
 [[package]]
 name = "addr2line"
 version = "0.17.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b"
 dependencies = [
- "gimli 0.26.1",
+ "gimli",
 ]
 
 [[package]]
@@ -381,7 +372,7 @@ version = "0.3.63"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "321629d8ba6513061f26707241fa9bc89524ff1cd7a915a97ef0c62c666ce1b6"
 dependencies = [
- "addr2line 0.17.0",
+ "addr2line",
  "cc",
  "cfg-if 1.0.0",
  "libc",
@@ -423,15 +414,6 @@ version = "0.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "50ae17cabbc8a38a1e3e4c1a6a664e9a09672dc14d0896fa8d865d3a5a446b07"
 
-[[package]]
-name = "bincode"
-version = "1.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
-dependencies = [
- "serde",
-]
-
 [[package]]
 name = "bindgen"
 version = "0.59.1"
@@ -945,15 +927,6 @@ version = "0.8.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
 
-[[package]]
-name = "cpp_demangle"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8ea47428dc9d2237f3c6bc134472edfd63ebba0af932e783506dcfd66f10d18a"
-dependencies = [
- "cfg-if 1.0.0",
-]
-
 [[package]]
 name = "cpufeatures"
 version = "0.1.5"
@@ -972,96 +945,6 @@ dependencies = [
  "libc",
 ]
 
-[[package]]
-name = "cranelift-bforest"
-version = "0.78.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cc0cb7df82c8cf8f2e6a8dd394a0932a71369c160cc9b027dca414fced242513"
-dependencies = [
- "cranelift-entity",
-]
-
-[[package]]
-name = "cranelift-codegen"
-version = "0.78.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe4463c15fa42eee909e61e5eac4866b7c6d22d0d8c621e57a0c5380753bfa8c"
-dependencies = [
- "cranelift-bforest",
- "cranelift-codegen-meta",
- "cranelift-codegen-shared",
- "cranelift-entity",
- "gimli 0.25.0",
- "log",
- "regalloc",
- "smallvec",
- "target-lexicon",
-]
-
-[[package]]
-name = "cranelift-codegen-meta"
-version = "0.78.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "793f6a94a053a55404ea16e1700202a88101672b8cd6b4df63e13cde950852bf"
-dependencies = [
- "cranelift-codegen-shared",
- "cranelift-entity",
-]
-
-[[package]]
-name = "cranelift-codegen-shared"
-version = "0.78.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44aa1846df275bce5eb30379d65964c7afc63c05a117076e62a119c25fe174be"
-
-[[package]]
-name = "cranelift-entity"
-version = "0.78.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a3a45d8d6318bf8fc518154d9298eab2a8154ec068a8885ff113f6db8d69bb3a"
-dependencies = [
- "serde",
-]
-
-[[package]]
-name = "cranelift-frontend"
-version = "0.78.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e07339bd461766deb7605169de039e01954768ff730fa1254e149001884a8525"
-dependencies = [
- "cranelift-codegen",
- "log",
- "smallvec",
- "target-lexicon",
-]
-
-[[package]]
-name = "cranelift-native"
-version = "0.78.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03e2fca76ff57e0532936a71e3fc267eae6a19a86656716479c66e7f912e3d7b"
-dependencies = [
- "cranelift-codegen",
- "libc",
- "target-lexicon",
-]
-
-[[package]]
-name = "cranelift-wasm"
-version = "0.78.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f46fec547a1f8a32c54ea61c28be4f4ad234ad95342b718a9a9adcaadb0c778"
-dependencies = [
- "cranelift-codegen",
- "cranelift-entity",
- "cranelift-frontend",
- "itertools",
- "log",
- "smallvec",
- "wasmparser",
- "wasmtime-types",
-]
-
 [[package]]
 name = "crc32fast"
 version = "1.2.1"
@@ -1071,40 +954,6 @@ dependencies = [
  "cfg-if 1.0.0",
 ]
 
-[[package]]
-name = "crossbeam-channel"
-version = "0.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "06ed27e177f16d65f0f0c22a213e17c696ace5dd64b14258b52f9417ccb52db4"
-dependencies = [
- "cfg-if 1.0.0",
- "crossbeam-utils",
-]
-
-[[package]]
-name = "crossbeam-deque"
-version = "0.8.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6455c0ca19f0d2fbf751b908d5c55c1f5cbc65e03c4225427254b46890bdde1e"
-dependencies = [
- "cfg-if 1.0.0",
- "crossbeam-epoch",
- "crossbeam-utils",
-]
-
-[[package]]
-name = "crossbeam-epoch"
-version = "0.9.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd"
-dependencies = [
- "cfg-if 1.0.0",
- "crossbeam-utils",
- "lazy_static",
- "memoffset",
- "scopeguard",
-]
-
 [[package]]
 name = "crossbeam-utils"
 version = "0.8.5"
@@ -1361,16 +1210,6 @@ dependencies = [
  "dirs-sys",
 ]
 
-[[package]]
-name = "directories-next"
-version = "2.0.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "339ee130d97a610ea5a5872d2bbb130fdf68884ff09d3028b81bec8a1ac23bbc"
-dependencies = [
- "cfg-if 1.0.0",
- "dirs-sys-next",
-]
-
 [[package]]
 name = "dirs-sys"
 version = "0.3.6"
@@ -1382,17 +1221,6 @@ dependencies = [
  "winapi 0.3.9",
 ]
 
-[[package]]
-name = "dirs-sys-next"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
-dependencies = [
- "libc",
- "redox_users",
- "winapi 0.3.9",
-]
-
 [[package]]
 name = "dns-parser"
 version = "0.8.0"
@@ -1445,7 +1273,6 @@ dependencies = [
  "sc-executor",
  "sc-finality-grandpa",
  "sc-keystore",
- "sc-rpc",
  "sc-rpc-api",
  "sc-service",
  "sc-telemetry",
@@ -1460,8 +1287,6 @@ dependencies = [
  "sp-consensus-babe",
  "sp-core",
  "sp-finality-grandpa",
- "sp-inherents",
- "sp-keyring",
  "sp-membership",
  "sp-offchain",
  "sp-runtime",
@@ -1481,7 +1306,7 @@ version = "3.0.0"
 dependencies = [
  "async-trait",
  "cucumber",
- "env_logger 0.9.0",
+ "env_logger",
  "parity-scale-codec",
  "portpicker",
  "serde_json",
@@ -1564,19 +1389,6 @@ dependencies = [
  "syn",
 ]
 
-[[package]]
-name = "env_logger"
-version = "0.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "44533bbbb3bb3c1fa17d9f2e4e38bbbaf8396ba82193c4cb1b6445d711445d36"
-dependencies = [
- "atty",
- "humantime 1.3.0",
- "log",
- "regex",
- "termcolor",
-]
-
 [[package]]
 name = "env_logger"
 version = "0.9.0"
@@ -1584,7 +1396,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3"
 dependencies = [
  "atty",
- "humantime 2.1.0",
+ "humantime",
  "log",
  "regex",
  "termcolor",
@@ -1596,27 +1408,6 @@ version = "1.1.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "68b91989ae21441195d7d9b9993a2f9295c7e1a8c96255d8b729accddc124797"
 
-[[package]]
-name = "errno"
-version = "0.2.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa68f2fb9cae9d37c9b2b3584aba698a2e97f72d7aef7b9f7aa71d8b54ce46fe"
-dependencies = [
- "errno-dragonfly",
- "libc",
- "winapi 0.3.9",
-]
-
-[[package]]
-name = "errno-dragonfly"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14ca354e36190500e1e1fb267c647932382b54053c50b14970856c0b00a35067"
-dependencies = [
- "gcc",
- "libc",
-]
-
 [[package]]
 name = "event-listener"
 version = "2.5.1"
@@ -1638,12 +1429,6 @@ version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
 
-[[package]]
-name = "fallible-iterator"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7"
-
 [[package]]
 name = "fastrand"
 version = "1.5.0"
@@ -1662,16 +1447,6 @@ dependencies = [
  "libc",
 ]
 
-[[package]]
-name = "file-per-thread-logger"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fdbe0d94371f9ce939b555dd342d0686cc4c0cadbcd4b61d70af5ff97eb4126"
-dependencies = [
- "env_logger 0.7.1",
- "log",
-]
-
 [[package]]
 name = "finality-grandpa"
 version = "0.14.4"
@@ -2154,12 +1929,6 @@ dependencies = [
  "substrate-wasm-builder",
 ]
 
-[[package]]
-name = "gcc"
-version = "0.3.55"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2"
-
 [[package]]
 name = "gdev-runtime"
 version = "3.0.0"
@@ -2286,17 +2055,6 @@ dependencies = [
  "syn",
 ]
 
-[[package]]
-name = "gimli"
-version = "0.25.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f0a01e0497841a3b2db4f8afa483cce65f7e96a3498bd6c541734792aeac8fe7"
-dependencies = [
- "fallible-iterator",
- "indexmap",
- "stable_deref_trait",
-]
-
 [[package]]
 name = "gimli"
 version = "0.26.1"
@@ -2574,15 +2332,6 @@ version = "1.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
 
-[[package]]
-name = "humantime"
-version = "1.3.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
-dependencies = [
- "quick-error 1.2.3",
-]
-
 [[package]]
 name = "humantime"
 version = "2.1.0"
@@ -2766,7 +2515,6 @@ checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5"
 dependencies = [
  "autocfg",
  "hashbrown",
- "serde",
 ]
 
 [[package]]
@@ -2813,16 +2561,6 @@ dependencies = [
  "ghost",
 ]
 
-[[package]]
-name = "io-lifetimes"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "278e90d6f8a6c76a8334b336e306efa3c5f2b604048cbfd486d6f49878e3af14"
-dependencies = [
- "rustc_version 0.4.0",
- "winapi 0.3.9",
-]
-
 [[package]]
 name = "iovec"
 version = "0.1.4"
@@ -3817,12 +3555,6 @@ dependencies = [
  "statrs",
 ]
 
-[[package]]
-name = "linux-raw-sys"
-version = "0.0.28"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "687387ff42ec7ea4f2149035a5675fedb675d26f98db90a1846ac63d3addb5f5"
-
 [[package]]
 name = "lock_api"
 version = "0.4.5"
@@ -3889,15 +3621,6 @@ dependencies = [
  "libc",
 ]
 
-[[package]]
-name = "mach"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa"
-dependencies = [
- "libc",
-]
-
 [[package]]
 name = "maplit"
 version = "1.0.2"
@@ -3958,15 +3681,6 @@ dependencies = [
  "libc",
 ]
 
-[[package]]
-name = "memoffset"
-version = "0.6.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9"
-dependencies = [
- "autocfg",
-]
-
 [[package]]
 name = "memory-db"
 version = "0.28.0"
@@ -4077,12 +3791,6 @@ dependencies = [
  "winapi 0.3.9",
 ]
 
-[[package]]
-name = "more-asserts"
-version = "0.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0debeb9fcf88823ea64d64e4a815ab1643f33127d995978e099942ce38f25238"
-
 [[package]]
 name = "multiaddr"
 version = "0.13.0"
@@ -4359,8 +4067,6 @@ version = "0.27.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "67ac1d3f9a1d3616fd9a60c8d74296f22406a238b6a72f5cc1e6f314df4ffbf9"
 dependencies = [
- "crc32fast",
- "indexmap",
  "memchr",
 ]
 
@@ -5300,15 +5006,6 @@ dependencies = [
  "prost",
 ]
 
-[[package]]
-name = "psm"
-version = "0.1.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0617ee61163b5d941d804065ce49040967610a4d4278fae73e096a057b01d358"
-dependencies = [
- "cc",
-]
-
 [[package]]
 name = "pwasm-utils"
 version = "0.18.2"
@@ -5471,31 +5168,6 @@ version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "60a357793950651c4ed0f3f52338f53b2f809f32d83a07f72909fa13e4c6c1e3"
 
-[[package]]
-name = "rayon"
-version = "1.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c06aca804d41dbc8ba42dfd964f0d01334eceb64314b9ecf7c5fad5188a06d90"
-dependencies = [
- "autocfg",
- "crossbeam-deque",
- "either",
- "rayon-core",
-]
-
-[[package]]
-name = "rayon-core"
-version = "1.9.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d78120e2c850279833f1dd3582f730c4ab53ed95aeaaaa862a2a5c71b1656d8e"
-dependencies = [
- "crossbeam-channel",
- "crossbeam-deque",
- "crossbeam-utils",
- "lazy_static",
- "num_cpus",
-]
-
 [[package]]
 name = "redox_syscall"
 version = "0.2.10"
@@ -5535,17 +5207,6 @@ dependencies = [
  "syn",
 ]
 
-[[package]]
-name = "regalloc"
-version = "0.0.32"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a6304468554ed921da3d32c355ea107b8d13d7b8996c3adfb7aab48d3bc321f4"
-dependencies = [
- "log",
- "rustc-hash",
- "smallvec",
-]
-
 [[package]]
 name = "regex"
 version = "1.5.4"
@@ -5572,18 +5233,6 @@ version = "0.6.25"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
 
-[[package]]
-name = "region"
-version = "2.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "877e54ea2adcd70d80e9179344c97f93ef0dffd6b03e1f4529e6e83ab2fa9ae0"
-dependencies = [
- "bitflags",
- "libc",
- "mach",
- "winapi 0.3.9",
-]
-
 [[package]]
 name = "remove_dir_all"
 version = "0.5.3"
@@ -5644,23 +5293,6 @@ dependencies = [
  "winapi 0.3.9",
 ]
 
-[[package]]
-name = "rsix"
-version = "0.23.9"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f64c5788d5aab8b75441499d99576a24eb09f76fb267b36fec7e3d970c66431"
-dependencies = [
- "bitflags",
- "cc",
- "errno",
- "io-lifetimes",
- "itoa 0.4.7",
- "libc",
- "linux-raw-sys",
- "once_cell",
- "rustc_version 0.4.0",
-]
-
 [[package]]
 name = "rustc-demangle"
 version = "0.1.20"
@@ -6121,7 +5753,6 @@ dependencies = [
  "parking_lot",
  "sc-executor-common",
  "sc-executor-wasmi",
- "sc-executor-wasmtime",
  "sp-api",
  "sp-core",
  "sp-core-hashing-proc-macro",
@@ -6170,24 +5801,6 @@ dependencies = [
  "wasmi",
 ]
 
-[[package]]
-name = "sc-executor-wasmtime"
-version = "0.10.0-dev"
-source = "git+https://github.com/librelois/substrate.git?branch=duniter-monthly-2022-01#104c497435848265e58eeeea7b82c63b2f7ee13c"
-dependencies = [
- "cfg-if 1.0.0",
- "libc",
- "log",
- "parity-scale-codec",
- "parity-wasm 0.42.2",
- "sc-allocator",
- "sc-executor-common",
- "sp-core",
- "sp-runtime-interface",
- "sp-wasm-interface",
- "wasmtime",
-]
-
 [[package]]
 name = "sc-finality-grandpa"
 version = "0.10.0-dev"
@@ -7686,7 +7299,6 @@ dependencies = [
  "parity-scale-codec",
  "sp-std",
  "wasmi",
- "wasmtime",
 ]
 
 [[package]]
@@ -7994,12 +7606,6 @@ version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
 
-[[package]]
-name = "target-lexicon"
-version = "0.12.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9bffcddbc2458fa3e6058414599e3c838a022abae82e5c67b4f7f80298d5bff"
-
 [[package]]
 name = "tempfile"
 version = "3.2.0"
@@ -8750,169 +8356,6 @@ dependencies = [
  "parity-wasm 0.42.2",
 ]
 
-[[package]]
-name = "wasmparser"
-version = "0.81.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "98930446519f63d00a836efdc22f67766ceae8dbcc1571379f2bcabc6b2b9abc"
-
-[[package]]
-name = "wasmtime"
-version = "0.31.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "311d06b0c49346d1fbf48a17052e844036b95a7753c1afb34e8c0af3f6b5bb13"
-dependencies = [
- "anyhow",
- "backtrace",
- "bincode",
- "cfg-if 1.0.0",
- "cpp_demangle",
- "indexmap",
- "lazy_static",
- "libc",
- "log",
- "object",
- "paste",
- "psm",
- "rayon",
- "region",
- "rustc-demangle",
- "serde",
- "target-lexicon",
- "wasmparser",
- "wasmtime-cache",
- "wasmtime-cranelift",
- "wasmtime-environ",
- "wasmtime-jit",
- "wasmtime-runtime",
- "winapi 0.3.9",
-]
-
-[[package]]
-name = "wasmtime-cache"
-version = "0.31.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "36147930a4995137dc096e5b17a573b446799be2bbaea433e821ce6a80abe2c5"
-dependencies = [
- "anyhow",
- "base64",
- "bincode",
- "directories-next",
- "file-per-thread-logger",
- "log",
- "rsix",
- "serde",
- "sha2 0.9.9",
- "toml",
- "winapi 0.3.9",
- "zstd",
-]
-
-[[package]]
-name = "wasmtime-cranelift"
-version = "0.31.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab3083a47e1ede38aac06a1d9831640d673f9aeda0b82a64e4ce002f3432e2e7"
-dependencies = [
- "anyhow",
- "cranelift-codegen",
- "cranelift-entity",
- "cranelift-frontend",
- "cranelift-native",
- "cranelift-wasm",
- "gimli 0.25.0",
- "log",
- "more-asserts",
- "object",
- "target-lexicon",
- "thiserror",
- "wasmparser",
- "wasmtime-environ",
-]
-
-[[package]]
-name = "wasmtime-environ"
-version = "0.31.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1c2d194b655321053bc4111a1aa4ead552655c8a17d17264bc97766e70073510"
-dependencies = [
- "anyhow",
- "cfg-if 1.0.0",
- "cranelift-entity",
- "gimli 0.25.0",
- "indexmap",
- "log",
- "more-asserts",
- "object",
- "serde",
- "target-lexicon",
- "thiserror",
- "wasmparser",
- "wasmtime-types",
-]
-
-[[package]]
-name = "wasmtime-jit"
-version = "0.31.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "864ac8dfe4ce310ac59f16fdbd560c257389cb009ee5d030ac6e30523b023d11"
-dependencies = [
- "addr2line 0.16.0",
- "anyhow",
- "bincode",
- "cfg-if 1.0.0",
- "gimli 0.25.0",
- "log",
- "more-asserts",
- "object",
- "region",
- "rsix",
- "serde",
- "target-lexicon",
- "thiserror",
- "wasmparser",
- "wasmtime-environ",
- "wasmtime-runtime",
- "winapi 0.3.9",
-]
-
-[[package]]
-name = "wasmtime-runtime"
-version = "0.31.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ab97da813a26b98c9abfd3b0c2d99e42f6b78b749c0646344e2e262d212d8c8b"
-dependencies = [
- "anyhow",
- "backtrace",
- "cc",
- "cfg-if 1.0.0",
- "indexmap",
- "lazy_static",
- "libc",
- "log",
- "mach",
- "memoffset",
- "more-asserts",
- "rand 0.8.4",
- "region",
- "rsix",
- "thiserror",
- "wasmtime-environ",
- "winapi 0.3.9",
-]
-
-[[package]]
-name = "wasmtime-types"
-version = "0.31.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff94409cc3557bfbbcce6b14520ccd6bd3727e965c0fe68d63ef2c185bf379c6"
-dependencies = [
- "cranelift-entity",
- "serde",
- "thiserror",
- "wasmparser",
-]
-
 [[package]]
 name = "web-sys"
 version = "0.3.53"
diff --git a/Cargo.toml b/Cargo.toml
index f5f8a0a024c97a655e41a8b1a12d3fe42ae137cd..cb8a484d49a4fe25265471c5830371b10327e35b 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,15 +1,111 @@
+[package]
+authors = ['Axiom-Team Developers <https://axiom-team.fr>']
+build = 'node/build.rs'
+description = 'Crypto-currency software (based on Substrate framework) to operate Äž1 libre currency'
+edition = '2018'
+homepage = 'https://substrate.dev'
+license = 'AGPL-3.0'
+name = 'duniter'
+repository = 'https://git.duniter.org/nodes/rust/duniter-v2s'
+version = '3.0.0'
+
+[package.metadata.docs.rs]
+targets = ['x86_64-unknown-linux-gnu']
+
+[[bin]]
+bench = false
+name = 'duniter'
+path = "node/src/main.rs"
+
+[features]
+default = ["gdev", "gtest"]
+g1 = ["g1-runtime"]
+gdev = ["gdev-runtime"]
+gtest = ["gtest-runtime"]
+runtime-benchmarks = [
+	'g1-runtime',
+	'g1-runtime/runtime-benchmarks',
+	'gdev-runtime',
+	'gdev-runtime/runtime-benchmarks',
+	'gtest-runtime',
+	'gtest-runtime/runtime-benchmarks',
+]
+
+[build-dependencies]
+substrate-build-script-utils = { git = 'https://github.com/librelois/substrate.git', branch = 'duniter-monthly-2022-01' }
+
+[dependencies]
+
+# local dependencies
+common-runtime = { path = 'runtime/common' }
+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' }
+sp-membership = { path = 'primitives/membership' }
+
+# crates.io dependencies
+async-io = "1.3"
+futures = { version = "0.3.1", features = ["compat"] }
+jsonrpc-core = '18.0.0'
+log = "0.4"
+maplit = '1.0.2'
+serde_json = "1.0.64"
+structopt = '0.3.8'
+
+# substrate dependencies
+frame-benchmarking = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+frame-benchmarking-cli = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+pallet-grandpa = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+pallet-transaction-payment-rpc = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sc-basic-authorship = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sc-chain-spec = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sc-cli = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sc-client-api = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sc-consensus = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+babe = { package = "sc-consensus-babe", git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sc-consensus-manual-seal = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sc-consensus-uncles = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sc-executor = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sc-finality-grandpa = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sc-keystore = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sc-rpc-api = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sc-service = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sc-telemetry = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sc-transaction-pool = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sc-transaction-pool-api = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sp-api = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sp-authority-discovery = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sp-block-builder = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sp-blockchain = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sp-consensus = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sp-consensus-babe = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sp-core = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sp-finality-grandpa = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sp-offchain = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sp-runtime = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sp-session = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sp-storage = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sp-timestamp = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sp-transaction-pool = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+sp-trie = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+substrate-frame-rpc-system = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
+
 [workspace]
 resolver = "2"
 
 members = [
 	'integration-tests',
-    'node',
     'pallets/certification',
     'pallets/identity',
 	'pallets/membership',
     'pallets/ud-accounts-storage',
     'pallets/universal-dividend',
     'primitives/membership',
+    'runtime/common',
+    'runtime/common-except-gdev',
+    'runtime/gdev',
 ]
 
 # The list of dependencies below (which can be both direct and indirect dependencies) are crates
diff --git a/node/Cargo.toml b/node/Cargo.toml
deleted file mode 100644
index 9af591079197c490800975b19bf81321a42cd411..0000000000000000000000000000000000000000
--- a/node/Cargo.toml
+++ /dev/null
@@ -1,218 +0,0 @@
-[package]
-authors = ['Axiom-Team Developers <https://axiom-team.fr>']
-build = 'build.rs'
-description = 'Crypto-currency software (based on Substrate framework) to operate Äž1 libre currency'
-edition = '2018'
-homepage = 'https://substrate.dev'
-license = 'AGPL-3.0'
-name = 'duniter'
-repository = 'https://git.duniter.org/nodes/rust/duniter-v2s'
-version = '3.0.0'
-
-[package.metadata.docs.rs]
-targets = ['x86_64-unknown-linux-gnu']
-
-[[bin]]
-name = 'duniter'
-
-[features]
-default = ["gdev", "gtest"]
-g1 = ["g1-runtime"]
-gdev = ["gdev-runtime"]
-gtest = ["gtest-runtime"]
-runtime-benchmarks = [
-	'g1-runtime',
-	'g1-runtime/runtime-benchmarks',
-	'gdev-runtime',
-	'gdev-runtime/runtime-benchmarks',
-	'gtest-runtime',
-	'gtest-runtime/runtime-benchmarks',
-]
-
-[build-dependencies]
-substrate-build-script-utils = { git = 'https://github.com/librelois/substrate.git', branch = 'duniter-monthly-2022-01' }
-
-# substrate dev-dependencies
-sp-keyring = { git = "https://github.com/librelois/substrate.git", branch = "duniter-monthly-2022-01" }
-
-[dependencies]
-
-# local dependencies
-common-runtime = { path = '../runtime/common' }
-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' }
-sp-membership = { path = '../primitives/membership' }
-
-# crates.io dependencies
-async-io = "1.3"
-futures = { version = "0.3.1", features = ["compat"] }
-jsonrpc-core = '18.0.0'
-log = "0.4"
-maplit = '1.0.2'
-serde_json = "1.0.64"
-structopt = '0.3.8'
-
-# substrate dependencies
-
-[dependencies.frame-benchmarking]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.frame-benchmarking-cli]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.pallet-grandpa]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.pallet-transaction-payment-rpc]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.pallet-transaction-payment-rpc-runtime-api]
-default-features = false
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sc-basic-authorship]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sc-chain-spec]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sc-cli]
-features = ['wasmtime']
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sc-client-api]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sc-consensus]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.babe]
-package = "sc-consensus-babe"
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sc-consensus-manual-seal]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sc-consensus-uncles]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sc-executor]
-features = ['wasmtime']
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sc-finality-grandpa]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sc-keystore]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sc-rpc]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sc-rpc-api]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sc-service]
-features = ['wasmtime']
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sc-telemetry]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sc-transaction-pool]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sc-transaction-pool-api]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sp-api]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sp-authority-discovery]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sp-block-builder]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sp-blockchain]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sp-consensus]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sp-consensus-babe]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sp-core]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sp-finality-grandpa]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sp-offchain]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sp-inherents]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sp-runtime]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sp-session]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sp-storage]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sp-timestamp]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sp-transaction-pool]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.sp-trie]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'
-
-[dependencies.substrate-frame-rpc-system]
-git = 'https://github.com/librelois/substrate.git'
-branch = 'duniter-monthly-2022-01'