<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 async def fetch(self, limit: int = None) -> Sequence[StorageRecord]: """ Fetch next batch of search results. Raise BadSearch if search is closed, WalletState if wallet is closed. :param limit: maximum number of records to return (default value Wallet.DEFAULT_CHUNK) :return: next batch of records found """


        LOGGER.debug('StorageRecordSearch.fetch >>> limit: %s', limit)

        if not self.opened:
            LOGGER.debug('StorageRecordSearch.fetch <!< Storage record search is closed')
            raise BadSearch('Storage record search is closed')

        if not self._wallet.opened:
            LOGGER.debug('StorageRecordSearch.fetch <!< Wallet %s is closed', self._wallet.name)
            raise WalletState('Wallet {} is closed'.format(self._wallet.name))

        records = json.loads(await non_secrets.fetch_wallet_search_next_records(
            self._wallet.handle,
            self.handle,
            limit or Wallet.DEFAULT_CHUNK))['records'] or []  # at exhaustion results['records'] = None

        rv = [StorageRecord(typ=rec['type'], value=rec['value'], tags=rec['tags'], ident=rec['id']) for rec in records]
        LOGGER.debug('StorageRecordSearch.fetch <<< %s', rv)
        return rv