aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-11-10 06:59:25 +0800
committerobscuren <geffobscura@gmail.com>2014-11-10 06:59:25 +0800
commitf538ea25e46d59dfa225ed105343d9c6a9909c2c (patch)
tree4803cf19fefb2c5623cd2bc01f637c5c877c3879
parent429dd2a100f3b9e2b612b59bcb48f79a805cd6f9 (diff)
downloaddexon-f538ea25e46d59dfa225ed105343d9c6a9909c2c.tar
dexon-f538ea25e46d59dfa225ed105343d9c6a9909c2c.tar.gz
dexon-f538ea25e46d59dfa225ed105343d9c6a9909c2c.tar.bz2
dexon-f538ea25e46d59dfa225ed105343d9c6a9909c2c.tar.lz
dexon-f538ea25e46d59dfa225ed105343d9c6a9909c2c.tar.xz
dexon-f538ea25e46d59dfa225ed105343d9c6a9909c2c.tar.zst
dexon-f538ea25e46d59dfa225ed105343d9c6a9909c2c.zip
Fixed bug on gas and setting of receipts and roots
-rw-r--r--chain/block_manager.go40
1 files changed, 4 insertions, 36 deletions
diff --git a/chain/block_manager.go b/chain/block_manager.go
index 79c18fbe3..2e6531dbc 100644
--- a/chain/block_manager.go
+++ b/chain/block_manager.go
@@ -6,7 +6,6 @@ import (
"errors"
"fmt"
"math/big"
- "os"
"sync"
"time"
@@ -89,28 +88,11 @@ func NewBlockManager(ethereum EthManager) *BlockManager {
}
func (self *BlockManager) Start() {
- statelogger.Debugln("Starting state manager")
- self.events = self.eth.EventMux().Subscribe(Blocks(nil))
- go self.updateThread()
+ statelogger.Debugln("Starting block manager")
}
func (self *BlockManager) Stop() {
statelogger.Debugln("Stopping state manager")
- self.events.Unsubscribe()
-}
-
-func (self *BlockManager) updateThread() {
- for ev := range self.events.Chan() {
- for _, block := range ev.(Blocks) {
- _, err := self.Process(block)
- if err != nil {
- statelogger.Infoln(err)
- statelogger.Debugf("Block #%v failed (%x...)\n", block.Number, block.Hash()[0:4])
- statelogger.Debugln(block)
- break
- }
- }
- }
}
func (sm *BlockManager) CurrentState() *state.State {
@@ -179,19 +161,6 @@ done:
cumulative := new(big.Int).Set(totalUsedGas.Add(totalUsedGas, txGas))
receipt := &Receipt{ethutil.CopyBytes(state.Root().([]byte)), cumulative, LogsBloom(state.Logs()).Bytes(), state.Logs()}
- if i < len(block.Receipts()) {
- original := block.Receipts()[i]
- if !original.Cmp(receipt) {
- if ethutil.Config.Diff {
- os.Exit(1)
- }
-
- err := fmt.Errorf("#%d receipt failed (r) %v ~ %x <=> (c) %v ~ %x (%x...)", i+1, original.CumulativeGasUsed, original.PostState[0:4], receipt.CumulativeGasUsed, receipt.PostState[0:4], tx.Hash()[0:4])
-
- return nil, nil, nil, nil, err
- }
- }
-
// Notify all subscribers
go self.eth.EventMux().Post(TxPostEvent{tx})
@@ -203,7 +172,7 @@ done:
}
}
- parent.GasUsed = totalUsedGas
+ block.GasUsed = totalUsedGas
return receipts, handled, unhandled, erroneous, err
}
@@ -240,12 +209,12 @@ func (sm *BlockManager) ProcessWithParent(block, parent *Block) (td *big.Int, er
fmt.Printf("## %x %x ##\n", block.Hash(), block.Number)
}
- _, err = sm.ApplyDiff(state, parent, block)
+ receipts, err := sm.ApplyDiff(state, parent, block)
if err != nil {
return nil, err
}
+ block.SetReceipts(receipts)
- /* Go and C++ don't have consensus here. FIXME
txSha := DeriveSha(block.transactions)
if bytes.Compare(txSha, block.TxSha) != 0 {
return nil, fmt.Errorf("Error validating transaction sha. Received %x, got %x", block.TxSha, txSha)
@@ -255,7 +224,6 @@ func (sm *BlockManager) ProcessWithParent(block, parent *Block) (td *big.Int, er
if bytes.Compare(receiptSha, block.ReceiptSha) != 0 {
return nil, fmt.Errorf("Error validating receipt sha. Received %x, got %x", block.ReceiptSha, receiptSha)
}
- */
// Block validation
if err = sm.ValidateBlock(block, parent); err != nil {