Skip to content

Commit

Permalink
Revert "core: replace instances of 'suicide' with 'selfdestruct' to i…
Browse files Browse the repository at this point in the history
…mprove code consistency. (ethereum#27716)"

This reverts commit 50cb341.
  • Loading branch information
devopsbo3 authored Nov 10, 2023
1 parent cae4724 commit 18c9dc5
Show file tree
Hide file tree
Showing 14 changed files with 45 additions and 44 deletions.
2 changes: 1 addition & 1 deletion accounts/abi/bind/backend.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import (
var (
// ErrNoCode is returned by call and transact operations for which the requested
// recipient contract to operate on does not exist in the state db or does not
// have any code associated with it (i.e. self-destructed).
// have any code associated with it (i.e. suicided).
ErrNoCode = errors.New("no contract code at given address")

// ErrNoPendingState is raised when attempting to perform a pending state action
Expand Down
2 changes: 1 addition & 1 deletion cmd/evm/internal/t8ntool/execution.go
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ func (pre *Prestate) Apply(vmConfig vm.Config, chainConfig *params.ChainConfig,
if miningReward >= 0 {
// Add mining reward. The mining reward may be `0`, which only makes a difference in the cases
// where
// - the coinbase self-destructed, or
// - the coinbase suicided, or
// - there are only 'bad' transactions, which aren't executed. In those cases,
// the coinbase gets no txfee, so isn't created, and thus needs to be touched
var (
Expand Down
10 changes: 5 additions & 5 deletions core/state/journal.go
Original file line number Diff line number Diff line change
Expand Up @@ -100,9 +100,9 @@ type (
prevAccountOrigin []byte
prevStorageOrigin map[common.Hash][]byte
}
selfDestructChange struct {
suicideChange struct {
account *common.Address
prev bool // whether account had already self-destructed
prev bool // whether account had already suicided
prevbalance *big.Int
}

Expand Down Expand Up @@ -184,15 +184,15 @@ func (ch resetObjectChange) dirtied() *common.Address {
return ch.account
}

func (ch selfDestructChange) revert(s *StateDB) {
func (ch suicideChange) revert(s *StateDB) {
obj := s.getStateObject(*ch.account)
if obj != nil {
obj.selfDestructed = ch.prev
obj.suicided = ch.prev
obj.setBalance(ch.prevbalance)
}
}

func (ch selfDestructChange) dirtied() *common.Address {
func (ch suicideChange) dirtied() *common.Address {
return ch.account
}

Expand Down
14 changes: 7 additions & 7 deletions core/state/state_object.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,12 +78,12 @@ type stateObject struct {
// Cache flags.
dirtyCode bool // true if the code was updated

// Flag whether the account was marked as self-destructed. The self-destructed account
// Flag whether the account was marked as suicided. The suicided account
// is still accessible in the scope of same transaction.
selfDestructed bool
suicided bool

// Flag whether the account was marked as deleted. A self-destructed account
// or an account that is considered as empty will be marked as deleted at
// Flag whether the account was marked as deleted. The suicided account
// or the account is considered as empty will be marked as deleted at
// the end of transaction and no longer accessible anymore.
deleted bool
}
Expand Down Expand Up @@ -116,8 +116,8 @@ func (s *stateObject) EncodeRLP(w io.Writer) error {
return rlp.Encode(w, &s.data)
}

func (s *stateObject) markSelfdestructed() {
s.selfDestructed = true
func (s *stateObject) markSuicided() {
s.suicided = true
}

func (s *stateObject) touch() {
Expand Down Expand Up @@ -446,7 +446,7 @@ func (s *stateObject) deepCopy(db *StateDB) *stateObject {
obj.dirtyStorage = s.dirtyStorage.Copy()
obj.originStorage = s.originStorage.Copy()
obj.pendingStorage = s.pendingStorage.Copy()
obj.selfDestructed = s.selfDestructed
obj.suicided = s.suicided
obj.dirtyCode = s.dirtyCode
obj.deleted = s.deleted
return obj
Expand Down
4 changes: 2 additions & 2 deletions core/state/state_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ func TestSnapshot2(t *testing.T) {
so0.SetBalance(big.NewInt(42))
so0.SetNonce(43)
so0.SetCode(crypto.Keccak256Hash([]byte{'c', 'a', 'f', 'e'}), []byte{'c', 'a', 'f', 'e'})
so0.selfDestructed = false
so0.suicided = false
so0.deleted = false
state.setStateObject(so0)

Expand All @@ -220,7 +220,7 @@ func TestSnapshot2(t *testing.T) {
so1.SetBalance(big.NewInt(52))
so1.SetNonce(53)
so1.SetCode(crypto.Keccak256Hash([]byte{'c', 'a', 'f', 'e', '2'}), []byte{'c', 'a', 'f', 'e', '2'})
so1.selfDestructed = true
so1.suicided = true
so1.deleted = true
state.setStateObject(so1)

Expand Down
23 changes: 12 additions & 11 deletions core/state/statedb.go
Original file line number Diff line number Diff line change
Expand Up @@ -271,7 +271,7 @@ func (s *StateDB) SubRefund(gas uint64) {
}

// Exist reports whether the given account address exists in the state.
// Notably this also returns true for self-destructed accounts.
// Notably this also returns true for suicided accounts.
func (s *StateDB) Exist(addr common.Address) bool {
return s.getStateObject(addr) != nil
}
Expand Down Expand Up @@ -397,10 +397,10 @@ func (s *StateDB) StorageTrie(addr common.Address) (Trie, error) {
return cpy.getTrie(s.db)
}

func (s *StateDB) HasSelfDestructed(addr common.Address) bool {
func (s *StateDB) HasSuicided(addr common.Address) bool {
stateObject := s.getStateObject(addr)
if stateObject != nil {
return stateObject.selfDestructed
return stateObject.suicided
}
return false
}
Expand Down Expand Up @@ -474,23 +474,24 @@ func (s *StateDB) SetStorage(addr common.Address, storage map[common.Hash]common
}
}

// SelfDestruct marks the given account as selfdestructed.
// Suicide marks the given account as suicided.
// This clears the account balance.
//
// The account's state object is still available until the state is committed,
// getStateObject will return a non-nil account after SelfDestruct.
func (s *StateDB) SelfDestruct(addr common.Address) {
// getStateObject will return a non-nil account after Suicide.
func (s *StateDB) Suicide(addr common.Address) bool {
stateObject := s.getStateObject(addr)
if stateObject == nil {
return
return false
}
s.journal.append(selfDestructChange{
s.journal.append(suicideChange{
account: &addr,
prev: stateObject.selfDestructed,
prev: stateObject.suicided,
prevbalance: new(big.Int).Set(stateObject.Balance()),
})
stateObject.markSelfdestructed()
stateObject.markSuicided()
stateObject.data.Balance = new(big.Int)
return true
}

// SetTransientState sets transient storage for a given account. It
Expand Down Expand Up @@ -891,7 +892,7 @@ func (s *StateDB) Finalise(deleteEmptyObjects bool) {
// Thus, we can safely ignore it here
continue
}
if obj.selfDestructed || (deleteEmptyObjects && obj.empty()) {
if obj.suicided || (deleteEmptyObjects && obj.empty()) {
obj.deleted = true

// We need to maintain account deletions explicitly (will remain
Expand Down
4 changes: 2 additions & 2 deletions core/state/statedb_fuzz_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,9 +95,9 @@ func newStateTestAction(addr common.Address, r *rand.Rand, index int) testAction
},
},
{
name: "Selfdestruct",
name: "Suicide",
fn: func(a testAction, s *StateDB) {
s.SelfDestruct(addr)
s.Suicide(addr)
},
},
}
Expand Down
8 changes: 4 additions & 4 deletions core/state/statedb_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -301,9 +301,9 @@ func newTestAction(addr common.Address, r *rand.Rand) testAction {
},
},
{
name: "SelfDestruct",
name: "Suicide",
fn: func(a testAction, s *StateDB) {
s.SelfDestruct(addr)
s.Suicide(addr)
},
},
{
Expand Down Expand Up @@ -453,7 +453,7 @@ func (test *snapshotTest) checkEqual(state, checkstate *StateDB) error {
}
// Check basic accessor methods.
checkeq("Exist", state.Exist(addr), checkstate.Exist(addr))
checkeq("HasSelfdestructed", state.HasSelfDestructed(addr), checkstate.HasSelfDestructed(addr))
checkeq("HasSuicided", state.HasSuicided(addr), checkstate.HasSuicided(addr))
checkeq("GetBalance", state.GetBalance(addr), checkstate.GetBalance(addr))
checkeq("GetNonce", state.GetNonce(addr), checkstate.GetNonce(addr))
checkeq("GetCode", state.GetCode(addr), checkstate.GetCode(addr))
Expand Down Expand Up @@ -727,7 +727,7 @@ func TestDeleteCreateRevert(t *testing.T) {
state, _ = New(root, state.db, state.snaps)

// Simulate self-destructing in one transaction, then create-reverting in another
state.SelfDestruct(addr)
state.Suicide(addr)
state.Finalise(true)

id := state.Snapshot()
Expand Down
2 changes: 1 addition & 1 deletion core/vm/gas_table.go
Original file line number Diff line number Diff line change
Expand Up @@ -472,7 +472,7 @@ func gasSelfdestruct(evm *EVM, contract *Contract, stack *Stack, mem *Memory, me
}
}

if !evm.StateDB.HasSelfDestructed(contract.Address()) {
if !evm.StateDB.HasSuicided(contract.Address()) {
evm.StateDB.AddRefund(params.SelfdestructRefundGas)
}
return gas, nil
Expand Down
4 changes: 2 additions & 2 deletions core/vm/instructions.go
Original file line number Diff line number Diff line change
Expand Up @@ -408,7 +408,7 @@ func opExtCodeCopy(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext)
// emptyCodeHash. If the precompile account is not transferred any amount on a private or
// customized chain, the return value will be zero.
//
// 5. Caller tries to get the code hash for an account which is marked as self-destructed
// 5. Caller tries to get the code hash for an account which is marked as suicided
// in the current transaction, the code hash of this account should be returned.
//
// 6. Caller tries to get the code hash for an account which is marked as deleted, this
Expand Down Expand Up @@ -821,7 +821,7 @@ func opSelfdestruct(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext
beneficiary := scope.Stack.pop()
balance := interpreter.evm.StateDB.GetBalance(scope.Contract.Address())
interpreter.evm.StateDB.AddBalance(beneficiary.Bytes20(), balance)
interpreter.evm.StateDB.SelfDestruct(scope.Contract.Address())
interpreter.evm.StateDB.Suicide(scope.Contract.Address())
if tracer := interpreter.evm.Config.Tracer; tracer != nil {
tracer.CaptureEnter(SELFDESTRUCT, scope.Contract.Address(), beneficiary.Bytes20(), []byte{}, 0, balance)
tracer.CaptureExit([]byte{}, 0, nil)
Expand Down
6 changes: 3 additions & 3 deletions core/vm/interface.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,11 @@ type StateDB interface {
GetTransientState(addr common.Address, key common.Hash) common.Hash
SetTransientState(addr common.Address, key, value common.Hash)

SelfDestruct(common.Address)
HasSelfDestructed(common.Address) bool
Suicide(common.Address) bool
HasSuicided(common.Address) bool

// Exist reports whether the given account exists in state.
// Notably this should also return true for self-destructed accounts.
// Notably this should also return true for suicided accounts.
Exist(common.Address) bool
// Empty returns whether the given account is empty. Empty
// is defined according to EIP161 (balance = nonce = code = 0).
Expand Down
2 changes: 1 addition & 1 deletion core/vm/operations_acl.go
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ func makeSelfdestructGasFn(refundsEnabled bool) gasFunc {
if evm.StateDB.Empty(address) && evm.StateDB.GetBalance(contract.Address()).Sign() != 0 {
gas += params.CreateBySelfdestructGas
}
if refundsEnabled && !evm.StateDB.HasSelfDestructed(contract.Address()) {
if refundsEnabled && !evm.StateDB.HasSuicided(contract.Address()) {
evm.StateDB.AddRefund(params.SelfdestructRefundGas)
}
return gas, nil
Expand Down
4 changes: 2 additions & 2 deletions eth/tracers/native/call_flat.go
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,7 @@ func flatFromNested(input *callFrame, traceAddress []int, convertErrs bool, ctx
case vm.CREATE, vm.CREATE2:
frame = newFlatCreate(input)
case vm.SELFDESTRUCT:
frame = newFlatSelfdestruct(input)
frame = newFlatSuicide(input)
case vm.CALL, vm.STATICCALL, vm.CALLCODE, vm.DELEGATECALL:
frame = newFlatCall(input)
default:
Expand Down Expand Up @@ -330,7 +330,7 @@ func newFlatCall(input *callFrame) *flatCallFrame {
}
}

func newFlatSelfdestruct(input *callFrame) *flatCallFrame {
func newFlatSuicide(input *callFrame) *flatCallFrame {
return &flatCallFrame{
Type: "suicide",
Action: flatCallAction{
Expand Down
4 changes: 2 additions & 2 deletions tests/state_test_util.go
Original file line number Diff line number Diff line change
Expand Up @@ -197,7 +197,7 @@ func (t *StateTest) Run(subtest StateSubtest, vmconfig vm.Config, snapshotter bo
}
post := t.json.Post[subtest.Fork][subtest.Index]
// N.B: We need to do this in a two-step process, because the first Commit takes care
// of self-destructs, and we need to touch the coinbase _after_ it has potentially self-destructed.
// of suicides, and we need to touch the coinbase _after_ it has potentially suicided.
if root != common.Hash(post.Root) {
return snaps, statedb, fmt.Errorf("post state root mismatch: got %x, want %x", root, post.Root)
}
Expand Down Expand Up @@ -275,7 +275,7 @@ func (t *StateTest) RunNoVerify(subtest StateSubtest, vmconfig vm.Config, snapsh
}
// Add 0-value mining reward. This only makes a difference in the cases
// where
// - the coinbase self-destructed, or
// - the coinbase suicided, or
// - there are only 'bad' transactions, which aren't executed. In those cases,
// the coinbase gets no txfee, so isn't created, and thus needs to be touched
statedb.AddBalance(block.Coinbase(), new(big.Int))
Expand Down

0 comments on commit 18c9dc5

Please sign in to comment.