async getTxs() {
    const addr = await this.getOrGenerateAddress();
    let txs = await this._listtransactions();
    txs = txs.result;
    let result = [];
    for (let tx of txs) {
      if (tx.confirmations >= 3 && tx.address === addr && tx.category === 'receive') {
        tx.type = 'bitcoind_tx';
        result.push(tx);
      }
    }

    let range = await this._redis.lrange('txs_for_' + this._userid, 0, -1);
    for (let invoice of range) {
      invoice = JSON.parse(invoice);
      invoice.type = 'paid_invoice';

      // for internal invoices it might not have properties `payment_route`  and `decoded`...
      if (invoice.payment_route) {
        invoice.fee = +invoice.payment_route.total_fees;
        invoice.value = +invoice.payment_route.total_fees + +invoice.payment_route.total_amt;
        if (invoice.payment_route.total_amt_msat && invoice.payment_route.total_amt_msat / 1000 !== +invoice.payment_route.total_amt) {
          // okay, we have to account for MSAT
          invoice.value =
            +invoice.payment_route.total_fees +
            Math.max(parseInt(invoice.payment_route.total_amt_msat / 1000), +invoice.payment_route.total_amt) +
            1; // extra sat to cover for msats, as external layer (clients) dont have that resolution
        }
      } else {
        invoice.fee = 0;
      }
      if (invoice.decoded) {
        invoice.timestamp = invoice.decoded.timestamp;
        invoice.memo = invoice.decoded.description;
      }
      if (invoice.payment_preimage) {
        invoice.payment_preimage = Buffer.from(invoice.payment_preimage, 'hex').toString('hex');
      }
      // removing unsued by client fields to reduce size
      delete invoice.payment_error;
      delete invoice.payment_route;
      delete invoice.pay_req;
      delete invoice.decoded;
      result.push(invoice);
    }

    return result;
  }
User's onchain txs that are >= 3 confs
Queries bitcoind RPC.

@returns {Promise<Array>}