forked from Qortal/qortal
Speed up BlockMinter by filtering out 'unconfirmable' transaction types like CHAT & PRESENCE
This commit is contained in:
parent
33a8f311e5
commit
c592051a80
@ -1,5 +1,6 @@
|
|||||||
package org.qortal.repository;
|
package org.qortal.repository;
|
||||||
|
|
||||||
|
import java.util.EnumSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@ -251,6 +252,14 @@ public interface TransactionRepository {
|
|||||||
*/
|
*/
|
||||||
public List<TransactionData> getUnconfirmedTransactions(TransactionType txType, byte[] creatorPublicKey) throws DataException;
|
public List<TransactionData> getUnconfirmedTransactions(TransactionType txType, byte[] creatorPublicKey) throws DataException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns list of unconfirmed transactions excluding specified type(s).
|
||||||
|
*
|
||||||
|
* @return list of transactions, or empty if none.
|
||||||
|
* @throws DataException
|
||||||
|
*/
|
||||||
|
public List<TransactionData> getUnconfirmedTransactions(EnumSet<TransactionType> excludedTxTypes) throws DataException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove transaction from unconfirmed transactions pile.
|
* Remove transaction from unconfirmed transactions pile.
|
||||||
*
|
*
|
||||||
|
@ -9,6 +9,7 @@ import java.sql.ResultSet;
|
|||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.EnumMap;
|
import java.util.EnumMap;
|
||||||
|
import java.util.EnumSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@ -1181,6 +1182,51 @@ public class HSQLDBTransactionRepository implements TransactionRepository {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<TransactionData> getUnconfirmedTransactions(EnumSet<TransactionType> excludedTxTypes) throws DataException {
|
||||||
|
StringBuilder sql = new StringBuilder(1024);
|
||||||
|
sql.append("SELECT signature FROM UnconfirmedTransactions ");
|
||||||
|
sql.append("JOIN Transactions USING (signature) ");
|
||||||
|
sql.append("WHERE type NOT IN (");
|
||||||
|
|
||||||
|
boolean firstTxType = true;
|
||||||
|
for (TransactionType txType : excludedTxTypes) {
|
||||||
|
if (firstTxType)
|
||||||
|
firstTxType = false;
|
||||||
|
else
|
||||||
|
sql.append(", ");
|
||||||
|
|
||||||
|
sql.append(txType.value);
|
||||||
|
}
|
||||||
|
|
||||||
|
sql.append(")");
|
||||||
|
sql.append("ORDER BY created_when, signature");
|
||||||
|
|
||||||
|
List<TransactionData> transactions = new ArrayList<>();
|
||||||
|
|
||||||
|
// Find transactions with no corresponding row in BlockTransactions
|
||||||
|
try (ResultSet resultSet = this.repository.checkedExecute(sql.toString())) {
|
||||||
|
if (resultSet == null)
|
||||||
|
return transactions;
|
||||||
|
|
||||||
|
do {
|
||||||
|
byte[] signature = resultSet.getBytes(1);
|
||||||
|
|
||||||
|
TransactionData transactionData = this.fromSignature(signature);
|
||||||
|
|
||||||
|
if (transactionData == null)
|
||||||
|
// Something inconsistent with the repository
|
||||||
|
throw new DataException(String.format("Unable to fetch unconfirmed transaction %s from repository?", Base58.encode(signature)));
|
||||||
|
|
||||||
|
transactions.add(transactionData);
|
||||||
|
} while (resultSet.next());
|
||||||
|
|
||||||
|
return transactions;
|
||||||
|
} catch (SQLException | DataException e) {
|
||||||
|
throw new DataException("Unable to fetch unconfirmed transactions from repository", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void confirmTransaction(byte[] signature) throws DataException {
|
public void confirmTransaction(byte[] signature) throws DataException {
|
||||||
try {
|
try {
|
||||||
|
@ -4,6 +4,7 @@ import java.math.BigInteger;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
|
import java.util.EnumSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -605,7 +606,8 @@ public abstract class Transaction {
|
|||||||
public static List<TransactionData> getUnconfirmedTransactions(Repository repository) throws DataException {
|
public static List<TransactionData> getUnconfirmedTransactions(Repository repository) throws DataException {
|
||||||
BlockData latestBlockData = repository.getBlockRepository().getLastBlock();
|
BlockData latestBlockData = repository.getBlockRepository().getLastBlock();
|
||||||
|
|
||||||
List<TransactionData> unconfirmedTransactions = repository.getTransactionRepository().getUnconfirmedTransactions();
|
EnumSet<TransactionType> excludedTxTypes = EnumSet.of(TransactionType.CHAT, TransactionType.PRESENCE);
|
||||||
|
List<TransactionData> unconfirmedTransactions = repository.getTransactionRepository().getUnconfirmedTransactions(excludedTxTypes);
|
||||||
|
|
||||||
unconfirmedTransactions.sort(getDataComparator());
|
unconfirmedTransactions.sort(getDataComparator());
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user