diff --git a/.gitignore b/.gitignore index d983d858..f1053cff 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ /db* /bin/ /target/ +/qortal-backup/ /log.txt.* /arbitrary* /Qortal-BTC* diff --git a/WindowsInstaller/Qortal.aip b/WindowsInstaller/Qortal.aip index 2c181933..b7423ada 100755 --- a/WindowsInstaller/Qortal.aip +++ b/WindowsInstaller/Qortal.aip @@ -17,10 +17,10 @@ - + - + @@ -212,7 +212,7 @@ - + diff --git a/pom.xml b/pom.xml index 0bc2c495..59f0bb8c 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.qortal qortal - 1.5.2 + 1.5.3 jar true diff --git a/src/main/java/org/qortal/api/websocket/ChatMessagesWebSocket.java b/src/main/java/org/qortal/api/websocket/ChatMessagesWebSocket.java index 57ef1504..3dc2d494 100644 --- a/src/main/java/org/qortal/api/websocket/ChatMessagesWebSocket.java +++ b/src/main/java/org/qortal/api/websocket/ChatMessagesWebSocket.java @@ -115,6 +115,9 @@ public class ChatMessagesWebSocket extends ApiWebSocket { } private void onNotify(Session session, ChatTransactionData chatTransactionData, List involvingAddresses) { + if (chatTransactionData == null) + return; + // We only want direct/non-group messages where sender/recipient match our addresses String recipient = chatTransactionData.getRecipient(); if (recipient == null) diff --git a/src/main/java/org/qortal/controller/Controller.java b/src/main/java/org/qortal/controller/Controller.java index 8bf8e955..f781cd28 100644 --- a/src/main/java/org/qortal/controller/Controller.java +++ b/src/main/java/org/qortal/controller/Controller.java @@ -694,7 +694,7 @@ public class Controller extends Thread { final int peersRemoved = peersBeforeComparison - peers.size(); if (peersRemoved > 0 && peers.size() > 0) - LOGGER.info(String.format("Ignoring %d peers on inferior chains. Peers remaining: %d", peersRemoved, peers.size())); + LOGGER.debug(String.format("Ignoring %d peers on inferior chains. Peers remaining: %d", peersRemoved, peers.size())); if (peers.isEmpty()) return; @@ -703,7 +703,7 @@ public class Controller extends Thread { StringBuilder finalPeersString = new StringBuilder(); for (Peer peer : peers) finalPeersString = finalPeersString.length() > 0 ? finalPeersString.append(", ").append(peer) : finalPeersString.append(peer); - LOGGER.info(String.format("Choosing random peer from: [%s]", finalPeersString.toString())); + LOGGER.debug(String.format("Choosing random peer from: [%s]", finalPeersString.toString())); } // Pick random peer to sync with @@ -899,14 +899,19 @@ public class Controller extends Thread { List transactions = repository.getTransactionRepository().getUnconfirmedTransactions(); + int deletedCount = 0; for (TransactionData transactionData : transactions) { Transaction transaction = Transaction.fromData(repository, transactionData); if (now >= transaction.getDeadline()) { - LOGGER.info(() -> String.format("Deleting expired, unconfirmed transaction %s", Base58.encode(transactionData.getSignature()))); + LOGGER.debug(() -> String.format("Deleting expired, unconfirmed transaction %s", Base58.encode(transactionData.getSignature()))); repository.getTransactionRepository().delete(transactionData); + deletedCount++; } } + if (deletedCount > 0) { + LOGGER.info(String.format("Deleted %d expired, unconfirmed transaction%s", deletedCount, (deletedCount == 1 ? "" : "s"))); + } repository.saveChanges(); } catch (DataException e) { diff --git a/src/main/java/org/qortal/controller/Synchronizer.java b/src/main/java/org/qortal/controller/Synchronizer.java index c393232d..25d5643f 100644 --- a/src/main/java/org/qortal/controller/Synchronizer.java +++ b/src/main/java/org/qortal/controller/Synchronizer.java @@ -148,7 +148,7 @@ public class Synchronizer { if (wereNewRequestsMade) { final long totalTimeTaken = System.currentTimeMillis() - startTime; - LOGGER.info(String.format("Finished searching for common blocks with %d peer%s. Found: %d. Total time taken: %d ms", peers.size(), (peers.size() != 1 ? "s" : ""), commonBlocksFound, totalTimeTaken)); + LOGGER.debug(String.format("Finished searching for common blocks with %d peer%s. Found: %d. Total time taken: %d ms", peers.size(), (peers.size() != 1 ? "s" : ""), commonBlocksFound, totalTimeTaken)); } return SynchronizationResult.OK; diff --git a/src/main/java/org/qortal/controller/tradebot/BitcoinACCTv1TradeBot.java b/src/main/java/org/qortal/controller/tradebot/BitcoinACCTv1TradeBot.java index 802a2870..ca2e2518 100644 --- a/src/main/java/org/qortal/controller/tradebot/BitcoinACCTv1TradeBot.java +++ b/src/main/java/org/qortal/controller/tradebot/BitcoinACCTv1TradeBot.java @@ -383,15 +383,6 @@ public class BitcoinACCTv1TradeBot implements AcctTradeBot { atData = repository.getATRepository().fromATAddress(tradeBotData.getAtAddress()); if (atData == null) { LOGGER.debug(() -> String.format("Unable to fetch trade AT %s from repository", tradeBotData.getAtAddress())); - - // If it has been over 24 hours since we last updated this trade-bot entry then assume AT is never coming back - // and so wipe the trade-bot entry - if (tradeBotData.getTimestamp() + MAX_AT_CONFIRMATION_PERIOD < NTP.getTime()) { - LOGGER.info(() -> String.format("AT %s has been gone for too long - deleting trade-bot entry", tradeBotData.getAtAddress())); - repository.getCrossChainRepository().delete(tradeBotData.getTradePrivateKey()); - repository.saveChanges(); - } - return; } diff --git a/src/main/java/org/qortal/controller/tradebot/LitecoinACCTv1TradeBot.java b/src/main/java/org/qortal/controller/tradebot/LitecoinACCTv1TradeBot.java index 286cbf74..0bd2972b 100644 --- a/src/main/java/org/qortal/controller/tradebot/LitecoinACCTv1TradeBot.java +++ b/src/main/java/org/qortal/controller/tradebot/LitecoinACCTv1TradeBot.java @@ -387,15 +387,6 @@ public class LitecoinACCTv1TradeBot implements AcctTradeBot { atData = repository.getATRepository().fromATAddress(tradeBotData.getAtAddress()); if (atData == null) { LOGGER.debug(() -> String.format("Unable to fetch trade AT %s from repository", tradeBotData.getAtAddress())); - - // If it has been over 24 hours since we last updated this trade-bot entry then assume AT is never coming back - // and so wipe the trade-bot entry - if (tradeBotData.getTimestamp() + MAX_AT_CONFIRMATION_PERIOD < NTP.getTime()) { - LOGGER.info(() -> String.format("AT %s has been gone for too long - deleting trade-bot entry", tradeBotData.getAtAddress())); - repository.getCrossChainRepository().delete(tradeBotData.getTradePrivateKey()); - repository.saveChanges(); - } - return; } @@ -725,9 +716,9 @@ public class LitecoinACCTv1TradeBot implements AcctTradeBot { // Not finished yet return; - // If AT is not REDEEMED then something has gone wrong - if (crossChainTradeData.mode != AcctMode.REDEEMED) { - // Not redeemed so must be refunded/cancelled + // If AT is REFUNDED or CANCELLED then something has gone wrong + if (crossChainTradeData.mode == AcctMode.REFUNDED || crossChainTradeData.mode == AcctMode.CANCELLED) { + // Alice hasn't redeemed the QORT, so there is no point in trying to redeem the LTC TradeBot.updateTradeBotState(repository, tradeBotData, State.BOB_REFUNDED, () -> String.format("AT %s has auto-refunded - trade aborted", tradeBotData.getAtAddress()));