def METHOD_NAME(self, starting_block_num: int):
    previous_block = self.block_storage.get_block(v=starting_block_num)
    block = self.block_storage.get_next_block(v=starting_block_num)
    while block is not None:
        block_num = block.get('number')
        # Validate current block signatures and proofs
        self.validate_block(block=block)
        self.validate_previous_hash(block=block, previous_block=previous_block)
        self.validate_consensus(block=block)
        self.save_member_history(block=block)
        self.set_validation_height(block_num=block_num)
        # Validate new block's previous hash
        next_block = self.block_storage.get_next_block(v=int(block_num))
        if next_block is not None:
            next_block_previous_hash = next_block.get('previous')
            assert block.get('hash') == next_block_previous_hash, f'BLOCK CHAIN BROKEN: {next_block.get("number")} has bad previous hash.'
        previous_block = block
        block = next_block