fix: don't use rlp in the tree for slot values (#51)

* fix: don't use rlp in the tree for slot values

* fix timeout after rebase
This commit is contained in:
Guillaume Ballet
2022-01-11 11:38:49 +01:00
committed by GitHub
parent 99f3c92361
commit 4428439fdf
2 changed files with 23 additions and 8 deletions

View File

@ -365,15 +365,15 @@ func (s *stateObject) updateTrie(db Database) Trie {
}
s.db.StorageDeleted += 1
} else {
if !tr.IsVerkle() {
// Encoding []byte cannot fail, ok to ignore the error.
v, _ = rlp.EncodeToBytes(common.TrimLeftZeroes(value[:]))
if !tr.IsVerkle() {
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
}

View File

@ -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():