fixed bad uncles

This commit is contained in:
obscuren
2015-03-23 18:27:05 +01:00
parent 0330077d76
commit c8e9ca0483
4 changed files with 16 additions and 6 deletions

View File

@ -9,11 +9,11 @@ import (
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core"
"github.com/ethereum/go-ethereum/core/state"
"github.com/ethereum/go-ethereum/core/types"
"github.com/ethereum/go-ethereum/event"
"github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/pow"
"github.com/ethereum/go-ethereum/core/state"
"gopkg.in/fatih/set.v0"
)
@ -199,6 +199,8 @@ func (self *worker) push() {
func (self *worker) commitNewWork() {
self.mu.Lock()
defer self.mu.Unlock()
self.uncleMu.Lock()
defer self.uncleMu.Unlock()
block := self.chain.NewBlock(self.coinbase)
@ -241,7 +243,10 @@ gasLimit:
}
self.eth.TxPool().RemoveSet(remove)
var uncles []*types.Header
var (
uncles []*types.Header
badUncles []common.Hash
)
for hash, uncle := range self.possibleUncles {
if len(uncles) == 2 {
break
@ -250,12 +255,16 @@ gasLimit:
if err := self.commitUncle(uncle.Header()); err != nil {
minerlogger.Infof("Bad uncle found and will be removed (%x)\n", hash[:4])
minerlogger.Debugln(uncle)
badUncles = append(badUncles, hash)
} else {
minerlogger.Infof("commiting %x as uncle\n", hash[:4])
uncles = append(uncles, uncle.Header())
}
}
minerlogger.Infof("commit new work with %d txs & %d uncles\n", tcount, len(uncles))
for _, hash := range badUncles {
delete(self.possibleUncles, hash)
}
self.current.block.SetUncles(uncles)