Пример #1
0
 def _get_canonical_block_header_by_number(
         cls,
         db: BaseDB,
         block_number: BlockNumber) -> BlockHeader:
     validate_block_number(block_number)
     canonical_block_hash = cls._get_canonical_block_hash(db, block_number)
     return cls._get_block_header_by_hash(db, canonical_block_hash)
Пример #2
0
    def get_vm_class_for_block_number(cls, block_number: BlockNumber) -> Type[VirtualMachineAPI]:
        if cls.vm_configuration is None:
            raise AttributeError("Chain classes must define the VMs in vm_configuration")

        validate_block_number(block_number)
        for start_block, vm_class in reversed(cls.vm_configuration):
            if block_number >= start_block:
                return vm_class
        else:
            raise VMNotFound(f"No vm available for block #{block_number}")
Пример #3
0
    def get_canonical_block_header_by_number(
            self, block_number: BlockNumber) -> BlockHeader:
        """
        Returns the block header with the given number in the canonical chain.

        Raises BlockNotFound if there's no block header with the given number in the
        canonical chain.
        """
        validate_block_number(block_number, title="Block Number")
        return self.get_block_header_by_hash(
            self.get_canonical_block_hash(block_number))
Пример #4
0
    def _get_canonical_block_hash(db: BaseDB, block_number: BlockNumber) -> Hash32:
        validate_block_number(block_number)
        number_to_hash_key = SchemaV1.make_block_number_to_hash_lookup_key(block_number)

        try:
            encoded_key = db[number_to_hash_key]
        except KeyError:
            raise HeaderNotFound(
                "No canonical header for block number #{0}".format(block_number)
            )
        else:
            return rlp.decode(encoded_key, sedes=rlp.sedes.binary)
Пример #5
0
    def get_vm_class_for_block_number(cls, block_number: BlockNumber) -> Type['BaseVM']:
        """
        Returns the VM class for the given block number.
        """
        if cls.vm_configuration is None:
            raise AttributeError("Chain classes must define the VMs in vm_configuration")

        validate_block_number(block_number)
        for start_block, vm_class in reversed(cls.vm_configuration):
            if block_number >= start_block:
                return vm_class
        else:
            raise VMNotFound("No vm available for block #{0}".format(block_number))
Пример #6
0
    def get_canonical_block_hash(self, block_number: BlockNumber) -> Hash32:
        """
        Returns the block hash for the canonical block at the given number.

        Raises BlockNotFound if there's no block header with the given number in the
        canonical chain.
        """
        validate_block_number(block_number, title="Block Number")
        number_to_hash_key = SchemaV1.make_block_number_to_hash_lookup_key(
            block_number)

        try:
            encoded_key = self.db[number_to_hash_key]
        except KeyError:
            raise HeaderNotFound(
                "No canonical header for block number #{0}".format(
                    block_number))
        else:
            return rlp.decode(encoded_key, sedes=rlp.sedes.binary)
Пример #7
0
def test_validate_block_number(block_number, is_valid):
    if is_valid:
        validate_block_number(block_number)
    else:
        with pytest.raises(ValidationError):
            validate_block_number(block_number)