Skip to content

Commit 7cceda9

Browse files
authored
Merge branch 'master' into fix-rewinding
2 parents 9a7a3ba + 9f4bc5c commit 7cceda9

File tree

2 files changed

+8
-3
lines changed

2 files changed

+8
-3
lines changed

core/tracing/hooks.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@ const (
303303
BalanceChangeEscrowTransfer
304304
BalanceChangeTransferBatchposterReward
305305
BalanceChangeTransferBatchposterRefund
306+
BalanceChangeTransferRetryableExcessRefund
306307
// Stylus
307308
BalanceChangeTransferActivationFee
308309
BalanceChangeTransferActivationReimburse
@@ -335,7 +336,7 @@ func (b BalanceChangeReason) Str() string {
335336
return "undoRefund"
336337
case BalanceChangeEscrowTransfer:
337338
return "escrow"
338-
case BalanceChangeTransferInfraRefund, BalanceChangeTransferNetworkRefund:
339+
case BalanceChangeTransferInfraRefund, BalanceChangeTransferNetworkRefund, BalanceChangeTransferRetryableExcessRefund:
339340
return "refund"
340341
// Batchposter
341342
case BalanceChangeTransferBatchposterReward:

core/vm/instructions.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -942,8 +942,12 @@ func opSelfdestruct6780(pc *uint64, interpreter *EVMInterpreter, scope *ScopeCon
942942
interpreter.evm.StateDB.AddBalance(beneficiary.Bytes20(), balance, tracing.BalanceIncreaseSelfdestruct)
943943
interpreter.evm.StateDB.SelfDestruct6780(scope.Contract.Address())
944944
if beneficiary.Bytes20() == scope.Contract.Address() {
945-
// Arbitrum: calling selfdestruct(this) burns the balance
946-
interpreter.evm.StateDB.ExpectBalanceBurn(balance.ToBig())
945+
// SelfDestruct6780 only destructs the contract if selfdestructing in the same transaction as contract creation
946+
// So we only account for the balance burn if the contract is actually destructed by checking if the balance is zero.
947+
if interpreter.evm.StateDB.GetBalance(scope.Contract.Address()).Sign() == 0 {
948+
// Arbitrum: calling selfdestruct(this) burns the balance
949+
interpreter.evm.StateDB.ExpectBalanceBurn(balance.ToBig())
950+
}
947951
}
948952
if tracer := interpreter.evm.Config.Tracer; tracer != nil {
949953
if tracer.OnEnter != nil {

0 commit comments

Comments
 (0)