From b71b106d449e4701791df5d2ffd728f1278e397b Mon Sep 17 00:00:00 2001 From: Jun Luo <4catcode@gmail.com> Date: Sat, 13 Jan 2024 08:44:34 +0800 Subject: [PATCH] Support for the new, optional `diagnosticEventsXdr` field on the `SorobanServer.sendTransaction` method. (#564) --- CHANGELOG.md | 2 ++ .../responses/sorobanrpc/GetLedgerEntriesResponse.java | 4 ++++ .../sdk/responses/sorobanrpc/GetTransactionResponse.java | 3 +++ .../responses/sorobanrpc/SendTransactionResponse.java | 5 +++++ .../sorobanrpc/SimulateTransactionResponse.java | 9 +++++++++ .../sorobanrpc/SendTransactionDeserializerTest.java | 8 ++++++++ 6 files changed, 31 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2334a2fbd..2b255dfa0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ As this project is pre 1.0, breaking changes may happen for minor version bumps. ### Update * Support resource leeway parameter when simulating Soroban transactions. ([#561](https://github.com/stellar/java-stellar-sdk/pull/561)) +* Support for the new, optional `diagnosticEventsXdr` field on the `SorobanServer.sendTransaction` method. ([#564](https://github.com/stellar/java-stellar-sdk/pull/564)) + ### Breaking changes * The types of the following fields have changed. ([#560](https://github.com/stellar/java-stellar-sdk/pull/560)) | field | before | now | diff --git a/src/main/java/org/stellar/sdk/responses/sorobanrpc/GetLedgerEntriesResponse.java b/src/main/java/org/stellar/sdk/responses/sorobanrpc/GetLedgerEntriesResponse.java index f6f1ce1ee..d4ff66cd8 100644 --- a/src/main/java/org/stellar/sdk/responses/sorobanrpc/GetLedgerEntriesResponse.java +++ b/src/main/java/org/stellar/sdk/responses/sorobanrpc/GetLedgerEntriesResponse.java @@ -18,8 +18,12 @@ public class GetLedgerEntriesResponse { @Value public static class LedgerEntryResult { + /** The field can be parsed as {@link org.stellar.sdk.xdr.LedgerKey} object. */ String key; + /** + * The field can be parsed as {@link org.stellar.sdk.xdr.LedgerEntry.LedgerEntryData} object. + */ String xdr; @SerializedName("lastModifiedLedgerSeq") diff --git a/src/main/java/org/stellar/sdk/responses/sorobanrpc/GetTransactionResponse.java b/src/main/java/org/stellar/sdk/responses/sorobanrpc/GetTransactionResponse.java index 79d57fced..e60af9ac4 100644 --- a/src/main/java/org/stellar/sdk/responses/sorobanrpc/GetTransactionResponse.java +++ b/src/main/java/org/stellar/sdk/responses/sorobanrpc/GetTransactionResponse.java @@ -24,10 +24,13 @@ public class GetTransactionResponse { Boolean feeBump; + /** The field can be parsed as {@link org.stellar.sdk.xdr.TransactionEnvelope} object. */ String envelopeXdr; + /** The field can be parsed as {@link org.stellar.sdk.xdr.TransactionResult} object. */ String resultXdr; + /** The field can be parsed as {@link org.stellar.sdk.xdr.TransactionMeta} object. */ String resultMetaXdr; Long ledger; diff --git a/src/main/java/org/stellar/sdk/responses/sorobanrpc/SendTransactionResponse.java b/src/main/java/org/stellar/sdk/responses/sorobanrpc/SendTransactionResponse.java index f69065d6c..8223aab0d 100644 --- a/src/main/java/org/stellar/sdk/responses/sorobanrpc/SendTransactionResponse.java +++ b/src/main/java/org/stellar/sdk/responses/sorobanrpc/SendTransactionResponse.java @@ -1,5 +1,6 @@ package org.stellar.sdk.responses.sorobanrpc; +import java.util.List; import lombok.Value; /** @@ -12,8 +13,12 @@ public class SendTransactionResponse { SendTransactionStatus status; + /** The field can be parsed as {@link org.stellar.sdk.xdr.TransactionResult} object. */ String errorResultXdr; + /** The elements inside can be parsed as {@link org.stellar.sdk.xdr.DiagnosticEvent} objects. */ + List diagnosticEventsXdr; + String hash; Long latestLedger; diff --git a/src/main/java/org/stellar/sdk/responses/sorobanrpc/SimulateTransactionResponse.java b/src/main/java/org/stellar/sdk/responses/sorobanrpc/SimulateTransactionResponse.java index ecfaddd79..b7d1600b8 100644 --- a/src/main/java/org/stellar/sdk/responses/sorobanrpc/SimulateTransactionResponse.java +++ b/src/main/java/org/stellar/sdk/responses/sorobanrpc/SimulateTransactionResponse.java @@ -22,8 +22,10 @@ public class SimulateTransactionResponse { String error; + /** The field can be parsed as {@link org.stellar.sdk.xdr.SorobanTransactionData} object. */ String transactionData; + /** The elements inside can be parsed as {@link org.stellar.sdk.xdr.DiagnosticEvent} objects. */ List events; Long minResourceFee; @@ -42,8 +44,14 @@ public class SimulateTransactionResponse { @Value public static class SimulateHostFunctionResult { + + /** + * The elements inside can be parsed as {@link org.stellar.sdk.xdr.SorobanAuthorizationEntry} + * objects. + */ List auth; + /** The field can be parsed as {@link org.stellar.sdk.xdr.SCVal} object. */ String xdr; } @@ -58,6 +66,7 @@ public static class SimulateTransactionCost { @Value public static class RestorePreamble { + /** The field can be parsed as {@link org.stellar.sdk.xdr.SorobanTransactionData} object. */ String transactionData; Long minResourceFee; diff --git a/src/test/java/org/stellar/sdk/responses/sorobanrpc/SendTransactionDeserializerTest.java b/src/test/java/org/stellar/sdk/responses/sorobanrpc/SendTransactionDeserializerTest.java index decdeed5d..d1cf2ebdd 100644 --- a/src/test/java/org/stellar/sdk/responses/sorobanrpc/SendTransactionDeserializerTest.java +++ b/src/test/java/org/stellar/sdk/responses/sorobanrpc/SendTransactionDeserializerTest.java @@ -17,6 +17,10 @@ public void testDeserializeError() { new TypeToken>() {}.getType()); SendTransactionResponse data = getTransactionResponse.getResult(); assertEquals(data.getErrorResultXdr(), "AAAAAAAAf67////6AAAAAA=="); + assertEquals(data.getDiagnosticEventsXdr().size(), 1); + assertEquals( + data.getDiagnosticEventsXdr().get(0), + "AAAAAQAAAAAAAAAAAAAAAgAAAAAAAAADAAAADwAAAAdmbl9jYWxsAAAAAA0AAAAgr/p6gt6h8MrmSw+WNJnu3+sCP9dHXx7jR8IH0sG6Cy0AAAAPAAAABWhlbGxvAAAAAAAADwAAAAVBbG9oYQAAAA=="); assertEquals(data.getStatus(), SendTransactionResponse.SendTransactionStatus.ERROR); assertEquals( data.getHash(), "3b0c982bb8245be869d34ec822f999deb68f3a8480cf6e663643cf2f6e397e64"); @@ -33,6 +37,7 @@ public void testDeserializePending() { new TypeToken>() {}.getType()); SendTransactionResponse data = getTransactionResponse.getResult(); assertNull(data.getErrorResultXdr()); + assertNull(data.getDiagnosticEventsXdr()); assertEquals(data.getStatus(), SendTransactionResponse.SendTransactionStatus.PENDING); assertEquals( data.getHash(), "5e58bb3530cf4ff852805ad1a5077b181b227e541301bdfa17f5a66991910d13"); @@ -49,6 +54,7 @@ public void testDeserializeDuplicate() { new TypeToken>() {}.getType()); SendTransactionResponse data = getTransactionResponse.getResult(); assertNull(data.getErrorResultXdr()); + assertNull(data.getDiagnosticEventsXdr()); assertEquals(data.getStatus(), SendTransactionResponse.SendTransactionStatus.DUPLICATE); assertEquals( data.getHash(), "5e58bb3530cf4ff852805ad1a5077b181b227e541301bdfa17f5a66991910d13"); @@ -65,6 +71,7 @@ public void testDeserializeTryAgainLater() { new TypeToken>() {}.getType()); SendTransactionResponse data = getTransactionResponse.getResult(); assertNull(data.getErrorResultXdr()); + assertNull(data.getDiagnosticEventsXdr()); assertEquals(data.getStatus(), SendTransactionResponse.SendTransactionStatus.TRY_AGAIN_LATER); assertEquals( data.getHash(), "5e58bb3530cf4ff852805ad1a5077b181b227e541301bdfa17f5a66991910d13"); @@ -78,6 +85,7 @@ public void testDeserializeTryAgainLater() { + " \"id\": \"b96311af98d54d7cbb8736dbb0ed7730\",\n" + " \"result\": {\n" + " \"errorResultXdr\": \"AAAAAAAAf67////6AAAAAA==\",\n" + + " \"diagnosticEventsXdr\": [\"AAAAAQAAAAAAAAAAAAAAAgAAAAAAAAADAAAADwAAAAdmbl9jYWxsAAAAAA0AAAAgr/p6gt6h8MrmSw+WNJnu3+sCP9dHXx7jR8IH0sG6Cy0AAAAPAAAABWhlbGxvAAAAAAAADwAAAAVBbG9oYQAAAA==\"]," + " \"status\": \"ERROR\",\n" + " \"hash\": \"3b0c982bb8245be869d34ec822f999deb68f3a8480cf6e663643cf2f6e397e64\",\n" + " \"latestLedger\": \"62\",\n"