From 7e76a8576607704fc93d1b31c3830224eda4e89d Mon Sep 17 00:00:00 2001
From: Jun Luo <4catcode@gmail.com>
Date: Tue, 6 Aug 2024 14:33:33 +0800
Subject: [PATCH 1/3] refactor: refactor the parts in Preconditions that are
inconsistent with the specifications.
---
CHANGELOG.md | 2 ++
.../stellar/sdk/TransactionPreconditions.java | 17 +++++-----
.../stellar/sdk/FeeBumpTransactionTest.java | 2 +-
.../sdk/TransactionPreconditionsTest.java | 32 +++++++++++++++++++
.../java/org/stellar/sdk/TransactionTest.java | 28 ++++++++--------
5 files changed, 58 insertions(+), 23 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index cd262dc2c..003478490 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -57,6 +57,8 @@ As this project is pre 1.0, breaking changes may happen for minor version bumps.
- feat: optimize `RequestTimeoutException`, when a timeout occurs, if the server returns some information, you can read them.
- refactor!: mark `Asset#create(String, String, String)` as deprecated, use `Asset.createNonNativeAsset(String, String)` or `Asset.createNativeAsset()` instead.
- refactor!: remove `LiquidityPoolID`. Use `String` to represent the liquidity pool ID.
+- refactor!: `TransactionPreconditions#TransactionPreconditions(LedgerBounds, Long, BigInteger, long, List, TimeBounds)` has been removed, use `TransactionPreconditions#TransactionPreconditions(TimeBounds, LedgerBounds, Long, BigInteger, long, List)` instead.
+- refactor: Set the default value of `TransactionPreconditions.extraSigners` to `new ArrayList<>()`, it is not nullable.
## 0.44.0
### Update
diff --git a/src/main/java/org/stellar/sdk/TransactionPreconditions.java b/src/main/java/org/stellar/sdk/TransactionPreconditions.java
index 10d56e949..c1bcfdac9 100644
--- a/src/main/java/org/stellar/sdk/TransactionPreconditions.java
+++ b/src/main/java/org/stellar/sdk/TransactionPreconditions.java
@@ -1,12 +1,13 @@
package org.stellar.sdk;
import java.math.BigInteger;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import lombok.Builder;
import lombok.NonNull;
-import lombok.Singular;
import lombok.Value;
+import org.jetbrains.annotations.Nullable;
import org.stellar.sdk.xdr.Duration;
import org.stellar.sdk.xdr.Int64;
import org.stellar.sdk.xdr.PreconditionType;
@@ -29,21 +30,24 @@ public class TransactionPreconditions {
public static final long MAX_EXTRA_SIGNERS_COUNT = 2;
public static final BigInteger TIMEOUT_INFINITE = BigInteger.ZERO;
+ /** The time bounds for the transaction. */
+ @Nullable TimeBounds timeBounds;
+
/** The ledger bounds for the transaction. */
- LedgerBounds ledgerBounds;
+ @Nullable LedgerBounds ledgerBounds;
/**
* The minimum source account sequence number this transaction is valid for. if null
,
* the transaction is valid when **source account's sequence number == tx.sequence - 1**.
*/
- Long minSeqNumber; // int64
+ @Nullable Long minSeqNumber; // int64
/**
* The minimum amount of time between source account sequence time and the ledger time when this
* transaction will become valid. If the value is 0
, the transaction is unrestricted
* by the account sequence age. Cannot be negative.
*/
- @Builder.Default BigInteger minSeqAge = BigInteger.ZERO; // uint64
+ @Builder.Default @NonNull BigInteger minSeqAge = BigInteger.ZERO; // uint64
/**
* The minimum number of ledgers between source account sequence and the ledger number when this
@@ -53,10 +57,7 @@ public class TransactionPreconditions {
long minSeqLedgerGap; // uint32
/** Required extra signers. */
- @Singular @NonNull List extraSigners;
-
- /** The time bounds for the transaction. */
- TimeBounds timeBounds;
+ @Builder.Default @NonNull List extraSigners = new ArrayList<>();
/**
* Validates the preconditions.
diff --git a/src/test/java/org/stellar/sdk/FeeBumpTransactionTest.java b/src/test/java/org/stellar/sdk/FeeBumpTransactionTest.java
index 807e5bc27..d10ff3bdd 100644
--- a/src/test/java/org/stellar/sdk/FeeBumpTransactionTest.java
+++ b/src/test/java/org/stellar/sdk/FeeBumpTransactionTest.java
@@ -330,7 +330,7 @@ public void testCreateWithBaseFeeWithSorobanOp() {
account.getIncrementedSequenceNumber(),
new org.stellar.sdk.operations.Operation[] {invokeHostFunctionOperation},
null,
- new TransactionPreconditions(null, null, BigInteger.ZERO, 0, new ArrayList<>(), null),
+ new TransactionPreconditions(null, null, null, BigInteger.ZERO, 0, new ArrayList<>()),
sorobanData,
Network.TESTNET);
diff --git a/src/test/java/org/stellar/sdk/TransactionPreconditionsTest.java b/src/test/java/org/stellar/sdk/TransactionPreconditionsTest.java
index 71091fd9f..bddd11f74 100644
--- a/src/test/java/org/stellar/sdk/TransactionPreconditionsTest.java
+++ b/src/test/java/org/stellar/sdk/TransactionPreconditionsTest.java
@@ -1,6 +1,7 @@
package org.stellar.sdk;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -8,7 +9,9 @@
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.math.BigInteger;
import java.util.Arrays;
+import java.util.LinkedList;
import org.junit.Test;
import org.stellar.sdk.xdr.Duration;
import org.stellar.sdk.xdr.Int64;
@@ -60,6 +63,7 @@ public void itConvertsFromXdr() throws IOException {
assertEquals(transactionPreconditions.getLedgerBounds().getMaxLedger(), 2);
assertEquals(transactionPreconditions.getMinSeqNumber(), Long.valueOf(4));
assertEquals(transactionPreconditions.getMinSeqLedgerGap(), 0);
+ assertEquals(transactionPreconditions.getExtraSigners().size(), 0);
}
@Test
@@ -256,4 +260,32 @@ public void itChecksV2Status() {
TransactionPreconditions transactionPreconditions = TransactionPreconditions.fromXdr(xdr);
assertTrue(transactionPreconditions.hasV2());
}
+
+ @Test
+ public void testSetTimeBoundsOnly() {
+ TimeBounds timeBounds = new TimeBounds(1, 2);
+ TransactionPreconditions preconditions =
+ TransactionPreconditions.builder().timeBounds(timeBounds).build();
+ assertEquals(timeBounds, preconditions.getTimeBounds());
+ assertEquals(0, preconditions.getExtraSigners().size());
+ assertEquals(BigInteger.ZERO, preconditions.getMinSeqAge());
+ assertNull(preconditions.getLedgerBounds());
+ assertNull(preconditions.getMinSeqNumber());
+ assertEquals(0, preconditions.getMinSeqLedgerGap());
+ assertFalse(preconditions.hasV2());
+ }
+
+ @Test
+ public void testEquals() {
+ TimeBounds timeBounds = new TimeBounds(1, 2);
+ TransactionPreconditions preconditions0 =
+ TransactionPreconditions.builder().timeBounds(timeBounds).build();
+ TransactionPreconditions preconditions1 =
+ TransactionPreconditions.fromXdr(preconditions0.toXdr());
+ assertEquals(preconditions0, preconditions1);
+ TransactionPreconditions preconditions2 =
+ new TransactionPreconditions(
+ timeBounds, null, null, BigInteger.ZERO, 0, new LinkedList<>());
+ assertEquals(preconditions0, preconditions2);
+ }
}
diff --git a/src/test/java/org/stellar/sdk/TransactionTest.java b/src/test/java/org/stellar/sdk/TransactionTest.java
index 8aff4c7ff..23adfefd1 100644
--- a/src/test/java/org/stellar/sdk/TransactionTest.java
+++ b/src/test/java/org/stellar/sdk/TransactionTest.java
@@ -72,7 +72,7 @@ public void testParseV0Transaction() throws FormatException, IOException {
},
null,
new TransactionPreconditions(
- null, null, BigInteger.ZERO, 0, new ArrayList(), null),
+ null, null, null, BigInteger.ZERO, 0, new ArrayList()),
null,
Network.PUBLIC);
@@ -117,7 +117,7 @@ public void testAddingSignaturesDirectly() {
},
null,
new TransactionPreconditions(
- null, null, BigInteger.ZERO, 0, new ArrayList(), null),
+ null, null, null, BigInteger.ZERO, 0, new ArrayList()),
null,
Network.PUBLIC);
@@ -157,7 +157,7 @@ public void testSha256HashSigning() throws FormatException {
},
null,
new TransactionPreconditions(
- null, null, BigInteger.ZERO, 0, new ArrayList(), null),
+ null, null, null, BigInteger.ZERO, 0, new ArrayList()),
null,
Network.PUBLIC);
@@ -196,7 +196,7 @@ public void testToBase64EnvelopeXdrBuilderNoSignatures() throws FormatException,
},
null,
new TransactionPreconditions(
- null, null, BigInteger.ZERO, 0, new ArrayList(), null),
+ null, null, null, BigInteger.ZERO, 0, new ArrayList()),
null,
Network.TESTNET);
@@ -277,7 +277,7 @@ public void testConstructorWithSorobanData() throws IOException {
new org.stellar.sdk.operations.Operation[] {invokeHostFunctionOperation},
null,
new TransactionPreconditions(
- null, null, BigInteger.ZERO, 0, new ArrayList(), null),
+ null, null, null, BigInteger.ZERO, 0, new ArrayList()),
sorobanData,
Network.TESTNET);
@@ -313,7 +313,7 @@ public void testIsSorobanTransactionInvokeHostFunctionOperation() {
new org.stellar.sdk.operations.Operation[] {operation},
null,
new TransactionPreconditions(
- null, null, BigInteger.ZERO, 0, new ArrayList(), null),
+ null, null, null, BigInteger.ZERO, 0, new ArrayList()),
null,
Network.TESTNET);
assertTrue(transaction.isSorobanTransaction());
@@ -350,7 +350,7 @@ public void testIsSorobanTransactionExtendFootprintTTLOperation() {
new org.stellar.sdk.operations.Operation[] {operation},
null,
new TransactionPreconditions(
- null, null, BigInteger.ZERO, 0, new ArrayList(), null),
+ null, null, null, BigInteger.ZERO, 0, new ArrayList()),
sorobanData,
Network.TESTNET);
assertTrue(transaction.isSorobanTransaction());
@@ -386,7 +386,7 @@ public void testIsSorobanTransactionRestoreFootprintOperation() {
new org.stellar.sdk.operations.Operation[] {operation},
null,
new TransactionPreconditions(
- null, null, BigInteger.ZERO, 0, new ArrayList(), null),
+ null, null, null, BigInteger.ZERO, 0, new ArrayList()),
sorobanData,
Network.TESTNET);
assertTrue(transaction.isSorobanTransaction());
@@ -415,7 +415,7 @@ public void testIsSorobanTransactionMultiOperations() {
new org.stellar.sdk.operations.Operation[] {operation, operation},
null,
new TransactionPreconditions(
- null, null, BigInteger.ZERO, 0, new ArrayList(), null),
+ null, null, null, BigInteger.ZERO, 0, new ArrayList()),
null,
Network.TESTNET);
assertFalse(transaction.isSorobanTransaction());
@@ -437,7 +437,7 @@ public void testIsSorobanTransactionBumpSequenceOperation() {
new org.stellar.sdk.operations.Operation[] {operation},
null,
new TransactionPreconditions(
- null, null, BigInteger.ZERO, 0, new ArrayList(), null),
+ null, null, null, BigInteger.ZERO, 0, new ArrayList()),
null,
Network.TESTNET);
assertFalse(transaction.isSorobanTransaction());
@@ -459,7 +459,7 @@ public void testHashCodeAndEquals() {
new org.stellar.sdk.operations.Operation[] {operation},
null,
new TransactionPreconditions(
- null, null, BigInteger.ZERO, 0, new ArrayList(), null),
+ null, null, null, BigInteger.ZERO, 0, new ArrayList()),
null,
Network.TESTNET);
@@ -472,7 +472,7 @@ public void testHashCodeAndEquals() {
new org.stellar.sdk.operations.Operation[] {operation},
null,
new TransactionPreconditions(
- null, null, BigInteger.ZERO, 0, new ArrayList(), null),
+ null, null, null, BigInteger.ZERO, 0, new ArrayList()),
null,
Network.TESTNET);
assertEquals(transaction1.hashCode(), transaction2.hashCode());
@@ -487,7 +487,7 @@ public void testHashCodeAndEquals() {
new org.stellar.sdk.operations.Operation[] {operation},
Memo.text("not equal tx"),
new TransactionPreconditions(
- null, null, BigInteger.ZERO, 0, new ArrayList(), null),
+ null, null, null, BigInteger.ZERO, 0, new ArrayList()),
null,
Network.TESTNET);
assertNotEquals(transaction1, transaction3);
@@ -501,7 +501,7 @@ public void testHashCodeAndEquals() {
new org.stellar.sdk.operations.Operation[] {operation},
null,
new TransactionPreconditions(
- null, null, BigInteger.ZERO, 0, new ArrayList(), null),
+ null, null, null, BigInteger.ZERO, 0, new ArrayList()),
null,
Network.PUBLIC);
assertNotEquals(transaction1, transaction4);
From 2e7c287eb341818860463cf7857b8143d6e7bf0a Mon Sep 17 00:00:00 2001
From: Jun Luo <4catcode@gmail.com>
Date: Tue, 6 Aug 2024 14:41:18 +0800
Subject: [PATCH 2/3] refactor: refactor the parts in Preconditions that are
inconsistent with the specifications.
---
src/main/java/org/stellar/sdk/TransactionPreconditions.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/main/java/org/stellar/sdk/TransactionPreconditions.java b/src/main/java/org/stellar/sdk/TransactionPreconditions.java
index c1bcfdac9..a6976d336 100644
--- a/src/main/java/org/stellar/sdk/TransactionPreconditions.java
+++ b/src/main/java/org/stellar/sdk/TransactionPreconditions.java
@@ -30,8 +30,9 @@ public class TransactionPreconditions {
public static final long MAX_EXTRA_SIGNERS_COUNT = 2;
public static final BigInteger TIMEOUT_INFINITE = BigInteger.ZERO;
+ // We strongly recommend setting it, but in fact, a transaction without timebounds will also be accepted by stellar-core.
/** The time bounds for the transaction. */
- @Nullable TimeBounds timeBounds;
+ TimeBounds timeBounds;
/** The ledger bounds for the transaction. */
@Nullable LedgerBounds ledgerBounds;
From 46662b8293415c9fd328380b42821f335c626c47 Mon Sep 17 00:00:00 2001
From: Jun Luo <4catcode@gmail.com>
Date: Tue, 6 Aug 2024 15:02:34 +0800
Subject: [PATCH 3/3] refactor: refactor the parts in Preconditions that are
inconsistent with the specifications.
---
src/main/java/org/stellar/sdk/TransactionPreconditions.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/main/java/org/stellar/sdk/TransactionPreconditions.java b/src/main/java/org/stellar/sdk/TransactionPreconditions.java
index a6976d336..cb374566d 100644
--- a/src/main/java/org/stellar/sdk/TransactionPreconditions.java
+++ b/src/main/java/org/stellar/sdk/TransactionPreconditions.java
@@ -30,7 +30,8 @@ public class TransactionPreconditions {
public static final long MAX_EXTRA_SIGNERS_COUNT = 2;
public static final BigInteger TIMEOUT_INFINITE = BigInteger.ZERO;
- // We strongly recommend setting it, but in fact, a transaction without timebounds will also be accepted by stellar-core.
+ // We strongly recommend setting it, but in fact, a transaction without timebounds will also be
+ // accepted by stellar-core.
/** The time bounds for the transaction. */
TimeBounds timeBounds;