code: def validate_header(cls,
                          header: BlockHeader,
                          parent_header: BlockHeader,
                          check_seal: bool = True) -> None:
          
          if parent_header is None:
              # to validate genesis header, check if it equals canonical header at block number 0
              raise ValidationError("Must have access to parent header to validate current header")
          else:
              validate_length_lte(header.extra_data, 32, title="BlockHeader.extra_data")
  
              validate_gas_limit(header.gas_limit, parent_header.gas_limit)
  
              if header.block_number != parent_header.block_number + 1:
                  raise ValidationError(
                      "Blocks must be numbered consecutively. Block number #{} has parent #{}".format(
                          header.block_number,
                          parent_header.block_number,
                      )
                  )
  
              # timestamp
              if header.timestamp <= parent_header.timestamp:
                  raise ValidationError(
                      "timestamp must be strictly later than parent, but is {} seconds before.\n"
                      "- child  : {}\n"
                      "- parent : {}. ".format(
                          parent_header.timestamp - header.timestamp,
                          header.timestamp,
                          parent_header.timestamp,
                      )
                  )
  
              if check_seal:
                  cls.validate_seal(header)
docs: :raise eth.exceptions.ValidationError: if the header is not valid