async _listtransactions() {
    let response = _listtransactions_cache;
    if (response) {
      if (+new Date() > _listtransactions_cache_expiry_ts) {
        // invalidate cache
        response = _listtransactions_cache = false;
      } else {
        try {
          return JSON.parse(response);
        } catch (_) {
          // nop
        }
      }
    }

    try {
      let ret = { result: [] };
      if (config.bitcoind) {
        let txs = await this._bitcoindrpc.request('listtransactions', ['*', 100500, 0, true]);
        // now, compacting response a bit
        for (const tx of txs.result) {
          ret.result.push({
            category: tx.category,
            amount: tx.amount,
            confirmations: tx.confirmations,
            address: tx.address,
            time: tx.blocktime || tx.time,
          });
        }
      } else {
        let txs = await this._getChainTransactions();
        ret.result.push(...txs);
      }
      _listtransactions_cache = JSON.stringify(ret);
      _listtransactions_cache_expiry_ts = +new Date() + 5 * 60 * 1000; // 5 min
      this._redis.set('listtransactions', _listtransactions_cache);
      return ret;
    } catch (error) {
      console.warn('listtransactions error:', error);
      let _listtransactions_cache = await this._redis.get('listtransactions');
      if (!_listtransactions_cache) return { result: [] };
      return JSON.parse(_listtransactions_cache);
    }
  }
Simple caching for this._bitcoindrpc.request('listtransactions', ['*', 100500, 0, true]);
since its too much to fetch from bitcoind every time

@returns {Promise<*>}
@private