Merge pull request #970 from ethereum/vitalik_quick_test
Created separate family and ancestors environment objects
This commit is contained in:
commit
e4aa011d23
@ -45,7 +45,8 @@ type environment struct {
|
|||||||
state *state.StateDB // apply state changes here
|
state *state.StateDB // apply state changes here
|
||||||
coinbase *state.StateObject // the miner's account
|
coinbase *state.StateObject // the miner's account
|
||||||
block *types.Block // the new block
|
block *types.Block // the new block
|
||||||
family *set.Set // family set (used for checking uncles)
|
ancestors *set.Set // ancestor set (used for checking uncle parent validity)
|
||||||
|
family *set.Set // family set (used for checking uncle invalidity)
|
||||||
uncles *set.Set // uncle set
|
uncles *set.Set // uncle set
|
||||||
remove *set.Set // tx which will be removed
|
remove *set.Set // tx which will be removed
|
||||||
tcount int // tx count in cycle
|
tcount int // tx count in cycle
|
||||||
@ -62,6 +63,7 @@ func env(block *types.Block, eth core.Backend) *environment {
|
|||||||
totalUsedGas: new(big.Int),
|
totalUsedGas: new(big.Int),
|
||||||
state: state,
|
state: state,
|
||||||
block: block,
|
block: block,
|
||||||
|
ancestors: set.New(),
|
||||||
family: set.New(),
|
family: set.New(),
|
||||||
uncles: set.New(),
|
uncles: set.New(),
|
||||||
coinbase: state.GetOrNewStateObject(block.Coinbase()),
|
coinbase: state.GetOrNewStateObject(block.Coinbase()),
|
||||||
@ -265,7 +267,11 @@ func (self *worker) makeCurrent() {
|
|||||||
|
|
||||||
current := env(block, self.eth)
|
current := env(block, self.eth)
|
||||||
for _, ancestor := range self.chain.GetAncestors(block, 7) {
|
for _, ancestor := range self.chain.GetAncestors(block, 7) {
|
||||||
|
for _, uncle := range ancestor.Uncles() {
|
||||||
|
current.family.Add(uncle.Hash())
|
||||||
|
}
|
||||||
current.family.Add(ancestor.Hash())
|
current.family.Add(ancestor.Hash())
|
||||||
|
current.ancestors.Add(ancestor.Hash())
|
||||||
}
|
}
|
||||||
accounts, _ := self.eth.AccountManager().Accounts()
|
accounts, _ := self.eth.AccountManager().Accounts()
|
||||||
// Keep track of transactions which return errors so they can be removed
|
// Keep track of transactions which return errors so they can be removed
|
||||||
@ -363,7 +369,7 @@ func (self *worker) commitUncle(uncle *types.Header) error {
|
|||||||
}
|
}
|
||||||
self.current.uncles.Add(uncle.Hash())
|
self.current.uncles.Add(uncle.Hash())
|
||||||
|
|
||||||
if !self.current.family.Has(uncle.ParentHash) {
|
if !self.current.ancestors.Has(uncle.ParentHash) {
|
||||||
return core.UncleError(fmt.Sprintf("Uncle's parent unknown (%x)", uncle.ParentHash[0:4]))
|
return core.UncleError(fmt.Sprintf("Uncle's parent unknown (%x)", uncle.ParentHash[0:4]))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user