diff --git a/examples/README.md b/examples/README.md
new file mode 100644
index 000000000..16afe5dd3
--- /dev/null
+++ b/examples/README.md
@@ -0,0 +1,15 @@
+Algorand Java SDK Examples
+
+
+
+Running
+--------
+Package with `mvn`
+```sh
+mvn package
+```
+
+Run an example with java
+```sh
+java -cp target/sdk-extras-1.0-SNAPSHOT.jar com.algorand.examples.Example
+```
\ No newline at end of file
diff --git a/examples/application/approval.teal b/examples/application/approval.teal
new file mode 100644
index 000000000..07fca803f
--- /dev/null
+++ b/examples/application/approval.teal
@@ -0,0 +1,100 @@
+#pragma version 4
+// Handle each possible OnCompletion type. We don't have to worry about
+// handling ClearState, because the ClearStateProgram will execute in that
+// case, not the ApprovalProgram.
+txn ApplicationID
+int 0
+==
+bnz handle_approve
+
+txn OnCompletion
+int NoOp
+==
+bnz handle_noop
+
+txn OnCompletion
+int OptIn
+==
+bnz handle_approve
+
+txn OnCompletion
+int CloseOut
+==
+bnz handle_closeout
+
+txn OnCompletion
+int UpdateApplication
+==
+bnz handle_updateapp
+
+txn OnCompletion
+int DeleteApplication
+==
+bnz handle_deleteapp
+
+// Unexpected OnCompletion value. Should be unreachable.
+err
+
+handle_noop:
+// Handle NoOp
+
+// read global state
+byte "counter"
+dup
+app_global_get
+
+// increment the value
+int 1
++
+
+// store to scratch space
+dup
+store 0
+
+// update global state
+app_global_put
+
+// read local state for sender
+int 0
+byte "counter"
+app_local_get
+
+// increment the value
+int 1
++
+store 1
+
+// update local state for sender
+int 0
+byte "counter"
+load 1
+app_local_put
+
+// load return value as approval
+load 0
+return
+
+
+handle_closeout:
+// Handle CloseOut
+//approval
+int 1
+return
+
+handle_deleteapp:
+// Check for creator
+global CreatorAddress
+txn Sender
+==
+return
+
+handle_updateapp:
+// Check for creator
+global CreatorAddress
+txn Sender
+==
+return
+
+handle_approve:
+int 1
+return
\ No newline at end of file
diff --git a/examples/application/approval_refactored.teal b/examples/application/approval_refactored.teal
new file mode 100644
index 000000000..1af5a7ebe
--- /dev/null
+++ b/examples/application/approval_refactored.teal
@@ -0,0 +1,107 @@
+#pragma version 4
+// Handle each possible OnCompletion type. We don't have to worry about
+// handling ClearState, because the ClearStateProgram will execute in that
+// case, not the ApprovalProgram.
+
+txn ApplicationID
+int 0
+==
+bnz handle_approve
+
+txn OnCompletion
+int NoOp
+==
+bnz handle_noop
+
+txn OnCompletion
+int OptIn
+==
+bnz handle_approve
+
+txn OnCompletion
+int CloseOut
+==
+bnz handle_closeout
+
+txn OnCompletion
+int UpdateApplication
+==
+bnz handle_updateapp
+
+txn OnCompletion
+int DeleteApplication
+==
+bnz handle_deleteapp
+
+// Unexpected OnCompletion value. Should be unreachable.
+err
+
+handle_noop:
+// Handle NoOp
+
+// read global state
+byte "counter"
+dup
+app_global_get
+
+// increment the value
+int 1
++
+
+// store to scratch space
+dup
+store 0
+
+// update global state
+app_global_put
+
+// read local state for sender
+int 0
+byte "counter"
+app_local_get
+
+// increment the value
+int 1
++
+store 1
+
+// update local state for sender
+// update "counter"
+int 0
+byte "counter"
+load 1
+app_local_put
+
+// update "timestamp"
+int 0
+byte "timestamp"
+txn ApplicationArgs 0
+app_local_put
+
+// load return value as approval
+load 0
+return
+
+handle_closeout:
+// Handle CloseOut
+//approval
+int 1
+return
+
+handle_deleteapp:
+// Check for creator
+global CreatorAddress
+txn Sender
+==
+return
+
+handle_updateapp:
+// Check for creator
+global CreatorAddress
+txn Sender
+==
+return
+
+handle_approve:
+int 1
+return
\ No newline at end of file
diff --git a/examples/application/clear.teal b/examples/application/clear.teal
new file mode 100644
index 000000000..d793651c8
--- /dev/null
+++ b/examples/application/clear.teal
@@ -0,0 +1,3 @@
+#pragma version 4
+int 1
+return
\ No newline at end of file
diff --git a/examples/calculator/approval.teal b/examples/calculator/approval.teal
new file mode 100644
index 000000000..32acbb840
--- /dev/null
+++ b/examples/calculator/approval.teal
@@ -0,0 +1,181 @@
+#pragma version 8
+intcblock 0 1
+bytecblock 0x151f7c75
+txn NumAppArgs
+intc_0 // 0
+==
+bnz main_l10
+txna ApplicationArgs 0
+pushbytes 0xfe6bdf69 // "add(uint64,uint64)uint64"
+==
+bnz main_l9
+txna ApplicationArgs 0
+pushbytes 0xe2f188c5 // "mul(uint64,uint64)uint64"
+==
+bnz main_l8
+txna ApplicationArgs 0
+pushbytes 0x78b488b7 // "sub(uint64,uint64)uint64"
+==
+bnz main_l7
+txna ApplicationArgs 0
+pushbytes 0x16e80f08 // "div(uint64,uint64)uint64"
+==
+bnz main_l6
+err
+main_l6:
+txn OnCompletion
+intc_0 // NoOp
+==
+txn ApplicationID
+intc_0 // 0
+!=
+&&
+assert
+txna ApplicationArgs 1
+btoi
+store 9
+txna ApplicationArgs 2
+btoi
+store 10
+load 9
+load 10
+callsub div_3
+store 11
+bytec_0 // 0x151f7c75
+load 11
+itob
+concat
+log
+intc_1 // 1
+return
+main_l7:
+txn OnCompletion
+intc_0 // NoOp
+==
+txn ApplicationID
+intc_0 // 0
+!=
+&&
+assert
+txna ApplicationArgs 1
+btoi
+store 6
+txna ApplicationArgs 2
+btoi
+store 7
+load 6
+load 7
+callsub sub_2
+store 8
+bytec_0 // 0x151f7c75
+load 8
+itob
+concat
+log
+intc_1 // 1
+return
+main_l8:
+txn OnCompletion
+intc_0 // NoOp
+==
+txn ApplicationID
+intc_0 // 0
+!=
+&&
+assert
+txna ApplicationArgs 1
+btoi
+store 3
+txna ApplicationArgs 2
+btoi
+store 4
+load 3
+load 4
+callsub mul_1
+store 5
+bytec_0 // 0x151f7c75
+load 5
+itob
+concat
+log
+intc_1 // 1
+return
+main_l9:
+txn OnCompletion
+intc_0 // NoOp
+==
+txn ApplicationID
+intc_0 // 0
+!=
+&&
+assert
+txna ApplicationArgs 1
+btoi
+store 0
+txna ApplicationArgs 2
+btoi
+store 1
+load 0
+load 1
+callsub add_0
+store 2
+bytec_0 // 0x151f7c75
+load 2
+itob
+concat
+log
+intc_1 // 1
+return
+main_l10:
+txn OnCompletion
+intc_0 // NoOp
+==
+bnz main_l12
+err
+main_l12:
+txn ApplicationID
+intc_0 // 0
+==
+assert
+intc_1 // 1
+return
+
+// add
+add_0:
+proto 2 1
+intc_0 // 0
+frame_dig -2
+frame_dig -1
++
+frame_bury 0
+retsub
+
+// mul
+mul_1:
+proto 2 1
+intc_0 // 0
+frame_dig -2
+frame_dig -1
+*
+frame_bury 0
+retsub
+
+// sub
+sub_2:
+proto 2 1
+intc_0 // 0
+frame_dig -2
+frame_dig -1
+-
+frame_bury 0
+retsub
+
+// div
+div_3:
+proto 2 1
+intc_0 // 0
+frame_dig -2
+frame_dig -1
+/
+frame_bury 0
+retsub
\ No newline at end of file
diff --git a/examples/calculator/clear.teal b/examples/calculator/clear.teal
new file mode 100644
index 000000000..e741f0e57
--- /dev/null
+++ b/examples/calculator/clear.teal
@@ -0,0 +1,3 @@
+#pragma version 8
+pushint 0 // 0
+return
\ No newline at end of file
diff --git a/examples/calculator/contract.json b/examples/calculator/contract.json
new file mode 100644
index 000000000..4b23fa17e
--- /dev/null
+++ b/examples/calculator/contract.json
@@ -0,0 +1,74 @@
+{
+ "name": "Calculator",
+ "methods": [
+ {
+ "name": "add",
+ "args": [
+ {
+ "type": "uint64",
+ "name": "a"
+ },
+ {
+ "type": "uint64",
+ "name": "b"
+ }
+ ],
+ "returns": {
+ "type": "uint64"
+ },
+ "desc": "Add a and b, return the result"
+ },
+ {
+ "name": "mul",
+ "args": [
+ {
+ "type": "uint64",
+ "name": "a"
+ },
+ {
+ "type": "uint64",
+ "name": "b"
+ }
+ ],
+ "returns": {
+ "type": "uint64"
+ },
+ "desc": "Multiply a and b, return the result"
+ },
+ {
+ "name": "sub",
+ "args": [
+ {
+ "type": "uint64",
+ "name": "a"
+ },
+ {
+ "type": "uint64",
+ "name": "b"
+ }
+ ],
+ "returns": {
+ "type": "uint64"
+ },
+ "desc": "Subtract b from a, return the result"
+ },
+ {
+ "name": "div",
+ "args": [
+ {
+ "type": "uint64",
+ "name": "a"
+ },
+ {
+ "type": "uint64",
+ "name": "b"
+ }
+ ],
+ "returns": {
+ "type": "uint64"
+ },
+ "desc": "Divide a by b, return the result"
+ }
+ ],
+ "networks": {}
+}
\ No newline at end of file
diff --git a/examples/lsig/sample_arg.teal b/examples/lsig/sample_arg.teal
new file mode 100644
index 000000000..8f21008e4
--- /dev/null
+++ b/examples/lsig/sample_arg.teal
@@ -0,0 +1,5 @@
+#pragma version 5
+arg_0
+btoi
+int 123
+==
\ No newline at end of file
diff --git a/examples/lsig/simple.teal b/examples/lsig/simple.teal
new file mode 100644
index 000000000..d62986563
--- /dev/null
+++ b/examples/lsig/simple.teal
@@ -0,0 +1,3 @@
+#pragma version 5
+int 1
+return
\ No newline at end of file
diff --git a/examples/pom.xml b/examples/pom.xml
new file mode 100644
index 000000000..3b06f5d04
--- /dev/null
+++ b/examples/pom.xml
@@ -0,0 +1,119 @@
+
+ 4.0.0
+ com.algorand
+ sdk-extras
+ jar
+ 1.0-SNAPSHOT
+ sdk-extras
+ http://maven.apache.org
+
+
+ 1.8
+ 1.8
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-annotations
+ 2.10.0
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+ 2.10.0
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ 2.10.5.1
+
+
+ com.squareup.okhttp
+ logging-interceptor
+ 2.7.5
+
+
+ com.squareup.okhttp
+ okhttp
+ 2.7.5
+
+
+ com.squareup.okio
+ okio
+ 1.6.0
+
+
+ commons-codec
+ commons-codec
+
+ 1.12
+
+
+ io.gsonfire
+ gson-fire
+ 1.8.0
+
+
+ io.swagger
+ swagger-annotations
+ 1.5.18
+
+
+ org.apache.commons
+ commons-lang3
+
+ 3.8
+
+
+ org.bouncycastle
+ bcprov-jdk15to18
+ 1.66
+
+
+ org.msgpack
+ jackson-dataformat-msgpack
+ 0.9.0
+
+
+ org.threeten
+ threetenbp
+ 1.3.5
+
+
+ com.google.guava
+ guava
+ 28.2-android
+
+
+ junit
+ junit
+ 3.8.1
+ test
+
+
+ com.algorand
+ algosdk
+ 2.0.0
+
+
+
+
+
+
+ maven-assembly-plugin
+
+
+
+ com.algorand.examples.Example
+
+
+
+ jar-with-dependencies
+
+
+
+
+
+
diff --git a/examples/runit.sh b/examples/runit.sh
new file mode 100755
index 000000000..2b3eab9f4
--- /dev/null
+++ b/examples/runit.sh
@@ -0,0 +1,2 @@
+mvn clean compile assembly:single
+java -cp target/sdk-extras-1.0-SNAPSHOT-jar-with-dependencies.jar com.algorand.examples.Example
diff --git a/examples/src/main/java/com/algorand/examples/ASAExamples.java b/examples/src/main/java/com/algorand/examples/ASAExamples.java
new file mode 100644
index 000000000..e68389743
--- /dev/null
+++ b/examples/src/main/java/com/algorand/examples/ASAExamples.java
@@ -0,0 +1,198 @@
+package com.algorand.examples;
+
+import java.util.List;
+
+import org.bouncycastle.pqc.crypto.ExchangePair;
+
+import com.algorand.algosdk.account.Account;
+import com.algorand.algosdk.transaction.SignedTransaction;
+import com.algorand.algosdk.transaction.Transaction;
+import com.algorand.algosdk.util.Encoder;
+import com.algorand.algosdk.v2.client.Utils;
+import com.algorand.algosdk.v2.client.common.AlgodClient;
+import com.algorand.algosdk.v2.client.common.Response;
+import com.algorand.algosdk.v2.client.model.Asset;
+import com.algorand.algosdk.v2.client.model.PendingTransactionResponse;
+import com.algorand.algosdk.v2.client.model.PostTransactionsResponse;
+import com.algorand.algosdk.v2.client.model.TransactionParametersResponse;
+
+public class ASAExamples {
+
+ public static void main(String[] args) throws Exception {
+ AlgodClient algodClient = ExampleUtils.getAlgodClient();
+ List accts = ExampleUtils.getSandboxAccounts();
+ Account acct1 = accts.get(0);
+ Account acct2 = accts.get(1);
+
+ Long asaId = createAsset(algodClient, acct1);
+
+ printAssetInfo(algodClient, asaId);
+ configureAsset(algodClient, acct1, asaId);
+ optInToAsset(algodClient, acct2, asaId);
+ xferAsset(algodClient, acct1, acct2, asaId);
+ freezeAsset(algodClient, acct1, acct2, asaId);
+ clawbackAsset(algodClient, acct1, acct2, asaId);
+ deleteAsset(algodClient, acct1, asaId);
+ }
+
+ public static void printAssetInfo(AlgodClient algodClient, Long asaId) throws Exception {
+ // example: ASSET_INFO
+ // Retrieve the asset info of the newly created asset
+ Response assetResp = algodClient.GetAssetByID(asaId).execute();
+ Asset assetInfo = assetResp.body();
+ System.out.printf("Asset Name: %s\n", assetInfo.params.name);
+ // example: ASSET_INFO
+ }
+
+ public static Long createAsset(AlgodClient algodClient, Account acct) throws Exception {
+ // example: ASSET_CREATE
+ // Account 1 creates an asset called `rug` with a total supply
+ // of 1000 units and sets itself to the freeze/clawback/manager/reserve roles
+ Response rsp = algodClient.TransactionParams().execute();
+ TransactionParametersResponse sp = rsp.body();
+
+ // Under the covers, this is an AssetConfig with asset id set to 0
+ Transaction createTxn = Transaction.AssetCreateTransactionBuilder().suggestedParams(sp)
+ .sender(acct.getAddress())
+ .assetTotal(1000)
+ .assetDecimals(0)
+ .defaultFrozen(false)
+ .assetUnitName("rug")
+ .assetName("Really Useful Gift")
+ .url("https://path/to/my/asset/details")
+ .manager(acct.getAddress())
+ .reserve(acct.getAddress())
+ .freeze(acct.getAddress())
+ .clawback(acct.getAddress())
+ .build();
+
+ SignedTransaction signedCreateTxn = acct.signTransaction(createTxn);
+ Response submitResult = algodClient.RawTransaction()
+ .rawtxn(Encoder.encodeToMsgPack(signedCreateTxn)).execute();
+ String txId = submitResult.body().txId;
+ PendingTransactionResponse result = Utils.waitForConfirmation(algodClient, txId, 4);
+
+ // Grab the asset id for the asset we just created
+ Long asaId = result.assetIndex;
+ System.out.printf("Created asset with id: %d\n", asaId);
+
+ // example: ASSET_CREATE
+ return asaId;
+ }
+
+ public static void configureAsset(AlgodClient algodClient, Account acct, Long asaId) throws Exception {
+ // example: ASSET_CONFIG
+ Response rsp = algodClient.TransactionParams().execute();
+ TransactionParametersResponse sp = rsp.body();
+ // Wipe the `reserve` address through an AssetConfigTransaction
+ Transaction reconfigureTxn = Transaction.AssetConfigureTransactionBuilder().suggestedParams(sp)
+ .sender(acct.getAddress())
+ .assetIndex(asaId)
+ .manager(acct.getAddress())
+ .freeze(acct.getAddress())
+ .clawback(acct.getAddress())
+ .strictEmptyAddressChecking(false)
+ .reserve(new byte[32])
+ .build();
+
+ // example: ASSET_CONFIG
+ SignedTransaction signedReconfigure = acct.signTransaction(reconfigureTxn);
+ ExampleUtils.sendPrint(algodClient, signedReconfigure, "config asset");
+ }
+
+ public static void optInToAsset(AlgodClient algodClient, Account acct, Long asaId) throws Exception {
+ // example: ASSET_OPTIN
+ Response rsp = algodClient.TransactionParams().execute();
+ TransactionParametersResponse sp = rsp.body();
+ // Under the covers, this is an AssetTransfer from me to me for amount 0
+ // with asset id set to the asset we wish to start accepting
+ Transaction optInTxn = Transaction.AssetAcceptTransactionBuilder().suggestedParams(sp)
+ .sender(acct.getAddress())
+ .assetIndex(asaId)
+ .build();
+
+ // example: ASSET_OPTIN
+ SignedTransaction signedOptIn = acct.signTransaction(optInTxn);
+ ExampleUtils.sendPrint(algodClient, signedOptIn, "opt in asset");
+ }
+
+ public static void xferAsset(AlgodClient algodClient, Account sender, Account receiver, Long asaId)
+ throws Exception {
+ // example: ASSET_XFER
+ Response rsp = algodClient.TransactionParams().execute();
+ TransactionParametersResponse sp = rsp.body();
+ // Under the covers, this is an AssetTransfer from me to me for amount 0
+ // with asset id set to the asset we wish to start accepting
+ Transaction xferTxn = Transaction.AssetTransferTransactionBuilder().suggestedParams(sp)
+ .sender(sender.getAddress())
+ .assetReceiver(receiver.getAddress())
+ .assetIndex(asaId)
+ .assetAmount(1)
+ .build();
+
+ // example: ASSET_XFER
+ SignedTransaction signedXfer = sender.signTransaction(xferTxn);
+ ExampleUtils.sendPrint(algodClient, signedXfer, "xfer asset");
+ }
+
+ public static void freezeAsset(AlgodClient algodClient, Account sender, Account receiver, Long asaId)
+ throws Exception {
+ // example: ASSET_FREEZE
+ Response rsp = algodClient.TransactionParams().execute();
+ TransactionParametersResponse sp = rsp.body();
+ // Set the freeze state on the account, only the account that is set to the
+ // freeze role
+ // on the asset may issue this transaction
+ Transaction freezeTxn = Transaction.AssetFreezeTransactionBuilder().suggestedParams(sp)
+ .sender(sender.getAddress())
+ .freezeTarget(receiver.getAddress())
+ .freezeState(true)
+ .assetIndex(asaId)
+ .build();
+
+ // example: ASSET_FREEZE
+ SignedTransaction signedFreeze = sender.signTransaction(freezeTxn);
+ ExampleUtils.sendPrint(algodClient, signedFreeze, "freeze asset");
+ }
+
+ public static void clawbackAsset(AlgodClient algodClient, Account sender, Account receiver, Long asaId)
+ throws Exception {
+ // example: ASSET_CLAWBACK
+ Response rsp = algodClient.TransactionParams().execute();
+ TransactionParametersResponse sp = rsp.body();
+ // revoke an asset from an account, only the account that is set to the clawback
+ // role
+ // on the asset may issue this transaction
+ Transaction clawbackTxn = Transaction.AssetClawbackTransactionBuilder().suggestedParams(sp)
+ .sender(sender.getAddress())
+ .assetClawbackFrom(receiver.getAddress())
+ .assetReceiver(sender.getAddress())
+ .assetIndex(asaId)
+ .assetAmount(1)
+ .build();
+
+ // example: ASSET_CLAWBACK
+ SignedTransaction signedClawback = sender.signTransaction(clawbackTxn);
+ ExampleUtils.sendPrint(algodClient, signedClawback, "clawback asset");
+ }
+
+ public static void deleteAsset(AlgodClient algodClient, Account acct, Long asaId) throws Exception {
+ // example: ASSET_DELETE
+ Response rsp = algodClient.TransactionParams().execute();
+ TransactionParametersResponse sp = rsp.body();
+ // Under the covers, an AssetDestroyTransaction is an AssetConfig with all of
+ // its
+ // configurable fields set to empty
+ // All units of the asset _must_ be owned by the creator account and this
+ // transaction _must_
+ // be issued by the account set to the manager role on the asset
+ Transaction destroyTxn = Transaction.AssetDestroyTransactionBuilder().suggestedParams(sp)
+ .sender(acct.getAddress())
+ .assetIndex(asaId)
+ .build();
+
+ // example: ASSET_DELETE
+ SignedTransaction signedDestroy = acct.signTransaction(destroyTxn);
+ ExampleUtils.sendPrint(algodClient, signedDestroy, "clawback asset");
+ }
+}
diff --git a/examples/src/main/java/com/algorand/examples/ATC.java b/examples/src/main/java/com/algorand/examples/ATC.java
new file mode 100644
index 000000000..a9423c0c3
--- /dev/null
+++ b/examples/src/main/java/com/algorand/examples/ATC.java
@@ -0,0 +1,184 @@
+package com.algorand.examples;
+
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.codec.binary.Hex;
+
+import com.algorand.algosdk.abi.Contract;
+import com.algorand.algosdk.abi.Method;
+import com.algorand.algosdk.account.Account;
+import com.algorand.algosdk.builder.transaction.ApplicationCreateTransactionBuilder;
+import com.algorand.algosdk.builder.transaction.MethodCallTransactionBuilder;
+import com.algorand.algosdk.builder.transaction.PaymentTransactionBuilder;
+import com.algorand.algosdk.crypto.TEALProgram;
+import com.algorand.algosdk.logic.StateSchema;
+import com.algorand.algosdk.transaction.AppBoxReference;
+import com.algorand.algosdk.transaction.AtomicTransactionComposer;
+import com.algorand.algosdk.transaction.MethodCallParams;
+import com.algorand.algosdk.transaction.SignedTransaction;
+import com.algorand.algosdk.transaction.Transaction;
+import com.algorand.algosdk.transaction.TransactionWithSigner;
+import com.algorand.algosdk.transaction.AtomicTransactionComposer.ExecuteResult;
+import com.algorand.algosdk.util.Encoder;
+import com.algorand.algosdk.v2.client.Utils;
+import com.algorand.algosdk.v2.client.common.AlgodClient;
+import com.algorand.algosdk.v2.client.common.Response;
+import com.algorand.algosdk.v2.client.model.CompileResponse;
+import com.algorand.algosdk.v2.client.model.PendingTransactionResponse;
+import com.algorand.algosdk.v2.client.model.PostTransactionsResponse;
+import com.algorand.algosdk.v2.client.model.TransactionParametersResponse;
+
+public class ATC {
+
+ public static void main(String[] args) throws Exception {
+ AlgodClient algodClient = ExampleUtils.getAlgodClient();
+ List accts = ExampleUtils.getSandboxAccounts();
+ Account acct = accts.get(0);
+
+ Long appId = deployApp(algodClient, acct);
+
+ // Get suggested params from client
+ Response rsp = algodClient.TransactionParams().execute();
+ TransactionParametersResponse sp = rsp.body();
+
+ // example: ATC_CREATE
+ AtomicTransactionComposer atc = new AtomicTransactionComposer();
+ // example: ATC_CREATE
+
+ // example: ATC_ADD_TRANSACTION
+ // Create a transaction
+ Transaction ptxn = PaymentTransactionBuilder.Builder().amount(10000).suggestedParams(sp)
+ .sender(acct.getAddress()).receiver(acct.getAddress()).build();
+
+ // Construct TransactionWithSigner
+ TransactionWithSigner tws = new TransactionWithSigner(ptxn,
+ acct.getTransactionSigner());
+
+ // Pass TransactionWithSigner to atc
+ atc.addTransaction(tws);
+ // example: ATC_ADD_TRANSACTION
+
+ // example: ATC_CONTRACT_INIT
+ // Read the json from disk
+ String jsonContract = Files.readString(Paths.get("calculator/contract.json"));
+ // Create Contract from Json
+ Contract contract = Encoder.decodeFromJson(jsonContract, Contract.class);
+ // example: ATC_CONTRACT_INIT
+
+ // example: ATC_ADD_METHOD_CALL
+ // create methodCallParams by builder (or create by constructor) for add method
+ List