From eebc87b48bc3338a085a325dc7d7f63db084d0fd Mon Sep 17 00:00:00 2001
From: librelois <elois@ifee.fr>
Date: Sun, 17 Nov 2019 22:36:55 +0100
Subject: [PATCH] [feat] gva: block: add field pow_min

---
 lib/dubp/block-doc/src/block.rs               | 8 ++++++++
 lib/dubp/block-doc/src/block/v10.rs           | 3 +++
 lib/modules/gva/resources/schema.gql          | 1 +
 lib/modules/gva/src/schema/entities/block.rs  | 6 ++++++
 lib/modules/gva/src/schema/queries/block.rs   | 4 +++-
 lib/modules/gva/src/schema/queries/current.rs | 4 +++-
 6 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/lib/dubp/block-doc/src/block.rs b/lib/dubp/block-doc/src/block.rs
index 0364e451..7ca98b4a 100644
--- a/lib/dubp/block-doc/src/block.rs
+++ b/lib/dubp/block-doc/src/block.rs
@@ -77,6 +77,8 @@ pub trait BlockDocumentTrait {
     fn issuers_count(&self) -> usize;
     /// Get block number
     fn number(&self) -> BlockNumber;
+    /// Get common difficulty (PoW)
+    fn pow_min(&self) -> usize;
     /// Get previous hash
     fn previous_hash(&self) -> Option<Hash>;
     /// Get previous blockstamp
@@ -171,6 +173,12 @@ impl BlockDocumentTrait for BlockDocument {
         }
     }
     #[inline]
+    fn pow_min(&self) -> usize {
+        match self {
+            BlockDocument::V10(block) => block.pow_min(),
+        }
+    }
+    #[inline]
     fn previous_blockstamp(&self) -> Blockstamp {
         match self {
             BlockDocument::V10(block) => block.previous_blockstamp(),
diff --git a/lib/dubp/block-doc/src/block/v10.rs b/lib/dubp/block-doc/src/block/v10.rs
index cbf00fbf..893807ce 100644
--- a/lib/dubp/block-doc/src/block/v10.rs
+++ b/lib/dubp/block-doc/src/block/v10.rs
@@ -276,6 +276,9 @@ Transactions:{transactions}
     fn number(&self) -> BlockNumber {
         self.number
     }
+    fn pow_min(&self) -> usize {
+        self.pow_min
+    }
     fn previous_blockstamp(&self) -> Blockstamp {
         if self.number.0 > 0 {
             Blockstamp {
diff --git a/lib/modules/gva/resources/schema.gql b/lib/modules/gva/resources/schema.gql
index f3808c35..163060c7 100644
--- a/lib/modules/gva/resources/schema.gql
+++ b/lib/modules/gva/resources/schema.gql
@@ -54,4 +54,5 @@ type Block {
   number: Int!
   hash: String!,
   commonTime: DateTimeUtc!
+  powMin: Int!
 }
diff --git a/lib/modules/gva/src/schema/entities/block.rs b/lib/modules/gva/src/schema/entities/block.rs
index 3a2900a3..fee7d248 100644
--- a/lib/modules/gva/src/schema/entities/block.rs
+++ b/lib/modules/gva/src/schema/entities/block.rs
@@ -30,6 +30,7 @@ pub struct Block {
     number: i32,
     hash: String,
     common_time: NaiveDateTime,
+    pow_min: i32,
 }
 
 impl super::super::BlockFields for Block {
@@ -56,6 +57,10 @@ impl super::super::BlockFields for Block {
     fn field_common_time(&self, _executor: &Executor<'_, Context>) -> FieldResult<&NaiveDateTime> {
         Ok(&self.common_time)
     }
+
+    fn field_pow_min(&self, _executor: &Executor<'_, Context>) -> FieldResult<&i32> {
+        Ok(&self.pow_min)
+    }
 }
 
 impl Block {
@@ -71,6 +76,7 @@ impl Block {
                 .unwrap_or_else(|| fatal_error!("DbBlock without hash."))
                 .to_string(),
             common_time: NaiveDateTime::from_timestamp(db_block.block.common_time() as i64, 0),
+            pow_min: db_block.block.pow_min() as i32,
         }
     }
 }
diff --git a/lib/modules/gva/src/schema/queries/block.rs b/lib/modules/gva/src/schema/queries/block.rs
index 73547478..4ad02dd8 100644
--- a/lib/modules/gva/src/schema/queries/block.rs
+++ b/lib/modules/gva/src/schema/queries/block.rs
@@ -72,6 +72,7 @@ mod tests {
                     Hash::default(),
                 );
                 block.issuers = vec![pubkey('B')];
+                block.pow_min = 70;
                 Ok(Some(DbBlock {
                     block: BlockDocument::V10(block),
                     expire_certs: None,
@@ -96,7 +97,7 @@ mod tests {
 
         tests::test_gql_query(
             schema,
-            "{ block(number: 42) { commonTime, currency, hash, issuer, number, version } }",
+            "{ block(number: 42) { commonTime, currency, hash, issuer, number, powMin, version } }",
             json!({
                 "data": {
                     "block": {
@@ -105,6 +106,7 @@ mod tests {
                         "hash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
                         "issuer": "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB",
                         "number": 42,
+                        "powMin": 70,
                         "version": 10
                     }
                 }
diff --git a/lib/modules/gva/src/schema/queries/current.rs b/lib/modules/gva/src/schema/queries/current.rs
index 309bc56d..771e750e 100644
--- a/lib/modules/gva/src/schema/queries/current.rs
+++ b/lib/modules/gva/src/schema/queries/current.rs
@@ -60,6 +60,7 @@ mod tests {
                 Hash::default(),
             );
             current_block.issuers = vec![pubkey('B')];
+            current_block.pow_min = 70;
             Ok(Some(DbBlock {
                 block: BlockDocument::V10(current_block),
                 expire_certs: None,
@@ -70,7 +71,7 @@ mod tests {
 
         tests::test_gql_query(
             schema,
-            "{ current { commonTime, currency, hash, issuer, number, version } }",
+            "{ current { commonTime, currency, hash, issuer, number, powMin, version } }",
             json!({
                 "data": {
                     "current": {
@@ -79,6 +80,7 @@ mod tests {
                         "hash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
                         "issuer": "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB",
                         "number": 42,
+                        "powMin": 70,
                         "version": 10
                     }
                 }
-- 
GitLab