eth/tracers: fix prestateTracer for EIP-6780 SELFDESTRUCT

This commit is contained in:
allen 2025-10-29 10:00:42 -04:00
parent 5dd0fe2f53
commit 193516ed81

View file

@ -131,8 +131,16 @@ func (t *prestateTracer) OnOpcode(pc uint64, opcode byte, gas, cost uint64, scop
addr := common.Address(stackData[stackLen-1].Bytes20()) addr := common.Address(stackData[stackLen-1].Bytes20())
t.lookupAccount(addr) t.lookupAccount(addr)
if op == vm.SELFDESTRUCT { if op == vm.SELFDESTRUCT {
if t.chainConfig.IsCancun(t.env.BlockNumber, t.env.Time) {
// EIP-6780: only delete if created in same transaction
if t.created[caller] {
t.deleted[caller] = true t.deleted[caller] = true
} }
} else {
// Pre-EIP-6780: always delete
t.deleted[caller] = true
}
}
case stackLen >= 5 && (op == vm.DELEGATECALL || op == vm.CALL || op == vm.STATICCALL || op == vm.CALLCODE): case stackLen >= 5 && (op == vm.DELEGATECALL || op == vm.CALL || op == vm.STATICCALL || op == vm.CALLCODE):
addr := common.Address(stackData[stackLen-2].Bytes20()) addr := common.Address(stackData[stackLen-2].Bytes20())
t.lookupAccount(addr) t.lookupAccount(addr)