@@ -587,8 +587,24 @@ func (p *Parlia) verifyHeader(chain consensus.ChainHeaderReader, header *types.H
587587 if header .WithdrawalsHash != nil {
588588 return fmt .Errorf ("invalid withdrawalsHash: have %x, expected nil" , header .WithdrawalsHash )
589589 }
590- // Verify the existence / non-existence of excessBlobGas
590+ // Verify the existence / non-existence of cancun-specific header fields
591+ if header .ParentBeaconRoot != nil {
592+ return fmt .Errorf ("invalid parentBeaconRoot, have %#x, expected nil" , header .ParentBeaconRoot )
593+ }
591594 cancun := chain .Config ().IsCancun (header .Number , header .Time )
595+ if ! cancun {
596+ switch {
597+ case header .ExcessBlobGas != nil :
598+ return fmt .Errorf ("invalid excessBlobGas: have %d, expected nil" , header .ExcessBlobGas )
599+ case header .BlobGasUsed != nil :
600+ return fmt .Errorf ("invalid blobGasUsed: have %d, expected nil" , header .BlobGasUsed )
601+ }
602+ } else {
603+ if err := eip4844 .VerifyEIP4844Header (parent , header ); err != nil {
604+ return err
605+ }
606+ }
607+
592608 if ! cancun && header .ExcessBlobGas != nil {
593609 return fmt .Errorf ("invalid excessBlobGas: have %d, expected nil" , header .ExcessBlobGas )
594610 }
@@ -975,8 +991,7 @@ func (p *Parlia) Prepare(chain consensus.ChainHeaderReader, header *types.Header
975991 }
976992
977993 header .Extra = header .Extra [:extraVanity - nextForkHashSize ]
978- genesisTime := chain .GetHeader (p .genesisHash , 0 ).Time
979- nextForkHash := forkid .NextForkHash (p .chainConfig , p .genesisHash , genesisTime , number , header .Time )
994+ nextForkHash := forkid .NextForkHash (p .chainConfig , p .genesisHash , chain .GenesisHeader ().Time , number , header .Time )
980995 header .Extra = append (header .Extra , nextForkHash [:]... )
981996
982997 if err := p .prepareValidators (header ); err != nil {
@@ -1117,8 +1132,7 @@ func (p *Parlia) Finalize(chain consensus.ChainHeaderReader, header *types.Heade
11171132 if err != nil {
11181133 return err
11191134 }
1120- genesisTime := chain .GetHeader (p .genesisHash , 0 ).Time
1121- nextForkHash := forkid .NextForkHash (p .chainConfig , p .genesisHash , genesisTime , number , header .Time )
1135+ nextForkHash := forkid .NextForkHash (p .chainConfig , p .genesisHash , chain .GenesisHeader ().Time , number , header .Time )
11221136 if ! snap .isMajorityFork (hex .EncodeToString (nextForkHash [:])) {
11231137 log .Debug ("there is a possible fork, and your client is not the majority. Please check..." , "nextForkHash" , hex .EncodeToString (nextForkHash [:]))
11241138 }
0 commit comments