diff options
-rw-r--r-- | chain/bloom9.go | 10 | ||||
-rw-r--r-- | chain/bloom9_test.go | 12 |
2 files changed, 18 insertions, 4 deletions
diff --git a/chain/bloom9.go b/chain/bloom9.go index ced31cc30..2bbc9409d 100644 --- a/chain/bloom9.go +++ b/chain/bloom9.go @@ -3,24 +3,25 @@ package chain import ( "math/big" + "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/state" ) func CreateBloom(block *Block) []byte { bin := new(big.Int) - bin.Or(bin, bloom9(block.Coinbase)) + bin.Or(bin, bloom9(crypto.Sha3(block.Coinbase))) for _, receipt := range block.Receipts() { bin.Or(bin, LogsBloom(receipt.logs)) } - return bin.Bytes() + return ethutil.LeftPadBytes(bin.Bytes(), 64) } func LogsBloom(logs state.Logs) *big.Int { bin := new(big.Int) for _, log := range logs { - data := [][]byte{log.Address} + data := [][]byte{crypto.Sha3(log.Address)} for _, topic := range log.Topics { data = append(data, topic) } @@ -41,7 +42,8 @@ func bloom9(b []byte) *big.Int { r := new(big.Int) for _, i := range []int{0, 2, 4} { t := big.NewInt(1) - r.Or(r, t.Lsh(t, uint(b[i+1])+256*(uint(b[i])&1))) + b := uint(b[i+1]) + 256*(uint(b[i])&1) + r.Or(r, t.Lsh(t, b)) } return r diff --git a/chain/bloom9_test.go b/chain/bloom9_test.go index 863d0adee..8d8822030 100644 --- a/chain/bloom9_test.go +++ b/chain/bloom9_test.go @@ -1,9 +1,12 @@ package chain import ( + "fmt" "testing" + "github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/state" + "github.com/ethgo.old/ethutil" ) func TestBloom9(t *testing.T) { @@ -17,3 +20,12 @@ func TestBloom9(t *testing.T) { t.Errorf("Bloom lookup failed") } } + +func TestAddress(t *testing.T) { + block := &Block{} + block.Coinbase = ethutil.Hex2Bytes("22341ae42d6dd7384bc8584e50419ea3ac75b83f") + fmt.Printf("%x\n", crypto.Sha3(block.Coinbase)) + + bin := CreateBloom(block) + fmt.Printf("bin = %x\n", ethutil.LeftPadBytes(bin, 64)) +} |