Skip to content

Commit

Permalink
core/state, trie, light: add a TryDeleteAccount method (ethereum#25531)
Browse files Browse the repository at this point in the history
* core/state, trie, light: Add a DeleteAccount method

* review feedback

* Update database.go

* pr triage feedback

Co-authored-by: rjl493456442 <garyrong0905@gmail.com>
  • Loading branch information
2 people authored and cp-wjhan committed Oct 20, 2023
1 parent 47bb911 commit 5d9295e
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 1 deletion.
3 changes: 3 additions & 0 deletions core/state/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,9 @@ type Trie interface {
// found in the database, a trie.MissingNodeError is returned.
TryDelete(key []byte) error

// TryDeleteAccount abstracts an account deletion from the trie.
TryDeleteAccount(key []byte) error

// Hash returns the root hash of the trie. It does not write to the database and
// can be used even if the trie doesn't have one.
Hash() common.Hash
Expand Down
2 changes: 1 addition & 1 deletion core/state/statedb.go
Original file line number Diff line number Diff line change
Expand Up @@ -484,7 +484,7 @@ func (s *StateDB) deleteStateObject(obj *stateObject) {
}
// Delete the account from the trie
addr := obj.Address()
if err := s.trie.TryDelete(addr[:]); err != nil {
if err := s.trie.TryDeleteAccount(addr[:]); err != nil {
s.setError(fmt.Errorf("deleteStateObject (%x) error: %v", addr[:], err))
}
}
Expand Down
8 changes: 8 additions & 0 deletions light/trie.go
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,14 @@ func (t *odrTrie) TryDelete(key []byte) error {
})
}

// TryDeleteACcount abstracts an account deletion from the trie.
func (t *odrTrie) TryDeleteAccount(key []byte) error {
key = crypto.Keccak256(key)
return t.do(key, func() error {
return t.trie.TryDelete(key)
})
}

func (t *odrTrie) Commit(collectLeaf bool) (common.Hash, *trie.NodeSet, error) {
if t.trie == nil {
return t.id.Root, nil, nil
Expand Down
7 changes: 7 additions & 0 deletions trie/secure_trie.go
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,13 @@ func (t *StateTrie) TryDelete(key []byte) error {
return t.trie.TryDelete(hk)
}

// TryDeleteACcount abstracts an account deletion from the trie.
func (t *StateTrie) TryDeleteAccount(key []byte) error {
hk := t.hashKey(key)
delete(t.getSecKeyCache(), string(hk))
return t.trie.TryDelete(hk)
}

// GetKey returns the sha3 preimage of a hashed key that was
// previously used to store a value.
func (t *StateTrie) GetKey(shaKey []byte) []byte {
Expand Down

0 comments on commit 5d9295e

Please sign in to comment.