forked from cerc-io/plugeth
6dc14788a2
Log filtering is now using a MIPmap like approach where addresses of logs are added to a mapped bloom bin. The current levels for the MIP are in ranges of 1.000.000, 500.000, 100.000, 50.000, 1.000. Logs are therefor filtered in batches of 1.000.
68 lines
1.8 KiB
Go
68 lines
1.8 KiB
Go
package eth
|
|
|
|
import (
|
|
"math/big"
|
|
"testing"
|
|
|
|
"github.com/ethereum/go-ethereum/common"
|
|
"github.com/ethereum/go-ethereum/core"
|
|
"github.com/ethereum/go-ethereum/core/types"
|
|
"github.com/ethereum/go-ethereum/core/vm"
|
|
"github.com/ethereum/go-ethereum/ethdb"
|
|
)
|
|
|
|
func TestMipmapUpgrade(t *testing.T) {
|
|
db, _ := ethdb.NewMemDatabase()
|
|
addr := common.BytesToAddress([]byte("jeff"))
|
|
genesis := core.WriteGenesisBlockForTesting(db)
|
|
|
|
chain := core.GenerateChain(genesis, db, 10, func(i int, gen *core.BlockGen) {
|
|
var receipts types.Receipts
|
|
switch i {
|
|
case 1:
|
|
receipt := types.NewReceipt(nil, new(big.Int))
|
|
receipt.SetLogs(vm.Logs{&vm.Log{Address: addr}})
|
|
gen.AddUncheckedReceipt(receipt)
|
|
receipts = types.Receipts{receipt}
|
|
case 2:
|
|
receipt := types.NewReceipt(nil, new(big.Int))
|
|
receipt.SetLogs(vm.Logs{&vm.Log{Address: addr}})
|
|
gen.AddUncheckedReceipt(receipt)
|
|
receipts = types.Receipts{receipt}
|
|
}
|
|
|
|
// store the receipts
|
|
err := core.PutReceipts(db, receipts)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
})
|
|
for _, block := range chain {
|
|
core.WriteBlock(db, block)
|
|
if err := core.WriteCanonicalHash(db, block.Hash(), block.NumberU64()); err != nil {
|
|
t.Fatalf("failed to insert block number: %v", err)
|
|
}
|
|
if err := core.WriteHeadBlockHash(db, block.Hash()); err != nil {
|
|
t.Fatalf("failed to insert block number: %v", err)
|
|
}
|
|
if err := core.PutBlockReceipts(db, block, block.Receipts()); err != nil {
|
|
t.Fatal("error writing block receipts:", err)
|
|
}
|
|
}
|
|
|
|
err := addMipmapBloomBins(db)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
bloom := core.GetMipmapBloom(db, 1, core.MIPMapLevels[0])
|
|
if (bloom == types.Bloom{}) {
|
|
t.Error("got empty bloom filter")
|
|
}
|
|
|
|
data, _ := db.Get([]byte("setting-mipmap-version"))
|
|
if len(data) == 0 {
|
|
t.Error("setting-mipmap-version not written to database")
|
|
}
|
|
}
|