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))
def get_vm_class_for_block_number(self, block_number): """ Return the vm class for the given block number. """ validate_block_number(block_number) for n in reversed(self.vms_by_range.keys()): if block_number >= n: return self.vms_by_range[n] else: raise VMNotFound("No vm available for block #{0}".format(block_number))
def get_vm_class_for_block_number(cls, block_number: BlockNumber) -> Type['BaseVM']: """ Returns the VM class for the given block number. """ 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))
def get_vm_class_for_block_number(self, block_number): """ Returns the VM class for the given block number. """ validate_block_number(block_number) for n in reversed(self.vms_by_range.keys()): if block_number >= n: return self.vms_by_range[n] else: raise VMNotFound("No vm available for block #{0}".format(block_number))
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))
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)
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)
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)