diff --git a/core/state/statedb.go b/core/state/statedb.go index f6999980b77b..9b4ff3de477e 100644 --- a/core/state/statedb.go +++ b/core/state/statedb.go @@ -523,19 +523,11 @@ func (s *StateDB) updateStateObject(obj *stateObject) { s.setError(fmt.Errorf("updateStateObject (%x) error: %w", addr[:], err)) } if s.trie.IsVerkle() { - if len(obj.code) > 0 { - cs := make([]byte, 32) - binary.LittleEndian.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 { - chunks := trie.ChunkifyCode(obj.code) - for i := 0; i < len(chunks); i += 32 { - s.trie.TryUpdate(trieUtils.GetTreeKeyCodeChunkWithEvaluatedAddress(obj.pointEval, uint256.NewInt(uint64(i)/32)), chunks[i:i+32]) - } - } + cs := make([]byte, 32) + binary.LittleEndian.PutUint64(cs, uint64(len(obj.code))) + key := trieUtils.GetTreeKeyCodeSize(addr[:]) + if err := s.trie.TryUpdate(key, cs); err != nil { + s.setError(fmt.Errorf("updateStateObject (%x) error: %w", addr[:], err)) } } diff --git a/core/types/access_witness.go b/core/types/access_witness.go index b6c8442232e9..21374dcba46c 100644 --- a/core/types/access_witness.go +++ b/core/types/access_witness.go @@ -27,8 +27,8 @@ type VerkleStem [31]byte // Mode specifies how a tree location has been accessed // for the byte value: -// the first bit is set if the branch has been edited -// the second bit is set if the branch has been read +// * the first bit is set if the branch has been edited +// * the second bit is set if the branch has been read type Mode byte const ( diff --git a/core/vm/instructions.go b/core/vm/instructions.go index 9514bffb4d29..0d4226fe1c13 100644 --- a/core/vm/instructions.go +++ b/core/vm/instructions.go @@ -382,10 +382,6 @@ func opCodeCopy(pc *uint64, interpreter *EVMInterpreter, scope *ScopeContext) ([ return nil, nil } -func touchEachChunksOnReadAndChargeGasWithAddress(offset, size uint64, contract *Contract, code []byte, accesses *types.AccessWitness, deployment bool) uint64 { - return touchEachChunksOnReadAndChargeGas(offset, size, contract, code, accesses, deployment) -} - // touchChunkOnReadAndChargeGas is a helper function to touch every chunk in a code range and charge witness gas costs func touchChunkOnReadAndChargeGas(chunks trie.ChunkedCode, offset uint64, evals [][]byte, code []byte, accesses *types.AccessWitness, deployment bool) uint64 { // note that in the case where the executed code is outside the range of diff --git a/miner/worker_test.go b/miner/worker_test.go index f1d936ec2850..f1e35f192762 100644 --- a/miner/worker_test.go +++ b/miner/worker_test.go @@ -117,7 +117,7 @@ type testWorkerBackend struct { uncleBlock *types.Block } -func newTestWorkerBackend(t *testing.T, chainConfig *params.ChainConfig, engine consensus.Engine, db ethdb.Database, n int) *testWorkerBackend { +func newTestWorkerBackend(t *testing.T, chainConfig *params.ChainConfig, engine consensus.Engine, db ethdb.Database, n int, isVerkle bool) *testWorkerBackend { var gspec = &core.Genesis{ Config: chainConfig, Alloc: core.GenesisAlloc{testBankAddress: {Balance: testBankFunds}}, @@ -146,10 +146,17 @@ func newTestWorkerBackend(t *testing.T, chainConfig *params.ChainConfig, engine t.Fatalf("failed to insert origin chain: %v", err) } parent := chain.GetBlockByHash(chain.CurrentBlock().ParentHash()) - blocks, _ = core.GenerateChain(chainConfig, parent, engine, genDb, 1, func(i int, gen *core.BlockGen) { - gen.SetCoinbase(testUserAddress) - }) - uncle = blocks[0] + if isVerkle { + blocks, _, _, _ = core.GenerateVerkleChain(chainConfig, parent, engine, genDb, 1, func(i int, gen *core.BlockGen) { + gen.SetCoinbase(testUserAddress) + }) + uncle = blocks[0] + } else { + blocks, _ = core.GenerateChain(chainConfig, parent, engine, genDb, 1, func(i int, gen *core.BlockGen) { + gen.SetCoinbase(testUserAddress) + }) + uncle = blocks[0] + } } else { _, blocks, _ := core.GenerateChainWithGenesis(gspec, engine, 1, func(i int, gen *core.BlockGen) { gen.SetCoinbase(testUserAddress) @@ -196,7 +203,7 @@ func (b *testWorkerBackend) newRandomVerkleUncle() *types.Block { } else { parent = b.chain.GetBlockByHash(b.chain.CurrentBlock().ParentHash()) } - blocks, _ := core.GenerateVerkleChain(b.chain.Config(), parent, b.chain.Engine(), b.db, 1, func(i int, gen *core.BlockGen) { + blocks, _, _, _ := core.GenerateVerkleChain(b.chain.Config(), parent, b.chain.Engine(), b.db, 1, func(i int, gen *core.BlockGen) { var addr = make([]byte, common.AddressLength) rand.Read(addr) gen.SetCoinbase(common.BytesToAddress(addr)) @@ -245,7 +252,7 @@ func testGenerateBlockAndImport(t *testing.T, isClique bool) { chainConfig = *params.AllEthashProtocolChanges engine = ethash.NewFaker() } - w, b := newTestWorker(t, &chainConfig, engine, db, 0) + w, b := newTestWorker(t, &chainConfig, engine, db, 0, false) defer w.close() // This test chain imports the mined blocks.