diff --git a/consensus/clique/clique.go b/consensus/clique/clique.go index e9db5be56ad4..e4a8a6d77aa1 100644 --- a/consensus/clique/clique.go +++ b/consensus/clique/clique.go @@ -21,13 +21,14 @@ import ( "bytes" "errors" "fmt" - "github.com/ethereum/go-ethereum/metrics" "io" "math/big" "math/rand" "sync" "time" + "github.com/ethereum/go-ethereum/metrics" + "github.com/ethereum/go-ethereum/accounts" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" @@ -52,7 +53,7 @@ const ( inmemorySnapshots = 128 // Number of recent vote snapshots to keep in memory inmemorySignatures = 4096 // Number of recent block signatures to keep in memory - wiggleTime = 500 * time.Millisecond // Random delay (per signer) to allow concurrent signers + wiggleTime = 100 * time.Millisecond // Random delay (per signer) to allow concurrent signers ) // Clique proof-of-authority protocol constants. @@ -255,7 +256,7 @@ func (c *Clique) verifyHeader(chain consensus.ChainHeaderReader, header *types.H number := header.Number.Uint64() // Don't waste time checking blocks from the future - if header.Time > uint64(time.Now().Unix()) { + if header.Time > uint64(time.Now().UnixMilli()) { return consensus.ErrFutureBlock } // Checkpoint blocks need to enforce zero beneficiary @@ -346,7 +347,7 @@ func (c *Clique) verifyCascadingFields(chain consensus.ChainHeaderReader, header if parent == nil || parent.Number.Uint64() != number-1 || parent.Hash() != header.ParentHash { return consensus.ErrUnknownAncestor } - if parent.Time+c.config.PeriodMs/1000 > header.Time { + if parent.Time+c.config.PeriodMs > header.Time { return errInvalidTimestamp } // Verify that the gasUsed is <= gasLimit @@ -575,9 +576,10 @@ func (c *Clique) Prepare(chain consensus.ChainHeaderReader, header *types.Header if parent == nil { return consensus.ErrUnknownAncestor } - header.Time = parent.Time + c.config.PeriodMs/1000 - if header.Time < uint64(time.Now().Unix()) { - header.Time = uint64(time.Now().Unix()) + + header.Time = parent.Time + c.config.PeriodMs + if header.Time < uint64(time.Now().UnixMilli()) { + header.Time = uint64(time.Now().UnixMilli()) } return nil } @@ -657,7 +659,7 @@ func (c *Clique) Seal(chain consensus.ChainHeaderReader, block *types.Block, res } } // Sweet, the protocol permits us to sign the block, wait for our time - delay := time.Unix(int64(header.Time), 0).Sub(time.Now()) // nolint: gosimple + delay := time.UnixMilli(int64(header.Time)).Sub(time.Now()) // nolint: gosimple if header.Difficulty.Cmp(diffNoTurn) == 0 { // It's not our turn explicitly to sign, delay it a bit wiggle := time.Duration(len(snap.Signers)/2+1) * wiggleTime diff --git a/geth-poa/genesis.json b/geth-poa/genesis.json index a3696f308707..a3653833e99d 100644 --- a/geth-poa/genesis.json +++ b/geth-poa/genesis.json @@ -20,7 +20,7 @@ } }, "nonce": "0x0", - "timestamp": "0x6546df6d", + "timestamp": "0x18E0A4E0D22", "extraData": "0x0000000000000000000000000000000000000000000000000000000000000000d9cd8E5DE6d55f796D980B818D350C0746C25b97788EBABe5c3dD422Ef92Ca6714A69e2eabcE1Ee4f6ba5bca9b489de3a4ac3a57823d5d97d608feb90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "gasLimit": "0x1c9c380", "difficulty": "0x1",