@ -75,9 +75,11 @@ func New(ethone consensus.Engine) *Beacon {
// isPostMerge reports whether the given block number is assumed to be post-merge.
// Here we check the MergeNetsplitBlock to allow configuring networks with a PoW or
// PoA chain for unit testing purposes.
func isPostMerge ( config * params . ChainConfig , block uint64 ) bool {
func isPostMerge ( config * params . ChainConfig , blockNum uint64 , timestamp uint64 ) bool {
mergedAtGenesis := config . TerminalTotalDifficulty != nil && config . TerminalTotalDifficulty . Sign ( ) == 0
return mergedAtGenesis || config . MergeNetsplitBlock != nil && block >= config . MergeNetsplitBlock . Uint64 ( )
return mergedAtGenesis ||
config . MergeNetsplitBlock != nil && blockNum >= config . MergeNetsplitBlock . Uint64 ( ) ||
config . ShanghaiTime != nil && timestamp >= * config . ShanghaiTime
}
// Author implements consensus.Engine, returning the verified author of the block.
@ -327,7 +329,7 @@ func (beacon *Beacon) verifyHeaders(chain consensus.ChainHeaderReader, headers [
// Prepare implements consensus.Engine, initializing the difficulty field of a
// header to conform to the beacon protocol. The changes are done inline.
func ( beacon * Beacon ) Prepare ( chain consensus . ChainHeaderReader , header * types . Header ) error {
if ! isPostMerge ( chain . Config ( ) , header . Number . Uint64 ( ) ) {
if ! isPostMerge ( chain . Config ( ) , header . Number . Uint64 ( ) , header . Time ) {
return beacon . ethone . Prepare ( chain , header )
}
header . Difficulty = beaconDifficulty
@ -437,7 +439,7 @@ func (beacon *Beacon) SealHash(header *types.Header) common.Hash {
// the difficulty that a new block should have when created at time
// given the parent block's time and difficulty.
func ( beacon * Beacon ) CalcDifficulty ( chain consensus . ChainHeaderReader , time uint64 , parent * types . Header ) * big . Int {
if ! isPostMerge ( chain . Config ( ) , parent . Number . Uint64 ( ) + 1 ) {
if ! isPostMerge ( chain . Config ( ) , parent . Number . Uint64 ( ) + 1 , time ) {
return beacon . ethone . CalcDifficulty ( chain , time , parent )
}
return beaconDifficulty