diff --git a/src/main/java/org/qortal/settings/Settings.java b/src/main/java/org/qortal/settings/Settings.java index 7ed761cd..058a7590 100644 --- a/src/main/java/org/qortal/settings/Settings.java +++ b/src/main/java/org/qortal/settings/Settings.java @@ -67,7 +67,7 @@ public class Settings { // Specific to this node private boolean wipeUnconfirmedOnStart = false; /** Maximum number of unconfirmed transactions allowed per account */ - private int maxUnconfirmedPerAccount = 100; + private int maxUnconfirmedPerAccount = 25; /** Max milliseconds into future for accepting new, unconfirmed transactions */ private int maxTransactionTimestampFuture = 24 * 60 * 60 * 1000; // milliseconds /** Whether we check, fetch and install auto-updates */ diff --git a/src/main/java/org/qortal/transaction/Transaction.java b/src/main/java/org/qortal/transaction/Transaction.java index 047b3cc6..715efa48 100644 --- a/src/main/java/org/qortal/transaction/Transaction.java +++ b/src/main/java/org/qortal/transaction/Transaction.java @@ -8,6 +8,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.concurrent.locks.ReentrantLock; +import java.util.function.Predicate; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -578,16 +579,16 @@ public abstract class Transaction { private int countUnconfirmedByCreator(PublicKeyAccount creator) throws DataException { List unconfirmedTransactions = repository.getTransactionRepository().getUnconfirmedTransactions(); - int count = 0; - for (TransactionData unconfirmedTransactionData : unconfirmedTransactions) { - Transaction transaction = Transaction.fromData(repository, unconfirmedTransactionData); - PublicKeyAccount otherCreator = transaction.getCreator(); + // We exclude CHAT transactions as they never get included into blocks and + // have spam/DoS prevention by requiring proof of work + Predicate hasSameCreatorButNotChat = transactionData -> { + if (transactionData.getType() == TransactionType.CHAT) + return false; - if (Arrays.equals(creator.getPublicKey(), otherCreator.getPublicKey())) - ++count; - } + return Arrays.equals(creator.getPublicKey(), transactionData.getCreatorPublicKey()); + }; - return count; + return (int) unconfirmedTransactions.stream().filter(hasSameCreatorButNotChat).count(); } /**