diff --git a/src/main/java/org/qortal/at/QortalATAPI.java b/src/main/java/org/qortal/at/QortalATAPI.java index 582b44e2..6a379d59 100644 --- a/src/main/java/org/qortal/at/QortalATAPI.java +++ b/src/main/java/org/qortal/at/QortalATAPI.java @@ -146,7 +146,11 @@ public class QortalATAPI extends API { String atAddress = this.atData.getATAddress(); int height = timestamp.blockHeight; - int sequence = timestamp.transactionSequence + 1; + int sequence = timestamp.transactionSequence; + + if (state.getCurrentBlockHeight() < BlockChain.getInstance().getAtFindNextTransactionFixHeight()) + // Off-by-one bug still in effect + sequence += 1; ATRepository.NextTransactionInfo nextTransactionInfo; try { diff --git a/src/main/java/org/qortal/block/BlockChain.java b/src/main/java/org/qortal/block/BlockChain.java index 744d1307..ad9140e3 100644 --- a/src/main/java/org/qortal/block/BlockChain.java +++ b/src/main/java/org/qortal/block/BlockChain.java @@ -70,6 +70,7 @@ public class BlockChain { private GenesisBlock.GenesisInfo genesisInfo; public enum FeatureTrigger { + atFindNextTransactionFix; } /** Map of which blockchain features are enabled when (height/timestamp) */ @@ -371,6 +372,10 @@ public class BlockChain { // Convenience methods for specific blockchain feature triggers + public int getAtFindNextTransactionFixHeight() { + return this.featureTriggers.get(FeatureTrigger.atFindNextTransactionFix.name()).intValue(); + } + // More complex getters for aspects that change by height or timestamp public long getRewardAtHeight(int ourHeight) { diff --git a/src/main/resources/blockchain.json b/src/main/resources/blockchain.json index b94b291b..5b9a6202 100644 --- a/src/main/resources/blockchain.json +++ b/src/main/resources/blockchain.json @@ -48,6 +48,7 @@ "minutesPerBlock": 1 }, "featureTriggers": { + "atFindNextTransactionFix": 275000 }, "genesisInfo": { "version": 4, diff --git a/src/test/java/org/qortal/test/at/GetNextTransactionTests.java b/src/test/java/org/qortal/test/at/GetNextTransactionTests.java index 8bbce250..c2eb9ede 100644 --- a/src/test/java/org/qortal/test/at/GetNextTransactionTests.java +++ b/src/test/java/org/qortal/test/at/GetNextTransactionTests.java @@ -77,16 +77,24 @@ public class GetNextTransactionTests extends Common { BlockUtils.mintBlock(repository); assertTimestamp(repository, atAddress, transaction); - // Mint a few blocks, then send non-AT message, followed by AT message + // Mint a few blocks, then send non-AT message, followed by two AT messages (in same block) for (int i = 0; i < 5; ++i) BlockUtils.mintBlock(repository); + sendMessage(repository, deployer, data, deployer.getAddress()); - transaction = sendMessage(repository, deployer, data, atAddress); + + Transaction transaction1 = sendMessage(repository, deployer, data, atAddress); + Transaction transaction2 = sendMessage(repository, deployer, data, atAddress); + BlockUtils.mintBlock(repository); - // Confirm AT finds message + // Confirm AT finds first message BlockUtils.mintBlock(repository); - assertTimestamp(repository, atAddress, transaction); + assertTimestamp(repository, atAddress, transaction1); + + // Confirm AT finds second message + BlockUtils.mintBlock(repository); + assertTimestamp(repository, atAddress, transaction2); } }