From 01968b8a35418d3a61e2d41e1356ba57d5a29729 Mon Sep 17 00:00:00 2001 From: nikolay Date: Fri, 5 Sep 2025 10:24:14 +0300 Subject: [PATCH 1/3] chore: add blocktimestamp Signed-off-by: nikolay --- packages/relay/src/lib/model.ts | 2 ++ .../services/ethService/ethCommonService/CommonService.ts | 1 + .../ethService/transactionService/TransactionService.ts | 8 +++----- packages/relay/tests/helpers.ts | 1 + packages/relay/tests/lib/eth/eth_getBlockReceipts.spec.ts | 1 + .../relay/tests/lib/eth/eth_getTransactionReceipt.spec.ts | 1 + 6 files changed, 9 insertions(+), 5 deletions(-) diff --git a/packages/relay/src/lib/model.ts b/packages/relay/src/lib/model.ts index 3d83ff6faa..fa9eebf126 100644 --- a/packages/relay/src/lib/model.ts +++ b/packages/relay/src/lib/model.ts @@ -172,6 +172,7 @@ export class Log { public readonly address: string; public readonly blockHash: string; public readonly blockNumber: string; + public readonly blockTimestamp: string; public readonly data: string; public readonly logIndex: string; public readonly removed: boolean; @@ -183,6 +184,7 @@ export class Log { this.address = args.address; this.blockHash = args.blockHash; this.blockNumber = args.blockNumber; + this.blockTimestamp = args.blockTimestamp; this.data = args.data; this.logIndex = args.logIndex; this.removed = args.removed; diff --git a/packages/relay/src/lib/services/ethService/ethCommonService/CommonService.ts b/packages/relay/src/lib/services/ethService/ethCommonService/CommonService.ts index 0690e32328..07593e5788 100644 --- a/packages/relay/src/lib/services/ethService/ethCommonService/CommonService.ts +++ b/packages/relay/src/lib/services/ethService/ethCommonService/CommonService.ts @@ -365,6 +365,7 @@ export class CommonService implements ICommonService { logs.push( new Log({ address: log.address, + blockTimestamp: numberTo0x(log.timestamp.split('.')[0]), blockHash: toHash32(log.block_hash), blockNumber: numberTo0x(log.block_number), data: log.data, diff --git a/packages/relay/src/lib/services/ethService/transactionService/TransactionService.ts b/packages/relay/src/lib/services/ethService/transactionService/TransactionService.ts index ed045c0efc..9f753d869c 100644 --- a/packages/relay/src/lib/services/ethService/transactionService/TransactionService.ts +++ b/packages/relay/src/lib/services/ethService/transactionService/TransactionService.ts @@ -356,6 +356,7 @@ export class TransactionService implements ITransactionService { address: log.address, blockHash: toHash32(receiptResponse.block_hash), blockNumber: numberTo0x(receiptResponse.block_number), + blockTimestamp: numberTo0x(receiptResponse.timestamp.split('.')[0]), data: log.data, logIndex: numberTo0x(log.index), removed: false, @@ -369,16 +370,13 @@ export class TransactionService implements ITransactionService { this.common.resolveEvmAddress(receiptResponse.to, requestDetails), ]); - const transactionReceiptParams: IRegularTransactionReceiptParams = { + return TransactionReceiptFactory.createRegularReceipt({ effectiveGas, from, logs, receiptResponse, to, - }; - const receipt: ITransactionReceipt = TransactionReceiptFactory.createRegularReceipt(transactionReceiptParams); - - return receipt; + }); } /** diff --git a/packages/relay/tests/helpers.ts b/packages/relay/tests/helpers.ts index faedc754ae..4ce45d9797 100644 --- a/packages/relay/tests/helpers.ts +++ b/packages/relay/tests/helpers.ts @@ -99,6 +99,7 @@ export const expectLogData = (res, log, tx) => { expect(res.address).to.eq(log.address); expect(res.blockHash).to.eq(toHash32(tx.block_hash)); expect(res.blockHash.length).to.eq(66); + expect(res.blockTimestamp).to.eq(numberTo0x(tx.timestamp.split('.')[0])); expect(res.blockNumber).to.eq(numberTo0x(tx.block_number)); expect(res.data).to.eq(log.data); expect(res.logIndex).to.eq(numberTo0x(log.index)); diff --git a/packages/relay/tests/lib/eth/eth_getBlockReceipts.spec.ts b/packages/relay/tests/lib/eth/eth_getBlockReceipts.spec.ts index b3b0a90c00..49e7478428 100644 --- a/packages/relay/tests/lib/eth/eth_getBlockReceipts.spec.ts +++ b/packages/relay/tests/lib/eth/eth_getBlockReceipts.spec.ts @@ -213,6 +213,7 @@ describe('@ethGetBlockReceipts using MirrorNode', async function () { expect(receipts[1].logs.length).to.equal(1); expect(receipts[1].transactionHash).to.equal(defaultLogs1[0].transaction_hash); expect(receipts[1].transactionHash).to.equal(defaultLogs1[1].transaction_hash); + expect(receipts[1].logs[0].blockTimestamp).to.equal(numberTo0x(defaultLogs1[0].timestamp.split('.')[0])); }); it('should handle null to field for contract creation transactions', async function () { diff --git a/packages/relay/tests/lib/eth/eth_getTransactionReceipt.spec.ts b/packages/relay/tests/lib/eth/eth_getTransactionReceipt.spec.ts index a32cc7a8a1..5664c6faea 100644 --- a/packages/relay/tests/lib/eth/eth_getTransactionReceipt.spec.ts +++ b/packages/relay/tests/lib/eth/eth_getTransactionReceipt.spec.ts @@ -95,6 +95,7 @@ describe('@ethGetTransactionReceipt eth_getTransactionReceipt tests', async func address: '0x0000000000000000000000000000000000001389', blockHash: '0xd693b532a80fed6392b428604171fb32fdbf953728a3a7ecc7d4062b1652c042', blockNumber: '0x11', + blockTimestamp: '0x167654', data: '0x0123', logIndex: '0x0', removed: false, From 723e685e17326f1aae4e7d120745f8a1870eea0c Mon Sep 17 00:00:00 2001 From: nikolay Date: Fri, 5 Sep 2025 10:28:07 +0300 Subject: [PATCH 2/3] chore: eslint fix Signed-off-by: nikolay --- .../ethService/transactionService/TransactionService.ts | 1 - packages/relay/tests/lib/eth/eth_getBlockReceipts.spec.ts | 2 -- 2 files changed, 3 deletions(-) diff --git a/packages/relay/src/lib/services/ethService/transactionService/TransactionService.ts b/packages/relay/src/lib/services/ethService/transactionService/TransactionService.ts index 9f753d869c..d272d816e8 100644 --- a/packages/relay/src/lib/services/ethService/transactionService/TransactionService.ts +++ b/packages/relay/src/lib/services/ethService/transactionService/TransactionService.ts @@ -13,7 +13,6 @@ import { JsonRpcError, predefined } from '../../../errors/JsonRpcError'; import { SDKClientError } from '../../../errors/SDKClientError'; import { createTransactionFromContractResult, TransactionFactory } from '../../../factories/transactionFactory'; import { - IRegularTransactionReceiptParams, ISyntheticTransactionReceiptParams, TransactionReceiptFactory, } from '../../../factories/transactionReceiptFactory'; diff --git a/packages/relay/tests/lib/eth/eth_getBlockReceipts.spec.ts b/packages/relay/tests/lib/eth/eth_getBlockReceipts.spec.ts index 49e7478428..2508aa6e91 100644 --- a/packages/relay/tests/lib/eth/eth_getBlockReceipts.spec.ts +++ b/packages/relay/tests/lib/eth/eth_getBlockReceipts.spec.ts @@ -6,13 +6,11 @@ import chaiAsPromised from 'chai-as-promised'; import sinon from 'sinon'; import { numberTo0x } from '../../../dist/formatters'; -import { predefined } from '../../../src'; import { SDKClient } from '../../../src/lib/clients'; import { EthImpl } from '../../../src/lib/eth'; import { CacheService } from '../../../src/lib/services/cacheService/cacheService'; import HAPIService from '../../../src/lib/services/hapiService/hapiService'; import { RequestDetails } from '../../../src/lib/types'; -import RelayAssertions from '../../assertions'; import { defaultContractResults, defaultContractResultsOnlyHash2, defaultLogs1 } from '../../helpers'; import { BLOCK_HASH, From 178cab0f772bdbae2aa92cb48907774ee1b54cd2 Mon Sep 17 00:00:00 2001 From: nikolay Date: Tue, 9 Sep 2025 13:06:42 +0300 Subject: [PATCH 3/3] chore: add acceptance tests Signed-off-by: nikolay --- .../services/ethService/ethCommonService/CommonService.ts | 2 +- .../ethService/transactionService/TransactionService.ts | 2 +- packages/relay/tests/helpers.ts | 2 +- packages/relay/tests/lib/eth/eth_getBlockReceipts.spec.ts | 2 +- .../relay/tests/lib/eth/eth_getTransactionReceipt.spec.ts | 2 +- packages/server/tests/acceptance/rpc_batch1.spec.ts | 5 +++++ 6 files changed, 10 insertions(+), 5 deletions(-) diff --git a/packages/relay/src/lib/services/ethService/ethCommonService/CommonService.ts b/packages/relay/src/lib/services/ethService/ethCommonService/CommonService.ts index 07593e5788..5419ba2d13 100644 --- a/packages/relay/src/lib/services/ethService/ethCommonService/CommonService.ts +++ b/packages/relay/src/lib/services/ethService/ethCommonService/CommonService.ts @@ -365,7 +365,7 @@ export class CommonService implements ICommonService { logs.push( new Log({ address: log.address, - blockTimestamp: numberTo0x(log.timestamp.split('.')[0]), + blockTimestamp: numberTo0x(Number(log.timestamp.split('.')[0])), blockHash: toHash32(log.block_hash), blockNumber: numberTo0x(log.block_number), data: log.data, diff --git a/packages/relay/src/lib/services/ethService/transactionService/TransactionService.ts b/packages/relay/src/lib/services/ethService/transactionService/TransactionService.ts index d272d816e8..6a1b80816f 100644 --- a/packages/relay/src/lib/services/ethService/transactionService/TransactionService.ts +++ b/packages/relay/src/lib/services/ethService/transactionService/TransactionService.ts @@ -355,7 +355,7 @@ export class TransactionService implements ITransactionService { address: log.address, blockHash: toHash32(receiptResponse.block_hash), blockNumber: numberTo0x(receiptResponse.block_number), - blockTimestamp: numberTo0x(receiptResponse.timestamp.split('.')[0]), + blockTimestamp: numberTo0x(Number(receiptResponse.timestamp.split('.')[0])), data: log.data, logIndex: numberTo0x(log.index), removed: false, diff --git a/packages/relay/tests/helpers.ts b/packages/relay/tests/helpers.ts index 4ce45d9797..1c2b30a56d 100644 --- a/packages/relay/tests/helpers.ts +++ b/packages/relay/tests/helpers.ts @@ -99,7 +99,7 @@ export const expectLogData = (res, log, tx) => { expect(res.address).to.eq(log.address); expect(res.blockHash).to.eq(toHash32(tx.block_hash)); expect(res.blockHash.length).to.eq(66); - expect(res.blockTimestamp).to.eq(numberTo0x(tx.timestamp.split('.')[0])); + expect(res.blockTimestamp).to.eq(numberTo0x(Number(tx.timestamp.split('.')[0]))); expect(res.blockNumber).to.eq(numberTo0x(tx.block_number)); expect(res.data).to.eq(log.data); expect(res.logIndex).to.eq(numberTo0x(log.index)); diff --git a/packages/relay/tests/lib/eth/eth_getBlockReceipts.spec.ts b/packages/relay/tests/lib/eth/eth_getBlockReceipts.spec.ts index 2508aa6e91..5de125d209 100644 --- a/packages/relay/tests/lib/eth/eth_getBlockReceipts.spec.ts +++ b/packages/relay/tests/lib/eth/eth_getBlockReceipts.spec.ts @@ -211,7 +211,7 @@ describe('@ethGetBlockReceipts using MirrorNode', async function () { expect(receipts[1].logs.length).to.equal(1); expect(receipts[1].transactionHash).to.equal(defaultLogs1[0].transaction_hash); expect(receipts[1].transactionHash).to.equal(defaultLogs1[1].transaction_hash); - expect(receipts[1].logs[0].blockTimestamp).to.equal(numberTo0x(defaultLogs1[0].timestamp.split('.')[0])); + expect(receipts[1].logs[0].blockTimestamp).to.equal(numberTo0x(Number(defaultLogs1[0].timestamp.split('.')[0]))); }); it('should handle null to field for contract creation transactions', async function () { diff --git a/packages/relay/tests/lib/eth/eth_getTransactionReceipt.spec.ts b/packages/relay/tests/lib/eth/eth_getTransactionReceipt.spec.ts index 5664c6faea..e6c6cab48a 100644 --- a/packages/relay/tests/lib/eth/eth_getTransactionReceipt.spec.ts +++ b/packages/relay/tests/lib/eth/eth_getTransactionReceipt.spec.ts @@ -95,7 +95,7 @@ describe('@ethGetTransactionReceipt eth_getTransactionReceipt tests', async func address: '0x0000000000000000000000000000000000001389', blockHash: '0xd693b532a80fed6392b428604171fb32fdbf953728a3a7ecc7d4062b1652c042', blockNumber: '0x11', - blockTimestamp: '0x167654', + blockTimestamp: '0x28ee6', data: '0x0123', logIndex: '0x0', removed: false, diff --git a/packages/server/tests/acceptance/rpc_batch1.spec.ts b/packages/server/tests/acceptance/rpc_batch1.spec.ts index df6ba927ce..09c96f7e81 100644 --- a/packages/server/tests/acceptance/rpc_batch1.spec.ts +++ b/packages/server/tests/acceptance/rpc_batch1.spec.ts @@ -193,6 +193,7 @@ describe('@api-batch-1 RPC Server Acceptance Tests', function () { for (const i in logs) { expect(logs[i]).to.have.property('address'); expect(logs[i]).to.have.property('logIndex'); + expect(logs[i]).to.have.property('blockTimestamp'); const key = `${logs[i].transactionHash}---${logs[i].logIndex}`; txIndexLogIndexMapping.push(key); @@ -654,6 +655,10 @@ describe('@api-batch-1 RPC Server Acceptance Tests', function () { expect(res[0].status).to.equal('0x1'); expect(res[0]).to.have.property('transactionHash'); expect(res[0].transactionHash).to.equal(createChildTx.hash); + expect(res[0].logs).to.not.be.empty; + res[0].logs.map((log) => + expect(log.blockTimestamp).to.equal(numberTo0x(Number(mirrorBlock.timestamp.to.split('.')[0]))), + ); }); it('should execute "eth_getBlockReceipts" with block number successfully', async function () {