From b7bcd8da7da9f07eb4925864821cf11ca7b36a3d Mon Sep 17 00:00:00 2001 From: CalDescent Date: Sat, 13 Nov 2021 10:29:01 +0000 Subject: [PATCH] Prevent arbitrary data transactions being created unless the network supports it (i.e. the hard fork has taken place). --- .../arbitrary/ArbitraryDataTransactionBuilder.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/qortal/arbitrary/ArbitraryDataTransactionBuilder.java b/src/main/java/org/qortal/arbitrary/ArbitraryDataTransactionBuilder.java index 584bfab5..383f35cd 100644 --- a/src/main/java/org/qortal/arbitrary/ArbitraryDataTransactionBuilder.java +++ b/src/main/java/org/qortal/arbitrary/ArbitraryDataTransactionBuilder.java @@ -31,6 +31,9 @@ public class ArbitraryDataTransactionBuilder { private static final Logger LOGGER = LogManager.getLogger(ArbitraryDataTransactionBuilder.class); + // Min transaction version required + private static final int MIN_TRANSACTION_VERSION = 5; + // Maximum number of PATCH layers allowed private static final int MAX_LAYERS = 10; // Maximum size difference (out of 1) allowed for PATCH transactions @@ -132,6 +135,13 @@ public class ArbitraryDataTransactionBuilder { private void createTransaction() throws DataException { ArbitraryDataFile arbitraryDataFile = null; try (final Repository repository = RepositoryManager.getRepository()) { + Long now = NTP.getTime(); + + // Ensure that this chain supports transactions necessary for complex arbitrary data + int transactionVersion = Transaction.getVersionByTimestamp(now); + if (transactionVersion < MIN_TRANSACTION_VERSION) { + throw new DataException(String.format("Transaction version unsupported on this blockchain.")); + } if (publicKey58 == null || path == null) { throw new DataException("Missing public key or path"); @@ -172,7 +182,7 @@ public class ArbitraryDataTransactionBuilder { throw new DataException("Unable to calculate file digest"); } - final BaseTransactionData baseTransactionData = new BaseTransactionData(NTP.getTime(), Group.NO_GROUP, + final BaseTransactionData baseTransactionData = new BaseTransactionData(now, Group.NO_GROUP, lastReference, creatorPublicKey, BlockChain.getInstance().getUnitFee(), null); final int size = (int) arbitraryDataFile.size(); final int version = 5;