diff --git a/Cargo.lock b/Cargo.lock
index aecf6dc4285dc4d6bb452b87c62701744153e1f9..b5c33ae959f0e3cdcc654e603dfe46ac4ddcf8b4 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -304,6 +304,7 @@ dependencies = [
  "constant_time_eq",
  "crypto-mac",
  "digest 0.9.0",
+ "rayon",
 ]
 
 [[package]]
@@ -785,9 +786,9 @@ checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10"
 
 [[package]]
 name = "dubp"
-version = "0.53.1"
+version = "0.54.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a5cee825e59cde21a3622de781d15f74cbea92f01eb1554a8c73818eb61a5998"
+checksum = "c5dca084e135ee5ea38d64e5e665cac6fc23570a66ed22ce5021b5d14c4f9443"
 dependencies = [
  "dubp-block",
  "dubp-common",
@@ -799,9 +800,9 @@ dependencies = [
 
 [[package]]
 name = "dubp-block"
-version = "0.53.1"
+version = "0.54.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4b26027dafcf4631bd7d7a2b1b25e54453c475a613b5ef7db4356f51f71c0eb"
+checksum = "5fa8e2b1d9728832dd4696f9eff1348085d162d5f98fe025e9c9a2caeffd9c89"
 dependencies = [
  "dubp-documents",
  "dubp-documents-parser",
@@ -814,9 +815,9 @@ dependencies = [
 
 [[package]]
 name = "dubp-common"
-version = "0.53.1"
+version = "0.54.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2dc000f2a3366c1bd985015f95adb3520e8e0b007ca5f77882eea1ea119d84f4"
+checksum = "49a12c0842c7c4e61e75755476b782d09e282275cab187376b3cc0da405b6afb"
 dependencies = [
  "dup-crypto",
  "serde",
@@ -827,9 +828,9 @@ dependencies = [
 
 [[package]]
 name = "dubp-documents"
-version = "0.53.1"
+version = "0.54.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6e96808a8ced0617ba93ed6fee00d88902f33e2f61a36ec9a841e8972ef5cd3a"
+checksum = "450f2b268c979264ef098f00532faf0015d281d9c8ebabf227f57ecc35d0076c"
 dependencies = [
  "beef",
  "dubp-wallet",
@@ -841,9 +842,9 @@ dependencies = [
 
 [[package]]
 name = "dubp-documents-parser"
-version = "0.53.1"
+version = "0.54.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a9c60f5c2804a9906777f96a62514c1f9f58abaab4c57f01db4fa7c45624e6fb"
+checksum = "067bba5a1e34566871128b7157642a643264e4aeaba1db5034634ef6461f797b"
 dependencies = [
  "dubp-documents",
  "json-pest-parser",
@@ -855,9 +856,9 @@ dependencies = [
 
 [[package]]
 name = "dubp-wallet"
-version = "0.53.1"
+version = "0.54.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f277bed6bc228981f76f207f4112051656302b5c50c0a858ab138ae2215d49fe"
+checksum = "7552a1c1cca8498dc9266fdb6b10ee98ef841e363a1e3c0cd319ead3fa2aeef4"
 dependencies = [
  "byteorder",
  "dubp-common",
@@ -870,9 +871,11 @@ dependencies = [
 [[package]]
 name = "dubp-wot"
 version = "0.11.0"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#4ce40a98dbc3cb3241e6d91817a8753a9be95ee8"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#ce0cb755acd91c2e91fe6fc89ea57ae7d7e3eaef"
 dependencies = [
  "log",
+ "once_cell",
+ "parking_lot",
  "rayon",
  "serde",
 ]
@@ -880,7 +883,7 @@ dependencies = [
 [[package]]
 name = "duniter-bc-reader"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#4ce40a98dbc3cb3241e6d91817a8753a9be95ee8"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#ce0cb755acd91c2e91fe6fc89ea57ae7d7e3eaef"
 dependencies = [
  "anyhow",
  "dubp",
@@ -891,7 +894,7 @@ dependencies = [
 [[package]]
 name = "duniter-bca"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#8aecd22b91daf698d0c158bab5ee7cbaa3be1fb0"
+source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#4a7d3270dff7cbde9df08bdff30b08cedc24d13b"
 dependencies = [
  "anyhow",
  "arrayvec 0.7.0",
@@ -914,7 +917,7 @@ dependencies = [
 [[package]]
 name = "duniter-bca-types"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#8aecd22b91daf698d0c158bab5ee7cbaa3be1fb0"
+source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#4a7d3270dff7cbde9df08bdff30b08cedc24d13b"
 dependencies = [
  "arrayvec 0.7.0",
  "bincode",
@@ -946,7 +949,7 @@ dependencies = [
 [[package]]
 name = "duniter-conf"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#4ce40a98dbc3cb3241e6d91817a8753a9be95ee8"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#ce0cb755acd91c2e91fe6fc89ea57ae7d7e3eaef"
 dependencies = [
  "anyhow",
  "dubp",
@@ -960,8 +963,9 @@ dependencies = [
 [[package]]
 name = "duniter-core"
 version = "1.8.1"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#4ce40a98dbc3cb3241e6d91817a8753a9be95ee8"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#ce0cb755acd91c2e91fe6fc89ea57ae7d7e3eaef"
 dependencies = [
+ "dubp-wot",
  "duniter-bc-reader",
  "duniter-conf",
  "duniter-dbs",
@@ -997,7 +1001,7 @@ dependencies = [
 [[package]]
 name = "duniter-dbs"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#4ce40a98dbc3cb3241e6d91817a8753a9be95ee8"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#ce0cb755acd91c2e91fe6fc89ea57ae7d7e3eaef"
 dependencies = [
  "arrayvec 0.7.0",
  "bincode",
@@ -1020,7 +1024,7 @@ dependencies = [
 [[package]]
 name = "duniter-dbs-write-ops"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#4ce40a98dbc3cb3241e6d91817a8753a9be95ee8"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#ce0cb755acd91c2e91fe6fc89ea57ae7d7e3eaef"
 dependencies = [
  "chrono",
  "dubp",
@@ -1035,7 +1039,7 @@ dependencies = [
 [[package]]
 name = "duniter-global"
 version = "1.8.1"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#4ce40a98dbc3cb3241e6d91817a8753a9be95ee8"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#ce0cb755acd91c2e91fe6fc89ea57ae7d7e3eaef"
 dependencies = [
  "async-rwlock",
  "dubp",
@@ -1048,7 +1052,7 @@ dependencies = [
 [[package]]
 name = "duniter-gva"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#8aecd22b91daf698d0c158bab5ee7cbaa3be1fb0"
+source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#4a7d3270dff7cbde9df08bdff30b08cedc24d13b"
 dependencies = [
  "anyhow",
  "arrayvec 0.7.0",
@@ -1079,7 +1083,7 @@ dependencies = [
 [[package]]
 name = "duniter-gva-conf"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#8aecd22b91daf698d0c158bab5ee7cbaa3be1fb0"
+source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#4a7d3270dff7cbde9df08bdff30b08cedc24d13b"
 dependencies = [
  "anyhow",
  "duniter-core",
@@ -1091,7 +1095,7 @@ dependencies = [
 [[package]]
 name = "duniter-gva-db"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#8aecd22b91daf698d0c158bab5ee7cbaa3be1fb0"
+source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#4a7d3270dff7cbde9df08bdff30b08cedc24d13b"
 dependencies = [
  "bincode",
  "chrono",
@@ -1108,7 +1112,7 @@ dependencies = [
 [[package]]
 name = "duniter-gva-dbs-reader"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#8aecd22b91daf698d0c158bab5ee7cbaa3be1fb0"
+source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#4a7d3270dff7cbde9df08bdff30b08cedc24d13b"
 dependencies = [
  "anyhow",
  "arrayvec 0.7.0",
@@ -1122,7 +1126,7 @@ dependencies = [
 [[package]]
 name = "duniter-gva-gql"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#8aecd22b91daf698d0c158bab5ee7cbaa3be1fb0"
+source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#4a7d3270dff7cbde9df08bdff30b08cedc24d13b"
 dependencies = [
  "anyhow",
  "arrayvec 0.7.0",
@@ -1144,7 +1148,7 @@ dependencies = [
 [[package]]
 name = "duniter-gva-indexer"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#8aecd22b91daf698d0c158bab5ee7cbaa3be1fb0"
+source = "git+https://git.duniter.org/nodes/rust/modules/duniter-gva#4a7d3270dff7cbde9df08bdff30b08cedc24d13b"
 dependencies = [
  "anyhow",
  "bincode",
@@ -1176,7 +1180,7 @@ dependencies = [
 [[package]]
 name = "duniter-mempools"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#4ce40a98dbc3cb3241e6d91817a8753a9be95ee8"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#ce0cb755acd91c2e91fe6fc89ea57ae7d7e3eaef"
 dependencies = [
  "dubp",
  "duniter-bc-reader",
@@ -1189,7 +1193,7 @@ dependencies = [
 [[package]]
 name = "duniter-module"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#4ce40a98dbc3cb3241e6d91817a8753a9be95ee8"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#ce0cb755acd91c2e91fe6fc89ea57ae7d7e3eaef"
 dependencies = [
  "anyhow",
  "async-mutex",
@@ -1238,15 +1242,16 @@ dependencies = [
  "neon",
  "neon-build",
  "neon-serde",
+ "parking_lot",
  "serde",
  "unwrap",
 ]
 
 [[package]]
 name = "dup-crypto"
-version = "0.53.1"
+version = "0.54.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1c530e25cc0a03ae36229401ca322002931b55fc180e6001bdab20a9087f297c"
+checksum = "be4b9746489f2564086fffce1cc67de3b867a098eaf4dbcce15dc85f85542c9c"
 dependencies = [
  "base64",
  "blake3",
@@ -1820,7 +1825,7 @@ dependencies = [
 [[package]]
 name = "kv_typed"
 version = "0.1.0"
-source = "git+https://git.duniter.org/nodes/rust/duniter-core#4ce40a98dbc3cb3241e6d91817a8753a9be95ee8"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#ce0cb755acd91c2e91fe6fc89ea57ae7d7e3eaef"
 dependencies = [
  "byteorder",
  "cfg-if 0.1.10",
diff --git a/neon/native/Cargo.toml b/neon/native/Cargo.toml
index 9a5eef1bf2c3e119256b5cb6dfc57416fef869a2..05adbb76aa31eac5560d778f3b6ddcb4153cf567 100644
--- a/neon/native/Cargo.toml
+++ b/neon/native/Cargo.toml
@@ -17,7 +17,7 @@ neon-build = "0.4.0"
 [dependencies]
 bincode = "1.2.1"
 bs58 = "0.3.0"
-dubp = { version = "0.53.1", features = ["duniter"] }
+dubp = { version = "0.54.1", features = ["duniter"] }
 dubp-wot = { git = "https://git.duniter.org/nodes/rust/duniter-core" }
 duniter-server = { path = "../../rust-libs/duniter-server" }
 flate2 = "1.0.16"
@@ -26,6 +26,7 @@ flume = "0.10.0"
 log = "0.4.11"
 neon = "0.4.0"
 neon-serde = "0.4.0"
+parking_lot = "0.11"
 serde = { version = "1.0.105", features = ["derive"] }
 
 [dev-dependencies]
diff --git a/neon/native/src/wot.rs b/neon/native/src/wot.rs
index 2eb7bea39a56fa2f964ca2053585b9086aa641af..5b8a0c9a743d5c9e49d965bff68bbc85badd7710 100644
--- a/neon/native/src/wot.rs
+++ b/neon/native/src/wot.rs
@@ -27,13 +27,43 @@ use dubp_wot::{
         distance::DistanceError,
         path::{PathFinder, RustyPathFinder},
     },
+    MAIN_WOT,
 };
 use neon::declare_types;
 use neon::prelude::*;
-use std::ops::Deref;
+use parking_lot::RwLock;
+
+pub struct RustWot(Option<RustyWebOfTrust>);
+
+impl RustWot {
+    fn get<R, F>(&self, f: F) -> R
+    where
+        F: FnOnce(&RustyWebOfTrust) -> R,
+    {
+        if let Some(ref wot) = self.0 {
+            f(wot)
+        } else if let Some(main_wot) = MAIN_WOT.get() {
+            f(&main_wot.read())
+        } else {
+            panic!("unreachable: get RustWot that is neither main nor non-main!");
+        }
+    }
+    fn get_mut<R, F>(&mut self, f: F) -> R
+    where
+        F: FnOnce(&mut RustyWebOfTrust) -> R,
+    {
+        if let Some(ref mut wot) = self.0 {
+            f(wot)
+        } else if let Some(main_wot) = MAIN_WOT.get() {
+            f(&mut main_wot.write())
+        } else {
+            panic!("unreachable: get RustWot that is neither main nor non-main!");
+        }
+    }
+}
 
 declare_types! {
-    pub class JsWoT for RustyWebOfTrust {
+    pub class JsWoT for RustWot {
         init(mut cx) {
             let arg0 = cx.argument::<JsValue>(0)?;
 
@@ -42,14 +72,21 @@ declare_types! {
                 .downcast::<JsNumber>()
                 .or_throw(&mut cx)?
                 .value();
-                Ok(RustyWebOfTrust::new(max_links as usize))
+                Ok(RustWot(Some(RustyWebOfTrust::new(max_links as usize))))
             } else if arg0.is_a::<JsString>() {
                 let file_path = arg0
                 .downcast::<JsString>()
                 .or_throw(&mut cx)?
                 .value();
                 match read_from_file::wot_from_file(file_path) {
-                    Ok(wot) => Ok(wot),
+                    Ok(wot) => {
+                        if std::env::var("DUNITER_JS_TESTS") == Ok("yes".to_owned()) {
+                            Ok(RustWot(Some(wot)))
+                        } else {
+                            MAIN_WOT.set(RwLock::new(wot)).unwrap_or_else(|_| unreachable!());
+                            Ok(RustWot(None))
+                        }
+                    },
                     Err(e) => cx.throw_error(e),
                 }
             } else if arg0.is_a::<JsArrayBuffer>() {
@@ -63,7 +100,7 @@ declare_types! {
                 });
 
                 match bincode::deserialize(&bytes) {
-                    Ok(wot) => Ok(wot),
+                    Ok(wot) => Ok(RustWot(Some(wot))),
                     Err(e) => cx.throw_error(e.to_string()),
                 }
             } else {
@@ -76,7 +113,7 @@ declare_types! {
             {
                 let guard = cx.lock();
                 let mut wot = this.borrow_mut(&guard);
-                wot.clear();
+                wot.get_mut(|wot| wot.clear());
             }
 
             Ok(cx.undefined().upcast())
@@ -87,7 +124,7 @@ declare_types! {
             let max_link = {
                 let guard = cx.lock();
                 let wot = this.borrow(&guard);
-                wot.get_max_link()
+                wot.get(|wot| wot.get_max_link())
             };
             Ok(cx.number(max_link as f64).upcast())
         }
@@ -98,7 +135,7 @@ declare_types! {
             {
                 let guard = cx.lock();
                 let mut wot = this.borrow_mut(&guard);
-                wot.set_max_link(max_links);
+                wot.get_mut(|wot| wot.set_max_link(max_links));
             }
             Ok(cx.undefined().upcast())
         }
@@ -108,7 +145,7 @@ declare_types! {
             let wot_id = {
                 let guard = cx.lock();
                 let mut wot = this.borrow_mut(&guard);
-                wot.add_node()
+                wot.get_mut(|wot| wot.add_node())
             };
             Ok(cx.number(wot_id.0 as f64).upcast())
         }
@@ -118,7 +155,7 @@ declare_types! {
             let wot_id_opt = {
                 let guard = cx.lock();
                 let mut wot = this.borrow_mut(&guard);
-                wot.rem_node()
+                wot.get_mut(|wot| wot.rem_node())
             };
 
             if let Some(wot_id) = wot_id_opt {
@@ -133,7 +170,7 @@ declare_types! {
             let wot_size = {
                 let guard = cx.lock();
                 let wot = this.borrow(&guard);
-                wot.size()
+                wot.get(|wot| wot.size())
             };
             Ok(cx.number(wot_size as f64).upcast())
         }
@@ -144,7 +181,7 @@ declare_types! {
             let is_enabled_opt = {
                 let guard = cx.lock();
                 let wot = this.borrow(&guard);
-                wot.is_enabled(wot_id)
+                wot.get(|wot| wot.is_enabled(wot_id))
             };
 
             if let Some(is_enabled) = is_enabled_opt {
@@ -159,7 +196,7 @@ declare_types! {
             let enabled = {
                 let guard = cx.lock();
                 let wot = this.borrow(&guard);
-                wot.get_enabled()
+                wot.get(|wot| wot.get_enabled())
             };
 
             vec_wot_id_to_js_array(cx, enabled)
@@ -173,7 +210,7 @@ declare_types! {
             let enabled_opt = {
                 let guard = cx.lock();
                 let mut wot = this.borrow_mut(&guard);
-                wot.set_enabled(wot_id, enabled)
+                wot.get_mut(|wot| wot.set_enabled(wot_id, enabled))
             };
 
             if let Some(enabled) = enabled_opt {
@@ -188,7 +225,7 @@ declare_types! {
             let disabled = {
                 let guard = cx.lock();
                 let wot = this.borrow(&guard);
-                wot.get_disabled()
+                wot.get(|wot| wot.get_disabled())
             };
 
             vec_wot_id_to_js_array(cx, disabled)
@@ -200,7 +237,7 @@ declare_types! {
             let sentries = {
                 let guard = cx.lock();
                 let wot = this.borrow(&guard);
-                wot.get_sentries(sentry_requirement as usize)
+                wot.get(|wot| wot.get_sentries(sentry_requirement as usize))
             };
 
             vec_wot_id_to_js_array(cx, sentries)
@@ -212,7 +249,7 @@ declare_types! {
             let non_sentries = {
                 let guard = cx.lock();
                 let wot = this.borrow(&guard);
-                wot.get_non_sentries(sentry_requirement as usize)
+                wot.get(|wot| wot.get_non_sentries(sentry_requirement as usize))
             };
 
             vec_wot_id_to_js_array(cx, non_sentries)
@@ -226,7 +263,7 @@ declare_types! {
             let new_link_result = {
                 let guard = cx.lock();
                 let mut wot = this.borrow_mut(&guard);
-                wot.add_link(source, target)
+                wot.get_mut(|wot| wot.add_link(source, target))
             };
 
             match new_link_result {
@@ -247,7 +284,7 @@ declare_types! {
             let has_link_result = {
                 let guard = cx.lock();
                 let wot = this.borrow(&guard);
-                wot.has_link(source, target)
+                wot.get(|wot| wot.has_link(source, target))
             };
 
             match has_link_result {
@@ -265,7 +302,7 @@ declare_types! {
             let rem_link_result = {
                 let guard = cx.lock();
                 let mut wot = this.borrow_mut(&guard);
-                wot.rem_link(source, target)
+                wot.get_mut(|wot| wot.rem_link(source, target))
             };
 
             match rem_link_result {
@@ -283,9 +320,8 @@ declare_types! {
             let this = cx.this();
             let distance_res = {
                 let guard = cx.lock();
-                let wot_box = this.borrow(&guard);
-                let wot: &RustyWebOfTrust = wot_box.deref();
-                RustyDistanceCalculator {}.compute_distance(wot, distance_params)
+                let wot = this.borrow(&guard);
+                wot.get(|wot| RustyDistanceCalculator {}.compute_distance(wot, distance_params))
             };
 
             match distance_res {
@@ -302,9 +338,8 @@ declare_types! {
             let this = cx.this();
             let distance_res = {
                 let guard = cx.lock();
-                let wot_box = this.borrow(&guard);
-                let wot: &RustyWebOfTrust = wot_box.deref();
-                RustyDistanceCalculator {}.compute_distance(wot, distance_params)
+                let wot = this.borrow(&guard);
+                wot.get(|wot| RustyDistanceCalculator {}.compute_distance(wot, distance_params))
             };
 
             match distance_res {
@@ -325,9 +360,8 @@ declare_types! {
             let this = cx.this();
             let paths = {
                 let guard = cx.lock();
-                let wot_box = this.borrow(&guard);
-                let wot: &RustyWebOfTrust = wot_box.deref();
-                RustyPathFinder {}.find_paths(wot, from, to, k_max)
+                let wot = this.borrow(&guard);
+                wot.get(|wot| RustyPathFinder {}.find_paths(wot, from, to, k_max))
             };
 
             // Convert Vec<Vec<WotId>> to JsArray<JsArray<JsNumber>>
@@ -348,9 +382,8 @@ declare_types! {
             let this = cx.this();
             let ser_res = {
                 let guard = cx.lock();
-                let wot_box = this.borrow(&guard);
-                let wot: &RustyWebOfTrust = wot_box.deref();
-                bincode::serialize(wot)
+                let wot = this.borrow(&guard);
+                wot.get(|wot| bincode::serialize(wot))
             };
 
             match ser_res {
@@ -372,7 +405,7 @@ declare_types! {
             let res = {
                 let guard = cx.lock();
                 let wot = this.borrow(&guard);
-                write_in_file::wot_in_file(file_path_str, wot.deref())
+                wot.get(|wot|  write_in_file::wot_in_file(file_path_str, wot))
             };
 
             match res {
@@ -388,7 +421,7 @@ declare_types! {
             let res = {
                 let guard = cx.lock();
                 let wot = this.borrow(&guard);
-                wot.dump(&mut dump_wot_chars)
+                wot.get(|wot| wot.dump(&mut dump_wot_chars))
             };
             match res {
                 Ok(()) => match String::from_utf8(dump_wot_chars) {
diff --git a/rust-bins/duniter-dbex/Cargo.toml b/rust-bins/duniter-dbex/Cargo.toml
index cc5f9fdd4f248b60e640016392fcd10d17c5ffad..30980763c59969abdaf96f8e35499cb3d0579f57 100644
--- a/rust-bins/duniter-dbex/Cargo.toml
+++ b/rust-bins/duniter-dbex/Cargo.toml
@@ -22,13 +22,13 @@ anyhow = "1.0.33"
 arrayvec = "0.5.1"
 comfy-table = "2.1.0"
 dirs = "3.0.1"
-dubp = { version = "0.53.1", features = ["duniter"] }
+dubp = { version = "0.54.1", features = ["duniter"] }
 duniter-core = { git = "https://git.duniter.org/nodes/rust/duniter-core", features = ["bc-writer", "explorer", "leveldb_backend"] }
 duniter-gva-db = { git = "https://git.duniter.org/nodes/rust/modules/duniter-gva", default-features = false, features = ["explorer", "leveldb_backend"] }
 duniter-gva-indexer = { git = "https://git.duniter.org/nodes/rust/modules/duniter-gva" }
 fast-threadpool = "0.2.3"
 flume = "0.10.0"
-once_cell = "1.5.2"
+once_cell = "1.7"
 rayon = "1.3.1"
 serde_json = "1.0.53"
 structopt = "0.3.16"
diff --git a/rust-bins/duniter-dbex/src/migrate.rs b/rust-bins/duniter-dbex/src/migrate.rs
index 483271fa339d208bbdec6455a218c5169c7066ab..d9f0548b13e61c97f7816c04082198fa839f1f6a 100644
--- a/rust-bins/duniter-dbex/src/migrate.rs
+++ b/rust-bins/duniter-dbex/src/migrate.rs
@@ -101,6 +101,7 @@ fn migrate_inner(
         });
 
         let mut current = None;
+        let mut currency_params = Default::default();
         while let Ok(chunk) = r2.recv() {
             if !chunk.is_empty() {
                 println!(
@@ -108,12 +109,15 @@ fn migrate_inner(
                     chunk[0].number(),
                     chunk[chunk.len() - 1].number()
                 );
+                if let Some(currency_parameters) = chunk[0].currency_parameters() {
+                    currency_params = currency_parameters;
+                }
                 let chunk = Arc::from(chunk);
                 let chunk_arc_clone = Arc::clone(&chunk);
                 let gva_handle = dbs_pool
                     .launch(move |_| {
                         for block in chunk_arc_clone.deref() {
-                            duniter_gva_indexer::apply_block(block, gva_db)?;
+                            duniter_gva_indexer::apply_block(block, currency_params, gva_db)?;
                         }
                         Ok::<_, KvError>(())
                     })
diff --git a/rust-libs/duniter-server/Cargo.toml b/rust-libs/duniter-server/Cargo.toml
index 52fbb64bd21e3f95cee490d7248b1d0eb9942f6a..d91875c30423e378c5a863facb9cbfc489f6d1a7 100644
--- a/rust-libs/duniter-server/Cargo.toml
+++ b/rust-libs/duniter-server/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 [dependencies]
 anyhow = "1.0.34"
 cfg-if = "1.0.0"
-dubp = { version = "0.53.1", features = ["duniter"] }
+dubp = { version = "0.54.1", features = ["duniter"] }
 duniter-core = { git = "https://git.duniter.org/nodes/rust/duniter-core", features = ["bc-writer"] }
 duniter-gva = { git = "https://git.duniter.org/nodes/rust/modules/duniter-gva", optional = true } 
 fast-threadpool = "0.2.3"
diff --git a/rust-libs/duniter-server/src/legacy/block_indexer.rs b/rust-libs/duniter-server/src/legacy/block_indexer.rs
index bf271807d8f687b98b1a532ae2f15e9db05f5237..990b22cc72e345f80d3058e3397a0c1f21ce8004 100644
--- a/rust-libs/duniter-server/src/legacy/block_indexer.rs
+++ b/rust-libs/duniter-server/src/legacy/block_indexer.rs
@@ -20,6 +20,12 @@ impl DuniterServer {
         let block = Arc::new(
             DubpBlockV10::from_string_object(&block).map_err(|e| KvError::DeserError(e.into()))?,
         );
+
+        // Get currency parameters from genesis block
+        if let Some(currency_params) = block.currency_parameters() {
+            self.currency_params = currency_params;
+        }
+
         self.current = Some(duniter_core::dbs_write_ops::apply_block::apply_block(
             &self.bc_db,
             block.clone(),
@@ -28,10 +34,17 @@ impl DuniterServer {
             &self.global_sender,
             false,
         )?);
-        apply_block_modules(block, Arc::new(self.conf.clone()), &self.dbs_pool, None)
+        apply_block_modules(
+            block,
+            Arc::new(self.conf.clone()),
+            self.currency_params,
+            &self.dbs_pool,
+            None,
+        )
     }
     pub fn apply_chunk_of_blocks(&mut self, blocks: Vec<DubpBlockV10Stringified>) -> KvResult<()> {
         log::debug!("apply_chunk(#{})", blocks[0].number);
+
         let blocks = Arc::from(
             blocks
                 .into_iter()
@@ -39,6 +52,12 @@ impl DuniterServer {
                 .collect::<Result<Vec<_>, _>>()
                 .map_err(|e| KvError::DeserError(e.into()))?,
         );
+
+        // Get currency parameters from genesis block
+        if let Some(currency_params) = blocks[0].currency_parameters() {
+            self.currency_params = currency_params;
+        }
+
         self.current = Some(duniter_core::dbs_write_ops::apply_block::apply_chunk(
             &self.bc_db,
             self.current,
@@ -46,7 +65,13 @@ impl DuniterServer {
             blocks.clone(),
             Some(&self.global_sender),
         )?);
-        apply_chunk_of_blocks_modules(blocks, Arc::new(self.conf.clone()), &self.dbs_pool, None)
+        apply_chunk_of_blocks_modules(
+            blocks,
+            Arc::new(self.conf.clone()),
+            self.currency_params,
+            &self.dbs_pool,
+            None,
+        )
     }
     pub fn revert_block(&mut self, block: DubpBlockV10Stringified) -> KvResult<()> {
         let block = Arc::new(
@@ -64,6 +89,12 @@ impl DuniterServer {
             .expect("dbs pool disconnected");
         self.current = duniter_core::dbs_write_ops::bc::revert_block(&self.bc_db, &block)?;
         txs_mp_job_handle.join().expect("dbs pool disconnected")?;
-        revert_block_modules(block, Arc::new(self.conf.clone()), &self.dbs_pool, None)
+        revert_block_modules(
+            block,
+            Arc::new(self.conf.clone()),
+            self.currency_params,
+            &self.dbs_pool,
+            None,
+        )
     }
 }
diff --git a/rust-libs/duniter-server/src/lib.rs b/rust-libs/duniter-server/src/lib.rs
index e031a15839ca989434818df205994476db664f82..7de95f5a536592e6aa8816a6e933cba21aa97943 100644
--- a/rust-libs/duniter-server/src/lib.rs
+++ b/rust-libs/duniter-server/src/lib.rs
@@ -26,7 +26,7 @@ mod fill_cm;
 mod legacy;
 
 pub use duniter_core::conf::{DuniterCoreConf, DuniterMode};
-use duniter_core::dbs::databases::network_v1::NetworkV1DbWritable;
+use duniter_core::dbs::databases::{bc_v2::BcV2DbReadable, network_v1::NetworkV1DbWritable};
 pub use duniter_core::dbs::{
     kv_typed::prelude::KvResult, smallvec, DunpHeadDbV1, DunpNodeIdV1Db, PeerCardDbV1,
 };
@@ -34,8 +34,8 @@ pub use duniter_core::dbs::{
 pub use duniter_gva::GvaModule;
 
 use anyhow::Context;
-use dubp::common::crypto::keys::ed25519::PublicKey;
 use dubp::common::prelude::*;
+use dubp::common::{crypto::keys::ed25519::PublicKey, currency_params::CurrencyParameters};
 use dubp::documents::{prelude::*, transaction::TransactionDocumentV10};
 use dubp::{
     block::prelude::*, common::crypto::hashs::Hash, documents_parser::prelude::FromStringObject,
@@ -72,6 +72,7 @@ cfg_if::cfg_if! {
 pub struct DuniterServer {
     bc_db: BcV2Db<FileBackend>,
     conf: DuniterCoreConf,
+    currency_params: CurrencyParameters,
     current: Option<BlockMetaV2>,
     dbs_pool: fast_threadpool::ThreadPoolSyncHandler<SharedDbs<FileBackend>>,
     global_sender: flume::Sender<GlobalBackGroundTaskMsg>,
@@ -108,6 +109,9 @@ impl DuniterServer {
         let current = fill_cm::fill_and_get_current_meta(&bc_db, &global_sender)?;
         log::info!("Databases successfully opened.");
 
+        // Get currency parameters
+        let currency_params = bc_db.currency_params().get(&())?.unwrap_or_default().0;
+
         if let Some(current) = current {
             log::info!("Current block: #{}-{}", current.number, current.hash);
         } else {
@@ -157,6 +161,7 @@ impl DuniterServer {
             bc_db,
             conf,
             current,
+            currency_params,
             dbs_pool: threadpool.into_sync_handler(),
             global_sender,
             pending_txs_subscriber,
diff --git a/rust-libs/tests/duniter-integration-tests/Cargo.toml b/rust-libs/tests/duniter-integration-tests/Cargo.toml
index 1d2042ce53c18bc7a28cefa4a483c8ec42d1967e..d2244d10beffdbd13237ba843cd73d61df24731c 100644
--- a/rust-libs/tests/duniter-integration-tests/Cargo.toml
+++ b/rust-libs/tests/duniter-integration-tests/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 [dependencies]
 anyhow = "1.0.34"
 chrono = "0.4"
-dubp = { version = "0.53.1", features = ["duniter"] }
+dubp = { version = "0.54.1", features = ["duniter"] }
 duniter-core = { git = "https://git.duniter.org/nodes/rust/duniter-core", features = ["bc-writer"] }
 duniter-server = { path = "../../duniter-server", features = ["gva"] }
 fast-threadpool = "0.2.3"