forked from cerc-io/plugeth
bloom
This commit is contained in:
parent
0fa7859b94
commit
c21293cd91
@ -28,7 +28,7 @@ func LogsBloom(logs state.Logs) *big.Int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for _, b := range data {
|
for _, b := range data {
|
||||||
bin.Or(bin, common.BigD(bloom9(crypto.Sha3(b[:])).Bytes()))
|
bin.Or(bin, bloom9(crypto.Sha3(b[:])))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,9 +38,10 @@ func LogsBloom(logs state.Logs) *big.Int {
|
|||||||
func bloom9(b []byte) *big.Int {
|
func bloom9(b []byte) *big.Int {
|
||||||
r := new(big.Int)
|
r := new(big.Int)
|
||||||
|
|
||||||
for i := 0; i < 16; i += 2 {
|
for i := 0; i < 6; i += 2 {
|
||||||
t := big.NewInt(1)
|
t := big.NewInt(1)
|
||||||
b := uint(b[i+1]) + 1024*(uint(b[i])&1)
|
//b := uint(b[i+1]) + 512*(uint(b[i])&1)
|
||||||
|
b := (uint(b[i+1]) + (uint(b[i]) << 8)) & 511
|
||||||
r.Or(r, t.Lsh(t, b))
|
r.Or(r, t.Lsh(t, b))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,11 +2,13 @@ package vm
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"fmt"
|
||||||
"math/big"
|
"math/big"
|
||||||
"strconv"
|
"strconv"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/ethereum/go-ethereum/common"
|
"github.com/ethereum/go-ethereum/common"
|
||||||
|
"github.com/ethereum/go-ethereum/core/types"
|
||||||
"github.com/ethereum/go-ethereum/ethdb"
|
"github.com/ethereum/go-ethereum/ethdb"
|
||||||
"github.com/ethereum/go-ethereum/logger"
|
"github.com/ethereum/go-ethereum/logger"
|
||||||
"github.com/ethereum/go-ethereum/state"
|
"github.com/ethereum/go-ethereum/state"
|
||||||
@ -80,6 +82,9 @@ func RunVmTest(p string, t *testing.T) {
|
|||||||
helper.CreateFileTests(t, p, &tests)
|
helper.CreateFileTests(t, p, &tests)
|
||||||
|
|
||||||
for name, test := range tests {
|
for name, test := range tests {
|
||||||
|
if name != "log2_nonEmptyMem" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
db, _ := ethdb.NewMemDatabase()
|
db, _ := ethdb.NewMemDatabase()
|
||||||
statedb := state.New(common.Hash{}, db)
|
statedb := state.New(common.Hash{}, db)
|
||||||
for addr, account := range test.Pre {
|
for addr, account := range test.Pre {
|
||||||
@ -167,16 +172,16 @@ func RunVmTest(p string, t *testing.T) {
|
|||||||
if len(test.Logs) != len(logs) {
|
if len(test.Logs) != len(logs) {
|
||||||
t.Errorf("log length mismatch. Expected %d, got %d", len(test.Logs), len(logs))
|
t.Errorf("log length mismatch. Expected %d, got %d", len(test.Logs), len(logs))
|
||||||
} else {
|
} else {
|
||||||
/*
|
fmt.Println("A", test.Logs)
|
||||||
fmt.Println("A", test.Logs)
|
fmt.Println("B", logs)
|
||||||
fmt.Println("B", logs)
|
for i, log := range test.Logs {
|
||||||
for i, log := range test.Logs {
|
genBloom := common.LeftPadBytes(types.LogsBloom(state.Logs{logs[i]}).Bytes(), 256)
|
||||||
genBloom := common.LeftPadBytes(types.LogsBloom(state.Logs{logs[i]}).Bytes(), 256)
|
fmt.Println("A BLOOM", log.BloomF)
|
||||||
if !bytes.Equal(genBloom, common.Hex2Bytes(log.BloomF)) {
|
fmt.Printf("B BLOOM %x\n", genBloom)
|
||||||
t.Errorf("bloom mismatch")
|
if !bytes.Equal(genBloom, common.Hex2Bytes(log.BloomF)) {
|
||||||
}
|
t.Errorf("'%s' bloom mismatch", name)
|
||||||
}
|
}
|
||||||
*/
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//statedb.Trie().PrintRoot()
|
//statedb.Trie().PrintRoot()
|
||||||
|
@ -88,5 +88,5 @@ func (self *Log) RlpData() interface{} {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
func (self *Log) String() string {
|
func (self *Log) String() string {
|
||||||
return fmt.Sprintf("[A=%x T=%x D=%x]", self.address, self.topics, self.data)
|
return fmt.Sprintf("{%x %x %x}", self.address, self.data, self.topics)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user