Introduced "historic threshold" to ARBITRARY transactions in order to save on verification times of older transactions.

This is based on the approach used for PUBLICIZE transactions.
This commit is contained in:
CalDescent 2023-01-02 16:58:50 +00:00
parent 6b45901c47
commit 98b92a5bf1

View File

@ -24,6 +24,7 @@ import org.qortal.transform.Transformer;
import org.qortal.transform.transaction.ArbitraryTransactionTransformer;
import org.qortal.transform.transaction.TransactionTransformer;
import org.qortal.utils.ArbitraryTransactionUtils;
import org.qortal.utils.NTP;
public class ArbitraryTransaction extends Transaction {
@ -34,9 +35,13 @@ public class ArbitraryTransaction extends Transaction {
public static final int MAX_DATA_SIZE = 4000;
public static final int MAX_METADATA_LENGTH = 32;
public static final int HASH_LENGTH = TransactionTransformer.SHA256_LENGTH;
public static final int POW_BUFFER_SIZE = 8 * 1024 * 1024; // bytes
public static final int MAX_IDENTIFIER_LENGTH = 64;
/** If time difference between transaction and now is greater than this then we don't verify proof-of-work. */
public static final long HISTORIC_THRESHOLD = 2 * 7 * 24 * 60 * 60 * 1000L;
public static final int POW_BUFFER_SIZE = 8 * 1024 * 1024; // bytes
// Constructors
public ArbitraryTransaction(Repository repository, TransactionData transactionData) {
@ -202,10 +207,12 @@ public class ArbitraryTransaction extends Transaction {
// Clear nonce from transactionBytes
ArbitraryTransactionTransformer.clearNonce(transactionBytes);
// Check nonce
// We only need to check nonce for recent transactions due to PoW verification overhead
if (NTP.getTime() - this.arbitraryTransactionData.getTimestamp() < HISTORIC_THRESHOLD) {
int difficulty = ArbitraryDataManager.getInstance().getPowDifficulty();
return MemoryPoW.verify2(transactionBytes, POW_BUFFER_SIZE, difficulty, nonce);
}
}
return true;
}