aboutsummaryrefslogtreecommitdiffstats
path: root/eth/backend_test.go
diff options
context:
space:
mode:
authorJeffrey Wilcke <geffobscura@gmail.com>2015-10-12 23:58:51 +0800
committerJeffrey Wilcke <geffobscura@gmail.com>2015-10-17 03:28:59 +0800
commit6dc14788a238f3e0ec786c6c04d476a3b957e645 (patch)
tree8f3f5f91506bc4c7532543043add1eaea3fd28e7 /eth/backend_test.go
parent30f057aaf9891fb37f82d94c24b8aa35d388e07b (diff)
downloaddexon-6dc14788a238f3e0ec786c6c04d476a3b957e645.tar
dexon-6dc14788a238f3e0ec786c6c04d476a3b957e645.tar.gz
dexon-6dc14788a238f3e0ec786c6c04d476a3b957e645.tar.bz2
dexon-6dc14788a238f3e0ec786c6c04d476a3b957e645.tar.lz
dexon-6dc14788a238f3e0ec786c6c04d476a3b957e645.tar.xz
dexon-6dc14788a238f3e0ec786c6c04d476a3b957e645.tar.zst
dexon-6dc14788a238f3e0ec786c6c04d476a3b957e645.zip
core, eth/filters, miner, xeth: Optimised log filtering
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.
Diffstat (limited to 'eth/backend_test.go')
-rw-r--r--eth/backend_test.go67
1 files changed, 67 insertions, 0 deletions
diff --git a/eth/backend_test.go b/eth/backend_test.go
new file mode 100644
index 000000000..220426c17
--- /dev/null
+++ b/eth/backend_test.go
@@ -0,0 +1,67 @@
+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")
+ }
+}