Fixed competing block method
This commit is contained in:
parent
734b2e4cf7
commit
cbf221f6b7
|
@ -132,8 +132,19 @@ func (sm *StateManager) ApplyTransaction(state *State, block *Block, tx *Transac
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (sm *StateManager) Process(block *Block, dontReact bool) error {
|
||||||
|
if !sm.bc.HasBlock(block.PrevHash) {
|
||||||
|
return ParentError(block.PrevHash)
|
||||||
|
}
|
||||||
|
|
||||||
|
parent := sm.bc.GetBlock(block.PrevHash)
|
||||||
|
|
||||||
|
return sm.ProcessBlock(parent.State(), parent, block, dontReact)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// Block processing and validating with a given (temporarily) state
|
// Block processing and validating with a given (temporarily) state
|
||||||
func (sm *StateManager) ProcessBlock(state *State, block *Block, dontReact bool) error {
|
func (sm *StateManager) ProcessBlock(state *State, parent, block *Block, dontReact bool) error {
|
||||||
// Processing a blocks may never happen simultaneously
|
// Processing a blocks may never happen simultaneously
|
||||||
sm.mutex.Lock()
|
sm.mutex.Lock()
|
||||||
defer sm.mutex.Unlock()
|
defer sm.mutex.Unlock()
|
||||||
|
@ -186,7 +197,7 @@ func (sm *StateManager) ProcessBlock(state *State, block *Block, dontReact bool)
|
||||||
sm.bc.Add(block)
|
sm.bc.Add(block)
|
||||||
sm.notifyChanges(state)
|
sm.notifyChanges(state)
|
||||||
|
|
||||||
ethutil.Config.Log.Infof("[STATE] Added block #%d (%x)\n", block.BlockInfo().Number, block.Hash())
|
ethutil.Config.Log.Infof("[STATE] Added block #%d (%x)\n", block.Number, block.Hash())
|
||||||
if dontReact == false {
|
if dontReact == false {
|
||||||
sm.Ethereum.Reactor().Post("newBlock", block)
|
sm.Ethereum.Reactor().Post("newBlock", block)
|
||||||
|
|
||||||
|
|
|
@ -126,7 +126,7 @@ func (miner *Miner) listener() {
|
||||||
// Search the nonce
|
// Search the nonce
|
||||||
miner.block.Nonce = miner.pow.Search(miner.block, miner.quitChan)
|
miner.block.Nonce = miner.pow.Search(miner.block, miner.quitChan)
|
||||||
if miner.block.Nonce != nil {
|
if miner.block.Nonce != nil {
|
||||||
err := miner.ethereum.StateManager().ProcessBlock(miner.ethereum.StateManager().CurrentState(), miner.block, true)
|
err := miner.ethereum.StateManager().Process(miner.block, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
ethutil.Config.Log.Infoln(err)
|
ethutil.Config.Log.Infoln(err)
|
||||||
miner.txs = []*ethchain.Transaction{} // Move this somewhere neat
|
miner.txs = []*ethchain.Transaction{} // Move this somewhere neat
|
||||||
|
|
4
peer.go
4
peer.go
|
@ -335,8 +335,8 @@ func (p *Peer) HandleInbound() {
|
||||||
block = ethchain.NewBlockFromRlpValue(msg.Data.Get(i))
|
block = ethchain.NewBlockFromRlpValue(msg.Data.Get(i))
|
||||||
|
|
||||||
//p.ethereum.StateManager().PrepareDefault(block)
|
//p.ethereum.StateManager().PrepareDefault(block)
|
||||||
state := p.ethereum.StateManager().CurrentState()
|
//state := p.ethereum.StateManager().CurrentState()
|
||||||
err = p.ethereum.StateManager().ProcessBlock(state, block, false)
|
err = p.ethereum.StateManager().Process(block, false)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if ethutil.Config.Debug {
|
if ethutil.Config.Debug {
|
||||||
|
|
Loading…
Reference in New Issue