internal/ethapi: add timestamp to logs in eth_simulate (#32831)
Some checks are pending
/ Linux Build (push) Waiting to run
/ Linux Build (arm) (push) Waiting to run
/ Windows Build (push) Waiting to run
/ Docker Image (push) Waiting to run

Adds blockTimestamp to the logs in response of eth_simulateV1.

---------

Co-authored-by: Sina Mahmoodi <itz.s1na@gmail.com>
This commit is contained in:
Nikita Mescheryakov 2025-10-06 21:19:25 +05:00 committed by GitHub
parent 1e4b39ed12
commit 477ee5873b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 30 additions and 23 deletions

View file

@ -1327,10 +1327,11 @@ func TestSimulateV1(t *testing.T) {
validation = true validation = true
) )
type log struct { type log struct {
Address common.Address `json:"address"` Address common.Address `json:"address"`
Topics []common.Hash `json:"topics"` Topics []common.Hash `json:"topics"`
Data hexutil.Bytes `json:"data"` Data hexutil.Bytes `json:"data"`
BlockNumber hexutil.Uint64 `json:"blockNumber"` BlockNumber hexutil.Uint64 `json:"blockNumber"`
BlockTimestamp hexutil.Uint64 `json:"blockTimestamp"`
// Skip txHash // Skip txHash
//TxHash common.Hash `json:"transactionHash" gencodec:"required"` //TxHash common.Hash `json:"transactionHash" gencodec:"required"`
TxIndex hexutil.Uint `json:"transactionIndex"` TxIndex hexutil.Uint `json:"transactionIndex"`
@ -1677,10 +1678,11 @@ func TestSimulateV1(t *testing.T) {
Calls: []callRes{{ Calls: []callRes{{
ReturnValue: "0x", ReturnValue: "0x",
Logs: []log{{ Logs: []log{{
Address: randomAccounts[2].addr, Address: randomAccounts[2].addr,
Topics: []common.Hash{common.HexToHash("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")}, Topics: []common.Hash{common.HexToHash("0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")},
BlockNumber: hexutil.Uint64(11), BlockNumber: hexutil.Uint64(11),
Data: hexutil.Bytes{}, BlockTimestamp: hexutil.Uint64(0x70),
Data: hexutil.Bytes{},
}}, }},
GasUsed: "0x5508", GasUsed: "0x5508",
Status: "0x1", Status: "0x1",
@ -1853,8 +1855,9 @@ func TestSimulateV1(t *testing.T) {
addressToHash(accounts[0].addr), addressToHash(accounts[0].addr),
addressToHash(randomAccounts[0].addr), addressToHash(randomAccounts[0].addr),
}, },
Data: hexutil.Bytes(common.BigToHash(big.NewInt(50)).Bytes()), Data: hexutil.Bytes(common.BigToHash(big.NewInt(50)).Bytes()),
BlockNumber: hexutil.Uint64(11), BlockNumber: hexutil.Uint64(11),
BlockTimestamp: hexutil.Uint64(0x70),
}, { }, {
Address: transferAddress, Address: transferAddress,
Topics: []common.Hash{ Topics: []common.Hash{
@ -1862,9 +1865,10 @@ func TestSimulateV1(t *testing.T) {
addressToHash(randomAccounts[0].addr), addressToHash(randomAccounts[0].addr),
addressToHash(fixedAccount.addr), addressToHash(fixedAccount.addr),
}, },
Data: hexutil.Bytes(common.BigToHash(big.NewInt(100)).Bytes()), Data: hexutil.Bytes(common.BigToHash(big.NewInt(100)).Bytes()),
BlockNumber: hexutil.Uint64(11), BlockNumber: hexutil.Uint64(11),
Index: hexutil.Uint(1), BlockTimestamp: hexutil.Uint64(0x70),
Index: hexutil.Uint(1),
}}, }},
Status: "0x1", Status: "0x1",
}}, }},

View file

@ -53,15 +53,17 @@ type tracer struct {
count int count int
traceTransfers bool traceTransfers bool
blockNumber uint64 blockNumber uint64
blockTimestamp uint64
blockHash common.Hash blockHash common.Hash
txHash common.Hash txHash common.Hash
txIdx uint txIdx uint
} }
func newTracer(traceTransfers bool, blockNumber uint64, blockHash, txHash common.Hash, txIndex uint) *tracer { func newTracer(traceTransfers bool, blockNumber uint64, blockTimestamp uint64, blockHash, txHash common.Hash, txIndex uint) *tracer {
return &tracer{ return &tracer{
traceTransfers: traceTransfers, traceTransfers: traceTransfers,
blockNumber: blockNumber, blockNumber: blockNumber,
blockTimestamp: blockTimestamp,
blockHash: blockHash, blockHash: blockHash,
txHash: txHash, txHash: txHash,
txIdx: txIndex, txIdx: txIndex,
@ -115,14 +117,15 @@ func (t *tracer) onLog(log *types.Log) {
func (t *tracer) captureLog(address common.Address, topics []common.Hash, data []byte) { func (t *tracer) captureLog(address common.Address, topics []common.Hash, data []byte) {
t.logs[len(t.logs)-1] = append(t.logs[len(t.logs)-1], &types.Log{ t.logs[len(t.logs)-1] = append(t.logs[len(t.logs)-1], &types.Log{
Address: address, Address: address,
Topics: topics, Topics: topics,
Data: data, Data: data,
BlockNumber: t.blockNumber, BlockNumber: t.blockNumber,
BlockHash: t.blockHash, BlockTimestamp: t.blockTimestamp,
TxHash: t.txHash, BlockHash: t.blockHash,
TxIndex: t.txIdx, TxHash: t.txHash,
Index: uint(t.count), TxIndex: t.txIdx,
Index: uint(t.count),
}) })
t.count++ t.count++
} }

View file

@ -244,7 +244,7 @@ func (sim *simulator) processBlock(ctx context.Context, block *simBlock, header,
callResults = make([]simCallResult, len(block.Calls)) callResults = make([]simCallResult, len(block.Calls))
receipts = make([]*types.Receipt, len(block.Calls)) receipts = make([]*types.Receipt, len(block.Calls))
// Block hash will be repaired after execution. // Block hash will be repaired after execution.
tracer = newTracer(sim.traceTransfers, blockContext.BlockNumber.Uint64(), common.Hash{}, common.Hash{}, 0) tracer = newTracer(sim.traceTransfers, blockContext.BlockNumber.Uint64(), blockContext.Time, common.Hash{}, common.Hash{}, 0)
vmConfig = &vm.Config{ vmConfig = &vm.Config{
NoBaseFee: !sim.validate, NoBaseFee: !sim.validate,
Tracer: tracer.Hooks(), Tracer: tracer.Hooks(),