From 001024345455de0a9a24036074711d6b9449d56f Mon Sep 17 00:00:00 2001
From: overcat <4catcode@gmail.com>
Date: Tue, 19 Sep 2023 14:02:41 +0800
Subject: [PATCH 1/2] Add support for parsing ContractCreditedEffect and
ContractDebitedEffect.
---
CHANGELOG.md | 3 +
.../sdk/responses/EffectDeserializer.java | 4 +
.../ContractCreditedEffectResponse.java | 33 ++++++++
.../ContractDebitedEffectResponse.java | 33 ++++++++
.../sdk/responses/EffectDeserializerTest.java | 84 +++++++++++++++++++
5 files changed, 157 insertions(+)
create mode 100644 src/main/java/org/stellar/sdk/responses/effects/ContractCreditedEffectResponse.java
create mode 100644 src/main/java/org/stellar/sdk/responses/effects/ContractDebitedEffectResponse.java
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6bf734eeb..ec10c1281 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,6 +6,9 @@ As this project is pre 1.0, breaking changes may happen for minor version bumps.
## 0.41.0-beta.4
* Add support for Soroban Preview 11. ([#530](https://github.com/stellar/java-stellar-sdk/pull/530))
+* New effects have been added to support Protocol 20 (Soroban) ([#535](https://github.com/stellar/java-stellar-sdk/pull/535)):
+ - `ContractCredited` occurs when a Stellar asset moves into its corresponding Stellar Asset Contract instance
+ - `ContractDebited` occurs when a Stellar asset moves out of its corresponding Stellar Asset Contract instance
* Bump dependencies & Remove unnecessary dependencies. ([#523](https://github.com/stellar/java-stellar-sdk/pull/523))
## 0.41.0-beta.3
diff --git a/src/main/java/org/stellar/sdk/responses/EffectDeserializer.java b/src/main/java/org/stellar/sdk/responses/EffectDeserializer.java
index abcc12840..d4c324ecc 100644
--- a/src/main/java/org/stellar/sdk/responses/EffectDeserializer.java
+++ b/src/main/java/org/stellar/sdk/responses/EffectDeserializer.java
@@ -139,6 +139,10 @@ public EffectResponse deserialize(
return gson.fromJson(json, LiquidityPoolRemovedEffectResponse.class);
case 95:
return gson.fromJson(json, LiquidityPoolRevokedEffectResponse.class);
+ case 96:
+ return gson.fromJson(json, ContractCreditedEffectResponse.class);
+ case 97:
+ return gson.fromJson(json, ContractDebitedEffectResponse.class);
default:
throw new RuntimeException("Invalid effect type");
}
diff --git a/src/main/java/org/stellar/sdk/responses/effects/ContractCreditedEffectResponse.java b/src/main/java/org/stellar/sdk/responses/effects/ContractCreditedEffectResponse.java
new file mode 100644
index 000000000..e9385d557
--- /dev/null
+++ b/src/main/java/org/stellar/sdk/responses/effects/ContractCreditedEffectResponse.java
@@ -0,0 +1,33 @@
+package org.stellar.sdk.responses.effects;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * Represents contract_credited effect response.
+ *
+ * @see Effect definition
+ * @see org.stellar.sdk.requests.EffectsRequestBuilder
+ * @see org.stellar.sdk.Server#effects()
+ */
+@AllArgsConstructor
+@Getter
+public class ContractCreditedEffectResponse extends EffectResponse {
+ @SerializedName("asset_type")
+ private final String assetType;
+
+ @SerializedName("asset_code")
+ private final String assetCode;
+
+ @SerializedName("asset_issuer")
+ private final String assetIssuer;
+
+ @SerializedName("contract")
+ private final String contract;
+
+ @SerializedName("amount")
+ private final String amount;
+}
diff --git a/src/main/java/org/stellar/sdk/responses/effects/ContractDebitedEffectResponse.java b/src/main/java/org/stellar/sdk/responses/effects/ContractDebitedEffectResponse.java
new file mode 100644
index 000000000..326a7d627
--- /dev/null
+++ b/src/main/java/org/stellar/sdk/responses/effects/ContractDebitedEffectResponse.java
@@ -0,0 +1,33 @@
+package org.stellar.sdk.responses.effects;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * Represents contract_debited effect response.
+ *
+ * @see Effect definition
+ * @see org.stellar.sdk.requests.EffectsRequestBuilder
+ * @see org.stellar.sdk.Server#effects()
+ */
+@AllArgsConstructor
+@Getter
+public class ContractDebitedEffectResponse extends EffectResponse {
+ @SerializedName("asset_type")
+ private final String assetType;
+
+ @SerializedName("asset_code")
+ private final String assetCode;
+
+ @SerializedName("asset_issuer")
+ private final String assetIssuer;
+
+ @SerializedName("contract")
+ private final String contract;
+
+ @SerializedName("amount")
+ private final String amount;
+}
diff --git a/src/test/java/org/stellar/sdk/responses/EffectDeserializerTest.java b/src/test/java/org/stellar/sdk/responses/EffectDeserializerTest.java
index dadb15509..d1303f1a5 100644
--- a/src/test/java/org/stellar/sdk/responses/EffectDeserializerTest.java
+++ b/src/test/java/org/stellar/sdk/responses/EffectDeserializerTest.java
@@ -20,6 +20,8 @@
import org.stellar.sdk.responses.effects.AccountThresholdsUpdatedEffectResponse;
import org.stellar.sdk.responses.effects.ClaimableBalanceClaimantCreatedEffectResponse;
import org.stellar.sdk.responses.effects.ClaimableBalanceClawedBackEffectResponse;
+import org.stellar.sdk.responses.effects.ContractCreditedEffectResponse;
+import org.stellar.sdk.responses.effects.ContractDebitedEffectResponse;
import org.stellar.sdk.responses.effects.DataCreatedEffectResponse;
import org.stellar.sdk.responses.effects.DataRemovedEffectResponse;
import org.stellar.sdk.responses.effects.DataUpdatedEffectResponse;
@@ -1417,4 +1419,86 @@ public void testDeserializeLiquidityPoolRevokedEffect() {
});
assertEquals(effect.getSharesRevoked(), "24452.3233794");
}
+
+ @Test
+ public void testDeserializeContractCreditedEffect() {
+ String json =
+ "{\n"
+ + " \"_links\": {\n"
+ + " \"operation\": {\n"
+ + " \"href\": \"http://100.83.15.43:8000/operations/21517786157057\"\n"
+ + " },\n"
+ + " \"succeeds\": {\n"
+ + " \"href\": \"http://100.83.15.43:8000/effects?order=desc&cursor=21517786157057-2\"\n"
+ + " },\n"
+ + " \"precedes\": {\n"
+ + " \"href\": \"http://100.83.15.43:8000/effects?order=asc&cursor=21517786157057-2\"\n"
+ + " }\n"
+ + " },\n"
+ + " \"id\": \"0000021517786157057-0000000002\",\n"
+ + " \"paging_token\": \"21517786157057-2\",\n"
+ + " \"account\": \"GDAT5HWTGIU4TSSZ4752OUC4SABDLTLZFRPZUJ3D6LKBNEPA7V2CIG54\",\n"
+ + " \"type\": \"contract_credited\",\n"
+ + " \"type_i\": 96,\n"
+ + " \"created_at\": \"2023-09-19T05:43:12Z\",\n"
+ + " \"asset_type\": \"native\",\n"
+ + " \"contract\": \"CDCYWK73YTYFJZZSJ5V7EDFNHYBG4QN3VUNG2IGD27KJDDPNCZKBCBXK\",\n"
+ + " \"amount\": \"100.0000000\"\n"
+ + "}\n";
+
+ ContractCreditedEffectResponse effect =
+ (ContractCreditedEffectResponse)
+ GsonSingleton.getInstance().fromJson(json, EffectResponse.class);
+
+ assertEquals(effect.getType(), "contract_credited");
+ assertEquals(effect.getId(), "0000021517786157057-0000000002");
+ assertEquals(effect.getPagingToken(), "21517786157057-2");
+ assertEquals(effect.getAccount(), "GDAT5HWTGIU4TSSZ4752OUC4SABDLTLZFRPZUJ3D6LKBNEPA7V2CIG54");
+ assertEquals(effect.getCreatedAt(), "2023-09-19T05:43:12Z");
+ assertEquals(effect.getAmount(), "100.0000000");
+ assertEquals(effect.getAssetType(), "native");
+ assertNull(effect.getAssetCode());
+ assertNull(effect.getAssetIssuer());
+ }
+
+ @Test
+ public void testDeserializeContractDebitedEffect() {
+ String json =
+ "{\n"
+ + " \"_links\": {\n"
+ + " \"operation\": {\n"
+ + " \"href\": \"http://100.83.15.43:8000/operations/21517786157057\"\n"
+ + " },\n"
+ + " \"succeeds\": {\n"
+ + " \"href\": \"http://100.83.15.43:8000/effects?order=desc&cursor=21517786157057-2\"\n"
+ + " },\n"
+ + " \"precedes\": {\n"
+ + " \"href\": \"http://100.83.15.43:8000/effects?order=asc&cursor=21517786157057-2\"\n"
+ + " }\n"
+ + " },\n"
+ + " \"id\": \"0000021517786157057-0000000002\",\n"
+ + " \"paging_token\": \"21517786157057-2\",\n"
+ + " \"account\": \"GDAT5HWTGIU4TSSZ4752OUC4SABDLTLZFRPZUJ3D6LKBNEPA7V2CIG54\",\n"
+ + " \"type\": \"contract_debited\",\n"
+ + " \"type_i\": 97,\n"
+ + " \"created_at\": \"2023-09-19T05:43:12Z\",\n"
+ + " \"asset_type\": \"native\",\n"
+ + " \"contract\": \"CDCYWK73YTYFJZZSJ5V7EDFNHYBG4QN3VUNG2IGD27KJDDPNCZKBCBXK\",\n"
+ + " \"amount\": \"100.0000000\"\n"
+ + "}\n";
+
+ ContractDebitedEffectResponse effect =
+ (ContractDebitedEffectResponse)
+ GsonSingleton.getInstance().fromJson(json, EffectResponse.class);
+
+ assertEquals(effect.getType(), "contract_debited");
+ assertEquals(effect.getId(), "0000021517786157057-0000000002");
+ assertEquals(effect.getPagingToken(), "21517786157057-2");
+ assertEquals(effect.getAccount(), "GDAT5HWTGIU4TSSZ4752OUC4SABDLTLZFRPZUJ3D6LKBNEPA7V2CIG54");
+ assertEquals(effect.getCreatedAt(), "2023-09-19T05:43:12Z");
+ assertEquals(effect.getAmount(), "100.0000000");
+ assertEquals(effect.getAssetType(), "native");
+ assertNull(effect.getAssetCode());
+ assertNull(effect.getAssetIssuer());
+ }
}
From e8c355d1e825ea653c84b904f243c111d440b646 Mon Sep 17 00:00:00 2001
From: overcat <4catcode@gmail.com>
Date: Tue, 19 Sep 2023 17:03:37 +0800
Subject: [PATCH 2/2] Add support for parsing ContractCreditedEffect and
ContractDebitedEffect.
---
.../sdk/responses/effects/ContractCreditedEffectResponse.java | 2 --
.../sdk/responses/effects/ContractDebitedEffectResponse.java | 2 --
2 files changed, 4 deletions(-)
diff --git a/src/main/java/org/stellar/sdk/responses/effects/ContractCreditedEffectResponse.java b/src/main/java/org/stellar/sdk/responses/effects/ContractCreditedEffectResponse.java
index e9385d557..763820cea 100644
--- a/src/main/java/org/stellar/sdk/responses/effects/ContractCreditedEffectResponse.java
+++ b/src/main/java/org/stellar/sdk/responses/effects/ContractCreditedEffectResponse.java
@@ -25,9 +25,7 @@ public class ContractCreditedEffectResponse extends EffectResponse {
@SerializedName("asset_issuer")
private final String assetIssuer;
- @SerializedName("contract")
private final String contract;
- @SerializedName("amount")
private final String amount;
}
diff --git a/src/main/java/org/stellar/sdk/responses/effects/ContractDebitedEffectResponse.java b/src/main/java/org/stellar/sdk/responses/effects/ContractDebitedEffectResponse.java
index 326a7d627..33813ea05 100644
--- a/src/main/java/org/stellar/sdk/responses/effects/ContractDebitedEffectResponse.java
+++ b/src/main/java/org/stellar/sdk/responses/effects/ContractDebitedEffectResponse.java
@@ -25,9 +25,7 @@ public class ContractDebitedEffectResponse extends EffectResponse {
@SerializedName("asset_issuer")
private final String assetIssuer;
- @SerializedName("contract")
private final String contract;
- @SerializedName("amount")
private final String amount;
}