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..5419ba2d13 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(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 ed045c0efc..6a1b80816f 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'; @@ -356,6 +355,7 @@ export class TransactionService implements ITransactionService { address: log.address, blockHash: toHash32(receiptResponse.block_hash), blockNumber: numberTo0x(receiptResponse.block_number), + blockTimestamp: numberTo0x(Number(receiptResponse.timestamp.split('.')[0])), data: log.data, logIndex: numberTo0x(log.index), removed: false, @@ -369,16 +369,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..1c2b30a56d 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(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 b3b0a90c00..5de125d209 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, @@ -213,6 +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(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 a32cc7a8a1..e6c6cab48a 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: '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 () {