From d6c4d58f40b1b7e8ef9ef63cb50f867c0c2fed8f Mon Sep 17 00:00:00 2001 From: Sina Mahmoodi Date: Tue, 26 Nov 2024 10:46:27 +0100 Subject: [PATCH] code only on trie reader --- core/state/reader.go | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/core/state/reader.go b/core/state/reader.go index f9f066873a..387ff4d544 100644 --- a/core/state/reader.go +++ b/core/state/reader.go @@ -136,12 +136,12 @@ func (r *stateReader) Storage(addr common.Address, key common.Hash) (common.Hash // ContractCode implements Reader, retrieving the code associated with a particular account. func (r *stateReader) ContractCode(addr common.Address, codeHash common.Hash) ([]byte, error) { - return nil, nil + return nil, errors.New("not supported") } // ContractCodeSize implements Reader, returning the size of the code associated with a particular account. func (r *stateReader) ContractCodeSize(addr common.Address, codeHash common.Hash) (int, error) { - return 0, nil + return 0, errors.New("not supported") } // Copy implements Reader, returning a deep-copied snap reader. @@ -336,9 +336,13 @@ func (r *multiReader) Storage(addr common.Address, slot common.Hash) (common.Has func (r *multiReader) ContractCode(addr common.Address, codeHash common.Hash) ([]byte, error) { var errs []error for _, reader := range r.readers { - code, err := reader.ContractCode(addr, codeHash) - if err == nil { - return code, nil + // Only trie reader can provide contract code. + if _, ok := reader.(*trieReader); ok { + code, err := reader.ContractCode(addr, codeHash) + if err == nil { + return code, nil + } + errs = append(errs, err) } } return nil, errors.Join(errs...) @@ -348,9 +352,13 @@ func (r *multiReader) ContractCode(addr common.Address, codeHash common.Hash) ([ func (r *multiReader) ContractCodeSize(addr common.Address, codeHash common.Hash) (int, error) { var errs []error for _, reader := range r.readers { - size, err := reader.ContractCodeSize(addr, codeHash) - if err == nil { - return size, nil + // Only trie reader can provide contract code. + if _, ok := reader.(*trieReader); ok { + size, err := reader.ContractCodeSize(addr, codeHash) + if err == nil { + return size, nil + } + errs = append(errs, err) } } return 0, errors.Join(errs...)