def import_block(self, block: BaseBlock, perform_validation: bool = True) -> BaseBlock: """ Imports a complete block. """ try: parent_header = self.get_block_header_by_hash( block.header.parent_hash) except HeaderNotFound: raise ValidationError( "Attempt to import block #{}. Cannot import block {} before importing " "its parent block at {}".format( block.number, block.hash, block.header.parent_hash, )) base_header_for_import = self.create_header_from_parent(parent_header) imported_block = self.get_vm(base_header_for_import).import_block( block) # Validate the imported block. if perform_validation: ensure_imported_block_unchanged(imported_block, block) self.validate_block(imported_block) self.chaindb.persist_block(imported_block) self.logger.debug( 'IMPORTED_BLOCK: number %s | hash %s', imported_block.number, encode_hex(imported_block.hash), ) return imported_block
def import_block(self, block, perform_validation=True): """ Imports a complete block. """ if block.number > self.header.block_number: raise ValidationError( "Attempt to import block #{0}. Cannot import block with number " "greater than current block #{1}.".format( block.number, self.header.block_number, ) ) parent_chain = self.get_chain_at_block_parent(block) imported_block = parent_chain.get_vm().import_block(block) # Validate the imported block. if perform_validation: ensure_imported_block_unchanged(imported_block, block) self.validate_block(imported_block) self.chaindb.persist_block(imported_block) self.header = self.create_header_from_parent(self.get_canonical_head()) self.logger.debug( 'IMPORTED_BLOCK: number %s | hash %s', imported_block.number, encode_hex(imported_block.hash), ) return imported_block
def import_block(self, block, perform_validation=True): """ Imports a complete block. """ if block.number > self.header.block_number: raise ValidationError( "Attempt to import block #{0}. Cannot import block with number " "greater than current block #{1}.".format( block.number, self.header.block_number, ) ) parent_chain = self.get_chain_at_block_parent(block) imported_block = parent_chain.get_vm().import_block(block) # Validate the imported block. if perform_validation: ensure_imported_block_unchanged(imported_block, block) self.validate_block(imported_block) self.chaindb.persist_block_to_db(imported_block) self.header = self.create_header_from_parent(self.get_canonical_head()) self.logger.debug( 'IMPORTED_BLOCK: number %s | hash %s', imported_block.number, encode_hex(imported_block.hash), ) return imported_block