diff --git a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/core/Transaction.java b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/core/Transaction.java index 79261159498..529661d5098 100644 --- a/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/core/Transaction.java +++ b/ethereum/core/src/main/java/org/hyperledger/besu/ethereum/core/Transaction.java @@ -1007,24 +1007,33 @@ public Transaction detachedCopy() { withCommitments -> blobsWithCommitmentsDetachedCopy(withCommitments, detachedVersionedHashes.get())); - return new Transaction( - true, - transactionType, - nonce, - gasPrice, - maxPriorityFeePerGas, - maxFeePerGas, - maxFeePerBlobGas, - gasLimit, - detachedTo, - value, - signature, - payload.copy(), - detachedAccessList, - sender, - chainId, - detachedVersionedHashes, - detachedBlobsWithCommitments); + final var copiedTx = + new Transaction( + true, + transactionType, + nonce, + gasPrice, + maxPriorityFeePerGas, + maxFeePerGas, + maxFeePerBlobGas, + gasLimit, + detachedTo, + value, + signature, + payload.copy(), + detachedAccessList, + sender, + chainId, + detachedVersionedHashes, + detachedBlobsWithCommitments); + + // copy also the computed fields, to avoid to recompute them + copiedTx.sender = this.sender; + copiedTx.hash = this.hash; + copiedTx.hashNoSignature = this.hashNoSignature; + copiedTx.size = this.size; + + return copiedTx; } private AccessListEntry accessListDetachedCopy(final AccessListEntry accessListEntry) {