From 0675feeb95dbe1f604dc827d91e05813f1611973 Mon Sep 17 00:00:00 2001
From: Christian Rogobete <c.rogobete@soneso.com>
Date: Tue, 12 Dec 2023 19:20:51 +0100
Subject: [PATCH 1/3] prepare for soroban 20.0.0

---
 lib/src/responses/asset_response.dart         |  43 +++++++++++-------
 ...tend_footprint_ttl_operation_response.dart |   4 +-
 lib/src/soroban/soroban_server.dart           |  39 ++++++++--------
 test/soroban_test.dart                        |  42 ++++++++---------
 test/soroban_test_atomic_swap.dart            |  37 ++++++++-------
 test/soroban_test_auth.dart                   |  34 +++++---------
 test/wasm/soroban_atomic_swap_contract.wasm   | Bin 1846 -> 2002 bytes
 test/wasm/soroban_auth_contract.wasm          | Bin 992 -> 988 bytes
 test/wasm/soroban_events_contract.wasm        | Bin 746 -> 742 bytes
 test/wasm/soroban_hello_world_contract.wasm   | Bin 543 -> 539 bytes
 test/wasm/soroban_token_contract.wasm         | Bin 6425 -> 7471 bytes
 11 files changed, 98 insertions(+), 101 deletions(-)
 mode change 100644 => 100755 test/wasm/soroban_atomic_swap_contract.wasm
 mode change 100644 => 100755 test/wasm/soroban_token_contract.wasm

diff --git a/lib/src/responses/asset_response.dart b/lib/src/responses/asset_response.dart
index 96cf3ac..f2db320 100644
--- a/lib/src/responses/asset_response.dart
+++ b/lib/src/responses/asset_response.dart
@@ -25,24 +25,29 @@ class AssetResponse extends Response {
   AssetResponseLinks links;
   int? numContracts;
   String? contractsAmount;
+  int? numArchivedContracts;
+  String? archivedContractsAmount;
 
   AssetResponse(
-      this.assetType,
-      this.assetCode,
-      this.assetIssuer,
-      this.accounts,
-      this.numClaimableBalances,
-      this.balances,
-      this.claimableBalancesAmount,
-      this.pagingToken,
-      this.amount,
-      this.numAccounts,
-      this.numLiquidityPools,
-      this.liquidityPoolsAmount,
-      this.flags,
-      this.links,
-      {this.numContracts,
-      this.contractsAmount});
+    this.assetType,
+    this.assetCode,
+    this.assetIssuer,
+    this.accounts,
+    this.numClaimableBalances,
+    this.balances,
+    this.claimableBalancesAmount,
+    this.pagingToken,
+    this.amount,
+    this.numAccounts,
+    this.numLiquidityPools,
+    this.liquidityPoolsAmount,
+    this.flags,
+    this.links, {
+    this.numContracts,
+    this.contractsAmount,
+    this.numArchivedContracts,
+    this.archivedContractsAmount,
+  });
 
   Asset get asset {
     return Asset.create(this.assetType, this.assetCode, this.assetIssuer);
@@ -66,7 +71,11 @@ class AssetResponse extends Response {
       numContracts: json['num_contracts'] == null
           ? null
           : convertInt(json['num_contracts']!)!,
-      contractsAmount: json['contracts_amount'])
+      contractsAmount: json['contracts_amount'],
+      numArchivedContracts: json['num_archived_contracts'] == null
+          ? null
+          : convertInt(json['num_archived_contracts']!)!,
+      archivedContractsAmount: json['archived_contracts_amount'])
     ..rateLimitLimit = convertInt(json['rateLimitLimit'])
     ..rateLimitRemaining = convertInt(json['rateLimitRemaining'])
     ..rateLimitReset = convertInt(json['rateLimitReset']);
diff --git a/lib/src/responses/operations/extend_footprint_ttl_operation_response.dart b/lib/src/responses/operations/extend_footprint_ttl_operation_response.dart
index 2a80092..c6c54cb 100644
--- a/lib/src/responses/operations/extend_footprint_ttl_operation_response.dart
+++ b/lib/src/responses/operations/extend_footprint_ttl_operation_response.dart
@@ -10,9 +10,7 @@ class ExtendFootprintTTLOperationResponse extends OperationResponse {
   factory ExtendFootprintTTLOperationResponse.fromJson(
           Map<String, dynamic> json) =>
       ExtendFootprintTTLOperationResponse(convertInt(
-          json['ledgers_to_expire'] == null
-              ? json['extend_to']
-              : json['ledgers_to_expire'])!)
+          json['extend_to'])!)
         ..id = int.tryParse(json['id'])
         ..sourceAccount =
             json['source_account'] == null ? null : json['source_account']
