def validate_seal(self, header: BlockHeaderAPI) -> None: try: self._consensus.validate_seal(header) except ValidationError as exc: self.cls_logger.debug( "Failed to validate seal on header: %r. Error: %s", header.as_dict(), exc, ) raise
def validate_header(cls, header: BlockHeaderAPI, parent_header: BlockHeaderAPI, check_seal: bool = True) -> None: """ :raise eth.exceptions.ValidationError: if the header is not valid """ 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: try: cls.validate_seal(header) except ValidationError: cls.cls_logger.warning( "Failed to validate header proof of work on header: %r", header.as_dict()) raise
def validate_header(self, header: BlockHeaderAPI, parent_header: BlockHeaderAPI, 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, self.extra_data_max_bytes, 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. " f"Block number #{header.block_number} " f"has parent #{parent_header.block_number}" ) # timestamp if header.timestamp <= parent_header.timestamp: raise ValidationError( "timestamp must be strictly later than parent, " f"but is {parent_header.timestamp - header.timestamp} seconds before.\n" f"- child : {header.timestamp}\n" f"- parent : {parent_header.timestamp}. " ) if check_seal: try: self.validate_seal(header) except ValidationError as exc: self.cls_logger.warning( "Failed to validate seal on header: %r. Error: %s", header.as_dict(), exc, ) raise