diff --git a/src/main/java/com/algorand/algosdk/v2/client/algod/GetApplicationBoxes.java b/src/main/java/com/algorand/algosdk/v2/client/algod/GetApplicationBoxes.java index 2b72423ee..ba0e90008 100644 --- a/src/main/java/com/algorand/algosdk/v2/client/algod/GetApplicationBoxes.java +++ b/src/main/java/com/algorand/algosdk/v2/client/algod/GetApplicationBoxes.java @@ -1,17 +1,31 @@ package com.algorand.algosdk.v2.client.algod; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; + import com.algorand.algosdk.v2.client.common.Client; import com.algorand.algosdk.v2.client.common.HttpMethod; import com.algorand.algosdk.v2.client.common.Query; import com.algorand.algosdk.v2.client.common.QueryData; import com.algorand.algosdk.v2.client.common.Response; import com.algorand.algosdk.v2.client.model.BoxesResponse; +import com.algorand.algosdk.v2.client.model.Enums; /** - * Given an application ID, return all Box names. No particular ordering is + * Given an application ID, return all box names. No particular ordering is * guaranteed. Request fails when client or server-side configured limits prevent - * returning all Box names. + * returning all box names. + * Pagination mode is enabled when any of the following parameters are provided: + * limit, next, prefix, include, or round. In pagination mode box values can be + * requested and results are returned in sorted order. + * To paginate: use the next-token from a previous response as the next parameter + * in the following request. Pin the round parameter to the round value from the + * first page's response to ensure consistent results across pages. The server + * enforces a per-response byte limit, so fewer results than limit may be returned + * even when more exist; the presence of next-token is the only reliable signal + * that more data is available. * /v2/applications/{application-id}/boxes */ public class GetApplicationBoxes extends Query { @@ -26,6 +40,23 @@ public GetApplicationBoxes(Client client, Long applicationId) { this.applicationId = applicationId; } + /** + * Include additional items in the response. Use `values` to include box values. + * Multiple values can be comma-separated. + */ + public GetApplicationBoxes include(List include) { + addQuery("include", StringUtils.join(include, ",")); + return this; + } + + /** + * Maximum number of boxes to return per page. + */ + public GetApplicationBoxes limit(Long limit) { + addQuery("limit", String.valueOf(limit)); + return this; + } + /** * Max number of box names to return. If max is not set, or max == 0, returns all * box-names. @@ -35,6 +66,34 @@ public GetApplicationBoxes max(Long max) { return this; } + /** + * A box name, in the goal app call arg form 'encoding:value', representing the + * earliest box name to include in results. Use the next-token from a previous + * response. + */ + public GetApplicationBoxes next(String next) { + addQuery("next", String.valueOf(next)); + return this; + } + + /** + * A box name prefix, in the goal app call arg form 'encoding:value', to filter + * results by. Only boxes whose names start with this prefix will be returned. + */ + public GetApplicationBoxes prefix(String prefix) { + addQuery("prefix", String.valueOf(prefix)); + return this; + } + + /** + * Return box data from the given round. The round must be within the node's + * available range. + */ + public GetApplicationBoxes round(java.math.BigInteger round) { + addQuery("round", String.valueOf(round)); + return this; + } + /** * Execute the query. * @return the query response object. diff --git a/src/main/java/com/algorand/algosdk/v2/client/algod/RawTransaction.java b/src/main/java/com/algorand/algosdk/v2/client/algod/RawTransaction.java index 91ccc0bdf..94a7e1fcb 100644 --- a/src/main/java/com/algorand/algosdk/v2/client/algod/RawTransaction.java +++ b/src/main/java/com/algorand/algosdk/v2/client/algod/RawTransaction.java @@ -26,6 +26,17 @@ public RawTransaction rawtxn(byte[] rawtxn) { return this; } + /** + * Skip post-quantum address checks, including the check that rejects TEAL v13 or + * later LogicSig escrow addresses whose program hash is an Edwards25519 curve + * point. This should only be used if you understand the risks and know what you + * are doing. + */ + public RawTransaction skipPqAddressCheck(Boolean skipPqAddressCheck) { + addQuery("skip-pq-address-check", String.valueOf(skipPqAddressCheck)); + return this; + } + /** * Execute the query. * @return the query response object. diff --git a/src/main/java/com/algorand/algosdk/v2/client/algod/TealDryrun.java b/src/main/java/com/algorand/algosdk/v2/client/algod/TealDryrun.java deleted file mode 100644 index 5b6f6a766..000000000 --- a/src/main/java/com/algorand/algosdk/v2/client/algod/TealDryrun.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.algorand.algosdk.v2.client.algod; - -import com.algorand.algosdk.util.Encoder; -import com.algorand.algosdk.v2.client.common.Client; -import com.algorand.algosdk.v2.client.common.HttpMethod; -import com.algorand.algosdk.v2.client.common.Query; -import com.algorand.algosdk.v2.client.common.QueryData; -import com.algorand.algosdk.v2.client.common.Response; -import com.algorand.algosdk.v2.client.model.DryrunRequest; -import com.algorand.algosdk.v2.client.model.DryrunResponse; -import com.fasterxml.jackson.core.JsonProcessingException; - - -/** - * Executes TEAL program(s) in context and returns debugging information about the - * execution. This endpoint is only enabled when a node's configuration file sets - * EnableDeveloperAPI to true. - * /v2/teal/dryrun - */ -public class TealDryrun extends Query { - - public TealDryrun(Client client) { - super(client, new HttpMethod("post")); - } - - /** - * Transaction (or group) and any accompanying state-simulation data. - * @throws JsonProcessingException - */ - public TealDryrun request(DryrunRequest request) throws JsonProcessingException { - addToBody(Encoder.encodeToMsgPack(request)); - return this; - } - - /** - * Execute the query. - * @return the query response object. - * @throws Exception - */ - @Override - public Response execute() throws Exception { - Response resp = baseExecute(); - resp.setValueType(DryrunResponse.class); - return resp; - } - - /** - * Execute the query with custom headers, there must be an equal number of keys and values - * or else an error will be generated. - * @param headers an array of header keys - * @param values an array of header values - * @return the query response object. - * @throws Exception - */ - @Override - public Response execute(String[] headers, String[] values) throws Exception { - Response resp = baseExecute(headers, values); - resp.setValueType(DryrunResponse.class); - return resp; - } - - protected QueryData getRequestString() { - addPathSegment(String.valueOf("v2")); - addPathSegment(String.valueOf("teal")); - addPathSegment(String.valueOf("dryrun")); - - return qd; - } -} diff --git a/src/main/java/com/algorand/algosdk/v2/client/common/AlgodClient.java b/src/main/java/com/algorand/algosdk/v2/client/common/AlgodClient.java index ad15d67f3..8b3618792 100644 --- a/src/main/java/com/algorand/algosdk/v2/client/common/AlgodClient.java +++ b/src/main/java/com/algorand/algosdk/v2/client/common/AlgodClient.java @@ -39,7 +39,6 @@ import com.algorand.algosdk.v2.client.algod.SetSyncRound; import com.algorand.algosdk.v2.client.algod.TealCompile; import com.algorand.algosdk.v2.client.algod.TealDisassemble; -import com.algorand.algosdk.v2.client.algod.TealDryrun; import com.algorand.algosdk.v2.client.algod.GetBlockTimeStampOffset; import com.algorand.algosdk.v2.client.algod.SetBlockTimeStampOffset; import com.algorand.algosdk.crypto.Address; @@ -342,9 +341,18 @@ public GetApplicationByID GetApplicationByID(Long applicationId) { } /** - * Given an application ID, return all Box names. No particular ordering is + * Given an application ID, return all box names. No particular ordering is * guaranteed. Request fails when client or server-side configured limits prevent - * returning all Box names. + * returning all box names. + * Pagination mode is enabled when any of the following parameters are provided: + * limit, next, prefix, include, or round. In pagination mode box values can be + * requested and results are returned in sorted order. + * To paginate: use the next-token from a previous response as the next parameter + * in the following request. Pin the round parameter to the round value from the + * first page's response to ensure consistent results across pages. The server + * enforces a per-response byte limit, so fewer results than limit may be returned + * even when more exist; the presence of next-token is the only reliable signal + * that more data is available. * /v2/applications/{application-id}/boxes */ public GetApplicationBoxes GetApplicationBoxes(Long applicationId) { @@ -416,16 +424,6 @@ public TealDisassemble TealDisassemble() { return new TealDisassemble((Client) this); } - /** - * Executes TEAL program(s) in context and returns debugging information about the - * execution. This endpoint is only enabled when a node's configuration file sets - * EnableDeveloperAPI to true. - * /v2/teal/dryrun - */ - public TealDryrun TealDryrun() { - return new TealDryrun((Client) this); - } - /** * Gets the current timestamp offset. * /v2/devmode/blocks/offset diff --git a/src/main/java/com/algorand/algosdk/v2/client/indexer/SearchForApplicationBoxes.java b/src/main/java/com/algorand/algosdk/v2/client/indexer/SearchForApplicationBoxes.java index 5cabe8a26..6d102771a 100644 --- a/src/main/java/com/algorand/algosdk/v2/client/indexer/SearchForApplicationBoxes.java +++ b/src/main/java/com/algorand/algosdk/v2/client/indexer/SearchForApplicationBoxes.java @@ -1,11 +1,16 @@ package com.algorand.algosdk.v2.client.indexer; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; + import com.algorand.algosdk.v2.client.common.Client; import com.algorand.algosdk.v2.client.common.HttpMethod; import com.algorand.algosdk.v2.client.common.Query; import com.algorand.algosdk.v2.client.common.QueryData; import com.algorand.algosdk.v2.client.common.Response; import com.algorand.algosdk.v2.client.model.BoxesResponse; +import com.algorand.algosdk.v2.client.model.Enums; /** @@ -25,6 +30,15 @@ public SearchForApplicationBoxes(Client client, Long applicationId) { this.applicationId = applicationId; } + /** + * Include additional items in the response. Use `values` to include box values. + * Multiple values can be comma-separated. + */ + public SearchForApplicationBoxes include(List include) { + addQuery("include", StringUtils.join(include, ",")); + return this; + } + /** * Maximum number of results to return. There could be additional pages even if the * limit is not reached. diff --git a/src/main/java/com/algorand/algosdk/v2/client/model/BoxDescriptor.java b/src/main/java/com/algorand/algosdk/v2/client/model/BoxDescriptor.java index 7e12b7475..418e0187e 100644 --- a/src/main/java/com/algorand/algosdk/v2/client/model/BoxDescriptor.java +++ b/src/main/java/com/algorand/algosdk/v2/client/model/BoxDescriptor.java @@ -7,7 +7,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * Box descriptor describes an app box without a value. + * Box descriptor describes an app box. */ public class BoxDescriptor extends PathResponse { @@ -23,6 +23,19 @@ public String name() { } public byte[] name; + /** + * Base64 encoded box value. Present only when the `values` query parameter is set + * to true. + */ + @JsonProperty("value") + public void value(String base64Encoded) { + this.value = Encoder.decodeFromBase64(base64Encoded); + } + public String value() { + return Encoder.encodeToBase64(this.value); + } + public byte[] value; + @Override public boolean equals(Object o) { @@ -31,6 +44,7 @@ public boolean equals(Object o) { BoxDescriptor other = (BoxDescriptor) o; if (!Objects.deepEquals(this.name, other.name)) return false; + if (!Objects.deepEquals(this.value, other.value)) return false; return true; } diff --git a/src/main/java/com/algorand/algosdk/v2/client/model/BoxesResponse.java b/src/main/java/com/algorand/algosdk/v2/client/model/BoxesResponse.java index 7a9ea9af5..193fdfb2a 100644 --- a/src/main/java/com/algorand/algosdk/v2/client/model/BoxesResponse.java +++ b/src/main/java/com/algorand/algosdk/v2/client/model/BoxesResponse.java @@ -28,6 +28,12 @@ public class BoxesResponse extends PathResponse { @JsonProperty("next-token") public String nextToken; + /** + * The round for which this information is relevant. + */ + @JsonProperty("round") + public Long round; + @Override public boolean equals(Object o) { @@ -38,6 +44,7 @@ public boolean equals(Object o) { if (!Objects.deepEquals(this.applicationId, other.applicationId)) return false; if (!Objects.deepEquals(this.boxes, other.boxes)) return false; if (!Objects.deepEquals(this.nextToken, other.nextToken)) return false; + if (!Objects.deepEquals(this.round, other.round)) return false; return true; } diff --git a/src/main/java/com/algorand/algosdk/v2/client/model/DryrunRequest.java b/src/main/java/com/algorand/algosdk/v2/client/model/DryrunRequest.java deleted file mode 100644 index 5b320fe76..000000000 --- a/src/main/java/com/algorand/algosdk/v2/client/model/DryrunRequest.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.algorand.algosdk.v2.client.model; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import com.algorand.algosdk.transaction.SignedTransaction; -import com.algorand.algosdk.v2.client.common.PathResponse; -import com.fasterxml.jackson.annotation.JsonProperty; - -/** - * Request data type for dryrun endpoint. Given the Transactions and simulated - * ledger state upload, run TEAL scripts and return debugging information. - */ -public class DryrunRequest extends PathResponse { - - @JsonProperty("accounts") - public List accounts = new ArrayList(); - - @JsonProperty("apps") - public List apps = new ArrayList(); - - /** - * LatestTimestamp is available to some TEAL scripts. Defaults to the latest - * confirmed timestamp this algod is attached to. - */ - @JsonProperty("latest-timestamp") - public Long latestTimestamp; - - /** - * ProtocolVersion specifies a specific version string to operate under, otherwise - * whatever the current protocol of the network this algod is running in. - */ - @JsonProperty("protocol-version") - public String protocolVersion; - - /** - * Round is available to some TEAL scripts. Defaults to the current round on the - * network this algod is attached to. - */ - @JsonProperty("round") - public java.math.BigInteger round; - - @JsonProperty("sources") - public List sources = new ArrayList(); - - @JsonProperty("txns") - public List txns = new ArrayList(); - - @Override - public boolean equals(Object o) { - - if (this == o) return true; - if (o == null) return false; - - DryrunRequest other = (DryrunRequest) o; - if (!Objects.deepEquals(this.accounts, other.accounts)) return false; - if (!Objects.deepEquals(this.apps, other.apps)) return false; - if (!Objects.deepEquals(this.latestTimestamp, other.latestTimestamp)) return false; - if (!Objects.deepEquals(this.protocolVersion, other.protocolVersion)) return false; - if (!Objects.deepEquals(this.round, other.round)) return false; - if (!Objects.deepEquals(this.sources, other.sources)) return false; - if (!Objects.deepEquals(this.txns, other.txns)) return false; - - return true; - } -} diff --git a/src/main/java/com/algorand/algosdk/v2/client/model/DryrunResponse.java b/src/main/java/com/algorand/algosdk/v2/client/model/DryrunResponse.java deleted file mode 100644 index 038e81532..000000000 --- a/src/main/java/com/algorand/algosdk/v2/client/model/DryrunResponse.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.algorand.algosdk.v2.client.model; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import com.algorand.algosdk.v2.client.common.PathResponse; -import com.fasterxml.jackson.annotation.JsonProperty; - -/** - * DryrunResponse contains per-txn debug information from a dryrun. - */ -public class DryrunResponse extends PathResponse { - - @JsonProperty("error") - public String error; - - /** - * Protocol version is the protocol version Dryrun was operated under. - */ - @JsonProperty("protocol-version") - public String protocolVersion; - - @JsonProperty("txns") - public List txns = new ArrayList(); - - @Override - public boolean equals(Object o) { - - if (this == o) return true; - if (o == null) return false; - - DryrunResponse other = (DryrunResponse) o; - if (!Objects.deepEquals(this.error, other.error)) return false; - if (!Objects.deepEquals(this.protocolVersion, other.protocolVersion)) return false; - if (!Objects.deepEquals(this.txns, other.txns)) return false; - - return true; - } -} diff --git a/src/main/java/com/algorand/algosdk/v2/client/model/DryrunSource.java b/src/main/java/com/algorand/algosdk/v2/client/model/DryrunSource.java deleted file mode 100644 index 2cb2534c5..000000000 --- a/src/main/java/com/algorand/algosdk/v2/client/model/DryrunSource.java +++ /dev/null @@ -1,45 +0,0 @@ -package com.algorand.algosdk.v2.client.model; - -import java.util.Objects; - -import com.algorand.algosdk.v2.client.common.PathResponse; -import com.fasterxml.jackson.annotation.JsonProperty; - -/** - * DryrunSource is TEAL source text that gets uploaded, compiled, and inserted into - * transactions or application state. - */ -public class DryrunSource extends PathResponse { - - @JsonProperty("app-index") - public java.math.BigInteger appIndex; - - /** - * FieldName is what kind of sources this is. If lsig then it goes into the - * transactions[this.TxnIndex].LogicSig. If approv or clearp it goes into the - * Approval Program or Clear State Program of application[this.AppIndex]. - */ - @JsonProperty("field-name") - public String fieldName; - - @JsonProperty("source") - public String source; - - @JsonProperty("txn-index") - public Long txnIndex; - - @Override - public boolean equals(Object o) { - - if (this == o) return true; - if (o == null) return false; - - DryrunSource other = (DryrunSource) o; - if (!Objects.deepEquals(this.appIndex, other.appIndex)) return false; - if (!Objects.deepEquals(this.fieldName, other.fieldName)) return false; - if (!Objects.deepEquals(this.source, other.source)) return false; - if (!Objects.deepEquals(this.txnIndex, other.txnIndex)) return false; - - return true; - } -} diff --git a/src/main/java/com/algorand/algosdk/v2/client/model/DryrunState.java b/src/main/java/com/algorand/algosdk/v2/client/model/DryrunState.java deleted file mode 100644 index 14144befa..000000000 --- a/src/main/java/com/algorand/algosdk/v2/client/model/DryrunState.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.algorand.algosdk.v2.client.model; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import com.algorand.algosdk.v2.client.common.PathResponse; -import com.fasterxml.jackson.annotation.JsonProperty; - -/** - * Stores the TEAL eval step data - */ -public class DryrunState extends PathResponse { - - /** - * Evaluation error if any - */ - @JsonProperty("error") - public String error; - - /** - * Line number - */ - @JsonProperty("line") - public Long line; - - /** - * Program counter - */ - @JsonProperty("pc") - public Long pc; - - @JsonProperty("scratch") - public List scratch = new ArrayList(); - - @JsonProperty("stack") - public List stack = new ArrayList(); - - @Override - public boolean equals(Object o) { - - if (this == o) return true; - if (o == null) return false; - - DryrunState other = (DryrunState) o; - if (!Objects.deepEquals(this.error, other.error)) return false; - if (!Objects.deepEquals(this.line, other.line)) return false; - if (!Objects.deepEquals(this.pc, other.pc)) return false; - if (!Objects.deepEquals(this.scratch, other.scratch)) return false; - if (!Objects.deepEquals(this.stack, other.stack)) return false; - - return true; - } -} diff --git a/src/main/java/com/algorand/algosdk/v2/client/model/DryrunTxnResult.java b/src/main/java/com/algorand/algosdk/v2/client/model/DryrunTxnResult.java deleted file mode 100644 index a5f645518..000000000 --- a/src/main/java/com/algorand/algosdk/v2/client/model/DryrunTxnResult.java +++ /dev/null @@ -1,102 +0,0 @@ -package com.algorand.algosdk.v2.client.model; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import com.algorand.algosdk.util.Encoder; -import com.algorand.algosdk.v2.client.common.PathResponse; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonProperty; - -/** - * DryrunTxnResult contains any LogicSig or ApplicationCall program debug - * information and state updates from a dryrun. - */ -public class DryrunTxnResult extends PathResponse { - - @JsonProperty("app-call-messages") - public List appCallMessages = new ArrayList(); - - @JsonProperty("app-call-trace") - public List appCallTrace = new ArrayList(); - - /** - * Budget added during execution of app call transaction. - */ - @JsonProperty("budget-added") - public Long budgetAdded; - - /** - * Budget consumed during execution of app call transaction. - */ - @JsonProperty("budget-consumed") - public Long budgetConsumed; - - /** - * Disassembled program line by line. - */ - @JsonProperty("disassembly") - public List disassembly = new ArrayList(); - - /** - * Application state delta. - */ - @JsonProperty("global-delta") - public List globalDelta = new ArrayList(); - - @JsonProperty("local-deltas") - public List localDeltas = new ArrayList(); - - /** - * Disassembled lsig program line by line. - */ - @JsonProperty("logic-sig-disassembly") - public List logicSigDisassembly = new ArrayList(); - - @JsonProperty("logic-sig-messages") - public List logicSigMessages = new ArrayList(); - - @JsonProperty("logic-sig-trace") - public List logicSigTrace = new ArrayList(); - - @JsonProperty("logs") - public List logs = new ArrayList(); - @JsonIgnore - public void logs(List base64Encoded) { - this.logs = new ArrayList(); - for (String val : base64Encoded) { - this.logs.add(Encoder.decodeFromBase64(val)); - } - } - @JsonIgnore - public List logs() { - ArrayList ret = new ArrayList(); - for (byte[] val : this.logs) { - ret.add(Encoder.encodeToBase64(val)); - } - return ret; - } - - @Override - public boolean equals(Object o) { - - if (this == o) return true; - if (o == null) return false; - - DryrunTxnResult other = (DryrunTxnResult) o; - if (!Objects.deepEquals(this.appCallMessages, other.appCallMessages)) return false; - if (!Objects.deepEquals(this.appCallTrace, other.appCallTrace)) return false; - if (!Objects.deepEquals(this.budgetAdded, other.budgetAdded)) return false; - if (!Objects.deepEquals(this.budgetConsumed, other.budgetConsumed)) return false; - if (!Objects.deepEquals(this.disassembly, other.disassembly)) return false; - if (!Objects.deepEquals(this.globalDelta, other.globalDelta)) return false; - if (!Objects.deepEquals(this.localDeltas, other.localDeltas)) return false; - if (!Objects.deepEquals(this.logicSigDisassembly, other.logicSigDisassembly)) return false; - if (!Objects.deepEquals(this.logicSigMessages, other.logicSigMessages)) return false; - if (!Objects.deepEquals(this.logicSigTrace, other.logicSigTrace)) return false; - if (!Objects.deepEquals(this.logs, other.logs)) return false; - - return true; - } -} diff --git a/src/main/java/com/algorand/algosdk/v2/client/model/Enums.java b/src/main/java/com/algorand/algosdk/v2/client/model/Enums.java index bf8b34749..7bcd37ad5 100644 --- a/src/main/java/com/algorand/algosdk/v2/client/model/Enums.java +++ b/src/main/java/com/algorand/algosdk/v2/client/model/Enums.java @@ -106,8 +106,13 @@ public static Hashtype forValue(String value) { } + /** + * Include additional items in the response. Use `values` to include box values. + * Multiple values can be comma-separated. + */ public enum Include { @JsonProperty("params") PARAMS("params"), + @JsonProperty("values") VALUES("values"), @JsonProperty("") UNKNOWN(""); final String serializedName; diff --git a/src/main/java/com/algorand/algosdk/v2/client/model/SimulateTransactionGroupResult.java b/src/main/java/com/algorand/algosdk/v2/client/model/SimulateTransactionGroupResult.java index 6045d1bab..07130c9eb 100644 --- a/src/main/java/com/algorand/algosdk/v2/client/model/SimulateTransactionGroupResult.java +++ b/src/main/java/com/algorand/algosdk/v2/client/model/SimulateTransactionGroupResult.java @@ -40,6 +40,20 @@ public class SimulateTransactionGroupResult extends PathResponse { @JsonProperty("failure-message") public String failureMessage; + /** + * Total fees paid by the transaction group and all of its descendant inner + * transaction groups. + */ + @JsonProperty("group-fees-paid") + public Long groupFeesPaid; + + /** + * Fee usage for the transaction group, including all descendant inner + * transactions, in millionths of a basic transaction fee unit. + */ + @JsonProperty("group-usage") + public Long groupUsage; + /** * Simulation result for individual transactions */ @@ -71,6 +85,8 @@ public boolean equals(Object o) { if (!Objects.deepEquals(this.appBudgetConsumed, other.appBudgetConsumed)) return false; if (!Objects.deepEquals(this.failedAt, other.failedAt)) return false; if (!Objects.deepEquals(this.failureMessage, other.failureMessage)) return false; + if (!Objects.deepEquals(this.groupFeesPaid, other.groupFeesPaid)) return false; + if (!Objects.deepEquals(this.groupUsage, other.groupUsage)) return false; if (!Objects.deepEquals(this.txnResults, other.txnResults)) return false; if (!Objects.deepEquals(this.unnamedResourcesAccessed, other.unnamedResourcesAccessed)) return false; diff --git a/src/main/java/com/algorand/algosdk/v2/client/model/SimulateTransactionResult.java b/src/main/java/com/algorand/algosdk/v2/client/model/SimulateTransactionResult.java index ac906ba17..e4bfc229c 100644 --- a/src/main/java/com/algorand/algosdk/v2/client/model/SimulateTransactionResult.java +++ b/src/main/java/com/algorand/algosdk/v2/client/model/SimulateTransactionResult.java @@ -26,6 +26,13 @@ public class SimulateTransactionResult extends PathResponse { @JsonProperty("exec-trace") public SimulationTransactionExecTrace execTrace; + /** + * Total fees paid by this transaction and all of its descendant inner + * transactions. + */ + @JsonProperty("fees-paid") + public Long feesPaid; + /** * The account that needed to sign this transaction when no signature was provided * and the provided signer was incorrect. @@ -80,6 +87,7 @@ public boolean equals(Object o) { SimulateTransactionResult other = (SimulateTransactionResult) o; if (!Objects.deepEquals(this.appBudgetConsumed, other.appBudgetConsumed)) return false; if (!Objects.deepEquals(this.execTrace, other.execTrace)) return false; + if (!Objects.deepEquals(this.feesPaid, other.feesPaid)) return false; if (!Objects.deepEquals(this.fixedSigner, other.fixedSigner)) return false; if (!Objects.deepEquals(this.logicSigBudgetConsumed, other.logicSigBudgetConsumed)) return false; if (!Objects.deepEquals(this.txnResult, other.txnResult)) return false; diff --git a/src/main/java/com/algorand/algosdk/v2/client/model/TransactionParametersResponse.java b/src/main/java/com/algorand/algosdk/v2/client/model/TransactionParametersResponse.java index 12b366e94..d807b189d 100644 --- a/src/main/java/com/algorand/algosdk/v2/client/model/TransactionParametersResponse.java +++ b/src/main/java/com/algorand/algosdk/v2/client/model/TransactionParametersResponse.java @@ -53,8 +53,8 @@ public String genesisHash() { public Long lastRound; /** - * The minimum transaction fee (not per byte) required for the - * txn to validate for the current network protocol. + * The minimum transaction fee (not per byte) required for the txn to validate for + * the current network protocol. */ @JsonProperty("min-fee") public Long minFee;