Skip to content

Commit

Permalink
feat: implement relaxed period in clique (#763)
Browse files Browse the repository at this point in the history
* feat: implement relaxed period in clique

and enable it on Sepolia

* simplify if check

* chore: auto version bump [bot]

* Update clique.go

---------

Co-authored-by: omerfirmak <omerfirmak@users.noreply.github.com>
  • Loading branch information
omerfirmak and omerfirmak committed May 22, 2024
1 parent c7990a3 commit dd96cec
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 6 deletions.
6 changes: 4 additions & 2 deletions consensus/clique/clique.go
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,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.Period > header.Time {
if header.Time < parent.Time {
return errInvalidTimestamp
}
// Verify that the gasUsed is <= gasLimit
Expand Down Expand Up @@ -555,7 +555,9 @@ func (c *Clique) Prepare(chain consensus.ChainHeaderReader, header *types.Header
return consensus.ErrUnknownAncestor
}
header.Time = parent.Time + c.config.Period
if header.Time < uint64(time.Now().Unix()) {
// If RelaxedPeriod is enabled, always set the header timestamp to now (ie the time we start building it) as
// we don't know when it will be sealed
if c.config.RelaxedPeriod || header.Time < uint64(time.Now().Unix()) {
header.Time = uint64(time.Now().Unix())
}
return nil
Expand Down
9 changes: 8 additions & 1 deletion miner/scroll_worker.go
Original file line number Diff line number Diff line change
Expand Up @@ -708,7 +708,14 @@ func (w *worker) startNewPipeline(timestamp int64) {

w.currentPipelineStart = time.Now()
w.currentPipeline = pipeline.NewPipeline(w.chain, w.chain.GetVMConfig(), parentState, header, nextL1MsgIndex, w.getCCC()).WithBeforeTxHook(w.beforeTxHook)
if err := w.currentPipeline.Start(time.Unix(int64(header.Time), 0)); err != nil {

deadline := time.Unix(int64(header.Time), 0)
if w.chainConfig.Clique != nil && w.chainConfig.Clique.RelaxedPeriod {
// clique with relaxed period uses time.Now() as the header.Time, calculate the deadline
deadline = time.Unix(int64(header.Time+w.chainConfig.Clique.Period), 0)
}

if err := w.currentPipeline.Start(deadline); err != nil {
log.Error("failed to start pipeline", "err", err)
return
}
Expand Down
5 changes: 3 additions & 2 deletions params/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -602,8 +602,9 @@ func (c *EthashConfig) String() string {

// CliqueConfig is the consensus engine configs for proof-of-authority based sealing.
type CliqueConfig struct {
Period uint64 `json:"period"` // Number of seconds between blocks to enforce
Epoch uint64 `json:"epoch"` // Epoch length to reset votes and checkpoint
Period uint64 `json:"period"` // Number of seconds between blocks to enforce
Epoch uint64 `json:"epoch"` // Epoch length to reset votes and checkpoint
RelaxedPeriod bool `json:"relaxed_period"` // Relaxes the period to be just an upper bound
}

// String implements the stringer interface, returning the consensus engine details.
Expand Down
2 changes: 1 addition & 1 deletion params/version.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import (
const (
VersionMajor = 5 // Major version component of the current release
VersionMinor = 3 // Minor version component of the current release
VersionPatch = 18 // Patch version component of the current release
VersionPatch = 19 // Patch version component of the current release
VersionMeta = "mainnet" // Version metadata to append to the version string
)

Expand Down

0 comments on commit dd96cec

Please sign in to comment.