docs: public UnsignedTransaction createUnsignedTransaction(List<UnspentTransactionOutput> unspent, Address changeAddress,
           PublicKeyRing keyRing, NetworkParameters network) throws InsufficientFundsException {
        long fee = MIN_MINER_FEE;
        while (true) {
           UnsignedTransaction unsigned;
           try {
              unsigned = createUnsignedTransaction(unspent, changeAddress, fee, keyRing, network);
           } catch (InsufficientFundsException e) {
              // We did not even have enough funds to pay the minimum fee
              throw e;
           }
           int txSize = estimateTransacrionSize(unsigned);
           // fee is based on the size of the transaction, we have to pay for
           // every 1000 bytes
           long requiredFee = (1 + (txSize / 1000)) * MIN_MINER_FEE;
           if (fee >= requiredFee) {
              return unsigned;
           }
           // collect coins anew with an increased fee
           fee += MIN_MINER_FEE;
        }
     }