core/state, trie, light: add a TryDeleteAccount method (#25531)
* core/state, trie, light: Add a DeleteAccount method * review feedback * Update database.go * pr triage feedback Co-authored-by: rjl493456442 <garyrong0905@gmail.com>
This commit is contained in:
parent
12185e40e0
commit
6da5c1644d
@ -87,6 +87,9 @@ type Trie interface {
|
|||||||
// found in the database, a trie.MissingNodeError is returned.
|
// found in the database, a trie.MissingNodeError is returned.
|
||||||
TryDelete(key []byte) error
|
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
|
// 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.
|
// can be used even if the trie doesn't have one.
|
||||||
Hash() common.Hash
|
Hash() common.Hash
|
||||||
|
@ -484,7 +484,7 @@ func (s *StateDB) deleteStateObject(obj *stateObject) {
|
|||||||
}
|
}
|
||||||
// Delete the account from the trie
|
// Delete the account from the trie
|
||||||
addr := obj.Address()
|
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))
|
s.setError(fmt.Errorf("deleteStateObject (%x) error: %v", addr[:], err))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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) {
|
func (t *odrTrie) Commit(collectLeaf bool) (common.Hash, *trie.NodeSet, error) {
|
||||||
if t.trie == nil {
|
if t.trie == nil {
|
||||||
return t.id.Root, nil, nil
|
return t.id.Root, nil, nil
|
||||||
|
@ -189,6 +189,13 @@ func (t *StateTrie) TryDelete(key []byte) error {
|
|||||||
return t.trie.TryDelete(hk)
|
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
|
// GetKey returns the sha3 preimage of a hashed key that was
|
||||||
// previously used to store a value.
|
// previously used to store a value.
|
||||||
func (t *StateTrie) GetKey(shaKey []byte) []byte {
|
func (t *StateTrie) GetKey(shaKey []byte) []byte {
|
||||||
|
Loading…
Reference in New Issue
Block a user