Skip to content

Commit c747dec

Browse files
authored
add blockTimestamp to logs within tx receipt (#9294)
* add block timestamp to logs within transaction receipt and block receipts Signed-off-by: Sally MacFarlane <[email protected]> --------- Signed-off-by: Sally MacFarlane <[email protected]>
1 parent 1794d4b commit c747dec

File tree

9 files changed

+38
-1
lines changed

9 files changed

+38
-1
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
### Additions and Improvements
1818
- Add blockTimestamp to `eth_getLogs` result [#9278](https://github.com/hyperledger/besu/pull/9278)
19+
- Add blockTimestamp to receipt logs for `eth_getBlockReceipts` and `eth_getTransactionReceipt` results [#9294](https://github.com/hyperledger/besu/pull/9294)
1920
- Add `--ethstats-report-interval` CLI option to control ethstats reporting frequency instead of using hardcoded 5-second interval [#9271](https://github.com/hyperledger/besu/pull/9271)
2021
- Add `isCancelled` method to `TransactionEvaluationContext`. That way selectors could check if the block creation has been cancelled or in timeout [#9285](https://github.com/hyperledger/besu/pull/9285)
2122

ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/results/TransactionReceiptLogResult.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
"transactionHash",
3333
"transactionIndex",
3434
"blockHash",
35+
"blockTimestamp",
3536
"logIndex",
3637
"removed"
3738
})
@@ -44,6 +45,7 @@ public class TransactionReceiptLogResult {
4445
private final String transactionHash;
4546
private final String transactionIndex;
4647
private final String blockHash;
48+
private final String blockTimestamp;
4749
private final String logIndex;
4850
private final boolean removed;
4951

@@ -52,6 +54,7 @@ public TransactionReceiptLogResult(
5254
final long blockNumber,
5355
final Hash transactionHash,
5456
final Hash blockHash,
57+
final long blockTimestamp,
5558
final int transactionIndex,
5659
final int logIndex) {
5760
this.address = log.getLogger().toString();
@@ -66,6 +69,7 @@ public TransactionReceiptLogResult(
6669
this.transactionHash = transactionHash.toString();
6770
this.transactionIndex = Quantity.create(transactionIndex);
6871
this.blockHash = blockHash.toString();
72+
this.blockTimestamp = Quantity.create(blockTimestamp);
6973
this.logIndex = Quantity.create(logIndex);
7074

7175
// TODO: Handle chain reorgs, i.e. return `true` if log is removed
@@ -116,4 +120,9 @@ public String getLogIndex() {
116120
public boolean isRemoved() {
117121
return removed;
118122
}
123+
124+
@JsonGetter(value = "blockTimestamp")
125+
public String getBlockTimestamp() {
126+
return blockTimestamp;
127+
}
119128
}

ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/results/TransactionReceiptResult.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ protected TransactionReceiptResult(final TransactionReceiptWithMetadata receiptW
9292
receiptWithMetadata.getBlockNumber(),
9393
txn.getHash(),
9494
receiptWithMetadata.getBlockHash(),
95+
receiptWithMetadata.getBlockTimestamp(),
9596
receiptWithMetadata.getTransactionIndex(),
9697
receiptWithMetadata.getLogIndexOffset());
9798
this.logsBloom = receipt.getBloomFilter().toString();
@@ -193,6 +194,7 @@ private List<TransactionReceiptLogResult> logReceipts(
193194
final long blockNumber,
194195
final Hash transactionHash,
195196
final Hash blockHash,
197+
final long blockTimestamp,
196198
final int transactionIndex,
197199
final int logIndexOffset) {
198200
final List<TransactionReceiptLogResult> logResults = new ArrayList<>(logs.size());
@@ -201,7 +203,13 @@ private List<TransactionReceiptLogResult> logReceipts(
201203
final Log log = logs.get(i);
202204
logResults.add(
203205
new TransactionReceiptLogResult(
204-
log, blockNumber, transactionHash, blockHash, transactionIndex, i + logIndexOffset));
206+
log,
207+
blockNumber,
208+
transactionHash,
209+
blockHash,
210+
blockTimestamp,
211+
transactionIndex,
212+
i + logIndexOffset));
205213
}
206214

207215
return logResults;

ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/query/BlockchainQueries.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,7 @@ public Optional<List<TransactionReceiptWithMetadata>> transactionReceiptsByBlock
682682
gasUsed,
683683
header.getBaseFee(),
684684
blockHash,
685+
header.getTimestamp(),
685686
header.getNumber(),
686687
maybeBlobGasUsed,
687688
maybeBlobGasPrice,
@@ -745,6 +746,7 @@ public Optional<TransactionReceiptWithMetadata> transactionReceiptByTransactionH
745746
gasUsed,
746747
header.getBaseFee(),
747748
blockhash,
749+
header.getTimestamp(),
748750
header.getNumber(),
749751
maybeBlobGasUsed,
750752
maybeBlobGasPrice,

ethereum/api/src/main/java/org/hyperledger/besu/ethereum/api/query/TransactionReceiptWithMetadata.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ public class TransactionReceiptWithMetadata {
2929
private final Optional<Wei> baseFee;
3030
private final long blockNumber;
3131
private final Hash blockHash;
32+
private final long blockTimestamp;
3233
private final Transaction transaction;
3334
private final Optional<Long> blobGasUsed;
3435
private final Optional<Wei> blobGasPrice;
@@ -42,6 +43,7 @@ private TransactionReceiptWithMetadata(
4243
final long gasUsed,
4344
final Optional<Wei> baseFee,
4445
final Hash blockHash,
46+
final long blockTimestamp,
4547
final long blockNumber,
4648
final Optional<Long> blobGasUsed,
4749
final Optional<Wei> blobGasPrice,
@@ -52,6 +54,7 @@ private TransactionReceiptWithMetadata(
5254
this.gasUsed = gasUsed;
5355
this.baseFee = baseFee;
5456
this.blockHash = blockHash;
57+
this.blockTimestamp = blockTimestamp;
5558
this.blockNumber = blockNumber;
5659
this.transaction = transaction;
5760
this.blobGasUsed = blobGasUsed;
@@ -67,6 +70,7 @@ public static TransactionReceiptWithMetadata create(
6770
final long gasUsed,
6871
final Optional<Wei> baseFee,
6972
final Hash blockHash,
73+
final long blockTimestamp,
7074
final long blockNumber,
7175
final Optional<Long> blobGasUsed,
7276
final Optional<Wei> blobGasPrice,
@@ -79,6 +83,7 @@ public static TransactionReceiptWithMetadata create(
7983
gasUsed,
8084
baseFee,
8185
blockHash,
86+
blockTimestamp,
8287
blockNumber,
8388
blobGasUsed,
8489
blobGasPrice,
@@ -105,6 +110,10 @@ public Hash getBlockHash() {
105110
return blockHash;
106111
}
107112

113+
public long getBlockTimestamp() {
114+
return blockTimestamp;
115+
}
116+
108117
public long getBlockNumber() {
109118
return blockNumber;
110119
}

ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/graphql/TransactionDataFetcherTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ void emptyBlobs() throws Exception {
7373
21000,
7474
Optional.empty(),
7575
fakedHash,
76+
1234,
7677
1,
7778
Optional.empty(),
7879
Optional.empty(),
@@ -108,6 +109,7 @@ void hasZeroBlobs() throws Exception {
108109
21000,
109110
Optional.empty(),
110111
fakedHash,
112+
1234,
111113
1,
112114
Optional.of(0L),
113115
Optional.of(Wei.ZERO),
@@ -143,6 +145,7 @@ void hasOneBlob() throws Exception {
143145
21000,
144146
Optional.empty(),
145147
fakedHash,
148+
1234,
146149
1,
147150
Optional.of(blobGasUsed),
148151
Optional.of(blobGasPrice),

ethereum/api/src/test/java/org/hyperledger/besu/ethereum/api/jsonrpc/internal/methods/EthGetTransactionReceiptTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ public String description() {
122122
2,
123123
Optional.empty(),
124124
blockHash,
125+
1234,
125126
4,
126127
Optional.empty(),
127128
Optional.empty(),
@@ -135,6 +136,7 @@ public String description() {
135136
2,
136137
Optional.empty(),
137138
blockHash,
139+
1234,
138140
4,
139141
Optional.empty(),
140142
Optional.empty(),
@@ -275,6 +277,7 @@ public void shouldWorkFor1559Txs() {
275277
2,
276278
Optional.of(baseFee),
277279
blockHash,
280+
1234,
278281
4,
279282
Optional.empty(),
280283
Optional.empty(),

ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/eth/eth_getBlockReceiptsByNumber_32.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
"transactionHash" : "0xcef53f2311d7c80e9086d661e69ac11a5f3d081e28e02a9ba9b66749407ac310",
2727
"transactionIndex" : "0x0",
2828
"blockHash" : "0x71d59849ddd98543bdfbe8548f5eed559b07b8aaf196369f39134500eab68e53",
29+
"blockTimestamp" : "0x561bc33d",
2930
"logIndex" : "0x0",
3031
"removed" : false
3132
} ],

ethereum/api/src/test/resources/org/hyperledger/besu/ethereum/api/jsonrpc/eth/eth_getTransactionReceipt_logs.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
"transactionHash": "0x185a9154a0acc4e0ffc84029aee0f3dbf57ff0b84ec7624cb80e7373a03e8aeb",
3333
"transactionIndex": "0x0",
3434
"blockHash": "0x0f765087745aa259d9e5ac39c367c57432a16ed98e3b0d81c5b51d10f301dc49",
35+
"blockTimestamp" : "0x561bc33a",
3536
"logIndex": "0x0",
3637
"removed": false
3738
}

0 commit comments

Comments
 (0)