Browse Source

Change Transaction.countUnconfirmedByCreator() to disregard CHAT transactions.

This is because CHAT transactions have intrinsic anti-spam/DoS prevention
by requiring proof of work.
pull/67/head
catbref 4 years ago
parent
commit
e9f29767c8
  1. 2
      src/main/java/org/qortal/settings/Settings.java
  2. 17
      src/main/java/org/qortal/transaction/Transaction.java

2
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 */

17
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<TransactionData> 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<TransactionData> 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();
}
/**

Loading…
Cancel
Save