mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-27 15:16:43 +00:00
fix: reuse timestamp for blocks failing CCC (#1031)
we assume that same height wont trigger multiple reorgs to be able to put an upper bound on the reorg depth. We rely on the fact that AsyncChecker executes transactions one-by-one and tells worker the safe set of transactions to include in the replacement block that wont trigger another error on the same block. If worker changes the timestamp and that causes significant changes to the execution flow of included transactions; we might have a height where multiple reorgs happen.
This commit is contained in:
parent
51082b29c5
commit
6cdcff6275
1 changed files with 7 additions and 0 deletions
|
|
@ -440,6 +440,13 @@ func (w *worker) newWork(now time.Time, parentHash common.Hash, reorgReason erro
|
|||
Time: uint64(now.Unix()),
|
||||
}
|
||||
|
||||
if reorgReason != nil {
|
||||
// if we are replacing a failing block, reuse the timestamp to make sure
|
||||
// the information we get from AsyncChecker is reliable. Changing timestamp
|
||||
// might alter execution flow of reorged transactions.
|
||||
header.Time = w.chain.GetHeaderByNumber(header.Number.Uint64()).Time
|
||||
}
|
||||
|
||||
parentState, err := w.chain.StateAt(parent.Root())
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to fetch parent state: %w", err)
|
||||
|
|
|
|||
Loading…
Reference in a new issue