From ef9f351ec5e469e831cd28b55bf8e32380ccf8da Mon Sep 17 00:00:00 2001
From: igor <igor.markin@vereign.com>
Date: Tue, 24 Aug 2021 17:47:16 +0300
Subject: [PATCH] Fetch microblock for Verification and use it's time as the TX
 time

---
 dist/types.d.ts                                   |  2 ++
 src/services/AeternityService/AeternityService.ts | 15 +++++++++++++++
 src/services/AeternityService/types.ts            |  1 +
 .../VerificationService/VerificationService.ts    |  9 ++++++++-
 src/types.ts                                      |  2 ++
 5 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/dist/types.d.ts b/dist/types.d.ts
index 96f91f5..77bc266 100644
--- a/dist/types.d.ts
+++ b/dist/types.d.ts
@@ -56,9 +56,11 @@ export interface BlockData {
 export interface TxData {
     hash: string;
     blockHeight: number;
+    blockHash: string;
     tx: {
         callData: string;
     };
+    time?: number;
 }
 export interface DecodedCallData {
     key: string;
diff --git a/src/services/AeternityService/AeternityService.ts b/src/services/AeternityService/AeternityService.ts
index 6c2e69e..d9fae92 100644
--- a/src/services/AeternityService/AeternityService.ts
+++ b/src/services/AeternityService/AeternityService.ts
@@ -95,6 +95,7 @@ class AeternityService {
       tx: {
         callData: data.tx.call_data,
       },
+      blockHash: data.block_hash,
     };
   }
 
@@ -117,6 +118,20 @@ class AeternityService {
     };
   }
 
+  async getMicroBlock(
+    hash: string
+  ): Promise<{ height: number; time: number; hash: string }> {
+    const { time, height } = await this.requestNode({
+      url: `/v2/micro-blocks/hash/${hash}/header`,
+    }).then(({ data }: Response<AeternityAPIBlockData>) => data);
+
+    return {
+      height,
+      time,
+      hash,
+    };
+  }
+
   async getBlock(
     height: number
   ): Promise<{ height: number; time: number; hash: string }> {
diff --git a/src/services/AeternityService/types.ts b/src/services/AeternityService/types.ts
index 8efdbb4..c95b4ed 100644
--- a/src/services/AeternityService/types.ts
+++ b/src/services/AeternityService/types.ts
@@ -1,6 +1,7 @@
 export interface AeternityAPITxData {
   hash: string;
   block_height: number;
+  block_hash: string;
   tx: {
     call_data: string;
   };
diff --git a/src/services/VerificationService/VerificationService.ts b/src/services/VerificationService/VerificationService.ts
index d629eaf..5bc1a3c 100644
--- a/src/services/VerificationService/VerificationService.ts
+++ b/src/services/VerificationService/VerificationService.ts
@@ -144,7 +144,14 @@ class VerificationService extends EventEmitter {
 
       this.emit(STATUS_BATCH_VERIFIED, batchVerificationDetails);
 
-      blockData = await this.getBlockData(txData.blockHeight);
+      const blockRequests = await Promise.all([
+        this.getBlockData(txData.blockHeight),
+        this._aeternityService.getMicroBlock(txData.blockHash),
+      ]);
+
+      blockData = blockRequests[0];
+      const microBlockData = blockRequests[1];
+      txData.time = microBlockData.time;
 
       this.emit(BLOCK_DATA_RETRIEVED, blockData);
     } catch (e) {
diff --git a/src/types.ts b/src/types.ts
index 52ae9d3..312f3fc 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -65,9 +65,11 @@ export interface BlockData {
 export interface TxData {
   hash: string;
   blockHeight: number;
+  blockHash: string;
   tx: {
     callData: string;
   };
+  time?: number;
 }
 
 export interface DecodedCallData {
-- 
GitLab