diff --git a/CHANGELOG.md b/CHANGELOG.md index 2168c8cc6bd852c900ceed355bb8d977e3f77dbb..1482ca0dfeaaec3624f7169ae93128d9b49230d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## [2.0.2] - 2021-08-24 + +### Added + +- Obtain microblock timestamp and provide it as transaction time via VerificationService + ## [2.0.1] - 2021-06-23 ### Changed diff --git a/dist/services/AeternityService/AeternityService.d.ts b/dist/services/AeternityService/AeternityService.d.ts index 642f960800126960a888c168ee308115c298dcd3..25dfedce056d947df3f3b81bb53a4868e3182da8 100644 --- a/dist/services/AeternityService/AeternityService.d.ts +++ b/dist/services/AeternityService/AeternityService.d.ts @@ -15,6 +15,11 @@ declare class AeternityService { requestApi: (apiUrls: string[]) => Request; getTxDataByHash(hash: string): Promise<TxData>; decodeContractCallData(callData: string): Promise<DecodedCallData>; + getMicroBlock(hash: string): Promise<{ + height: number; + time: number; + hash: string; + }>; getBlock(height: number): Promise<{ height: number; time: number; diff --git a/dist/services/AeternityService/AeternityService.js b/dist/services/AeternityService/AeternityService.js index 0e4e895a82c0a573ec467b4152a7b9926d7b2e3f..898caa877020eef43542b7ed29773b9180d9ccd3 100644 --- a/dist/services/AeternityService/AeternityService.js +++ b/dist/services/AeternityService/AeternityService.js @@ -83,6 +83,7 @@ class AeternityService { tx: { callData: data.tx.call_data, }, + blockHash: data.block_hash, }; }); } @@ -106,6 +107,18 @@ class AeternityService { }; }); } + getMicroBlock(hash) { + return __awaiter(this, void 0, void 0, function* () { + const { time, height } = yield this.requestNode({ + url: `/v2/micro-blocks/hash/${hash}/header`, + }).then(({ data }) => data); + return { + height, + time, + hash, + }; + }); + } getBlock(height) { return __awaiter(this, void 0, void 0, function* () { const { time, hash } = yield this.requestNode({ diff --git a/dist/services/AeternityService/types.d.ts b/dist/services/AeternityService/types.d.ts index 82b1862f37477c49aea053853346ce33814aef63..5774a08efbc4925818b96cb6b04e5e0e78f83698 100644 --- a/dist/services/AeternityService/types.d.ts +++ b/dist/services/AeternityService/types.d.ts @@ -1,6 +1,7 @@ export interface AeternityAPITxData { hash: string; block_height: number; + block_hash: string; tx: { call_data: string; }; diff --git a/dist/services/VerificationService/VerificationService.js b/dist/services/VerificationService/VerificationService.js index 6c17455bd6764f6ff92404e369dd52dd52390bde..9680acdace1e541e23ade3ff92c21c47bfb08865 100644 --- a/dist/services/VerificationService/VerificationService.js +++ b/dist/services/VerificationService/VerificationService.js @@ -113,7 +113,13 @@ class VerificationService extends EventEmitter { batchHash, }; this.emit(exports.STATUS_BATCH_VERIFIED, batchVerificationDetails); - blockData = yield this.getBlockData(txData.blockHeight); + const blockRequests = yield Promise.all([ + this.getBlockData(txData.blockHeight), + this._aeternityService.getMicroBlock(txData.blockHash), + ]); + blockData = blockRequests[0]; + const microBlockData = blockRequests[1]; + txData.time = microBlockData.time; this.emit(exports.BLOCK_DATA_RETRIEVED, blockData); } catch (e) { diff --git a/dist/types.d.ts b/dist/types.d.ts index 96f91f5bdf837398e85560d2f33e9c3a5eade766..77bc26610e09a7393c25e56afc81cfcd6bff3289 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/package.json b/package.json index c1dac118f66a56050741ed887deec5b52e1fb75f..0751219b0ad89c1b61545f4cd8b48eef236552cb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@vereign/light-utils", - "version": "2.0.1", + "version": "2.0.2", "license": "MIT", "main": "./dist/index.js", "types": "./dist/index.d.ts", diff --git a/src/services/AeternityService/AeternityService.ts b/src/services/AeternityService/AeternityService.ts index 6c2e69e95acdab391e77a566c8263811f09ec826..d9fae929170ff253544bd5647bcdf275b39a7e52 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 8efdbb4224e1ae70939780021dff7a2a147add39..c95b4ed45fa8ea39c459a12c8842005ae53ced40 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 d629eafd4cdbdde6d4be54c81e6875399ac83ee3..5bc1a3c8131264a3879a4ccbe4d1865a8b00998a 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 52ae9d3488421ae55459cf2579c9dc37de11545b..312f3fc3b8c9ad85d496d6aedc3fceec91e72c2a 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 {