forked from cerc-io/plugeth
miner: avoid sleeping in miner (#22108)
This PR removes a logic in the miner, which was originally intended to help temporary testnets based on ethash from "running off into the future". If the difficulty was low, and a few computers started mining several blocks per second, the ethash rules (which demand 1s delay between blocks) would push the blocktimes further and further away. The solution was to make the miner sleep while this happened. Nowadays, this problem is solved instead by PoA chains, and it's recommended to let testnets and devnets be based on clique instead. The existing logic is problematic, since it can cause stalls within the miner making it difficult for remote workers to submit work if the channel is blocked on a sleep. Credits to Saar Tochner for reporting this via the bug bounty
This commit is contained in:
parent
6ada9f0f38
commit
9584f56b9d
@ -861,13 +861,6 @@ func (w *worker) commitNewWork(interrupt *int32, noempty bool, timestamp int64)
|
|||||||
if parent.Time() >= uint64(timestamp) {
|
if parent.Time() >= uint64(timestamp) {
|
||||||
timestamp = int64(parent.Time() + 1)
|
timestamp = int64(parent.Time() + 1)
|
||||||
}
|
}
|
||||||
// this will ensure we're not going off too far in the future
|
|
||||||
if now := time.Now().Unix(); timestamp > now+1 {
|
|
||||||
wait := time.Duration(timestamp-now) * time.Second
|
|
||||||
log.Info("Mining too far in the future", "wait", common.PrettyDuration(wait))
|
|
||||||
time.Sleep(wait)
|
|
||||||
}
|
|
||||||
|
|
||||||
num := parent.Number()
|
num := parent.Number()
|
||||||
header := &types.Header{
|
header := &types.Header{
|
||||||
ParentHash: parent.Hash(),
|
ParentHash: parent.Hash(),
|
||||||
|
Loading…
Reference in New Issue
Block a user