From 4a7d3270dff7cbde9df08bdff30b08cedc24d13b Mon Sep 17 00:00:00 2001
From: librelois <c@elo.tf>
Date: Mon, 17 May 2021 15:13:14 +0200
Subject: [PATCH] feat(indexer): add currency_params

---
 Cargo.lock            | 60 ++++++++++++++++++++++++++-----------------
 Cargo.toml            |  2 +-
 bca/Cargo.toml        |  2 +-
 bca/types/Cargo.toml  |  2 +-
 db/Cargo.toml         |  2 +-
 dbs-reader/Cargo.toml |  2 +-
 gql/Cargo.toml        |  2 +-
 indexer/Cargo.toml    |  2 +-
 indexer/src/lib.rs    | 47 ++++++++++++++++++++-------------
 src/lib.rs            |  8 +++---
 10 files changed, 78 insertions(+), 51 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock
index 7eefce4..3cf5426 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -273,6 +273,7 @@ dependencies = [
  "constant_time_eq",
  "crypto-mac",
  "digest 0.9.0",
+ "rayon",
 ]
 
 [[package]]
@@ -687,9 +688,9 @@ checksum = "4bb454f0228b18c7f4c3b0ebbee346ed9c52e7443b0999cd543ff3571205701d"
 
 [[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",
@@ -701,9 +702,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",
@@ -716,9 +717,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",
@@ -729,9 +730,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",
@@ -743,9 +744,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",
@@ -757,9 +758,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",
@@ -769,10 +770,22 @@ dependencies = [
  "zerocopy",
 ]
 
+[[package]]
+name = "dubp-wot"
+version = "0.11.0"
+source = "git+https://git.duniter.org/nodes/rust/duniter-core#ce0cb755acd91c2e91fe6fc89ea57ae7d7e3eaef"
+dependencies = [
+ "log",
+ "once_cell",
+ "parking_lot",
+ "rayon",
+ "serde",
+]
+
 [[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",
@@ -818,7 +831,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",
@@ -832,8 +845,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",
@@ -845,7 +859,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",
@@ -868,7 +882,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",
@@ -883,7 +897,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",
@@ -1018,7 +1032,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",
@@ -1031,7 +1045,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",
@@ -1050,9 +1064,9 @@ dependencies = [
 
 [[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 = [
  "arrayvec 0.5.2",
  "base64",
@@ -1602,7 +1616,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/Cargo.toml b/Cargo.toml
index 198045f..333a51c 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -13,7 +13,7 @@ async-graphql = { version = "2.8", features = ["log"] }
 async-mutex = "1.4.0"
 async-trait = "0.1.41"
 bytes = "1.0"
-dubp = { version = "0.53.1", features = ["duniter"] }
+dubp = { version = "0.54.1", features = ["duniter"] }
 duniter-bca = { path = "./bca" }
 duniter-core = { git = "https://git.duniter.org/nodes/rust/duniter-core" }
 duniter-gva-conf = { path = "./conf" }
diff --git a/bca/Cargo.toml b/bca/Cargo.toml
index de60e8a..0d98bfa 100644
--- a/bca/Cargo.toml
+++ b/bca/Cargo.toml
@@ -11,7 +11,7 @@ arrayvec = { version = "0.7", features = ["serde"] }
 async-bincode = "0.6.1"
 async_io_stream = { version = "0.3.1", features = [ "tokio_io"] }
 bincode = "1.3"
-dubp = { version = "0.53.1", features = ["duniter"] }
+dubp = { version = "0.54.1", features = ["duniter"] }
 duniter-bca-types = { path = "types", features = ["duniter"] }
 duniter-core = { git = "https://git.duniter.org/nodes/rust/duniter-core" }
 duniter-gva-db = { path = "../db" }
diff --git a/bca/types/Cargo.toml b/bca/types/Cargo.toml
index 38ba507..a151398 100644
--- a/bca/types/Cargo.toml
+++ b/bca/types/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2018"
 [dependencies]
 arrayvec = { version = "0.7", features = ["serde"] }
 bincode = "1.3"
-dubp = { version = "0.53.1" }
+dubp = { version = "0.54.1" }
 serde = { version = "1.0.105", features = ["derive"] }
 smallvec = { version = "1.4.0", features = ["serde"] }
 thiserror = "1.0.20"
diff --git a/db/Cargo.toml b/db/Cargo.toml
index 04ceb64..24e4e92 100644
--- a/db/Cargo.toml
+++ b/db/Cargo.toml
@@ -14,7 +14,7 @@ path = "src/lib.rs"
 bincode = "1.3"
 chrono = { version = "0.4.15", optional = true }
 duniter-core = { git = "https://git.duniter.org/nodes/rust/duniter-core" }
-dubp = { version = "0.53.1", features = ["duniter"] }
+dubp = { version = "0.54.1", features = ["duniter"] }
 parking_lot = "0.11.0"
 paste = "1.0.2"
 serde = { version = "1.0.105", features = ["derive"] }
diff --git a/dbs-reader/Cargo.toml b/dbs-reader/Cargo.toml
index 1fe254e..21332a6 100644
--- a/dbs-reader/Cargo.toml
+++ b/dbs-reader/Cargo.toml
@@ -20,7 +20,7 @@ arrayvec = { version = "0.7", features = ["serde"] }
 duniter-bca-types = { path = "../bca/types" }
 duniter-core = { git = "https://git.duniter.org/nodes/rust/duniter-core" }
 duniter-gva-db = { path = "../db" }
-dubp = { version = "0.53.1", features = ["duniter"] }
+dubp = { version = "0.54.1", features = ["duniter"] }
 mockall = { version = "0.9.1", optional = true }
 resiter = "0.4.0"
 
diff --git a/gql/Cargo.toml b/gql/Cargo.toml
index 1fab7cc..68a1401 100644
--- a/gql/Cargo.toml
+++ b/gql/Cargo.toml
@@ -10,7 +10,7 @@ anyhow = "1.0.33"
 arrayvec = { version = "0.7", features = ["serde"] }
 async-graphql = { version = "2.8", features = ["log"] }
 async-trait = "0.1.41"
-dubp = { version = "0.53.1", features = ["duniter"] }
+dubp = { version = "0.54.1", features = ["duniter"] }
 duniter-bca-types = { path = "../bca/types" }
 duniter-core = { git = "https://git.duniter.org/nodes/rust/duniter-core" }
 duniter-gva-db = { path = "../db" }
diff --git a/indexer/Cargo.toml b/indexer/Cargo.toml
index 8639130..25d4999 100644
--- a/indexer/Cargo.toml
+++ b/indexer/Cargo.toml
@@ -16,7 +16,7 @@ anyhow = "1.0.34"
 bincode = "1.3"
 duniter-core = { git = "https://git.duniter.org/nodes/rust/duniter-core" }
 duniter-gva-db = { path = "../db" }
-dubp = { version = "0.53.1", features = ["duniter"] }
+dubp = { version = "0.54.1", features = ["duniter"] }
 lz4_flex = { version = "0.7", default-features = false }
 once_cell = "1.5.2"
 resiter = "0.4.0"
diff --git a/indexer/src/lib.rs b/indexer/src/lib.rs
index c67cfa4..07f8ca9 100644
--- a/indexer/src/lib.rs
+++ b/indexer/src/lib.rs
@@ -28,13 +28,14 @@ mod tx;
 mod utxos;
 
 use bincode::Options as _;
-use dubp::block::prelude::*;
-use dubp::common::crypto::hashs::Hash;
-use dubp::common::prelude::*;
-use dubp::documents::{
-    prelude::*, transaction::TransactionDocumentTrait, transaction::TransactionDocumentV10,
+use dubp::{
+    block::prelude::*,
+    common::{crypto::hashs::Hash, currency_params::CurrencyParameters, prelude::*},
+    documents::{
+        prelude::*, transaction::TransactionDocumentTrait, transaction::TransactionDocumentV10,
+    },
+    wallet::prelude::*,
 };
-use dubp::wallet::prelude::*;
 use duniter_core::dbs::{
     bincode_db, kv_typed::prelude::*, prelude::*, FileBackend, HashKeyV2, PubKeyKeyV2,
     SourceAmountValV2, WalletConditionsV2,
@@ -71,7 +72,11 @@ pub struct UtxoV10<'s> {
     pub written_block: BlockNumber,
 }
 
-pub fn apply_block<B: Backend>(block: &DubpBlockV10, gva_db: &GvaV1Db<B>) -> KvResult<()> {
+pub fn apply_block<B: Backend>(
+    block: &DubpBlockV10,
+    _currency_params: CurrencyParameters,
+    gva_db: &GvaV1Db<B>,
+) -> KvResult<()> {
     let blockstamp = Blockstamp {
         number: block.number(),
         hash: block.hash(),
@@ -103,7 +108,11 @@ pub fn apply_block<B: Backend>(block: &DubpBlockV10, gva_db: &GvaV1Db<B>) -> KvR
     Ok(())
 }
 
-pub fn revert_block<B: Backend>(block: &DubpBlockV10, gva_db: &GvaV1Db<B>) -> KvResult<()> {
+pub fn revert_block<B: Backend>(
+    block: &DubpBlockV10,
+    _currency_params: CurrencyParameters,
+    gva_db: &GvaV1Db<B>,
+) -> KvResult<()> {
     gva_db.write(|mut db| {
         blocks_chunks::revert_block_blocks_chunk::<B>(block, &mut db)?;
         db.blocks_by_common_time.remove(U64BE(block.common_time()));
@@ -269,8 +278,9 @@ mod tests {
             hash: Some("0000000000000000000000000000000000000000000000000000000000000000".to_owned()),
             ..Default::default()
         })?;
+        let currency_params = CurrencyParameters::default();
 
-        apply_block(&b0, &gva_db)?;
+        apply_block(&b0, currency_params, &gva_db)?;
 
         assert_eq!(gva_db.blocks_by_common_time().count()?, 1);
         assert_eq!(gva_db.blocks_by_common_time().get(&U64BE(5_243))?, Some(0));
@@ -308,7 +318,7 @@ mod tests {
             ..Default::default()
         })?;
 
-        apply_block(&b1, &gva_db)?;
+        apply_block(&b1, currency_params, &gva_db)?;
 
         assert_eq!(gva_db.blocks_by_common_time().count()?, 2);
         assert_eq!(gva_db.blocks_by_common_time().get(&U64BE(5_245))?, Some(1));
@@ -372,7 +382,7 @@ mod tests {
             ..Default::default()
         })?;
 
-        apply_block(&b2, &gva_db)?;
+        apply_block(&b2, currency_params, &gva_db)?;
 
         assert_eq!(gva_db.blocks_by_common_time().count()?, 3);
         assert_eq!(gva_db.blocks_by_common_time().get(&U64BE(5_247))?, Some(2));
@@ -439,8 +449,9 @@ mod tests {
             hash: Some("0000000000000000000000000000000000000000000000000000000000000000".to_owned()),
             ..Default::default()
         })?;
+        let currency_params = CurrencyParameters::default();
 
-        apply_block(&b0, &gva_db)?;
+        apply_block(&b0, currency_params, &gva_db)?;
 
         let b1 = DubpBlockV10::from_string_object(&DubpBlockV10Stringified {
             number: 1,
@@ -467,7 +478,7 @@ mod tests {
             ..Default::default()
         })?;
 
-        apply_block(&b1, &gva_db)?;
+        apply_block(&b1, currency_params, &gva_db)?;
 
         let b2 = DubpBlockV10::from_string_object(&DubpBlockV10Stringified {
             number: 2,
@@ -493,7 +504,7 @@ mod tests {
             ..Default::default()
         })?;
 
-        apply_block(&b2, &gva_db)?;
+        apply_block(&b2, currency_params, &gva_db)?;
 
         let b3 = DubpBlockV10::from_string_object(&DubpBlockV10Stringified {
             number: 3,
@@ -519,9 +530,9 @@ mod tests {
             ..Default::default()
         })?;
 
-        apply_block(&b3, &gva_db)?;
+        apply_block(&b3, currency_params, &gva_db)?;
 
-        revert_block(&b3, &gva_db)?;
+        revert_block(&b3, currency_params, &gva_db)?;
 
         assert_eq!(gva_db.blockchain_time().count()?, 3);
         assert_eq!(gva_db.blockchain_time().get(&U32BE(2))?, Some(5_247));
@@ -551,7 +562,7 @@ mod tests {
             ]
         );
 
-        revert_block(&b2, &gva_db)?;
+        revert_block(&b2, currency_params, &gva_db)?;
 
         assert_eq!(gva_db.blockchain_time().count()?, 2);
         assert_eq!(gva_db.blockchain_time().get(&U32BE(1))?, Some(5_245));
@@ -581,7 +592,7 @@ mod tests {
             ]
         );
 
-        revert_block(&b1, &gva_db)?;
+        revert_block(&b1, currency_params, &gva_db)?;
 
         assert_eq!(gva_db.blockchain_time().count()?, 1);
         assert_eq!(gva_db.blockchain_time().get(&U32BE(0))?, Some(5_243));
diff --git a/src/lib.rs b/src/lib.rs
index 90b5109..c15d587 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -26,7 +26,7 @@ mod anti_spam;
 mod warp_;
 
 use async_graphql::http::GraphQLPlaygroundConfig;
-use dubp::common::prelude::*;
+use dubp::common::{currency_params::CurrencyParameters, prelude::*};
 use dubp::documents::transaction::TransactionDocumentV10;
 use dubp::{block::DubpBlockV10, crypto::hashs::Hash};
 use dubp::{
@@ -73,18 +73,20 @@ impl duniter_core::module::DuniterModule for GvaModule {
     fn apply_block(
         block: &DubpBlockV10,
         _conf: &duniter_core::conf::DuniterCoreConf,
+        currency_params: CurrencyParameters,
         profile_path_opt: Option<&Path>,
     ) -> KvResult<()> {
         let gva_db = get_gva_db_rw(profile_path_opt);
-        duniter_gva_indexer::apply_block(&block, gva_db)
+        duniter_gva_indexer::apply_block(&block, currency_params, gva_db)
     }
     fn revert_block(
         block: &DubpBlockV10,
         _conf: &duniter_core::conf::DuniterCoreConf,
+        currency_params: CurrencyParameters,
         profile_path_opt: Option<&Path>,
     ) -> KvResult<()> {
         let gva_db = get_gva_db_rw(profile_path_opt);
-        duniter_gva_indexer::revert_block(&block, gva_db)
+        duniter_gva_indexer::revert_block(&block, currency_params, gva_db)
     }
     async fn init(
         conf: Self::Conf,
-- 
GitLab