From 4a6458dc282481d9e88f53d87aea6609227f12fe Mon Sep 17 00:00:00 2001 From: Jared Wasinger Date: Mon, 27 Dec 2021 06:05:11 +0000 Subject: [PATCH 1/2] verkle trie: touch code size bucket in account update --- trie/verkle.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/trie/verkle.go b/trie/verkle.go index 85d8f569292e..8d9d8aa38c8d 100644 --- a/trie/verkle.go +++ b/trie/verkle.go @@ -79,6 +79,10 @@ func (t *VerkleTrie) TryUpdateAccount(key []byte, acc *types.StateAccount) error if err = t.TryUpdate(utils.GetTreeKeyCodeKeccak(key), acc.CodeHash); err != nil { return fmt.Errorf("updateStateObject (%x) error: %v", key, err) } + // TODO: properly include CodeSize in StateObject + if err = t.TryUpdate(utils.GetTreeKeyCodeSize(key), []byte{0}); err != nil { + return fmt.Errorf("updateStateObject (%x) error: %v", key, err) + } return nil } From 5346357ebaf000ca3d30fdfe3d6ba76a1723c1fe Mon Sep 17 00:00:00 2001 From: Jared Wasinger Date: Wed, 5 Jan 2022 04:46:33 +0000 Subject: [PATCH 2/2] touch codeSize for non-contract accont --- core/state/statedb.go | 31 +++++++++++++++++++------------ trie/verkle.go | 5 ----- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/core/state/statedb.go b/core/state/statedb.go index 593150523384..cfc2d9b6c1e9 100644 --- a/core/state/statedb.go +++ b/core/state/statedb.go @@ -484,20 +484,27 @@ func (s *StateDB) updateStateObject(obj *stateObject) { if err := s.trie.TryUpdateAccount(addr[:], &obj.data); err != nil { s.setError(fmt.Errorf("updateStateObject (%x) error: %w", addr[:], err)) } - if len(obj.code) > 0 && s.trie.IsVerkle() { - cs := make([]byte, 32) - binary.BigEndian.PutUint64(cs, uint64(len(obj.code))) - if err := s.trie.TryUpdate(trieUtils.GetTreeKeyCodeSize(addr[:]), cs); err != nil { - s.setError(fmt.Errorf("updateStateObject (%x) error: %w", addr[:], err)) - } + if s.trie.IsVerkle() { + if len(obj.code) > 0 { + cs := make([]byte, 32) + binary.BigEndian.PutUint64(cs, uint64(len(obj.code))) + if err := s.trie.TryUpdate(trieUtils.GetTreeKeyCodeSize(addr[:]), cs); err != nil { + s.setError(fmt.Errorf("updateStateObject (%x) error: %w", addr[:], err)) + } - if obj.dirtyCode { - if chunks, err := trie.ChunkifyCode(addr, obj.code); err == nil { - for i := range chunks { - s.trie.TryUpdate(trieUtils.GetTreeKeyCodeChunk(addr[:], uint256.NewInt(uint64(i))), chunks[i][:]) + if obj.dirtyCode { + if chunks, err := trie.ChunkifyCode(addr, obj.code); err == nil { + for i := range chunks { + s.trie.TryUpdate(trieUtils.GetTreeKeyCodeChunk(addr[:], uint256.NewInt(uint64(i))), chunks[i][:]) + } + } else { + s.setError(err) } - } else { - s.setError(err) + } + } else { + cs := []byte{0} + if err := s.trie.TryUpdate(trieUtils.GetTreeKeyCodeSize(addr[:]), cs); err != nil { + s.setError(fmt.Errorf("updateStateObject (%x) error: %w", addr[:], err)) } } } diff --git a/trie/verkle.go b/trie/verkle.go index 8d9d8aa38c8d..61b161ab4e83 100644 --- a/trie/verkle.go +++ b/trie/verkle.go @@ -79,11 +79,6 @@ func (t *VerkleTrie) TryUpdateAccount(key []byte, acc *types.StateAccount) error if err = t.TryUpdate(utils.GetTreeKeyCodeKeccak(key), acc.CodeHash); err != nil { return fmt.Errorf("updateStateObject (%x) error: %v", key, err) } - // TODO: properly include CodeSize in StateObject - if err = t.TryUpdate(utils.GetTreeKeyCodeSize(key), []byte{0}); err != nil { - return fmt.Errorf("updateStateObject (%x) error: %v", key, err) - } - return nil }