Fixed issue in VM where LOG didn't pop anything of the stack
This commit is contained in:
@ -236,6 +236,12 @@ func (sm *BlockManager) ProcessWithParent(block, parent *types.Block) (td *big.I
|
||||
return
|
||||
}
|
||||
|
||||
rbloom := types.CreateBloom(receipts)
|
||||
if bytes.Compare(rbloom, block.LogsBloom) != 0 {
|
||||
err = fmt.Errorf("unable to replicate block's bloom=%x", rbloom)
|
||||
return
|
||||
}
|
||||
|
||||
txSha := types.DeriveSha(block.Transactions())
|
||||
if bytes.Compare(txSha, block.TxSha) != 0 {
|
||||
err = fmt.Errorf("validating transaction root. received=%x got=%x", block.TxSha, txSha)
|
||||
@ -252,13 +258,6 @@ func (sm *BlockManager) ProcessWithParent(block, parent *types.Block) (td *big.I
|
||||
return
|
||||
}
|
||||
|
||||
//block.receipts = receipts // although this isn't necessary it be in the future
|
||||
rbloom := types.CreateBloom(receipts)
|
||||
if bytes.Compare(rbloom, block.LogsBloom) != 0 {
|
||||
err = fmt.Errorf("unable to replicate block's bloom=%x", rbloom)
|
||||
return
|
||||
}
|
||||
|
||||
state.Update(ethutil.Big0)
|
||||
|
||||
if !block.State().Cmp(state) {
|
||||
|
@ -20,18 +20,16 @@ func CreateBloom(receipts Receipts) []byte {
|
||||
func LogsBloom(logs state.Logs) *big.Int {
|
||||
bin := new(big.Int)
|
||||
for _, log := range logs {
|
||||
data := [][]byte{log.Address()}
|
||||
for _, topic := range log.Topics() {
|
||||
data = append(data, topic)
|
||||
data := make([][]byte, len(log.Topics())+1)
|
||||
data[0] = log.Address()
|
||||
|
||||
for i, topic := range log.Topics() {
|
||||
data[i+1] = topic
|
||||
}
|
||||
|
||||
for _, b := range data {
|
||||
bin.Or(bin, ethutil.BigD(bloom9(crypto.Sha3(b)).Bytes()))
|
||||
}
|
||||
|
||||
//if log.Data != nil {
|
||||
// data = append(data, log.Data)
|
||||
//}
|
||||
}
|
||||
|
||||
return bin
|
||||
|
@ -64,5 +64,18 @@ func (self *Receipt) String() string {
|
||||
|
||||
type Receipts []*Receipt
|
||||
|
||||
func (self Receipts) RlpData() interface{} {
|
||||
data := make([]interface{}, len(self))
|
||||
for i, receipt := range self {
|
||||
data[i] = receipt.RlpData()
|
||||
}
|
||||
|
||||
return data
|
||||
}
|
||||
|
||||
func (self Receipts) RlpEncode() []byte {
|
||||
return ethutil.Encode(self.RlpData())
|
||||
}
|
||||
|
||||
func (self Receipts) Len() int { return len(self) }
|
||||
func (self Receipts) GetRlp(i int) []byte { return ethutil.Rlp(self[i]) }
|
||||
|
Reference in New Issue
Block a user