Explorar o código

core, miner: fixed miner time issue and removed future blocks

* Miner should no longer generate blocks with a time stamp less or equal
than it's parent.
* Future blocks are no longer processed and queued directly.
  Closes #1118
obscuren %!s(int64=10) %!d(string=hai) anos
pai
achega
12650e16d3
Modificáronse 2 ficheiros con 5 adicións e 5 borrados
  1. 1 2
      core/block_processor.go
  2. 4 3
      miner/worker.go

+ 1 - 2
core/block_processor.go

@@ -306,8 +306,7 @@ func (sm *BlockProcessor) ValidateHeader(block, parent *types.Header, checkPow b
 		return fmt.Errorf("GasLimit check failed for block %v (%v > %v)", block.GasLimit, a, b)
 	}
 
-	// Allow future blocks up to 10 seconds
-	if int64(block.Time) > time.Now().Unix()+4 {
+	if int64(block.Time) > time.Now().Unix() {
 		return BlockFutureErr
 	}
 

+ 4 - 3
miner/worker.go

@@ -287,8 +287,10 @@ func (self *worker) push() {
 
 func (self *worker) makeCurrent() {
 	block := self.chain.NewBlock(self.coinbase)
-	if block.Time() == self.chain.CurrentBlock().Time() {
-		block.Header().Time++
+	parent := self.chain.GetBlock(block.ParentHash())
+
+	if block.Time() <= parent.Time() {
+		block.Header().Time = parent.Header().Time + 1
 	}
 	block.Header().Extra = self.extra
 
@@ -312,7 +314,6 @@ func (self *worker) makeCurrent() {
 		current.localMinedBlocks = self.current.localMinedBlocks
 	}
 
-	parent := self.chain.GetBlock(current.block.ParentHash())
 	current.coinbase.SetGasPool(core.CalcGasLimit(parent))
 
 	self.current = current