def validate_chain(
            cls,
            root: BlockHeader,
            descendants: Tuple[BlockHeader, ...],
            seal_check_random_sample_rate: int = 1) -> None:
        """
        Validate that all of the descendents are valid, given that the root header is valid.

        By default, check the seal validity (Proof-of-Work on Ethereum 1.x mainnet) of all headers.
        This can be expensive. Instead, check a random sample of seals using
        seal_check_random_sample_rate.
        """

        all_indices = range(len(descendants))
        if seal_check_random_sample_rate == 1:
            indices_to_check_seal = set(all_indices)
        else:
            sample_size = len(all_indices) // seal_check_random_sample_rate
            indices_to_check_seal = set(random.sample(all_indices, sample_size))

        header_pairs = sliding_window(2, concatv([root], descendants))

        for index, (parent, child) in enumerate(header_pairs):
            if child.parent_hash != parent.hash:
                raise ValidationError(
                    "Invalid header chain; {} has parent {}, but expected {}".format(
                        child, child.parent_hash, parent.hash))
            should_check_seal = index in indices_to_check_seal
            vm_class = cls.get_vm_class_for_block_number(child.block_number)
            try:
                vm_class.validate_header(child, parent, check_seal=should_check_seal)
            except ValidationError as exc:
                raise ValidationError(
                    "%s is not a valid child of %s: %s" % (
                        child,
                        parent,
                        exc,
                    )
                ) from exc
def validate_chain ( cls , root : BlockHeader , descendants : Tuple [ BlockHeader , ... ] , seal_check_random_sample_rate : int = 1 ) -> None : all_indices = range ( len ( descendants ) ) if seal_check_random_sample_rate == 1 : indices_to_check_seal = set ( all_indices ) else : sample_size = len ( all_indices ) // seal_check_random_sample_rate indices_to_check_seal = set ( random . sample ( all_indices , sample_size ) ) header_pairs = sliding_window ( 2 , concatv ( [ root ] , descendants ) ) for index , ( parent , child ) in enumerate ( header_pairs ) : if child . parent_hash != parent . hash : raise ValidationError ( "Invalid header chain; {} has parent {}, but expected {}" . format ( child , child . parent_hash , parent . hash ) ) should_check_seal = index in indices_to_check_seal vm_class = cls . get_vm_class_for_block_number ( child . block_number ) try : vm_class . validate_header ( child , parent , check_seal = should_check_seal ) except ValidationError as exc : raise ValidationError ( "%s is not a valid child of %s: %s" % ( child , parent , exc , ) ) from exc
Validate that all of the descendents are valid, given that the root header is valid.

        By default, check the seal validity (Proof-of-Work on Ethereum 1.x mainnet) of all headers.
        This can be expensive. Instead, check a random sample of seals using
        seal_check_random_sample_rate.