diff --git a/core/state/state_object.go b/core/state/state_object.go index 8af0f2f2e665..71d3a678c66a 100644 --- a/core/state/state_object.go +++ b/core/state/state_object.go @@ -365,15 +365,15 @@ func (s *stateObject) updateTrie(db Database) Trie { } s.db.StorageDeleted += 1 } else { - // Encoding []byte cannot fail, ok to ignore the error. - v, _ = rlp.EncodeToBytes(common.TrimLeftZeroes(value[:])) - if !tr.IsVerkle() { + // Encoding []byte cannot fail, ok to ignore the error. + v, _ = rlp.EncodeToBytes(common.TrimLeftZeroes(value[:])) + s.setError(tr.TryUpdate(key[:], v)) } else { k := trieUtils.GetTreeKeyStorageSlot(s.address[:], new(uint256.Int).SetBytes(key[:])) // Update the trie, with v as a value - s.setError(tr.TryUpdate(k, v)) + s.setError(tr.TryUpdate(k, value[:])) } s.db.StorageUpdated += 1 } diff --git a/miner/worker_test.go b/miner/worker_test.go index 42a2bdbbf231..d7f107f7b1f7 100644 --- a/miner/worker_test.go +++ b/miner/worker_test.go @@ -191,6 +191,22 @@ func (b *testWorkerBackend) newRandomUncle() *types.Block { return blocks[0] } +func (b *testWorkerBackend) newRandomVerkleUncle() *types.Block { + var parent *types.Block + cur := b.chain.CurrentBlock() + if cur.NumberU64() == 0 { + parent = b.chain.Genesis() + } 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) { + var addr = make([]byte, common.AddressLength) + rand.Read(addr) + gen.SetCoinbase(common.BytesToAddress(addr)) + }) + return blocks[0] +} + func (b *testWorkerBackend) newRandomTx(creation bool) *types.Transaction { var tx *types.Transaction gasPrice := big.NewInt(10 * params.InitialBaseFee) @@ -306,11 +322,10 @@ func TestGenerateBlocksAndImportVerkle(t *testing.T) { w.start() for i := 0; i < 5; i++ { - // TODO this causes a failure, but shouldn't. investigate. - //b.txPool.AddLocal(b.newRandomTx(true)) + b.txPool.AddLocal(b.newRandomTx(true)) b.txPool.AddLocal(b.newRandomTx(false)) - //w.postSideBlock(core.ChainSideEvent{Block: b.newRandomUncle()}) - //w.postSideBlock(core.ChainSideEvent{Block: b.newRandomUncle()}) + w.postSideBlock(core.ChainSideEvent{Block: b.newRandomVerkleUncle()}) + w.postSideBlock(core.ChainSideEvent{Block: b.newRandomVerkleUncle()}) select { case ev := <-sub.Chan():