release/1.0.1
obscuren 10 years ago
parent 0fa7859b94
commit c21293cd91
  1. 7
      core/types/bloom9.go
  2. 25
      tests/vm/gh_test.go
  3. 2
      vm/environment.go

@ -28,7 +28,7 @@ func LogsBloom(logs state.Logs) *big.Int {
}
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 {
r := new(big.Int)
for i := 0; i < 16; i += 2 {
for i := 0; i < 6; i += 2 {
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))
}

@ -2,11 +2,13 @@ package vm
import (
"bytes"
"fmt"
"math/big"
"strconv"
"testing"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/ethdb"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/state"
@ -80,6 +82,9 @@ func RunVmTest(p string, t *testing.T) {
helper.CreateFileTests(t, p, &tests)
for name, test := range tests {
if name != "log2_nonEmptyMem" {
continue
}
db, _ := ethdb.NewMemDatabase()
statedb := state.New(common.Hash{}, db)
for addr, account := range test.Pre {
@ -167,16 +172,16 @@ func RunVmTest(p string, t *testing.T) {
if len(test.Logs) != len(logs) {
t.Errorf("log length mismatch. Expected %d, got %d", len(test.Logs), len(logs))
} else {
/*
fmt.Println("A", test.Logs)
fmt.Println("B", logs)
for i, log := range test.Logs {
genBloom := common.LeftPadBytes(types.LogsBloom(state.Logs{logs[i]}).Bytes(), 256)
if !bytes.Equal(genBloom, common.Hex2Bytes(log.BloomF)) {
t.Errorf("bloom mismatch")
}
}
*/
fmt.Println("A", test.Logs)
fmt.Println("B", logs)
for i, log := range test.Logs {
genBloom := common.LeftPadBytes(types.LogsBloom(state.Logs{logs[i]}).Bytes(), 256)
fmt.Println("A BLOOM", log.BloomF)
fmt.Printf("B BLOOM %x\n", genBloom)
if !bytes.Equal(genBloom, common.Hex2Bytes(log.BloomF)) {
t.Errorf("'%s' bloom mismatch", name)
}
}
}
}
//statedb.Trie().PrintRoot()

@ -88,5 +88,5 @@ func (self *Log) RlpData() interface{} {
*/
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…
Cancel
Save