<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def rpc_get_account_at(self, address, block_height, **con_info):
 """ Get the account's statuses at a particular block height. Returns the sequence of history states on success """

        if not check_account_address(address):
            return {'error': 'Invalid address', 'http_status': 400}

        if not check_block(block_height):
            return {'error': 'Invalid start block', 'http_status': 400}

        # must be b58
        if is_c32_address(address):
            address = c32ToB58(address)
    
        db = get_db_state(self.working_dir)
        account_states = db.get_account_at(address, block_height)
        db.close()

        # return credit_value and debit_value as strings, so the unwitting JS developer doesn't get confused
        # as to why large balances get mysteriously converted to doubles.
        ret = [self.export_account_state(hist) for hist in account_states]
        return self.success_response({'history': ret})