diff --git a/src/main/java/org/qortal/controller/TransactionImporter.java b/src/main/java/org/qortal/controller/TransactionImporter.java index fa35cbbe..6c846f3b 100644 --- a/src/main/java/org/qortal/controller/TransactionImporter.java +++ b/src/main/java/org/qortal/controller/TransactionImporter.java @@ -218,12 +218,6 @@ public class TransactionImporter extends Thread { LOGGER.debug("Finished validating signatures in incoming transactions queue (valid this round: {}, total pending import: {})...", validatedCount, sigValidTransactions.size()); } - if (!newlyValidSignatures.isEmpty()) { - LOGGER.debug("Broadcasting {} newly valid signatures ahead of import", newlyValidSignatures.size()); - Message newTransactionSignatureMessage = new TransactionSignaturesMessage(newlyValidSignatures); - Network.getInstance().broadcast(broadcastPeer -> newTransactionSignatureMessage); - } - } catch (DataException e) { LOGGER.error("Repository issue while processing incoming transactions", e); } @@ -263,6 +257,9 @@ public class TransactionImporter extends Thread { unconfirmedTransactions.removeIf(t -> t.getType() == Transaction.TransactionType.CHAT); unconfirmedTransactionsCache = unconfirmedTransactions; + // A list of signatures were imported in this round + List newlyImportedSignatures = new ArrayList<>(); + // Import transactions with valid signatures try { for (int i = 0; i < sigValidTransactions.size(); ++i) { @@ -300,6 +297,10 @@ public class TransactionImporter extends Thread { if (transactionData.getType() != Transaction.TransactionType.CHAT && unconfirmedTransactionsCache != null) { unconfirmedTransactionsCache.add(transactionData); } + + // Signature imported in this round + newlyImportedSignatures.add(transactionData.getSignature()); + break; } @@ -328,6 +329,12 @@ public class TransactionImporter extends Thread { // Transaction has been processed, even if only to reject it removeIncomingTransaction(transactionData.getSignature()); } + + if (!newlyImportedSignatures.isEmpty()) { + LOGGER.debug("Broadcasting {} newly imported signatures", newlyImportedSignatures.size()); + Message newTransactionSignatureMessage = new TransactionSignaturesMessage(newlyImportedSignatures); + Network.getInstance().broadcast(broadcastPeer -> newTransactionSignatureMessage); + } } finally { LOGGER.debug("Finished importing {} incoming transaction{}", processedCount, (processedCount == 1 ? "" : "s")); blockchainLock.unlock();