private void checkDeliveringTime()
     throws CantExecuteDatabaseOperationException, CantExecuteQueryException,
         UnexpectedResultReturnedFromDatabaseException, CantGetCryptoTransactionException,
         CantGetTransactionsException, CantLoadWalletException, CantRegisterCreditException,
         CantRegisterDebitException, CantGetAssetIssuerActorsException,
         CantSendTransactionNewStatusNotificationException, CantGetAssetUserActorsException,
         CantAssetUserActorNotFoundException, RecordsNotFoundException,
         CantCheckAssetUserRedemptionProgressException, InvalidParameterException {
   for (DeliverRecord record : userRedemptionDao.getDeliveringRecords()) {
     DistributionStatus currentStatus =
         userRedemptionDao.getDistributionStatusForGenesisTx(record.getGenesisTransaction());
     if (new Date().after(record.getTimeOut())
         && currentStatus == DistributionStatus.DELIVERING) {
       try {
         bitcoinNetworkManager.cancelBroadcast(
             record.getDigitalAssetMetadata().getLastTransactionHash());
       } catch (CantCancellBroadcastTransactionException e) {
         e.printStackTrace();
       }
       record.getDigitalAssetMetadata().removeLastTransaction();
       digitalAssetUserRedemptionVault.updateWalletBalance(
           record.getDigitalAssetMetadata(),
           AssetVerification.foundCryptoTransaction(
               bitcoinNetworkManager, record.getDigitalAssetMetadata()),
           BalanceType.AVAILABLE,
           TransactionType.CREDIT,
           DAPTransactionType.RECEPTION,
           record.getRedeemPointPublicKey());
       userRedemptionDao.cancelDelivering(record.getTransactionId());
     }
   }
 }
    /**
     * This method check the pending transactions registered in database and take actions according
     * to CryptoStatus
     *
     * @throws CantExecuteQueryException
     * @throws CantCheckAssetUserRedemptionProgressException
     * @throws CantGetCryptoTransactionException
     * @throws UnexpectedResultReturnedFromDatabaseException
     * @throws CantGetDigitalAssetFromLocalStorageException
     * @throws CantDeliverDigitalAssetToAssetWalletException
     */
    private void checkPendingTransactions()
        throws CantExecuteQueryException, CantCheckAssetUserRedemptionProgressException,
            CantGetCryptoTransactionException, UnexpectedResultReturnedFromDatabaseException,
            CantGetDigitalAssetFromLocalStorageException,
            CantDeliverDigitalAssetToAssetWalletException, CantGetTransactionCryptoStatusException,
            RecordsNotFoundException, CantGetBroadcastStatusException,
            CantCancellBroadcastTransactionException, CantBroadcastTransactionException,
            CantGetTransactionsException, CantGetAssetUserActorsException,
            CantRegisterDebitException, CantAssetUserActorNotFoundException,
            CantLoadWalletException, CantGetAssetIssuerActorsException, CantRegisterCreditException,
            CantCreateDigitalAssetFileException {
      for (DeliverRecord record : userRedemptionDao.getDeliveredRecords()) {
        switch (bitcoinNetworkManager.getCryptoStatus(record.getGenesisTransactionSent())) {
          case ON_BLOCKCHAIN:
          case IRREVERSIBLE:
            CryptoTransaction transactionOnBlockChain =
                AssetVerification.getCryptoTransactionFromCryptoNetworkByCryptoStatus(
                    bitcoinNetworkManager,
                    record.getDigitalAssetMetadata(),
                    CryptoStatus.ON_BLOCKCHAIN);
            if (transactionOnBlockChain == null) break; // not yet...
            DigitalAssetMetadata digitalAssetMetadata =
                digitalAssetUserRedemptionVault.updateMetadataTransactionChain(
                    record.getGenesisTransaction(), transactionOnBlockChain);
            digitalAssetUserRedemptionVault.setDigitalAssetMetadataAssetIssuerWalletTransaction(
                transactionOnBlockChain,
                digitalAssetMetadata,
                AssetBalanceType.BOOK,
                TransactionType.DEBIT,
                DAPTransactionType.RECEPTION,
                record.getRedeemPointPublicKey());
            userRedemptionDao.updateDeliveringStatusForTxId(
                record.getTransactionId(), DistributionStatus.DISTRIBUTION_FINISHED);
            break;
          case REVERSED_ON_BLOCKCHAIN:
            userRedemptionDao.updateDeliveringStatusForTxId(
                record.getTransactionId(), DistributionStatus.DISTRIBUTION_FINISHED);
            break;
          case REVERSED_ON_CRYPTO_NETWORK:
            userRedemptionDao.updateDeliveringStatusForTxId(
                record.getTransactionId(), DistributionStatus.DISTRIBUTION_FINISHED);
            break;
        }
      }

      for (DeliverRecord record : userRedemptionDao.getSendingCryptoRecords()) {
        BroadcastStatus status =
            bitcoinNetworkManager.getBroadcastStatus(record.getGenesisTransactionSent());
        switch (status.getStatus()) {
          case WITH_ERROR:
            System.out.println("VAMM: USER REDEMPTION BROADCAST WITH ERROR");
            if (record.getAttemptNumber()
                < UserRedemptionDigitalAssetTransactionPluginRoot.BROADCASTING_MAX_ATTEMPT_NUMBER) {
              System.out.println("VAMM: ATTEMPT NUMBER: " + record.getAttemptNumber());
              userRedemptionDao.newAttempt(record.getTransactionId());
              bitcoinNetworkManager.broadcastTransaction(record.getGenesisTransactionSent());
            } else {
              System.out.println("VAMM: MAX NUMBER OF ATTEMPT REACHED, CANCELLING.");
              bitcoinNetworkManager.cancelBroadcast(record.getGenesisTransactionSent());
            }
            break;
          case BROADCASTED:
            userRedemptionDao.updateDeliveringStatusForTxId(
                record.getTransactionId(), DistributionStatus.DELIVERED);
            break;
          case BROADCASTING:
            break;
          case CANCELLED:
            digitalAssetUserRedemptionVault.updateWalletBalance(
                record.getDigitalAssetMetadata(),
                AssetVerification.foundCryptoTransaction(
                    bitcoinNetworkManager, record.getDigitalAssetMetadata()),
                BalanceType.AVAILABLE,
                TransactionType.CREDIT,
                DAPTransactionType.DISTRIBUTION,
                record.getRedeemPointPublicKey());
            userRedemptionDao.failedToSendCrypto(record.getTransactionId());
            break;
        }
      }
    }