Skip to content

v1.101702.3-rc.5

@nonsense nonsense tagged this 21 Jul 11:38
PostExecTx.encode writes Data verbatim, so a post-exec tx's canonical EIP-2718
encoding is 0x7D || Data. But Transaction.Hash routed all non-legacy txs through
prefixedRlpHash(type, inner), which RLP-encodes the inner struct — giving
keccak256(0x7D || RLP([Data])), a hash preimage that does not match the wire
encoding. Every other typed tx (including DepositTx) has hash preimage == wire
encoding; PostExecTx was the sole outlier, so the hash op-geth exposed over RPC
and indexed receipts under diverged from op-reth (op-alloy TxPostExec::tx_hash,
which hashes the canonical encoding).

Special-case PostExecTx in Transaction.Hash to hash the canonical EIP-2718
encoding, keccak256(0x7D || Data), matching op-reth and the universal typed-tx
rule. The canonical encoding itself is unchanged, so transactions-root and block
hashes are unaffected — only the tx hash / receipt key changes.
Assets 2
Loading