diff --git a/lib/src/soroban/soroban_server.dart b/lib/src/soroban/soroban_server.dart
index 8b20c05..4a2ac39 100644
--- a/lib/src/soroban/soroban_server.dart
+++ b/lib/src/soroban/soroban_server.dart
@@ -263,7 +263,7 @@ class GetLatestLedgerResponse extends SorobanRpcResponse {
   String? id;
 
   /// Stellar Core protocol version associated with the latest ledger.
-  String? protocolVersion;
+  int? protocolVersion;
 
   /// Sequence number of the latest ledger.
   int? sequence;
@@ -313,7 +313,7 @@ class GetLedgerEntriesResponse extends SorobanRpcResponse {
   List<LedgerEntry>? entries;
 
   /// The current latest ledger observed by the node when this response was generated.
-  String? latestLedger;
+  int? latestLedger;
 
   GetLedgerEntriesResponse(Map<String, dynamic> jsonResponse)
       : super(jsonResponse);
@@ -340,10 +340,10 @@ class LedgerEntry {
   String xdr;
 
   /// The ledger number of the last time this entry was updated (optional)
-  String lastModifiedLedgerSeq;
+  int lastModifiedLedgerSeq;
 
   /// The ledger sequence number after which the ledger entry would expire. This field exists only for ContractCodeEntry and ContractDataEntry ledger entries (optional).
-  String? liveUntilLedgerSeq;
+  int? liveUntilLedgerSeq;
 
   XdrLedgerEntryData get ledgerEntryDataXdr =>
       XdrLedgerEntryData.fromBase64EncodedXdrString(xdr);
@@ -354,8 +354,8 @@ class LedgerEntry {
   factory LedgerEntry.fromJson(Map<String, dynamic> json) {
     String key = json['key'];
     String xdr = json['xdr'];
-    String lastModifiedLedgerSeq = json['lastModifiedLedgerSeq'];
-    String? liveUntilLedgerSeq = json['liveUntilLedgerSeq'];
+    int lastModifiedLedgerSeq = json['lastModifiedLedgerSeq'];
+    int? liveUntilLedgerSeq = json['liveUntilLedgerSeq'];
     return LedgerEntry(key, xdr, lastModifiedLedgerSeq, liveUntilLedgerSeq);
   }
 }
@@ -364,7 +364,7 @@ class LedgerEntry {
 class GetNetworkResponse extends SorobanRpcResponse {
   String? friendbotUrl;
   String? passphrase;
-  String? protocolVersion;
+  int? protocolVersion;
 
   GetNetworkResponse(Map<String, dynamic> jsonResponse) : super(jsonResponse);
 
@@ -408,8 +408,8 @@ class RestorePreamble {
 /// Response that will be received when submitting a trial contract invocation.
 /// See: https://soroban.stellar.org/api/methods/simulateTransaction
 class SimulateTransactionResponse extends SorobanRpcResponse {
-  /// Stringified-number of the current latest ledger observed by the node when this response was generated.
-  String? latestLedger;
+  /// number of the current latest ledger observed by the node when this response was generated.
+  int? latestLedger;
 
   /// If error is present then results will not be in the response
   /// There will be one results object for each operation in the transaction.
@@ -558,7 +558,7 @@ class SendTransactionResponse extends SorobanRpcResponse {
   String? status;
 
   /// The latest ledger known to Soroban-RPC at the time it handled the sendTransaction() request.
-  String? latestLedger;
+  int? latestLedger;
 
   /// The unix timestamp of the close time of the latest ledger known to Soroban-RPC at the time it handled the sendTransaction() request.
   String? latestLedgerCloseTime;
@@ -596,19 +596,19 @@ class GetTransactionResponse extends SorobanRpcResponse {
   String? status;
 
   /// The latest ledger known to Soroban-RPC at the time it handled the getTransaction() request.
-  String? latestLedger;
+  int? latestLedger;
 
   /// The unix timestamp of the close time of the latest ledger known to Soroban-RPC at the time it handled the getTransaction() request.
   String? latestLedgerCloseTime;
 
   /// The oldest ledger ingested by Soroban-RPC at the time it handled the getTransaction() request.
-  String? oldestLedger;
+  int? oldestLedger;
 
   /// The unix timestamp of the close time of the oldest ledger ingested by Soroban-RPC at the time it handled the getTransaction() request.
   String? oldestLedgerCloseTime;
 
   /// (optional) The sequence of the ledger which included the transaction. This field is only present if status is SUCCESS or FAILED.
-  String? ledger;
+  int? ledger;
 
   ///  (optional) The unix timestamp of when the transaction was included in the ledger. This field is only present if status is SUCCESS or FAILED.
   String? createdAt;
@@ -709,11 +709,11 @@ class GetTransactionResponse extends SorobanRpcResponse {
 /// Holds the request parameters for getEvents.
 /// See: https://soroban.stellar.org/api/methods/getEvents
 class GetEventsRequest {
-  /// Stringified ledger sequence number to fetch events after (inclusive).
+  /// ledger sequence number to fetch events after (inclusive).
   /// The getEvents method will return an error if startLedger is less than the oldest ledger stored in this node,
   /// or greater than the latest ledger seen by this node.
   /// If a cursor is included in the request, startLedger must be omitted.
-  String? startLedger;
+  int? startLedger;
 
   /// List of filters for the returned events. Events matching any of the filters are included.
   /// To match a filter, an event must match both a contractId and a topic.
@@ -822,7 +822,7 @@ class PaginationOptions {
 }
 
 class GetEventsResponse extends SorobanRpcResponse {
-  String? latestLedger;
+  int? latestLedger;
 
   /// If error is present then results will not be in the response
   List<EventInfo>? events;
@@ -846,16 +846,17 @@ class GetEventsResponse extends SorobanRpcResponse {
 
 class EventInfo {
   String type;
-  String ledger;
+  int ledger;
   String ledgerCloseAt;
   String contractId;
   String id;
   String paginationToken;
   List<String> topic;
   String value;
+  bool inSuccessfulContractCall;
 
   EventInfo(this.type, this.ledger, this.ledgerCloseAt, this.contractId,
-      this.id, this.paginationToken, this.topic, this.value);
+      this.id, this.paginationToken, this.topic, this.value, this.inSuccessfulContractCall);
 
   factory EventInfo.fromJson(Map<String, dynamic> json) {
     List<String> topic = List<String>.from(json['topic'].map((e) => e));
@@ -868,7 +869,7 @@ class EventInfo {
     }
 
     return EventInfo(json['type'], json['ledger'], json['ledgerClosedAt'],
-        json['contractId'], json['id'], json['pagingToken'], topic, value);
+        json['contractId'], json['id'], json['pagingToken'], topic, value, json['inSuccessfulContractCall']);
   }
 }
 
diff --git a/test/soroban_test.dart b/test/soroban_test.dart
index 4cfca2b..5900a06 100644
--- a/test/soroban_test.dart
+++ b/test/soroban_test.dart
@@ -6,9 +6,9 @@ import 'package:stellar_flutter_sdk/stellar_flutter_sdk.dart';
 
 void main() {
   SorobanServer sorobanServer =
-      SorobanServer("https://soroban-testnet.stellar.org");
+      SorobanServer("https://rpc-futurenet.stellar.org");
 
-  StellarSDK sdk = StellarSDK.TESTNET;
+  StellarSDK sdk = StellarSDK.FUTURENET;
 
   KeyPair keyPairA = KeyPair.random();
   String accountAId = keyPairA.accountId;
@@ -32,7 +32,7 @@ void main() {
     try {
       await sdk.accounts.account(accountAId);
     } catch (e) {
-      await FriendBot.fundTestAccount(accountAId);
+      await FuturenetFriendBot.fundTestAccount(accountAId);
       await Future.delayed(const Duration(seconds: 3), () {});
     }
   });
@@ -103,7 +103,7 @@ void main() {
     // set transaction data, add resource fee and sign transaction
     transaction.sorobanTransactionData = simulateResponse.transactionData;
     transaction.addResourceFee(simulateResponse.minResourceFee! + 5000);
-    transaction.sign(keyPairA, Network.TESTNET);
+    transaction.sign(keyPairA, Network.FUTURENET);
 
     // check transaction xdr encoding and decoding back and forth
     String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -164,7 +164,7 @@ void main() {
     // set transaction data, add resource fee and sign transaction
     transaction.sorobanTransactionData = simulateResponse.transactionData;
     transaction.addResourceFee(simulateResponse.minResourceFee!);
-    transaction.sign(keyPairA, Network.TESTNET);
+    transaction.sign(keyPairA, Network.FUTURENET);
 
     // check transaction xdr encoding and decoding back and forth
     String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -200,7 +200,7 @@ void main() {
     OperationResponse operationResponse = operations.records!.first;
 
     if (operationResponse is ExtendFootprintTTLOperationResponse) {
-      assert("bump_footprint_expiration" == operationResponse.type);
+      assert("extend_footprint_ttl" == operationResponse.type);
     } else {
       assert(false);
     }
@@ -216,9 +216,9 @@ void main() {
       GetNetworkResponse networkResponse = await sorobanServer.getNetwork();
 
       assert(!networkResponse.isErrorResponse);
-      assert("https://friendbot.stellar.org/" ==
+      assert("https://friendbot-futurenet.stellar.org/" ==
           networkResponse.friendbotUrl);
-      assert("Test SDF Network ; September 2015" ==
+      assert("Test SDF Future Network ; October 2022" ==
           networkResponse.passphrase);
     });
 
@@ -229,7 +229,7 @@ void main() {
       assert(!latestLedgerResponse.isErrorResponse);
       assert(latestLedgerResponse.id != null);
       assert(latestLedgerResponse.protocolVersion != null);
-      assert("20" == latestLedgerResponse.protocolVersion);
+      assert(20 == latestLedgerResponse.protocolVersion);
       assert(latestLedgerResponse.sequence != null);
     });
 
@@ -271,7 +271,7 @@ void main() {
       // set transaction data, add resource fee and sign transaction
       transaction.sorobanTransactionData = simulateResponse.transactionData;
       transaction.addResourceFee(simulateResponse.minResourceFee!);
-      transaction.sign(keyPairA, Network.TESTNET);
+      transaction.sign(keyPairA, Network.FUTURENET);
 
       // check transaction xdr encoding and decoding back and forth
       String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -359,7 +359,7 @@ void main() {
       transaction.sorobanTransactionData = simulateResponse.transactionData;
       transaction.addResourceFee(simulateResponse.minResourceFee!);
       transaction.setSorobanAuth(simulateResponse.sorobanAuth);
-      transaction.sign(keyPairA, Network.TESTNET);
+      transaction.sign(keyPairA, Network.FUTURENET);
 
       // check transaction xdr encoding and decoding back and forth
       String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -448,7 +448,7 @@ void main() {
       // set transaction data, add resource fee and sign transaction
       transaction.sorobanTransactionData = simulateResponse.transactionData;
       transaction.addResourceFee(simulateResponse.minResourceFee!);
-      transaction.sign(keyPairA, Network.TESTNET);
+      transaction.sign(keyPairA, Network.FUTURENET);
 
       // check transaction xdr encoding and decoding back and forth
       String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -531,7 +531,7 @@ void main() {
       // set transaction data, add resource fee and sign transaction
       transaction.sorobanTransactionData = simulateResponse.transactionData;
       transaction.addResourceFee(simulateResponse.minResourceFee!);
-      transaction.sign(keyPairA, Network.TESTNET);
+      transaction.sign(keyPairA, Network.FUTURENET);
 
       SendTransactionResponse sendResponse =
           await sorobanServer.sendTransaction(transaction);
@@ -567,7 +567,7 @@ void main() {
       transaction.sorobanTransactionData = simulateResponse.transactionData;
       transaction.setSorobanAuth(simulateResponse.sorobanAuth);
       transaction.addResourceFee(simulateResponse.minResourceFee!);
-      transaction.sign(keyPairA, Network.TESTNET);
+      transaction.sign(keyPairA, Network.FUTURENET);
 
       sendResponse = await sorobanServer.sendTransaction(transaction);
       assert(sendResponse.error == null);
@@ -602,7 +602,7 @@ void main() {
       // set transaction data, add resource fee and sign transaction
       transaction.sorobanTransactionData = simulateResponse.transactionData;
       transaction.addResourceFee(simulateResponse.minResourceFee!);
-      transaction.sign(keyPairA, Network.TESTNET);
+      transaction.sign(keyPairA, Network.FUTURENET);
 
       sendResponse = await sorobanServer.sendTransaction(transaction);
       assert(sendResponse.error == null);
@@ -614,7 +614,7 @@ void main() {
       // query events
       TransactionResponse transactionResponse =
           await sdk.transactions.transaction(sendResponse.hash!);
-      String startLedger = transactionResponse.ledger.toString();
+      int startLedger = transactionResponse.ledger;
 
       // seams that position of the topic in the filter must match event topics ...
       TopicFilter topicFilter = TopicFilter(
@@ -698,7 +698,7 @@ void main() {
       transaction.sorobanTransactionData = simulateResponse.transactionData;
       transaction.setSorobanAuth(simulateResponse.sorobanAuth);
       transaction.addResourceFee(simulateResponse.minResourceFee!);
-      transaction.sign(keyPairA, Network.TESTNET);
+      transaction.sign(keyPairA, Network.FUTURENET);
 
       // check transaction xdr encoding and decoding back and forth
       String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -742,7 +742,7 @@ void main() {
     });
 
     test('test SAC with asset', () async {
-      await FriendBot.fundTestAccount(accountBId);
+      await FuturenetFriendBot.fundTestAccount(accountBId);
       await Future.delayed(Duration(seconds: 5));
 
       // prepare trustline
@@ -757,8 +757,8 @@ void main() {
           .addOperation(ctOp.build())
           .addOperation(pOp.build())
           .build();
-      transaction.sign(keyPairA, Network.TESTNET);
-      transaction.sign(keyPairB, Network.TESTNET);
+      transaction.sign(keyPairA, Network.FUTURENET);
+      transaction.sign(keyPairB, Network.FUTURENET);
       SubmitTransactionResponse response =
           await sdk.submitTransaction(transaction);
       assert(response.success);
@@ -791,7 +791,7 @@ void main() {
       transaction.sorobanTransactionData = simulateResponse.transactionData;
       transaction.addResourceFee(simulateResponse.minResourceFee!);
       transaction.setSorobanAuth(simulateResponse.sorobanAuth);
-      transaction.sign(keyPairB, Network.TESTNET);
+      transaction.sign(keyPairB, Network.FUTURENET);
 
       // check transaction xdr encoding and decoding back and forth
       String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
diff --git a/test/soroban_test_atomic_swap.dart b/test/soroban_test_atomic_swap.dart
index d8d9aef..fca5c33 100644
--- a/test/soroban_test_atomic_swap.dart
+++ b/test/soroban_test_atomic_swap.dart
@@ -5,9 +5,9 @@ import 'package:stellar_flutter_sdk/stellar_flutter_sdk.dart';
 
 void main() {
   SorobanServer sorobanServer =
-      SorobanServer("https://soroban-testnet.stellar.org");
+      SorobanServer("https://rpc-futurenet.stellar.org");
 
-  StellarSDK sdk = StellarSDK.TESTNET;
+  StellarSDK sdk = StellarSDK.FUTURENET;
 
   KeyPair adminKeypair = KeyPair.random();
   String adminId = adminKeypair.accountId;
@@ -33,21 +33,21 @@ void main() {
     try {
       await sdk.accounts.account(adminId);
     } catch (e) {
-      await FriendBot.fundTestAccount(adminId);
+      await FuturenetFriendBot.fundTestAccount(adminId);
       print("admin " + adminId + " : " + adminKeypair.secretSeed);
     }
 
     try {
       await sdk.accounts.account(aliceId);
     } catch (e) {
-      await FriendBot.fundTestAccount(aliceId);
+      await FuturenetFriendBot.fundTestAccount(aliceId);
       print("alice " + aliceId + " : " + aliceKeypair.secretSeed);
     }
 
     try {
       await sdk.accounts.account(bobId);
     } catch (e) {
-      await FriendBot.fundTestAccount(bobId);
+      await FuturenetFriendBot.fundTestAccount(bobId);
       print("bob " + bobId + " : " + bobKeypair.secretSeed);
     }
   });
@@ -95,7 +95,7 @@ void main() {
     // set transaction data, add resource fee and sign transaction
     transaction.sorobanTransactionData = simulateResponse.transactionData;
     transaction.addResourceFee(simulateResponse.minResourceFee!);
-    transaction.sign(adminKeypair, Network.TESTNET);
+    transaction.sign(adminKeypair, Network.FUTURENET);
 
     // check transaction xdr encoding and decoding back and forth
     String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -141,7 +141,7 @@ void main() {
     transaction.sorobanTransactionData = simulateResponse.transactionData;
     transaction.addResourceFee(simulateResponse.minResourceFee!);
     transaction.setSorobanAuth(simulateResponse.sorobanAuth);
-    transaction.sign(adminKeypair, Network.TESTNET);
+    transaction.sign(adminKeypair, Network.FUTURENET);
 
     // send transaction to soroban rpc server
     SendTransactionResponse sendResponse =
@@ -195,7 +195,7 @@ void main() {
     transaction.sorobanTransactionData = simulateResponse.transactionData;
     transaction.addResourceFee(simulateResponse.minResourceFee!);
     transaction.setSorobanAuth(simulateResponse.sorobanAuth);
-    transaction.sign(adminKeypair, Network.TESTNET);
+    transaction.sign(adminKeypair, Network.FUTURENET);
 
     // check transaction xdr encoding and decoding back and forth
     String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -246,7 +246,7 @@ void main() {
     transaction.sorobanTransactionData = simulateResponse.transactionData;
     transaction.addResourceFee(simulateResponse.minResourceFee!);
     transaction.setSorobanAuth(simulateResponse.sorobanAuth);
-    transaction.sign(adminKeypair, Network.TESTNET);
+    transaction.sign(adminKeypair, Network.FUTURENET);
 
     // check transaction xdr encoding and decoding back and forth
     String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -294,7 +294,7 @@ void main() {
     // set transaction data, add resource fee and sign transaction
     transaction.sorobanTransactionData = simulateResponse.transactionData;
     transaction.addResourceFee(simulateResponse.minResourceFee!);
-    transaction.sign(adminKeypair, Network.TESTNET);
+    transaction.sign(adminKeypair, Network.FUTURENET);
 
     // check transaction xdr encoding and decoding back and forth
     String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -352,7 +352,6 @@ void main() {
     transaction =
         new TransactionBuilder(accountA).addOperation(restoreOp).build();
     transaction.sorobanTransactionData = transactionData;
-    transaction.addResourceFee(10000);
 
     // simulate first to obtain the transaction data + resource fee
     simulateResponse = await sorobanServer.simulateTransaction(transaction);
@@ -364,7 +363,7 @@ void main() {
     // set transaction data, add resource fee and sign transaction
     transaction.sorobanTransactionData = simulateResponse.transactionData;
     transaction.addResourceFee(simulateResponse.minResourceFee!);
-    transaction.sign(adminKeypair, Network.TESTNET);
+    transaction.sign(adminKeypair, Network.FUTURENET);
 
     // check transaction xdr encoding and decoding back and forth
     String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -424,7 +423,7 @@ void main() {
     // set transaction data, add resource fee and sign transaction
     transaction.sorobanTransactionData = simulateResponse.transactionData;
     transaction.addResourceFee(simulateResponse.minResourceFee!);
-    transaction.sign(adminKeypair, Network.TESTNET);
+    transaction.sign(adminKeypair, Network.FUTURENET);
 
     // check transaction xdr encoding and decoding back and forth
     String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -459,7 +458,7 @@ void main() {
     OperationResponse operationResponse = operations.records!.first;
 
     if (operationResponse is ExtendFootprintTTLOperationResponse) {
-      assert("bump_footprint_expiration" == operationResponse.type);
+      assert("extend_footprint_ttl" == operationResponse.type);
     } else {
       assert(false);
     }
@@ -578,13 +577,13 @@ void main() {
       assert(simulateResponse.transactionData != null);
 
       // set transaction data, add resource fee and sign transaction
-      int instructions =
+      /*int instructions =
           simulateResponse.transactionData!.resources.instructions.uint32;
       instructions += (instructions / 4).round();
       simulateResponse.transactionData!.resources.instructions =
           XdrUint32(instructions);
       simulateResponse.minResourceFee =
-          simulateResponse.minResourceFee! + 1005000;
+          simulateResponse.minResourceFee! + 1005000;*/
       transaction.sorobanTransactionData = simulateResponse.transactionData;
       transaction.addResourceFee(simulateResponse.minResourceFee!);
       // sign auth
@@ -598,14 +597,14 @@ void main() {
             latestLedgerResponse.sequence! + 10;
 
         if (a.credentials.addressCredentials!.address.accountId == aliceId) {
-          a.sign(aliceKeypair, Network.TESTNET);
+          a.sign(aliceKeypair, Network.FUTURENET);
         }
         if (a.credentials.addressCredentials!.address.accountId == bobId) {
-          a.sign(bobKeypair, Network.TESTNET);
+          a.sign(bobKeypair, Network.FUTURENET);
         }
       }
       transaction.setSorobanAuth(auth);
-      transaction.sign(swapSubmitterKp, Network.TESTNET);
+      transaction.sign(swapSubmitterKp, Network.FUTURENET);
 
       // check transaction xdr encoding and decoding back and forth
       String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
diff --git a/test/soroban_test_auth.dart b/test/soroban_test_auth.dart
index d82a2f6..04bedd2 100644
--- a/test/soroban_test_auth.dart
+++ b/test/soroban_test_auth.dart
@@ -5,9 +5,9 @@ import 'package:stellar_flutter_sdk/stellar_flutter_sdk.dart';
 
 void main() {
   SorobanServer sorobanServer =
-      SorobanServer("https://soroban-testnet.stellar.org");
+      SorobanServer("https://rpc-futurenet.stellar.org");
 
-  StellarSDK sdk = StellarSDK.TESTNET;
+  StellarSDK sdk = StellarSDK.FUTURENET;
 
   KeyPair submitterKeypair = KeyPair.random();
   String submitterId = submitterKeypair.accountId;
@@ -25,13 +25,13 @@ void main() {
     try {
       await sdk.accounts.account(submitterId);
     } catch (e) {
-      await FriendBot.fundTestAccount(submitterId);
+      await FuturenetFriendBot.fundTestAccount(submitterId);
     }
 
     try {
       await sdk.accounts.account(invokerId);
     } catch (e) {
-      await FriendBot.fundTestAccount(invokerId);
+      await FuturenetFriendBot.fundTestAccount(invokerId);
     }
   });
 
@@ -89,7 +89,6 @@ void main() {
     transaction =
         new TransactionBuilder(accountA).addOperation(restoreOp).build();
     transaction.sorobanTransactionData = transactionData;
-    transaction.addResourceFee(10000);
 
     // simulate first to obtain the transaction data + resource fee
     simulateResponse = await sorobanServer.simulateTransaction(transaction);
@@ -101,7 +100,7 @@ void main() {
     // set transaction data, add resource fee and sign transaction
     transaction.sorobanTransactionData = simulateResponse.transactionData;
     transaction.addResourceFee(simulateResponse.minResourceFee!);
-    transaction.sign(submitterKeypair, Network.TESTNET);
+    transaction.sign(submitterKeypair, Network.FUTURENET);
 
     // check transaction xdr encoding and decoding back and forth
     String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -161,7 +160,7 @@ void main() {
     // set transaction data, add resource fee and sign transaction
     transaction.sorobanTransactionData = simulateResponse.transactionData;
     transaction.addResourceFee(simulateResponse.minResourceFee!);
-    transaction.sign(submitterKeypair, Network.TESTNET);
+    transaction.sign(submitterKeypair, Network.FUTURENET);
 
     // check transaction xdr encoding and decoding back and forth
     String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -196,7 +195,7 @@ void main() {
     OperationResponse operationResponse = operations.records!.first;
 
     if (operationResponse is ExtendFootprintTTLOperationResponse) {
-      assert("bump_footprint_expiration" == operationResponse.type);
+      assert("extend_footprint_ttl" == operationResponse.type);
     } else {
       assert(false);
     }
@@ -231,7 +230,7 @@ void main() {
       // set transaction data, add resource fee and sign transaction
       transaction.sorobanTransactionData = simulateResponse.transactionData;
       transaction.addResourceFee(simulateResponse.minResourceFee!);
-      transaction.sign(submitterKeypair, Network.TESTNET);
+      transaction.sign(submitterKeypair, Network.FUTURENET);
 
       // check transaction xdr encoding and decoding back and forth
       String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -279,7 +278,7 @@ void main() {
       transaction.sorobanTransactionData = simulateResponse.transactionData;
       transaction.addResourceFee(simulateResponse.minResourceFee!);
       transaction.setSorobanAuth(simulateResponse.sorobanAuth);
-      transaction.sign(submitterKeypair, Network.TESTNET);
+      transaction.sign(submitterKeypair, Network.FUTURENET);
 
       // send transaction to soroban rpc server
       SendTransactionResponse sendResponse =
@@ -323,15 +322,6 @@ void main() {
       assert(simulateResponse.transactionData != null);
       assert(simulateResponse.minResourceFee != null);
 
-      // this is because the fee calculation from the simulation is not always accurate
-      // see: https://discord.com/channels/897514728459468821/1112853306881081354
-      int instructions =
-          simulateResponse.transactionData!.resources.instructions.uint32;
-      instructions += (instructions / 4).round();
-      simulateResponse.transactionData!.resources.instructions =
-          XdrUint32(instructions);
-      simulateResponse.minResourceFee = simulateResponse.minResourceFee! + 6000;
-
       // set transaction data, add resource fee and sign transaction
       transaction.sorobanTransactionData = simulateResponse.transactionData;
       transaction.addResourceFee(simulateResponse.minResourceFee!);
@@ -344,10 +334,10 @@ void main() {
         // update signature expiration ledger
         a.credentials.addressCredentials!.signatureExpirationLedger = latestLedgerResponse.sequence! + 10;
         // sign
-        a.sign(invokerKeypair, Network.TESTNET);
+        a.sign(invokerKeypair, Network.FUTURENET);
       }
       transaction.setSorobanAuth(auth);
-      transaction.sign(submitterKeypair, Network.TESTNET);
+      transaction.sign(submitterKeypair, Network.FUTURENET);
 
       // check transaction xdr encoding and decoding back and forth
       String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -432,7 +422,7 @@ void main() {
       transaction.sorobanTransactionData = simulateResponse.transactionData;
       transaction.addResourceFee(simulateResponse.minResourceFee!);
       transaction.setSorobanAuth(simulateResponse.sorobanAuth);
-      transaction.sign(invokerKeypair, Network.TESTNET);
+      transaction.sign(invokerKeypair, Network.FUTURENET);
 
       // check transaction xdr encoding and decoding back and forth
       String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
diff --git a/test/wasm/soroban_atomic_swap_contract.wasm b/test/wasm/soroban_atomic_swap_contract.wasm
old mode 100644
new mode 100755
index f2c9e1be7ba1d9f42d34dbdf09b1987cd66fd031..36a1833f33e8b81a546bb063602831b9ae01dbb3
GIT binary patch
literal 2002
zcmZ8h&2k$>5bl}P?vAvQSpx^hR8g}^4sgKOitSBKc(=--sBj35;VQ3w0+CCSk&Fpd
zu_UnUgufy@0Y^?ga>f^m6EDDp*Wf^v`Fcj{*j|--x_iFvp6Tvs%7$G*MB>Bp4vEo@
z9F0H)6K7=kF{{T+eQ5Zj9e1`8?I^>77#Q}%nB<BQPecs2nW&Qx2jWxE$Kno2(Ady*
zXd0pe+5*OL%0WT6p0A1}6)4vcH1FMT#v++a&L|jD@_e?w;MHGty>7ePAABXLF#Iyx
zqd7QvwN$USvi+>y?zJ2d)a#$Mv%PvF8@3%;`nMGPEu<Jbqni_al$_CSRopVXrnj9i
zlDsTL4lkrBQ5~$|w+xO7TCiF}{nkr$>?}ZEh@B9N6FUlvj2%iSB4;EwfY$F<j3_r8
zBi^eBEfU?))B%{-7Yt0ah{_ZMW;ZE>-<h});u&>j$CR(wZP=w8=aShbak!MPgYS%<
zrsuPdKB)kx=@{GZJ=5ZNn$i}lQgxCBQ+BB-Jcbnoi%_4Y`Xnt(wU{yCH)g9T#0YLg
z2x&r9Upu-G{=hu6zLwh6o|WZ>E@<x<1j`|C?)K?n)jK{)#~)WH{E=-aFjmN#b`NvI
z;6LdKG@AX-%Cx*&b?x<2ioE1W<jW2IA)WqaMWiB92<UTvOsMk?QMH)-L-%mO;;Gpx
zCJ#DE>4ORZR!n{$calX2V1EI7<9@}}D&2e<sj>{f-DgfPw*@YMW6_Cxt+bbVC)3C?
zCGt3Rb5n!l2A$+dOQ)P25uWfJ+1xd0GCjmy;&OW^EW&mP?&9Dsh_Yb&#3)$gK5>(U
zj`ll%`+1-E=*q}9haen^5s71aC49y~({pi@%B>3Oku1;p1|^=kvR!k@3G2h3*^q)F
zg)c1kn<M48kUtbuK;6Q|1R2CxZHT{24+#^_^70bzT;dh_<R`Y)3eEmt6S-GO*r^sF
zMI~0M2>I6Tb(8@VETGI4xDI&f1~p_i9#H;ul&8zvNMYe2laJm&UJ(uGYGqrOGzY2r
z55f6nPvL!6i~OcJzvUQDUg^L}c;O3>P{I&Pi7N?E_?#~ne$8}I7qxG}6>I7;3TL-U
zn6d{r;)!w16!Qnl07t3d7T=qcIna>yaP%_LXm#qMuqg%t3YVAdi07NY+%a_$zb5D6
z^Quh#;MX8Gv`hjt8D>U^(SuRIM?%C@fivAt=@B;odQ;(934RbFJmPa;D2i}uIGl$a
z;0neX*Z>a`F9xol3kr0ll_W;mydXQq)&3ys4Ii}!^rx6>_InVU`@_9<^I#cP`DX_@
zk(wz)W|`M=xp7tY_xro;UfrN_%uHvHxlU!>{ujM{14P=)7jz%@>W%uN{=nMj`W(v+
za-G3u25bCU{hRaoMcTcCZhJqwxXbG%LjU5TS2o?j@Bn!*pSQ9UuP&`v0aOi!!`80d
xez&%~gx}3OwOX^i-fZ4(udc5&o6WnmwOYK^SdD9~IBu*rv)gNpTC;VR{s%Ale&_%I

literal 1846
zcmah~OOM<{5U%RBJ?-sb;|L+7WEHhNgA^pRSw%3*3Z!iN5D>2fDT;EN_0BqIW;0Ja
zlOVC4k+KRGZV1642X37554doMxFD_|E{MO8%TR869+r?8%UxApeO1+6E{`Ef`Un7c
z;2vRy*%8a~6-sTEgR>)^8Pq0`WpE^nq$Otp+jsFX?o*C#xxP#K6x+aPZ2@9LIuhrA
zkQ35vViL}44sgq<37aFJ^O}`m2+}Mw)F91L+u>I7C>p^lPCxDsCtorU$;oMwMw1k_
z>*#F#A)H5unSyYEPkz$!rggZ|Kd=r%?!hHVi1^y4{7tl%-WRYzeE}O>4}Dy-HXV%O
zi;PmCylLusZU}c8czbNkG-bz?E!WjO*Jlm%A@?eFw}Al_xU0zi{IdKG(VjI}fZFN>
zT<`P(b^`)Sd#S$A)1z@<e@thx6jS!8UMzS|&*xu_wKolHLhX+(AA*JtiDH)uNGTO-
zGKG4l#Xxawol<saF^eD)f&_1|ItkHY9ud4=K;7Brv?Emr`OIQ`#xu|HUH#0x%0S~(
zyR?;}0i5csa8rF{-J(v+Y;t3&e{_4-5M<!!m+*;l^xkJ<+NlVgr~Xz5z949UWBqsj
zFhcZ&T>wE%AAG86dhb?FH=O6;?%AgQFUSeMz$W9J3ge|={8M4Pmov&oNL><Y>wE>|
zJMQ^*9i{ZRC#k*mn|Vh(D{o9`xfP2S7SM^r({TGd5GKZ}UE0i0jbW7x)+)pQN0vL`
zs}U<k&RW^)kt2?eG;%Zqiu`9jS2TfVWbr%C&zjJH0B<WEF3j)7y|I;%MQ4!bG{cH}
zLefi6?Esx}xkvdsBF>bfY;TJm+>`ly?wJ?OQne~#`XH3ZJ6WE*w94L<R@sNrvR7T9
zIL|J+`JZvsoK6u}GHZo}raEPzS12Fwe2;a-Ndt3&ddTEOXmIQBg4EdL`e(Pvr2G~g
z(BBA&?}Pq9NE%~+t8{C4K-UmD5J3uE(gvVN8`7o76Tt+&fEe^|MeLtKzLCdXp*tgg
z7mnc?aZ*|nS|5_VOERHquEe*fnk!$=BRslOVn$RUf%}wm0#`0}hJ$nxb<%h+?Z;^}
z-6Pie_bYBM3CSq#RJ_GsDS#;H7!}H^OZ&KL*V5r>JZKx%l2c-axx_@&A3hwUhA7Ki
zvfmxFkK6Z$lOleJFS&VwC1$vh;hMY!{{8wSm2-+Hp-;dxo=^sRZ}<A{+hs`-)*$M~
zdFCh`_Pd?7`F51<8igd?;UG6n-1X8yLY~A)XVM*|rGKZ0S9!cz_EW`=qyFeY{4a%O
BESUfR

diff --git a/test/wasm/soroban_auth_contract.wasm b/test/wasm/soroban_auth_contract.wasm
index 363df2d39ce3536714d6c4d895a71d5ca2e05f12..d3c168ee4394d45e5a1f112c92112b3a4fc210da 100755
GIT binary patch
delta 81
zcmaFBeusTS8PjBL=BtxSndF%n81g4iXHsJ}(KDQUfJxL)-^f4@2$e02jFMB$l9P>7
jP0S3FlanotOpVM<lT6HwQq0Yh%#st0O_Pk0Q!E((v;7tt

delta 101
zcmcb^{(yZ$8PjARW;td{hT_S&%xb<ydIk(Iz)@6OoRVFZS_Bj@HZsryLfxWdL*+Dc
v6XO)KG|N;I%jCpF0}D$d6JtXQO9S)d6a!NWizG9H6!SDg3v-6arA*fV;?@}_

diff --git a/test/wasm/soroban_events_contract.wasm b/test/wasm/soroban_events_contract.wasm
index 9364353dcc64163f6eee12b36423a26af505f860..0cb6cbec84b7da19e777815bea852eaed2cbd595 100755
GIT binary patch
delta 102
zcmaFG`iymgEu-N^yTy!?%a}?gKVXz+W?;yl%*3STX`*My00SIF#l<PvWvN9#0evF_
xJs?!JFfvL`HA_x5PBk$zOioU=G%__ZH%&4zH%c)#PclnRG&W5#N=~t4002n~8JPe8

delta 90
zcmaFH`igaeEu+y!yTy!?!<gilEg6a@moup`8|fKLUce-3YHVbn2ZXvs$%e{l<|f7|
tW@(nGCYH&Gi3S#yMkdCF7M2F)$teb=78Xfn1}Wxgh8E@wlOHga0sw1i7<K>v

diff --git a/test/wasm/soroban_hello_world_contract.wasm b/test/wasm/soroban_hello_world_contract.wasm
index fbf7f7e3fa51d21a9a12a652de5108b0ff66e048..e7aa481ed57a1211c906ee5f6b0aff6e95720a10 100755
GIT binary patch
delta 81
zcmbQwGMi<C8{_2Lj4qR18ReN781g5lGpaG0=owC)z$j{{Z)Bhcgvu61M#-sW$;rm4
jCT51o$;p;RrbgzbNhan-Ddy%$X32@hrb$N0DV7WXYJC+8

delta 101
zcmbQuGM{CG8{_0|Mmc6nhT_R<7}b1@^b8nafTO6mI3>F*wFoF+Y-FGZgt|q^hRSK?
vCdMgdX_l!bmdS~U1{Rh^CdP&qmImg@DF&t%7D;9XDduU07Um3-T^U^g#Hbi1

diff --git a/test/wasm/soroban_token_contract.wasm b/test/wasm/soroban_token_contract.wasm
old mode 100644
new mode 100755
index d86fdac174b40d2c74effdc5a02229854a5566c6..8d558b144d3cfbc5ee400edfbd5178a711600ce6
GIT binary patch
literal 7471
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

literal 6425
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
HBBK8Sm`4@$


From 0fac78b7a0b226a232e762c25eaf44adee94422c Mon Sep 17 00:00:00 2001
From: Christian Rogobete <c.rogobete@soneso.com>
Date: Sun, 17 Dec 2023 21:42:13 +0100
Subject: [PATCH 2/3] add resource config for soroban transaction simulation

---
 lib/src/soroban/soroban_server.dart | 40 ++++++++++++++++++++++--
 soroban.md                          | 47 +++++++++--------------------
 test/soroban_test.dart              | 34 ++++++++++++++-------
 test/soroban_test_atomic_swap.dart  | 27 +++++++++++------
 test/soroban_test_auth.dart         | 21 ++++++++-----
 5 files changed, 107 insertions(+), 62 deletions(-)

diff --git a/lib/src/soroban/soroban_server.dart b/lib/src/soroban/soroban_server.dart
index 4a2ac39..dbd0d98 100644
--- a/lib/src/soroban/soroban_server.dart
+++ b/lib/src/soroban/soroban_server.dart
@@ -157,11 +157,10 @@ class SorobanServer {
   /// expected ledger footprint, and expected costs.
   /// See: https://soroban.stellar.org/api/methods/simulateTransaction
   Future<SimulateTransactionResponse> simulateTransaction(
-      Transaction transaction) async {
-    String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
+      SimulateTransactionRequest request) async {
 
     JsonRpcMethod getAccount =
-        JsonRpcMethod("simulateTransaction", args: transactionEnvelopeXdr);
+        JsonRpcMethod("simulateTransaction", args: request.getRequestArgs());
     dio.Response response = await _dio.post(_serverUrl,
         data: json.encode(getAccount), options: dio.Options(headers: _headers));
     if (enableLogging) {
@@ -405,6 +404,41 @@ class RestorePreamble {
   }
 }
 
+/// Part of the SimulateTransactionRequest.
+/// Allows budget instruction leeway used in preflight calculations to be configured.
+class ResourceConfig {
+    int instructionLeeway;
+
+    ResourceConfig(this.instructionLeeway);
+
+    Map<String, dynamic> getRequestArgs() {
+      var map = <String, dynamic>{};
+      map['instructionLeeway'] = instructionLeeway;
+      return map;
+    }
+}
+/// Holds the request parameters for simulateTransaction.
+/// See: https://soroban.stellar.org/api/methods/simulateTransaction
+class SimulateTransactionRequest {
+  /// The transaction to be submitted.
+  Transaction transaction;
+
+  /// Allows budget instruction leeway used in preflight calculations to be configured
+  /// If not provided the leeway defaults to 3000000 instructions
+  ResourceConfig? resourceConfig;
+
+  SimulateTransactionRequest(this.transaction, {this.resourceConfig});
+
+  Map<String, dynamic> getRequestArgs() {
+    var map = <String, dynamic>{};
+    map['transaction'] = transaction.toEnvelopeXdrBase64();
+    if (resourceConfig != null) {
+      map['resourceConfig'] = resourceConfig!.getRequestArgs();
+    }
+    return map;
+  }
+}
+
 /// Response that will be received when submitting a trial contract invocation.
 /// See: https://soroban.stellar.org/api/methods/simulateTransaction
 class SimulateTransactionResponse extends SorobanRpcResponse {
diff --git a/soroban.md b/soroban.md
index 9765315..73ebd2d 100644
--- a/soroban.md
+++ b/soroban.md
@@ -2,15 +2,11 @@
 ## [Stellar SDK for Flutter](https://github.com/Soneso/stellar_flutter_sdk) 
 ## Soroban support
 
-The following shows you how to use the Flutter SDK to start experimenting with Soroban smart contracts. 
-
-**Please note, that both, Soroban itself and the Flutter SDK support for Soroban are still under development, so breaking changes may occur.**
-
-**Soroban version supported: Preview 11**
+The following shows you how to use the Flutter SDK to interact with Soroban. 
 
 ### Quick Start
 
-Flutter SDK Soroban support allows you to deploy and to invoke smart contracts on Futurenet. Futurenet is a special test network provided by Stellar.
+Flutter SDK Soroban support allows you to deploy and to invoke Soroban smart contracts.
 
 To deploy and/or invoke smart contracts with the Flutter SDK use the ```SorobanServer``` class. It connects to a given local or remote Soroban-RPC Server.
 
@@ -39,12 +35,12 @@ if (GetHealthResponse.HEALTHY == healthResponse.status) {
 
 #### Get account data
 
-You first need an account on Futurenet. For this one can use ```FuturenetFriendBot``` to fund it:
+You first need an account on Testnet. For this one can use ```FriendBot``` to fund it:
 
 ```dart
 KeyPair accountKeyPair = KeyPair.random();
 String accountId = accountKeyPair.accountId;
-await FuturenetFriendBot.fundTestAccount(accountId);
+await FriendBot.fundTestAccount(accountId);
 ```
 
 Next you can fetch current information about your Stellar account using the SDK:
@@ -79,15 +75,16 @@ Next we need to **simulate** the transaction to obtain the **soroban transaction
 
 ```dart
 // Simulate first to obtain the footprint
+var request = new SimulateTransactionRequest(transaction);
 SimulateTransactionResponse simulateResponse =
-    await sorobanServer.simulateTransaction(transaction);
+    await sorobanServer.simulateTransaction(request);
 ```
 On success, one can find the **soroban transaction data** and the  **resource fee** in the response. Next we need to set the **soroban transaction data** and the **resource fee** to our transaction, then **sign** the transaction and send it to the network using the ```SorobanServer```:
 
 ```dart
 transaction.sorobanTransactionData = simulateResponse.transactionData;
 transaction.addResourceFee(simulateResponse.minResourceFee!);
-transaction.sign(accountKeyPair, Network.FUTURENET);
+transaction.sign(accountKeyPair, Network.TESTNET);
 
 // send transaction to soroban rpc server
 SendTransactionResponse sendResponse =
@@ -123,7 +120,7 @@ if (GetTransactionResponse.STATUS_NOT_FOUND == status) {
 }
 ```
 
-Hint: If you experience an error with the transaction result ```txInternalError``` it is most likely that a ledger entry used in the transaction has expired. This is an issue specific to soroban prev. 10 (see [here](https://discord.com/channels/897514728459468821/1130347673627664515)). You can fix it by restoring the footprint (see this [example](https://github.com/Soneso/stellar_flutter_sdk/blob/9a15982ac862bdcab33713184c800065e573f39b/test/soroban_test.dart#L57) in the soroban test of the SDK).
+Hint: If you experience an error with the transaction result ```txInternalError``` it is most likely that a ledger entry used in the transaction has expired. You can fix it by restoring the footprint (see this [example](https://github.com/Soneso/stellar_flutter_sdk/blob/9a15982ac862bdcab33713184c800065e573f39b/test/soroban_test.dart#L57) in the soroban test of the SDK).
 
 If the transaction was successful, the status response contains the ```wasmId``` of the installed contract code. We need the ```wasmId``` in our next step to **create** the contract:
 
@@ -139,14 +136,15 @@ Transaction transaction = new TransactionBuilder(account)
     .addOperation(operation).build();
 
 // First simulate to obtain the transaction data + resource fee
+var request = new SimulateTransactionRequest(transaction);
 SimulateTransactionResponse simulateResponse =
-    await sorobanServer.simulateTransaction(transaction);
+    await sorobanServer.simulateTransaction(request);
 
 // set transaction data, add resource fee & auth and sign transaction
 transaction.sorobanTransactionData = simulateResponse.transactionData;
 transaction.addResourceFee(simulateResponse.minResourceFee!);
 transaction.setSorobanAuth(simulateResponse.sorobanAuth);
-transaction.sign(accountKeyPair, Network.FUTURENET);
+transaction.sign(accountKeyPair, Network.TESTNET);
 
 // Send the transaction to the network.
 SendTransactionResponse sendResponse =
@@ -250,8 +248,9 @@ Next we need to **simulate** the transaction to obtain the **soroban transaction
 
 ```dart
 // Simulate first to obtain the footprint
+var request = new SimulateTransactionRequest(transaction);
 SimulateTransactionResponse simulateResponse =
-    await sorobanServer.simulateTransaction(transaction);
+    await sorobanServer.simulateTransaction(request);
 ```
 On success, one can find the **soroban transaction data** and the  **resource fee** in the response. Next we need to set it to our transaction, **sign** the transaction and send it to the network using the ```SorobanServer```:
 
@@ -259,7 +258,7 @@ On success, one can find the **soroban transaction data** and the  **resource fe
 // set transaction data, add resource fee and sign transaction
 transaction.sorobanTransactionData = simulateResponse.transactionData;
 transaction.addResourceFee(simulateResponse.minResourceFee!);
-transaction.sign(accountKeyPair, Network.FUTURENET);
+transaction.sign(accountKeyPair, Network.TESTNET);
 
 // send transaction to soroban rpc server
 SendTransactionResponse sendResponse =
@@ -373,7 +372,7 @@ for (SorobanAuthorizationEntry a in auth!) {
   a.credentials.addressCredentials!.signatureExpirationLedger =
       latestLedgerResponse.sequence! + 10;
   // sign
-  a.sign(invokerKeypair, Network.FUTURENET);
+  a.sign(invokerKeypair, Network.TESTNET);
 }
 
 transaction.setSorobanAuth(auth);
@@ -381,22 +380,6 @@ transaction.setSorobanAuth(auth);
 
 One can find multiple examples in the [Soroban Auth Test](https://github.com/Soneso/stellar_flutter_sdk/blob/master/test/soroban_test_auth.dart) and [Soroban Atomic Swap Test](https://github.com/Soneso/stellar_flutter_sdk/blob/master/test/soroban_test_atomic_swap.dart) of the SDK.
 
-
-Hint: Resource values and fees have been added since soroban preview 9 version. The calculation of the minimum resource values and fee by the simulation (preflight) is not always accurate, because it does not consider signatures. This may result in a failing transaction because of insufficient resources. In this case one can experiment and increase the resources values within the soroban transaction data before signing and submitting the transaction. E.g.:
-
-```dart
-int instructions = simulateResponse.transactionData!.resources.instructions.uint32;
-instructions += (instructions / 4).round();
-simulateResponse.transactionData!.resources.instructions = XdrUint32(instructions);
-simulateResponse.minResourceFee = simulateResponse.minResourceFee! + 3000;
-
-// set transaction data, add resource fee and sign transaction
-transaction.sorobanTransactionData = simulateResponse.transactionData;
-transaction.addResourceFee(simulateResponse.minResourceFee!);
-transaction.sign(submitterKeypair, Network.FUTURENET);
-```
-See also: https://discord.com/channels/897514728459468821/1112853306881081354
-
 #### Get Events
 
 The Soroban-RPC server provides the possibility to request contract events. 
diff --git a/test/soroban_test.dart b/test/soroban_test.dart
index 5900a06..ef8187b 100644
--- a/test/soroban_test.dart
+++ b/test/soroban_test.dart
@@ -73,8 +73,9 @@ void main() {
         new TransactionBuilder(accountA).addOperation(operation).build();
 
     // simulate first to obtain the transaction data + resource fee
+    var request = new SimulateTransactionRequest(transaction);
     SimulateTransactionResponse simulateResponse =
-        await sorobanServer.simulateTransaction(transaction);
+        await sorobanServer.simulateTransaction(request);
     assert(simulateResponse.error == null);
     assert(simulateResponse.resultError == null);
     assert(simulateResponse.transactionData != null);
@@ -94,7 +95,8 @@ void main() {
     transaction.sorobanTransactionData = transactionData;
 
     // simulate first to obtain the transaction data + resource fee
-    simulateResponse = await sorobanServer.simulateTransaction(transaction);
+    request = new SimulateTransactionRequest(transaction);
+    simulateResponse = await sorobanServer.simulateTransaction(request);
     assert(simulateResponse.error == null);
     assert(simulateResponse.resultError == null);
     assert(simulateResponse.transactionData != null);
@@ -153,8 +155,10 @@ void main() {
     transaction.sorobanTransactionData = transactionData;
 
     // simulate first to obtain the transaction data + resource fee
+    var resourceConfig = new ResourceConfig(300000);
+    var request = new SimulateTransactionRequest(transaction, resourceConfig:resourceConfig);
     SimulateTransactionResponse simulateResponse =
-        await sorobanServer.simulateTransaction(transaction);
+        await sorobanServer.simulateTransaction(request);
     assert(simulateResponse.error == null);
     // assert(simulateResponse.results != null);
     assert(simulateResponse.resultError == null);
@@ -255,8 +259,9 @@ void main() {
           new TransactionBuilder(accountA).addOperation(operation).build();
 
       // simulate first to obtain the transaction data + resource fee
+      var request = new SimulateTransactionRequest(transaction);
       SimulateTransactionResponse simulateResponse =
-          await sorobanServer.simulateTransaction(transaction);
+          await sorobanServer.simulateTransaction(request);
       assert(simulateResponse.error == null);
       assert(simulateResponse.results != null);
       assert(simulateResponse.resultError == null);
@@ -342,8 +347,9 @@ void main() {
           new TransactionBuilder(accountA).addOperation(operation).build();
 
       // simulate first to obtain the transaction data + resource fee
+      var request = new SimulateTransactionRequest(transaction);
       SimulateTransactionResponse simulateResponse =
-          await sorobanServer.simulateTransaction(transaction);
+          await sorobanServer.simulateTransaction(request);
       assert(simulateResponse.error == null);
       assert(simulateResponse.results != null);
       assert(simulateResponse.resultError == null);
@@ -434,8 +440,9 @@ void main() {
           new TransactionBuilder(accountA).addOperation(operation).build();
 
       // simulate first to obtain the transaction data + resource fee
+      var request = new SimulateTransactionRequest(transaction);
       SimulateTransactionResponse simulateResponse =
-          await sorobanServer.simulateTransaction(transaction);
+          await sorobanServer.simulateTransaction(request);
       assert(simulateResponse.error == null);
       assert(simulateResponse.results != null);
       assert(simulateResponse.resultError == null);
@@ -524,8 +531,9 @@ void main() {
       Transaction transaction =
           new TransactionBuilder(submitter).addOperation(operation).build();
 
+      var request = new SimulateTransactionRequest(transaction);
       SimulateTransactionResponse simulateResponse =
-          await sorobanServer.simulateTransaction(transaction);
+          await sorobanServer.simulateTransaction(request);
       assert(simulateResponse.transactionData != null);
 
       // set transaction data, add resource fee and sign transaction
@@ -560,7 +568,8 @@ void main() {
       transaction =
           new TransactionBuilder(submitter).addOperation(operation).build();
 
-      simulateResponse = await sorobanServer.simulateTransaction(transaction);
+      request = SimulateTransactionRequest(transaction);
+      simulateResponse = await sorobanServer.simulateTransaction(request);
       assert(simulateResponse.transactionData != null);
 
       // set transaction data, add resource fee and sign transaction
@@ -596,7 +605,8 @@ void main() {
       transaction =
           new TransactionBuilder(submitter).addOperation(operation).build();
 
-      simulateResponse = await sorobanServer.simulateTransaction(transaction);
+      request = SimulateTransactionRequest(transaction);
+      simulateResponse = await sorobanServer.simulateTransaction(request);
       assert(simulateResponse.transactionData != null);
 
       // set transaction data, add resource fee and sign transaction
@@ -681,8 +691,9 @@ void main() {
           new TransactionBuilder(accountA).addOperation(operation).build();
 
       // simulate first to obtain the transaction data + resource fee
+      var request = SimulateTransactionRequest(transaction);
       SimulateTransactionResponse simulateResponse =
-          await sorobanServer.simulateTransaction(transaction);
+          await sorobanServer.simulateTransaction(request);
       assert(simulateResponse.error == null);
       assert(simulateResponse.results != null);
       assert(simulateResponse.resultError == null);
@@ -774,8 +785,9 @@ void main() {
           new TransactionBuilder(accountB).addOperation(operation).build();
 
       // simulate first to obtain the transaction data + resource fee
+      var request = SimulateTransactionRequest(transaction);
       SimulateTransactionResponse simulateResponse =
-          await sorobanServer.simulateTransaction(transaction);
+          await sorobanServer.simulateTransaction(request);
       assert(simulateResponse.error == null);
       assert(simulateResponse.results != null);
       assert(simulateResponse.resultError == null);
diff --git a/test/soroban_test_atomic_swap.dart b/test/soroban_test_atomic_swap.dart
index fca5c33..7008a52 100644
--- a/test/soroban_test_atomic_swap.dart
+++ b/test/soroban_test_atomic_swap.dart
@@ -87,8 +87,9 @@ void main() {
         new TransactionBuilder(submitter).addOperation(operation).build();
 
     // simulate first to obtain the transaction data + resource fee
+    var request = SimulateTransactionRequest(transaction);
     SimulateTransactionResponse simulateResponse =
-        await sorobanServer.simulateTransaction(transaction);
+        await sorobanServer.simulateTransaction(request);
     assert(!simulateResponse.isErrorResponse);
     assert(simulateResponse.transactionData != null);
 
@@ -132,8 +133,9 @@ void main() {
         new TransactionBuilder(submitter).addOperation(operation).build();
 
     // simulate first to obtain the transaction data + resource fee
+    var request = SimulateTransactionRequest(transaction);
     SimulateTransactionResponse simulateResponse =
-        await sorobanServer.simulateTransaction(transaction);
+        await sorobanServer.simulateTransaction(request);
     assert(!simulateResponse.isErrorResponse);
     assert(simulateResponse.resultError == null);
 
@@ -185,8 +187,9 @@ void main() {
         new TransactionBuilder(invoker).addOperation(operation).build();
 
     // simulate first to obtain the transaction data + resource fee
+    var request = SimulateTransactionRequest(transaction);
     SimulateTransactionResponse simulateResponse =
-        await sorobanServer.simulateTransaction(transaction);
+        await sorobanServer.simulateTransaction(request);
     assert(simulateResponse.error == null);
     assert(simulateResponse.resultError == null);
     assert(simulateResponse.footprint != null);
@@ -236,8 +239,9 @@ void main() {
         new TransactionBuilder(invoker).addOperation(operation).build();
 
     // simulate first to obtain the transaction data + resource fee
+    var request = SimulateTransactionRequest(transaction);
     SimulateTransactionResponse simulateResponse =
-        await sorobanServer.simulateTransaction(transaction);
+        await sorobanServer.simulateTransaction(request);
     assert(simulateResponse.error == null);
     assert(simulateResponse.resultError == null);
     assert(simulateResponse.transactionData != null);
@@ -285,8 +289,9 @@ void main() {
         new TransactionBuilder(invoker).addOperation(operation).build();
 
     // simulate first to obtain the transaction data + resource fee
+    var request = SimulateTransactionRequest(transaction);
     SimulateTransactionResponse simulateResponse =
-        await sorobanServer.simulateTransaction(transaction);
+        await sorobanServer.simulateTransaction(request);
     assert(simulateResponse.error == null);
     assert(simulateResponse.resultError == null);
     assert(simulateResponse.transactionData != null);
@@ -333,8 +338,9 @@ void main() {
         new TransactionBuilder(accountA).addOperation(operation).build();
 
     // simulate first to obtain the transaction data + resource fee
+    var request = SimulateTransactionRequest(transaction);
     SimulateTransactionResponse simulateResponse =
-        await sorobanServer.simulateTransaction(transaction);
+        await sorobanServer.simulateTransaction(request);
     assert(simulateResponse.error == null);
     assert(simulateResponse.resultError == null);
     assert(simulateResponse.transactionData != null);
@@ -354,7 +360,8 @@ void main() {
     transaction.sorobanTransactionData = transactionData;
 
     // simulate first to obtain the transaction data + resource fee
-    simulateResponse = await sorobanServer.simulateTransaction(transaction);
+    request = SimulateTransactionRequest(transaction);
+    simulateResponse = await sorobanServer.simulateTransaction(request);
     assert(simulateResponse.error == null);
     assert(simulateResponse.resultError == null);
     assert(simulateResponse.transactionData != null);
@@ -413,8 +420,9 @@ void main() {
     transaction.sorobanTransactionData = transactionData;
 
     // simulate first to obtain the transaction data + resource fee
+    var request = SimulateTransactionRequest(transaction);
     SimulateTransactionResponse simulateResponse =
-        await sorobanServer.simulateTransaction(transaction);
+        await sorobanServer.simulateTransaction(request);
     assert(simulateResponse.error == null);
     assert(simulateResponse.resultError == null);
     assert(simulateResponse.transactionData != null);
@@ -570,8 +578,9 @@ void main() {
           new TransactionBuilder(swapSubmitter).addOperation(op).build();
 
       // simulate first to obtain the transaction data + resource fee
+      var request = new SimulateTransactionRequest(transaction);
       SimulateTransactionResponse simulateResponse =
-          await sorobanServer.simulateTransaction(transaction);
+          await sorobanServer.simulateTransaction(request);
       assert(simulateResponse.error == null);
       assert(simulateResponse.resultError == null);
       assert(simulateResponse.transactionData != null);
diff --git a/test/soroban_test_auth.dart b/test/soroban_test_auth.dart
index 04bedd2..538baf0 100644
--- a/test/soroban_test_auth.dart
+++ b/test/soroban_test_auth.dart
@@ -70,8 +70,9 @@ void main() {
         new TransactionBuilder(accountA).addOperation(operation).build();
 
     // simulate first to obtain the transaction data + resource fee
+    var request = new SimulateTransactionRequest(transaction);
     SimulateTransactionResponse simulateResponse =
-        await sorobanServer.simulateTransaction(transaction);
+        await sorobanServer.simulateTransaction(request);
     assert(simulateResponse.error == null);
     assert(simulateResponse.resultError == null);
     assert(simulateResponse.transactionData != null);
@@ -91,7 +92,8 @@ void main() {
     transaction.sorobanTransactionData = transactionData;
 
     // simulate first to obtain the transaction data + resource fee
-    simulateResponse = await sorobanServer.simulateTransaction(transaction);
+    request = new SimulateTransactionRequest(transaction);
+    simulateResponse = await sorobanServer.simulateTransaction(request);
     assert(simulateResponse.error == null);
     assert(simulateResponse.resultError == null);
     assert(simulateResponse.transactionData != null);
@@ -150,8 +152,9 @@ void main() {
     transaction.sorobanTransactionData = transactionData;
 
     // simulate first to obtain the transaction data + resource fee
+    var request = new SimulateTransactionRequest(transaction);
     SimulateTransactionResponse simulateResponse =
-        await sorobanServer.simulateTransaction(transaction);
+        await sorobanServer.simulateTransaction(request);
     assert(simulateResponse.error == null);
     assert(simulateResponse.resultError == null);
     assert(simulateResponse.transactionData != null);
@@ -222,8 +225,9 @@ void main() {
           new TransactionBuilder(submitter).addOperation(operation).build();
 
       // simulate first to obtain the transaction data + resource fee
+      var request = new SimulateTransactionRequest(transaction);
       SimulateTransactionResponse simulateResponse =
-          await sorobanServer.simulateTransaction(transaction);
+          await sorobanServer.simulateTransaction(request);
       assert(!simulateResponse.isErrorResponse);
       assert(simulateResponse.transactionData != null);
 
@@ -269,8 +273,9 @@ void main() {
           new TransactionBuilder(submitter).addOperation(operation).build();
 
       // simulate first to obtain the transaction data + resource fee
+      var request = new SimulateTransactionRequest(transaction);
       SimulateTransactionResponse simulateResponse =
-          await sorobanServer.simulateTransaction(transaction);
+          await sorobanServer.simulateTransaction(request);
       assert(!simulateResponse.isErrorResponse);
       assert(simulateResponse.resultError == null);
 
@@ -314,8 +319,9 @@ void main() {
           new TransactionBuilder(submitter).addOperation(operation).build();
 
       // simulate first to obtain the transaction data + resource fee
+      var request = new SimulateTransactionRequest(transaction);
       SimulateTransactionResponse simulateResponse =
-          await sorobanServer.simulateTransaction(transaction);
+          await sorobanServer.simulateTransaction(request);
 
       assert(simulateResponse.error == null);
       assert(simulateResponse.resultError == null);
@@ -412,8 +418,9 @@ void main() {
           new TransactionBuilder(invoker).addOperation(operation).build();
 
       // simulate first to get transaction data
+      var request = new SimulateTransactionRequest(transaction);
       SimulateTransactionResponse simulateResponse =
-          await sorobanServer.simulateTransaction(transaction);
+          await sorobanServer.simulateTransaction(request);
       assert(simulateResponse.error == null);
       assert(simulateResponse.resultError == null);
       assert(simulateResponse.footprint != null);

From 7d19207e3d5c634f1ffedb2cfcb74bb89ad17ff6 Mon Sep 17 00:00:00 2001
From: Christian Rogobete <c.rogobete@soneso.com>
Date: Mon, 18 Dec 2023 19:42:34 +0100
Subject: [PATCH 3/3] update soroban tests for testnet

---
 soroban.md                         |  3 ++-
 test/query_test.dart               |  4 ++--
 test/soroban_test.dart             | 36 +++++++++++++++---------------
 test/soroban_test_atomic_swap.dart | 30 ++++++++++++-------------
 test/soroban_test_auth.dart        | 22 +++++++++---------
 5 files changed, 48 insertions(+), 47 deletions(-)

diff --git a/soroban.md b/soroban.md
index 73ebd2d..d0395b9 100644
--- a/soroban.md
+++ b/soroban.md
@@ -21,7 +21,7 @@ The Soroban-RPC API is described [here](https://soroban.stellar.org/api/).
 Provide the url to the endpoint of the Soroban-RPC server to connect to:
 
 ```dart
-SorobanServer sorobanServer = SorobanServer("https://rpc-futurenet.stellar.org:443");
+SorobanServer sorobanServer = SorobanServer("https://soroban-testnet.stellar.org");
 ```
 
 #### General node health check
@@ -53,6 +53,7 @@ AccountResponse submitter = await sdk.accounts.account(submitterId);
 #### Deploy your contract
 
 If you want to create a smart contract for testing, you can find the official examples [here](https://github.com/stellar/soroban-examples).
+You can also create smart contracts with our AssemblyScript Soroban SDK. Examples can be found [here](https://github.com/Soneso/as-soroban-examples).
 
 There are two main steps involved in the process of deploying a contract. First you need to **upload** the **contract code** and then to **create** the **contract**.
 
diff --git a/test/query_test.dart b/test/query_test.dart
index 403e16b..755e476 100644
--- a/test/query_test.dart
+++ b/test/query_test.dart
@@ -182,7 +182,7 @@ void main() {
     /// ! get Claimable Balance ID from BID result at claimable_balance_test.dart
     Page<OperationResponse> operationsPage = await sdk.operations
         .forClaimableBalance(
-            "00000000e883d22acfa2f9a904eb260262d2d53a013fdf618a423d03e4ffa5aca8e1936f")
+            "0000000070ceb102da32f678623f7d62d70bd9820776b4b995b3956eb5714692d419da78")
         .limit(1)
         .order(RequestBuilderOrder.DESC)
         .execute();
@@ -195,7 +195,7 @@ void main() {
     /// ! get Claimable Balance ID from BID result at claimable_balance_test.dart
     Page<TransactionResponse> transactionsPage = await sdk.transactions
         .forClaimableBalance(
-            "00000000d424d26a793f8af968cdfc01b3254ac634dc6c96da94405e719077a0a18f8ace")
+            "0000000070ceb102da32f678623f7d62d70bd9820776b4b995b3956eb5714692d419da78")
         .limit(1)
         .order(RequestBuilderOrder.DESC)
         .execute();
diff --git a/test/soroban_test.dart b/test/soroban_test.dart
index ef8187b..8c2af8d 100644
--- a/test/soroban_test.dart
+++ b/test/soroban_test.dart
@@ -6,9 +6,9 @@ import 'package:stellar_flutter_sdk/stellar_flutter_sdk.dart';
 
 void main() {
   SorobanServer sorobanServer =
-      SorobanServer("https://rpc-futurenet.stellar.org");
+      SorobanServer("https://soroban-testnet.stellar.org");
 
-  StellarSDK sdk = StellarSDK.FUTURENET;
+  StellarSDK sdk = StellarSDK.TESTNET;
 
   KeyPair keyPairA = KeyPair.random();
   String accountAId = keyPairA.accountId;
@@ -32,7 +32,7 @@ void main() {
     try {
       await sdk.accounts.account(accountAId);
     } catch (e) {
-      await FuturenetFriendBot.fundTestAccount(accountAId);
+      await FriendBot.fundTestAccount(accountAId);
       await Future.delayed(const Duration(seconds: 3), () {});
     }
   });
@@ -105,7 +105,7 @@ void main() {
     // set transaction data, add resource fee and sign transaction
     transaction.sorobanTransactionData = simulateResponse.transactionData;
     transaction.addResourceFee(simulateResponse.minResourceFee! + 5000);
-    transaction.sign(keyPairA, Network.FUTURENET);
+    transaction.sign(keyPairA, Network.TESTNET);
 
     // check transaction xdr encoding and decoding back and forth
     String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -168,7 +168,7 @@ void main() {
     // set transaction data, add resource fee and sign transaction
     transaction.sorobanTransactionData = simulateResponse.transactionData;
     transaction.addResourceFee(simulateResponse.minResourceFee!);
-    transaction.sign(keyPairA, Network.FUTURENET);
+    transaction.sign(keyPairA, Network.TESTNET);
 
     // check transaction xdr encoding and decoding back and forth
     String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -220,9 +220,9 @@ void main() {
       GetNetworkResponse networkResponse = await sorobanServer.getNetwork();
 
       assert(!networkResponse.isErrorResponse);
-      assert("https://friendbot-futurenet.stellar.org/" ==
+      assert("https://friendbot.stellar.org/" ==
           networkResponse.friendbotUrl);
-      assert("Test SDF Future Network ; October 2022" ==
+      assert("Test SDF Network ; September 2015" ==
           networkResponse.passphrase);
     });
 
@@ -276,7 +276,7 @@ void main() {
       // set transaction data, add resource fee and sign transaction
       transaction.sorobanTransactionData = simulateResponse.transactionData;
       transaction.addResourceFee(simulateResponse.minResourceFee!);
-      transaction.sign(keyPairA, Network.FUTURENET);
+      transaction.sign(keyPairA, Network.TESTNET);
 
       // check transaction xdr encoding and decoding back and forth
       String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -365,7 +365,7 @@ void main() {
       transaction.sorobanTransactionData = simulateResponse.transactionData;
       transaction.addResourceFee(simulateResponse.minResourceFee!);
       transaction.setSorobanAuth(simulateResponse.sorobanAuth);
-      transaction.sign(keyPairA, Network.FUTURENET);
+      transaction.sign(keyPairA, Network.TESTNET);
 
       // check transaction xdr encoding and decoding back and forth
       String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -455,7 +455,7 @@ void main() {
       // set transaction data, add resource fee and sign transaction
       transaction.sorobanTransactionData = simulateResponse.transactionData;
       transaction.addResourceFee(simulateResponse.minResourceFee!);
-      transaction.sign(keyPairA, Network.FUTURENET);
+      transaction.sign(keyPairA, Network.TESTNET);
 
       // check transaction xdr encoding and decoding back and forth
       String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -539,7 +539,7 @@ void main() {
       // set transaction data, add resource fee and sign transaction
       transaction.sorobanTransactionData = simulateResponse.transactionData;
       transaction.addResourceFee(simulateResponse.minResourceFee!);
-      transaction.sign(keyPairA, Network.FUTURENET);
+      transaction.sign(keyPairA, Network.TESTNET);
 
       SendTransactionResponse sendResponse =
           await sorobanServer.sendTransaction(transaction);
@@ -576,7 +576,7 @@ void main() {
       transaction.sorobanTransactionData = simulateResponse.transactionData;
       transaction.setSorobanAuth(simulateResponse.sorobanAuth);
       transaction.addResourceFee(simulateResponse.minResourceFee!);
-      transaction.sign(keyPairA, Network.FUTURENET);
+      transaction.sign(keyPairA, Network.TESTNET);
 
       sendResponse = await sorobanServer.sendTransaction(transaction);
       assert(sendResponse.error == null);
@@ -612,7 +612,7 @@ void main() {
       // set transaction data, add resource fee and sign transaction
       transaction.sorobanTransactionData = simulateResponse.transactionData;
       transaction.addResourceFee(simulateResponse.minResourceFee!);
-      transaction.sign(keyPairA, Network.FUTURENET);
+      transaction.sign(keyPairA, Network.TESTNET);
 
       sendResponse = await sorobanServer.sendTransaction(transaction);
       assert(sendResponse.error == null);
@@ -709,7 +709,7 @@ void main() {
       transaction.sorobanTransactionData = simulateResponse.transactionData;
       transaction.setSorobanAuth(simulateResponse.sorobanAuth);
       transaction.addResourceFee(simulateResponse.minResourceFee!);
-      transaction.sign(keyPairA, Network.FUTURENET);
+      transaction.sign(keyPairA, Network.TESTNET);
 
       // check transaction xdr encoding and decoding back and forth
       String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -753,7 +753,7 @@ void main() {
     });
 
     test('test SAC with asset', () async {
-      await FuturenetFriendBot.fundTestAccount(accountBId);
+      await FriendBot.fundTestAccount(accountBId);
       await Future.delayed(Duration(seconds: 5));
 
       // prepare trustline
@@ -768,8 +768,8 @@ void main() {
           .addOperation(ctOp.build())
           .addOperation(pOp.build())
           .build();
-      transaction.sign(keyPairA, Network.FUTURENET);
-      transaction.sign(keyPairB, Network.FUTURENET);
+      transaction.sign(keyPairA, Network.TESTNET);
+      transaction.sign(keyPairB, Network.TESTNET);
       SubmitTransactionResponse response =
           await sdk.submitTransaction(transaction);
       assert(response.success);
@@ -803,7 +803,7 @@ void main() {
       transaction.sorobanTransactionData = simulateResponse.transactionData;
       transaction.addResourceFee(simulateResponse.minResourceFee!);
       transaction.setSorobanAuth(simulateResponse.sorobanAuth);
-      transaction.sign(keyPairB, Network.FUTURENET);
+      transaction.sign(keyPairB, Network.TESTNET);
 
       // check transaction xdr encoding and decoding back and forth
       String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
diff --git a/test/soroban_test_atomic_swap.dart b/test/soroban_test_atomic_swap.dart
index 7008a52..a74223c 100644
--- a/test/soroban_test_atomic_swap.dart
+++ b/test/soroban_test_atomic_swap.dart
@@ -5,9 +5,9 @@ import 'package:stellar_flutter_sdk/stellar_flutter_sdk.dart';
 
 void main() {
   SorobanServer sorobanServer =
-      SorobanServer("https://rpc-futurenet.stellar.org");
+      SorobanServer("https://soroban-testnet.stellar.org");
 
-  StellarSDK sdk = StellarSDK.FUTURENET;
+  StellarSDK sdk = StellarSDK.TESTNET;
 
   KeyPair adminKeypair = KeyPair.random();
   String adminId = adminKeypair.accountId;
@@ -33,21 +33,21 @@ void main() {
     try {
       await sdk.accounts.account(adminId);
     } catch (e) {
-      await FuturenetFriendBot.fundTestAccount(adminId);
+      await FriendBot.fundTestAccount(adminId);
       print("admin " + adminId + " : " + adminKeypair.secretSeed);
     }
 
     try {
       await sdk.accounts.account(aliceId);
     } catch (e) {
-      await FuturenetFriendBot.fundTestAccount(aliceId);
+      await FriendBot.fundTestAccount(aliceId);
       print("alice " + aliceId + " : " + aliceKeypair.secretSeed);
     }
 
     try {
       await sdk.accounts.account(bobId);
     } catch (e) {
-      await FuturenetFriendBot.fundTestAccount(bobId);
+      await FriendBot.fundTestAccount(bobId);
       print("bob " + bobId + " : " + bobKeypair.secretSeed);
     }
   });
@@ -96,7 +96,7 @@ void main() {
     // set transaction data, add resource fee and sign transaction
     transaction.sorobanTransactionData = simulateResponse.transactionData;
     transaction.addResourceFee(simulateResponse.minResourceFee!);
-    transaction.sign(adminKeypair, Network.FUTURENET);
+    transaction.sign(adminKeypair, Network.TESTNET);
 
     // check transaction xdr encoding and decoding back and forth
     String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -143,7 +143,7 @@ void main() {
     transaction.sorobanTransactionData = simulateResponse.transactionData;
     transaction.addResourceFee(simulateResponse.minResourceFee!);
     transaction.setSorobanAuth(simulateResponse.sorobanAuth);
-    transaction.sign(adminKeypair, Network.FUTURENET);
+    transaction.sign(adminKeypair, Network.TESTNET);
 
     // send transaction to soroban rpc server
     SendTransactionResponse sendResponse =
@@ -198,7 +198,7 @@ void main() {
     transaction.sorobanTransactionData = simulateResponse.transactionData;
     transaction.addResourceFee(simulateResponse.minResourceFee!);
     transaction.setSorobanAuth(simulateResponse.sorobanAuth);
-    transaction.sign(adminKeypair, Network.FUTURENET);
+    transaction.sign(adminKeypair, Network.TESTNET);
 
     // check transaction xdr encoding and decoding back and forth
     String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -250,7 +250,7 @@ void main() {
     transaction.sorobanTransactionData = simulateResponse.transactionData;
     transaction.addResourceFee(simulateResponse.minResourceFee!);
     transaction.setSorobanAuth(simulateResponse.sorobanAuth);
-    transaction.sign(adminKeypair, Network.FUTURENET);
+    transaction.sign(adminKeypair, Network.TESTNET);
 
     // check transaction xdr encoding and decoding back and forth
     String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -299,7 +299,7 @@ void main() {
     // set transaction data, add resource fee and sign transaction
     transaction.sorobanTransactionData = simulateResponse.transactionData;
     transaction.addResourceFee(simulateResponse.minResourceFee!);
-    transaction.sign(adminKeypair, Network.FUTURENET);
+    transaction.sign(adminKeypair, Network.TESTNET);
 
     // check transaction xdr encoding and decoding back and forth
     String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -370,7 +370,7 @@ void main() {
     // set transaction data, add resource fee and sign transaction
     transaction.sorobanTransactionData = simulateResponse.transactionData;
     transaction.addResourceFee(simulateResponse.minResourceFee!);
-    transaction.sign(adminKeypair, Network.FUTURENET);
+    transaction.sign(adminKeypair, Network.TESTNET);
 
     // check transaction xdr encoding and decoding back and forth
     String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -431,7 +431,7 @@ void main() {
     // set transaction data, add resource fee and sign transaction
     transaction.sorobanTransactionData = simulateResponse.transactionData;
     transaction.addResourceFee(simulateResponse.minResourceFee!);
-    transaction.sign(adminKeypair, Network.FUTURENET);
+    transaction.sign(adminKeypair, Network.TESTNET);
 
     // check transaction xdr encoding and decoding back and forth
     String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -606,14 +606,14 @@ void main() {
             latestLedgerResponse.sequence! + 10;
 
         if (a.credentials.addressCredentials!.address.accountId == aliceId) {
-          a.sign(aliceKeypair, Network.FUTURENET);
+          a.sign(aliceKeypair, Network.TESTNET);
         }
         if (a.credentials.addressCredentials!.address.accountId == bobId) {
-          a.sign(bobKeypair, Network.FUTURENET);
+          a.sign(bobKeypair, Network.TESTNET);
         }
       }
       transaction.setSorobanAuth(auth);
-      transaction.sign(swapSubmitterKp, Network.FUTURENET);
+      transaction.sign(swapSubmitterKp, Network.TESTNET);
 
       // check transaction xdr encoding and decoding back and forth
       String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
diff --git a/test/soroban_test_auth.dart b/test/soroban_test_auth.dart
index 538baf0..7931efe 100644
--- a/test/soroban_test_auth.dart
+++ b/test/soroban_test_auth.dart
@@ -5,9 +5,9 @@ import 'package:stellar_flutter_sdk/stellar_flutter_sdk.dart';
 
 void main() {
   SorobanServer sorobanServer =
-      SorobanServer("https://rpc-futurenet.stellar.org");
+      SorobanServer("https://soroban-testnet.stellar.org");
 
-  StellarSDK sdk = StellarSDK.FUTURENET;
+  StellarSDK sdk = StellarSDK.TESTNET;
 
   KeyPair submitterKeypair = KeyPair.random();
   String submitterId = submitterKeypair.accountId;
@@ -25,13 +25,13 @@ void main() {
     try {
       await sdk.accounts.account(submitterId);
     } catch (e) {
-      await FuturenetFriendBot.fundTestAccount(submitterId);
+      await FriendBot.fundTestAccount(submitterId);
     }
 
     try {
       await sdk.accounts.account(invokerId);
     } catch (e) {
-      await FuturenetFriendBot.fundTestAccount(invokerId);
+      await FriendBot.fundTestAccount(invokerId);
     }
   });
 
@@ -102,7 +102,7 @@ void main() {
     // set transaction data, add resource fee and sign transaction
     transaction.sorobanTransactionData = simulateResponse.transactionData;
     transaction.addResourceFee(simulateResponse.minResourceFee!);
-    transaction.sign(submitterKeypair, Network.FUTURENET);
+    transaction.sign(submitterKeypair, Network.TESTNET);
 
     // check transaction xdr encoding and decoding back and forth
     String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -163,7 +163,7 @@ void main() {
     // set transaction data, add resource fee and sign transaction
     transaction.sorobanTransactionData = simulateResponse.transactionData;
     transaction.addResourceFee(simulateResponse.minResourceFee!);
-    transaction.sign(submitterKeypair, Network.FUTURENET);
+    transaction.sign(submitterKeypair, Network.TESTNET);
 
     // check transaction xdr encoding and decoding back and forth
     String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -234,7 +234,7 @@ void main() {
       // set transaction data, add resource fee and sign transaction
       transaction.sorobanTransactionData = simulateResponse.transactionData;
       transaction.addResourceFee(simulateResponse.minResourceFee!);
-      transaction.sign(submitterKeypair, Network.FUTURENET);
+      transaction.sign(submitterKeypair, Network.TESTNET);
 
       // check transaction xdr encoding and decoding back and forth
       String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -283,7 +283,7 @@ void main() {
       transaction.sorobanTransactionData = simulateResponse.transactionData;
       transaction.addResourceFee(simulateResponse.minResourceFee!);
       transaction.setSorobanAuth(simulateResponse.sorobanAuth);
-      transaction.sign(submitterKeypair, Network.FUTURENET);
+      transaction.sign(submitterKeypair, Network.TESTNET);
 
       // send transaction to soroban rpc server
       SendTransactionResponse sendResponse =
@@ -340,10 +340,10 @@ void main() {
         // update signature expiration ledger
         a.credentials.addressCredentials!.signatureExpirationLedger = latestLedgerResponse.sequence! + 10;
         // sign
-        a.sign(invokerKeypair, Network.FUTURENET);
+        a.sign(invokerKeypair, Network.TESTNET);
       }
       transaction.setSorobanAuth(auth);
-      transaction.sign(submitterKeypair, Network.FUTURENET);
+      transaction.sign(submitterKeypair, Network.TESTNET);
 
       // check transaction xdr encoding and decoding back and forth
       String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();
@@ -429,7 +429,7 @@ void main() {
       transaction.sorobanTransactionData = simulateResponse.transactionData;
       transaction.addResourceFee(simulateResponse.minResourceFee!);
       transaction.setSorobanAuth(simulateResponse.sorobanAuth);
-      transaction.sign(invokerKeypair, Network.FUTURENET);
+      transaction.sign(invokerKeypair, Network.TESTNET);
 
       // check transaction xdr encoding and decoding back and forth
       String transactionEnvelopeXdr = transaction.toEnvelopeXdrBase64();