diff --git a/cmd/rpcdaemon22/commands/eth_receipts.go b/cmd/rpcdaemon22/commands/eth_receipts.go index 0dd4d4d6e..738bbc34f 100644 --- a/cmd/rpcdaemon22/commands/eth_receipts.go +++ b/cmd/rpcdaemon22/commands/eth_receipts.go @@ -191,6 +191,7 @@ func (api *APIImpl) GetLogs(ctx context.Context, crit filters.FilterCriteria) ([ if err != nil { return nil, err } + timestamp := uint64(txn.Time().Unix()) txHash := txn.Hash() msg, err := txn.AsMessage(*lastSigner, lastHeader.BaseFee, lastRules) if err != nil { @@ -213,6 +214,7 @@ func (api *APIImpl) GetLogs(ctx context.Context, crit filters.FilterCriteria) ([ filtered := filterLogs(ibs.GetLogs(txHash), crit.Addresses, crit.Topics) for _, log := range filtered { log.BlockNumber = blockNum + log.Timestamp = timestamp log.BlockHash = lastBlockHash log.TxHash = txHash log.Index = 0 diff --git a/core/types/gen_log_json.go b/core/types/gen_log_json.go index 7c0c23e55..21999411d 100644 --- a/core/types/gen_log_json.go +++ b/core/types/gen_log_json.go @@ -19,6 +19,7 @@ func (l Log) MarshalJSON() ([]byte, error) { Topics []common.Hash `json:"topics" gencodec:"required"` Data hexutil.Bytes `json:"data" gencodec:"required"` BlockNumber hexutil.Uint64 `json:"blockNumber"` + Timestamp hexutil.Uint64 `json:"timestamp"` TxHash common.Hash `json:"transactionHash" gencodec:"required"` TxIndex hexutil.Uint `json:"transactionIndex"` BlockHash common.Hash `json:"blockHash"` @@ -30,6 +31,7 @@ func (l Log) MarshalJSON() ([]byte, error) { enc.Topics = l.Topics enc.Data = l.Data enc.BlockNumber = hexutil.Uint64(l.BlockNumber) + enc.Timestamp = hexutil.Uint64(l.Timestamp) enc.TxHash = l.TxHash enc.TxIndex = hexutil.Uint(l.TxIndex) enc.BlockHash = l.BlockHash @@ -45,6 +47,7 @@ func (l *Log) UnmarshalJSON(input []byte) error { Topics []common.Hash `json:"topics" gencodec:"required"` Data *hexutil.Bytes `json:"data" gencodec:"required"` BlockNumber *hexutil.Uint64 `json:"blockNumber"` + Timestamp *hexutil.Uint64 `json:"timestamp"` TxHash *common.Hash `json:"transactionHash" gencodec:"required"` TxIndex *hexutil.Uint `json:"transactionIndex"` BlockHash *common.Hash `json:"blockHash"` @@ -70,6 +73,9 @@ func (l *Log) UnmarshalJSON(input []byte) error { if dec.BlockNumber != nil { l.BlockNumber = uint64(*dec.BlockNumber) } + if dec.Timestamp != nil { + l.Timestamp = uint64(*dec.Timestamp) + } if dec.TxHash == nil { return errors.New("missing required field 'transactionHash' for Log") } diff --git a/core/types/log.go b/core/types/log.go index 29ea8dafc..67e8f330e 100644 --- a/core/types/log.go +++ b/core/types/log.go @@ -41,6 +41,8 @@ type Log struct { // but not secured by consensus. // block in which the transaction was included BlockNumber uint64 `json:"blockNumber" codec:"-"` + + Timestamp uint64 `json:"timestamp" codec:"-"` // hash of the transaction TxHash common.Hash `json:"transactionHash" gencodec:"required" codec:"-"` // index of the transaction in the block diff --git a/core/types/log_test.go b/core/types/log_test.go index 5b948f554..6d913518b 100644 --- a/core/types/log_test.go +++ b/core/types/log_test.go @@ -33,11 +33,12 @@ var unmarshalLogTests = map[string]struct { wantError error }{ "ok": { - input: `{"address":"0xecf8f87f810ecf450940c9f60066b4a7a501d6a7","blockHash":"0x656c34545f90a730a19008c0e7a7cd4fb3895064b48d6d69761bd5abad681056","blockNumber":"0x1ecfa4","data":"0x000000000000000000000000000000000000000000000001a055690d9db80000","logIndex":"0x2","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x00000000000000000000000080b2c9d7cbbf30a1b0fc8983c647d754c6525615"],"transactionHash":"0x3b198bfd5d2907285af009e9ae84a0ecd63677110d89d7e030251acb87f6487e","transactionIndex":"0x3"}`, + input: `{"address":"0xecf8f87f810ecf450940c9f60066b4a7a501d6a7","blockHash":"0x656c34545f90a730a19008c0e7a7cd4fb3895064b48d6d69761bd5abad681056","blockNumber":"0x1ecfa4","timestamp":"0x57a53d3a","data":"0x000000000000000000000000000000000000000000000001a055690d9db80000","logIndex":"0x2","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x00000000000000000000000080b2c9d7cbbf30a1b0fc8983c647d754c6525615"],"transactionHash":"0x3b198bfd5d2907285af009e9ae84a0ecd63677110d89d7e030251acb87f6487e","transactionIndex":"0x3"}`, want: &Log{ Address: common.HexToAddress("0xecf8f87f810ecf450940c9f60066b4a7a501d6a7"), BlockHash: common.HexToHash("0x656c34545f90a730a19008c0e7a7cd4fb3895064b48d6d69761bd5abad681056"), BlockNumber: 2019236, + Timestamp: 1470446906, Data: hexutil.MustDecode("0x000000000000000000000000000000000000000000000001a055690d9db80000"), Index: 2, TxIndex: 3, @@ -49,11 +50,12 @@ var unmarshalLogTests = map[string]struct { }, }, "empty data": { - input: `{"address":"0xecf8f87f810ecf450940c9f60066b4a7a501d6a7","blockHash":"0x656c34545f90a730a19008c0e7a7cd4fb3895064b48d6d69761bd5abad681056","blockNumber":"0x1ecfa4","data":"0x","logIndex":"0x2","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x00000000000000000000000080b2c9d7cbbf30a1b0fc8983c647d754c6525615"],"transactionHash":"0x3b198bfd5d2907285af009e9ae84a0ecd63677110d89d7e030251acb87f6487e","transactionIndex":"0x3"}`, + input: `{"address":"0xecf8f87f810ecf450940c9f60066b4a7a501d6a7","blockHash":"0x656c34545f90a730a19008c0e7a7cd4fb3895064b48d6d69761bd5abad681056","blockNumber":"0x1ecfa4","timestamp":"0x57a53d3a","data":"0x","logIndex":"0x2","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x00000000000000000000000080b2c9d7cbbf30a1b0fc8983c647d754c6525615"],"transactionHash":"0x3b198bfd5d2907285af009e9ae84a0ecd63677110d89d7e030251acb87f6487e","transactionIndex":"0x3"}`, want: &Log{ Address: common.HexToAddress("0xecf8f87f810ecf450940c9f60066b4a7a501d6a7"), BlockHash: common.HexToHash("0x656c34545f90a730a19008c0e7a7cd4fb3895064b48d6d69761bd5abad681056"), BlockNumber: 2019236, + Timestamp: 1470446906, Data: []byte{}, Index: 2, TxIndex: 3, @@ -70,6 +72,7 @@ var unmarshalLogTests = map[string]struct { Address: common.HexToAddress("0xecf8f87f810ecf450940c9f60066b4a7a501d6a7"), BlockHash: common.Hash{}, BlockNumber: 0, + Timestamp: 0, Data: []byte{}, Index: 0, TxIndex: 3, @@ -80,11 +83,12 @@ var unmarshalLogTests = map[string]struct { }, }, "Removed: true": { - input: `{"address":"0xecf8f87f810ecf450940c9f60066b4a7a501d6a7","blockHash":"0x656c34545f90a730a19008c0e7a7cd4fb3895064b48d6d69761bd5abad681056","blockNumber":"0x1ecfa4","data":"0x","logIndex":"0x2","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"],"transactionHash":"0x3b198bfd5d2907285af009e9ae84a0ecd63677110d89d7e030251acb87f6487e","transactionIndex":"0x3","removed":true}`, + input: `{"address":"0xecf8f87f810ecf450940c9f60066b4a7a501d6a7","blockHash":"0x656c34545f90a730a19008c0e7a7cd4fb3895064b48d6d69761bd5abad681056","blockNumber":"0x1ecfa4","timestamp":"0x57a53d3a","data":"0x","logIndex":"0x2","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef"],"transactionHash":"0x3b198bfd5d2907285af009e9ae84a0ecd63677110d89d7e030251acb87f6487e","transactionIndex":"0x3","removed":true}`, want: &Log{ Address: common.HexToAddress("0xecf8f87f810ecf450940c9f60066b4a7a501d6a7"), BlockHash: common.HexToHash("0x656c34545f90a730a19008c0e7a7cd4fb3895064b48d6d69761bd5abad681056"), BlockNumber: 2019236, + Timestamp: 1470446906, Data: []byte{}, Index: 2, TxIndex: 3, @@ -96,7 +100,7 @@ var unmarshalLogTests = map[string]struct { }, }, "missing data": { - input: `{"address":"0xecf8f87f810ecf450940c9f60066b4a7a501d6a7","blockHash":"0x656c34545f90a730a19008c0e7a7cd4fb3895064b48d6d69761bd5abad681056","blockNumber":"0x1ecfa4","logIndex":"0x2","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x00000000000000000000000080b2c9d7cbbf30a1b0fc8983c647d754c6525615","0x000000000000000000000000f9dff387dcb5cc4cca5b91adb07a95f54e9f1bb6"],"transactionHash":"0x3b198bfd5d2907285af009e9ae84a0ecd63677110d89d7e030251acb87f6487e","transactionIndex":"0x3"}`, + input: `{"address":"0xecf8f87f810ecf450940c9f60066b4a7a501d6a7","blockHash":"0x656c34545f90a730a19008c0e7a7cd4fb3895064b48d6d69761bd5abad681056","blockNumber":"0x1ecfa4","timestamp":"0x57a53d3a","logIndex":"0x2","topics":["0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef","0x00000000000000000000000080b2c9d7cbbf30a1b0fc8983c647d754c6525615","0x000000000000000000000000f9dff387dcb5cc4cca5b91adb07a95f54e9f1bb6"],"transactionHash":"0x3b198bfd5d2907285af009e9ae84a0ecd63677110d89d7e030251acb87f6487e","transactionIndex":"0x3"}`, wantError: fmt.Errorf("missing required field 'data' for Log"), }, }