Repository: StellarCN/py-stellar-base (language: python)

Issue:
Updating the SDKs to the stable Protocol 20 release
SDKs need to be updated to adapt to breaking changes that have occurred since Preview 11 (i.e. the current testnet release candidate) coming to Protocol 20.

## Summary of Breaking Changes
This is likely irrelevant to SDK maintainers, but do note sandbox mode has been removed from the Soroban CLI (https://github.com/stellar/soroban-tools/issues/983).


### XDR
The XDR needs to be updated to https://github.com/stellar/stellar-xdr/commit/6a620d160aab22609c982d54578ff6a63bfcdc01. This includes a non-trivial list of breaking changes (mostly renames):
  - The `BumpFootprintExpirationOp` is now `ExtendFootprintTTLOp` and its `ledgersToExpire` field is now named `extendTo`, but it serves the same purpose.
  - `ContractExecutable.contractExecutableToken` is now `contractExecutableStellarAsset`
  - `SorobanTransactionData.refundableFee` is now `resourceFee`
  - This new fee encompasses the entirety of the Soroban-related resource fees. Note that this is distinct from the "network-inclusion" fee that you would set on your transaction
  - see https://github.com/stellar/js-stellar-base/pull/704 for an example migration

### RPC
 - The `getEvents` RPC endpoint structure has changed:
   * `value: { xdr: string }` is now just `value: string` (https://github.com/stellar/soroban-tools/pull/1015)
   * `contractId` will always be a contract strkey (`C...` format) if present (https://github.com/stellar/soroban-tools/issues/1007)
 - The `getLedgerEntries` RPC endpoint now includes expiration info (https://github.com/stellar/soroban-tools/pull/1010):
   * `expirationLedgerSeq` is a string-ified `uint32` present if the requested entries have expiration


Discussion / hints:

Fix patch:
diff --git a/Makefile b/Makefile
index c7d49c0a..c62236a8 100644
--- a/Makefile
+++ b/Makefile
@@ -13,7 +13,7 @@ xdr/Stellar-contract-config-setting.x
 
 XDRGEN_REPO=overcat/xdrgen
 XDRGEN_COMMIT=c98916346eeea7e37aaea039de03c1e5ea0a116a
-XDRNEXT_COMMIT=9ac02641139e6717924fdad716f6e958d0168491
+XDRNEXT_COMMIT=6a620d160aab22609c982d54578ff6a63bfcdc01
 
 UNAME := $(shell uname)
 SED := sed
diff --git a/docs/en/api.rst b/docs/en/api.rst
index a2fdc51d..469b4f89 100644
--- a/docs/en/api.rst
+++ b/docs/en/api.rst
@@ -636,9 +636,9 @@ InvokeHostFunction
 .. autoclass:: stellar_sdk.operation.InvokeHostFunction
    :members: to_xdr_object, from_xdr_object
 
-BumpFootprintExpiration
------------------------
-.. autoclass:: stellar_sdk.operation.BumpFootprintExpiration
+ExtendFootprintTTL
+------------------
+.. autoclass:: stellar_sdk.operation.ExtendFootprintTTL
    :members: to_xdr_object, from_xdr_object
 
 RestoreFootprint
@@ -1017,18 +1017,6 @@ BucketMetadataExt
 -----------------
 .. autoclass:: stellar_sdk.xdr.bucket_metadata_ext.BucketMetadataExt
 
-BumpFootprintExpirationOp
--------------------------
-.. autoclass:: stellar_sdk.xdr.bump_footprint_expiration_op.BumpFootprintExpirationOp
-
-BumpFootprintExpirationResult
------------------------------
-.. autoclass:: stellar_sdk.xdr.bump_footprint_expiration_result.BumpFootprintExpirationResult
-
-BumpFootprintExpirationResultCode
----------------------------------
-.. autoclass:: stellar_sdk.xdr.bump_footprint_expiration_result_code.BumpFootprintExpirationResultCode
-
 BumpSequenceOp
 --------------
 .. autoclass:: stellar_sdk.xdr.bump_sequence_op.BumpSequenceOp
@@ -1365,9 +1353,17 @@ EvictionIterator
 ----------------
 .. autoclass:: stellar_sdk.xdr.eviction_iterator.EvictionIterator
 
-ExpirationEntry
----------------
-.. autoclass:: stellar_sdk.xdr.expiration_entry.ExpirationEntry
+ExtendFootprintTTLOp
+--------------------
+.. autoclass:: stellar_sdk.xdr.extend_footprint_ttl_op.ExtendFootprintTTLOp
+
+ExtendFootprintTTLResult
+------------------------
+.. autoclass:: stellar_sdk.xdr.extend_footprint_ttl_result.ExtendFootprintTTLResult
+
+ExtendFootprintTTLResultCode
+----------------------------
+.. autoclass:: stellar_sdk.xdr.extend_footprint_ttl_result_code.ExtendFootprintTTLResultCode
 
 ExtensionPoint
 --------------
@@ -1541,10 +1537,6 @@ LedgerCloseMetaV1
 -----------------
 .. autoclass:: stellar_sdk.xdr.ledger_close_meta_v1.LedgerCloseMetaV1
 
-LedgerCloseMetaV2
------------------
-.. autoclass:: stellar_sdk.xdr.ledger_close_meta_v2.LedgerCloseMetaV2
-
 LedgerCloseValueSignature
 -------------------------
 .. autoclass:: stellar_sdk.xdr.ledger_close_value_signature.LedgerCloseValueSignature
@@ -1645,10 +1637,6 @@ LedgerKeyData
 -------------
 .. autoclass:: stellar_sdk.xdr.ledger_key_data.LedgerKeyData
 
-LedgerKeyExpiration
--------------------
-.. autoclass:: stellar_sdk.xdr.ledger_key_expiration.LedgerKeyExpiration
-
 LedgerKeyLiquidityPool
 ----------------------
 .. autoclass:: stellar_sdk.xdr.ledger_key_liquidity_pool.LedgerKeyLiquidityPool
@@ -1661,6 +1649,10 @@ LedgerKeyTrustLine
 ------------------
 .. autoclass:: stellar_sdk.xdr.ledger_key_trust_line.LedgerKeyTrustLine
 
+LedgerKeyTtl
+------------
+.. autoclass:: stellar_sdk.xdr.ledger_key_ttl.LedgerKeyTtl
+
 LedgerSCPMessages
 -----------------
 .. autoclass:: stellar_sdk.xdr.ledger_scp_messages.LedgerSCPMessages
@@ -2313,9 +2305,9 @@ SponsorshipDescriptor
 ---------------------
 .. autoclass:: stellar_sdk.xdr.sponsorship_descriptor.SponsorshipDescriptor
 
-StateExpirationSettings
------------------------
-.. autoclass:: stellar_sdk.xdr.state_expiration_settings.StateExpirationSettings
+StateArchivalSettings
+---------------------
+.. autoclass:: stellar_sdk.xdr.state_archival_settings.StateArchivalSettings
 
 StellarMessage
 --------------
@@ -2333,6 +2325,10 @@ StellarValueType
 ----------------
 .. autoclass:: stellar_sdk.xdr.stellar_value_type.StellarValueType
 
+StoredDebugTransactionSet
+-------------------------
+.. autoclass:: stellar_sdk.xdr.stored_debug_transaction_set.StoredDebugTransactionSet
+
 StoredTransactionSet
 --------------------
 .. autoclass:: stellar_sdk.xdr.stored_transaction_set.StoredTransactionSet
@@ -2369,6 +2365,10 @@ SurveyResponseMessage
 ---------------------
 .. autoclass:: stellar_sdk.xdr.survey_response_message.SurveyResponseMessage
 
+TTLEntry
+--------
+.. autoclass:: stellar_sdk.xdr.ttl_entry.TTLEntry
+
 ThresholdIndexes
 ----------------
 .. autoclass:: stellar_sdk.xdr.threshold_indexes.ThresholdIndexes
diff --git a/examples/soroban_deploy_create_wrapped_token_contract.py b/examples/soroban_deploy_create_wrapped_token_contract.py
index 2944d437..cbc783e8 100644
--- a/examples/soroban_deploy_create_wrapped_token_contract.py
+++ b/examples/soroban_deploy_create_wrapped_token_contract.py
@@ -28,7 +28,7 @@
 tx = (
     TransactionBuilder(source, network_passphrase)
     .set_timeout(300)
-    .append_create_token_contract_from_asset_op(asset=hello_asset)
+    .append_create_stellar_asset_contract_from_asset_op(asset=hello_asset)
     .build()
 )
 
diff --git a/examples/soroban_bump_footprint_expiration.py b/examples/soroban_extend_footprint_ttl.py
similarity index 94%
rename from examples/soroban_bump_footprint_expiration.py
rename to examples/soroban_extend_footprint_ttl.py
index 2fad2029..8d04ee7e 100644
--- a/examples/soroban_bump_footprint_expiration.py
+++ b/examples/soroban_extend_footprint_ttl.py
@@ -1,4 +1,4 @@
-"""This example shows how to bump footprint expiration.
+"""This example shows how to extend footprint TTL.
 
 See https://soroban.stellar.org/docs/fundamentals-and-concepts/state-expiration#bumpfootprintexpirationop
 """
@@ -38,7 +38,7 @@
 tx = (
     TransactionBuilder(source, network_passphrase, base_fee=50000)
     .set_timeout(300)
-    .append_bump_footprint_expiration_op(ledgers_to_expire=101)
+    .append_extend_footprint_ttl_op(extend_to=101)
     .set_soroban_data(soroban_data)
     .build()
 )
diff --git a/stellar_sdk/base_soroban_server.py b/stellar_sdk/base_soroban_server.py
index 1860c583..4595cef3 100644
--- a/stellar_sdk/base_soroban_server.py
+++ b/stellar_sdk/base_soroban_server.py
@@ -29,7 +29,7 @@ def _assemble_transaction(
     if not transaction_envelope.transaction.is_soroban_transaction():
         raise ValueError(
             "Unsupported transaction: must contain exactly one operation of "
-            "type RestoreFootprint, InvokeHostFunction or BumpFootprintExpiration"
+            "type RestoreFootprint, InvokeHostFunction or ExtendFootprintTTL"
         )
 
     min_resource_fee = simulation.min_resource_fee
diff --git a/stellar_sdk/operation/__init__.py b/stellar_sdk/operation/__init__.py
index e613e95c..ea12b886 100644
--- a/stellar_sdk/operation/__init__.py
+++ b/stellar_sdk/operation/__init__.py
@@ -1,7 +1,6 @@
 from .account_merge import *
 from .allow_trust import *
 from .begin_sponsoring_future_reserves import *
-from .bump_footprint_expiration import *
 from .bump_sequence import *
 from .change_trust import *
 from .claim_claimable_balance import *
@@ -11,6 +10,7 @@
 from .create_claimable_balance import *
 from .create_passive_sell_offer import *
 from .end_sponsoring_future_reserves import *
+from .extend_footprint_ttl import *
 from .inflation import *
 from .invoke_host_function import *
 from .liquidity_pool_deposit import *
diff --git a/stellar_sdk/operation/bump_footprint_expiration.py b/stellar_sdk/operation/bump_footprint_expiration.py
deleted file mode 100644
index c12d4590..00000000
--- a/stellar_sdk/operation/bump_footprint_expiration.py
+++ /dev/null
@@ -1,62 +0,0 @@
-from typing import Optional, Union
-
-from .. import xdr as stellar_xdr
-from ..muxed_account import MuxedAccount
-from .operation import Operation
-
-__all__ = ["BumpFootprintExpiration"]
-
-
-class BumpFootprintExpiration(Operation):
-    """The :class:`BumpFootprintExpiration` object, which represents a BumpFootprintExpiration
-    operation on Stellar's network.
-
-    Threshold: Medium
-
-    See `BumpFootprintExpirationOp <https://soroban.stellar.org/docs/fundamentals-and-concepts/state-expiration#bumpfootprintexpirationop>`_.
-
-    :param ledgers_to_expire: The number of ledgers past the LCL (last closed ledger)
-        by which to extend the validity of the ledger keys in this transaction.
-    :param source: The source account for the operation. Defaults to the transaction's source account.
-    """
-
-    _XDR_OPERATION_TYPE: stellar_xdr.OperationType = (
-        stellar_xdr.OperationType.BUMP_FOOTPRINT_EXPIRATION
-    )
-
-    def __init__(
-        self, ledgers_to_expire: int, source: Optional[Union[MuxedAccount, str]] = None
-    ) -> None:
-        super().__init__(source)
-        if ledgers_to_expire < 0 or ledgers_to_expire > 2**32 - 1:
-            raise ValueError(
-                f"`ledgers_to_expire` value must be between 0 and 2**32-1, got {ledgers_to_expire}"
-            )
-
-        self.ledgers_to_expire: int = ledgers_to_expire
-
-    def _to_operation_body(self) -> stellar_xdr.OperationBody:
-        op = stellar_xdr.BumpFootprintExpirationOp(
-            ext=stellar_xdr.ExtensionPoint(0),
-            ledgers_to_expire=stellar_xdr.Uint32(self.ledgers_to_expire),
-        )
-        body = stellar_xdr.OperationBody(
-            type=self._XDR_OPERATION_TYPE, bump_footprint_expiration_op=op
-        )
-        return body
-
-    @classmethod
-    def from_xdr_object(
-        cls, xdr_object: stellar_xdr.Operation
-    ) -> "BumpFootprintExpiration":
-        """Creates a :class:`BumpFootprintExpiration` object from an XDR Operation object."""
-        source = Operation.get_source_from_xdr_obj(xdr_object)
-        assert xdr_object.body.bump_footprint_expiration_op is not None
-        ledgers_to_expire = (
-            xdr_object.body.bump_footprint_expiration_op.ledgers_to_expire.uint32
-        )
-        op = cls(source=source, ledgers_to_expire=ledgers_to_expire)
-        return op
-
-    def __str__(self):
-        return f"<BumpFootprintExpiration [ledgers_to_expire={self.ledgers_to_expire}, source={self.source}]>"
diff --git a/stellar_sdk/operation/extend_footprint_ttl.py b/stellar_sdk/operation/extend_footprint_ttl.py
new file mode 100644
index 00000000..505b1a01
--- /dev/null
+++ b/stellar_sdk/operation/extend_footprint_ttl.py
@@ -0,0 +1,60 @@
+from typing import Optional, Union
+
+from .. import xdr as stellar_xdr
+from ..muxed_account import MuxedAccount
+from .operation import Operation
+
+__all__ = ["ExtendFootprintTTL"]
+
+
+class ExtendFootprintTTL(Operation):
+    """The :class:`ExtendFootprintTTL` object, which represents a ExtendFootprintTTL
+    operation on Stellar's network.
+
+    Threshold: Medium
+
+    See `ExtendFootprintTTLOp <https://soroban.stellar.org/docs/fundamentals-and-concepts/state-expiration#ExtendFootprintTTLop>`_.
+
+    :param extend_to: The number of ledgers past the LCL (last closed ledger)
+        by which to extend the validity of the ledger keys in this transaction.
+    :param source: The source account for the operation. Defaults to the transaction's source account.
+    """
+
+    _XDR_OPERATION_TYPE: stellar_xdr.OperationType = (
+        stellar_xdr.OperationType.EXTEND_FOOTPRINT_TTL
+    )
+
+    def __init__(
+        self, extend_to: int, source: Optional[Union[MuxedAccount, str]] = None
+    ) -> None:
+        super().__init__(source)
+        if extend_to < 0 or extend_to > 2**32 - 1:
+            raise ValueError(
+                f"`extend_to` value must be between 0 and 2**32-1, got {extend_to}"
+            )
+
+        self.extend_to: int = extend_to
+
+    def _to_operation_body(self) -> stellar_xdr.OperationBody:
+        op = stellar_xdr.ExtendFootprintTTLOp(
+            ext=stellar_xdr.ExtensionPoint(0),
+            extend_to=stellar_xdr.Uint32(self.extend_to),
+        )
+        body = stellar_xdr.OperationBody(
+            type=self._XDR_OPERATION_TYPE, extend_footprint_ttl_op=op
+        )
+        return body
+
+    @classmethod
+    def from_xdr_object(cls, xdr_object: stellar_xdr.Operation) -> "ExtendFootprintTTL":
+        """Creates a :class:`ExtendFootprintTTL` object from an XDR Operation object."""
+        source = Operation.get_source_from_xdr_obj(xdr_object)
+        assert xdr_object.body.extend_footprint_ttl_op is not None
+        extend_to = xdr_object.body.extend_footprint_ttl_op.extend_to.uint32
+        op = cls(source=source, extend_to=extend_to)
+        return op
+
+    def __str__(self):
+        return (
+            f"<ExtendFootprintTTL [extend_to={self.extend_to}, source={self.source}]>"
+        )
diff --git a/stellar_sdk/soroban_data_builder.py b/stellar_sdk/soroban_data_builder.py
index 15e4d6e8..9152a344 100644
--- a/stellar_sdk/soroban_data_builder.py
+++ b/stellar_sdk/soroban_data_builder.py
@@ -12,7 +12,7 @@ class SorobanDataBuilder:
     with various items set to specific values.
 
     This is recommended for when you are building :class:`RestoreFootprint <stellar_sdk.operation.RestoreFootprint>`,
-    :class:`BumpFootprintExpiration <stellar_sdk.operation.BumpFootprintExpiration>` operations to avoid (re)building
+    :class:`ExtendFootprintTTL <stellar_sdk.operation.ExtendFootprintTTL>` operations to avoid (re)building
     the entire data structure from scratch.
 
     By default, an empty instance will be created.
@@ -21,7 +21,7 @@ class SorobanDataBuilder:
     def __init__(self):
         self._data = stellar_xdr.SorobanTransactionData(
             ext=stellar_xdr.ExtensionPoint(0),
-            refundable_fee=stellar_xdr.Int64(0),
+            resource_fee=stellar_xdr.Int64(0),
             resources=stellar_xdr.SorobanResources(
                 footprint=stellar_xdr.LedgerFootprint(
                     read_only=[],
@@ -51,13 +51,13 @@ def from_xdr(
             )
         return data
 
-    def set_refundable_fee(self, fee: int) -> SorobanDataBuilder:
-        """Sets the "refundable" fee portion of the Soroban data.
+    def set_resource_fee(self, fee: int) -> SorobanDataBuilder:
+        """Sets the "resource" fee portion of the Soroban data.
 
-        :param fee: The refundable fee to set (int64)
+        :param fee: The resource fee to set (int64)
         :return: This builder.
         """
-        self._data.refundable_fee = stellar_xdr.Int64(fee)
+        self._data.resource_fee = stellar_xdr.Int64(fee)
         return self
 
     def set_read_only(
diff --git a/stellar_sdk/soroban_rpc.py b/stellar_sdk/soroban_rpc.py
index 0f8ec3c4..ddac156f 100644
--- a/stellar_sdk/soroban_rpc.py
+++ b/stellar_sdk/soroban_rpc.py
@@ -54,10 +54,6 @@ class EventFilter(BaseModel):
     model_config = ConfigDict(populate_by_name=True)
 
 
-class EventInfoValue(BaseModel):
-    xdr: str
-
-
 class EventInfo(BaseModel):
     event_type: str = Field(alias="type")
     ledger: int = Field(alias="ledger")
@@ -66,7 +62,7 @@ class EventInfo(BaseModel):
     id: str = Field(alias="id")
     paging_token: str = Field(alias="pagingToken")
     topic: List[str] = Field(alias="topic")
-    value: EventInfoValue = Field(alias="value")
+    value: str = Field(alias="value")
     in_successful_contract_call: bool = Field(alias="inSuccessfulContractCall")
 
 
@@ -111,7 +107,8 @@ class GetLedgerEntriesRequest(BaseModel):
 class LedgerEntryResult(BaseModel):
     key: str
     xdr: str
-    last_modified_ledger_seq: int = Field(alias="lastModifiedLedgerSeq")
+    last_modified_ledger: int = Field(alias="lastModifiedLedgerSeq")
+    live_until_ledger: Optional[int] = Field(alias="liveUntilLedgerSeq", default=None)
 
 
 class GetLedgerEntriesResponse(BaseModel):
diff --git a/stellar_sdk/soroban_server.py b/stellar_sdk/soroban_server.py
index c7041bad..77466fbc 100644
--- a/stellar_sdk/soroban_server.py
+++ b/stellar_sdk/soroban_server.py
@@ -166,7 +166,7 @@ def simulate_transaction(
         :param transaction_envelope: The transaction to simulate. It should include exactly one operation,
             which must be one of :class:`RestoreFootprint <stellar_sdk.operation.RestoreFootprintOperation>`,
             :class:`InvokeHostFunction <stellar_sdk.operation.InvokeHostFunction>` or
-            :class:`BumpFootprintExpiration <stellar_sdk.operation.RestoreFootprint>` operation.
+            :class:`ExtendFootprintTTL <stellar_sdk.operation.RestoreFootprint>` operation.
             Any provided footprint will be ignored.
         :return: A :class:`SimulateTransactionResponse <stellar_sdk.soroban_rpc.SimulateTransactionResponse>` object
             contains the cost, footprint, result/auth requirements (if applicable), and error of the transaction.
@@ -287,7 +287,7 @@ def prepare_transaction(
 
         :param transaction_envelope: The transaction to prepare. It should include exactly one operation, which
             must be one of :py:class:`RestoreFootprint <stellar_sdk.operation.RestoreFootprint>`,
-            :py:class:`BumpFootprintExpiration <stellar_sdk.operation.BumpFootprintExpiration>`,
+            :py:class:`ExtendFootprintTTL <stellar_sdk.operation.ExtendFootprintTTL>`,
             or :py:class:`InvokeHostFunction <stellar_sdk.operation.InvokeHostFunction>`. Any provided
             footprint will be ignored. You can use :meth:`stellar_sdk.Transaction.is_soroban_transaction` to check
             if a transaction is a Soroban transaction. Any provided footprint will be overwritten.
diff --git a/stellar_sdk/soroban_server_async.py b/stellar_sdk/soroban_server_async.py
index 46a3a2a7..5ee94ec5 100644
--- a/stellar_sdk/soroban_server_async.py
+++ b/stellar_sdk/soroban_server_async.py
@@ -166,7 +166,7 @@ async def simulate_transaction(
         :param transaction_envelope: The transaction to simulate. It should include exactly one operation,
             which must be one of :class:`RestoreFootprint <stellar_sdk.operation.RestoreFootprintOperation>`,
             :class:`InvokeHostFunction <stellar_sdk.operation.InvokeHostFunction>` or
-            :class:`BumpFootprintExpiration <stellar_sdk.operation.RestoreFootprint>` operation.
+            :class:`ExtendFootprintTTL <stellar_sdk.operation.RestoreFootprint>` operation.
             Any provided footprint will be ignored.
         :return: A :class:`SimulateTransactionResponse <stellar_sdk.soroban_rpc.SimulateTransactionResponse>` object
             contains the cost, footprint, result/auth requirements (if applicable), and error of the transaction.
@@ -287,7 +287,7 @@ async def prepare_transaction(
 
         :param transaction_envelope: The transaction to prepare. It should include exactly one operation, which
             must be one of :py:class:`RestoreFootprint <stellar_sdk.operation.RestoreFootprint>`,
-            :py:class:`BumpFootprintExpiration <stellar_sdk.operation.BumpFootprintExpiration>`,
+            :py:class:`ExtendFootprintTTL <stellar_sdk.operation.ExtendFootprintTTL>`,
             or :py:class:`InvokeHostFunction <stellar_sdk.operation.InvokeHostFunction>`. Any provided
             footprint will be ignored. You can use :meth:`stellar_sdk.Transaction.is_soroban_transaction` to check
             if a transaction is a Soroban transaction. Any provided footprint will be overwritten.
diff --git a/stellar_sdk/transaction.py b/stellar_sdk/transaction.py
index 95a8c8e9..47bee03d 100644
--- a/stellar_sdk/transaction.py
+++ b/stellar_sdk/transaction.py
@@ -4,7 +4,7 @@
 from .keypair import Keypair
 from .memo import Memo, NoneMemo
 from .muxed_account import MuxedAccount
-from .operation import BumpFootprintExpiration, InvokeHostFunction, RestoreFootprint
+from .operation import ExtendFootprintTTL, InvokeHostFunction, RestoreFootprint
 from .operation.create_claimable_balance import CreateClaimableBalance
 from .operation.operation import Operation
 from .preconditions import Preconditions
@@ -261,7 +261,7 @@ def is_soroban_transaction(self) -> bool:
             return False
         if not isinstance(
             self.operations[0],
-            (RestoreFootprint, InvokeHostFunction, BumpFootprintExpiration),
+            (RestoreFootprint, InvokeHostFunction, ExtendFootprintTTL),
         ):
             return False
         return True
diff --git a/stellar_sdk/transaction_builder.py b/stellar_sdk/transaction_builder.py
index 1ae22e9c..ed8119d6 100644
--- a/stellar_sdk/transaction_builder.py
+++ b/stellar_sdk/transaction_builder.py
@@ -1346,7 +1346,7 @@ def append_create_contract_op(
         op = InvokeHostFunction(host_function=host_function, auth=auth, source=source)
         return self.append_operation(op)
 
-    def append_create_token_contract_from_asset_op(
+    def append_create_stellar_asset_contract_from_asset_op(
         self,
         asset: Asset,
         source: Optional[Union[MuxedAccount, str]] = None,
@@ -1368,7 +1368,7 @@ def append_create_token_contract_from_asset_op(
                 from_asset=asset_param,
             ),
             executable=stellar_xdr.ContractExecutable(
-                stellar_xdr.ContractExecutableType.CONTRACT_EXECUTABLE_TOKEN,
+                stellar_xdr.ContractExecutableType.CONTRACT_EXECUTABLE_STELLAR_ASSET,
             ),
         )
 
@@ -1380,7 +1380,7 @@ def append_create_token_contract_from_asset_op(
         op = InvokeHostFunction(host_function=host_function, auth=[], source=source)
         return self.append_operation(op)
 
-    def append_create_token_contract_from_address_op(
+    def append_create_stellar_asset_contract_from_address_op(
         self,
         address: Union[str, Address],
         salt: Optional[bytes] = None,
@@ -1419,7 +1419,7 @@ def append_create_token_contract_from_address_op(
                 ),
             ),
             executable=stellar_xdr.ContractExecutable(
-                stellar_xdr.ContractExecutableType.CONTRACT_EXECUTABLE_TOKEN,
+                stellar_xdr.ContractExecutableType.CONTRACT_EXECUTABLE_STELLAR_ASSET,
             ),
         )
 
@@ -1431,18 +1431,18 @@ def append_create_token_contract_from_address_op(
         op = InvokeHostFunction(host_function=host_function, auth=auth, source=source)
         return self.append_operation(op)
 
-    def append_bump_footprint_expiration_op(
-        self, ledgers_to_expire: int, source: Optional[Union[MuxedAccount, str]] = None
+    def append_extend_footprint_ttl_op(
+        self, extend_to: int, source: Optional[Union[MuxedAccount, str]] = None
     ) -> "TransactionBuilder":
-        """Append an :class:`BumpFootprintExpiration <stellar_sdk.operation.BumpFootprintExpiration>` operation to the list of operations.
+        """Append an :class:`ExtendFootprintTTL <stellar_sdk.operation.ExtendFootprintTTL>` operation to the list of operations.
 
-        :param ledgers_to_expire: The number of ledgers past the LCL (last closed ledger)
+        :param extend_to: The number of ledgers past the LCL (last closed ledger)
             by which to extend the validity of the ledger keys in this transaction.
         :param source: The source account for the operation. Defaults to the
             transaction's source account.
         :return: This builder instance.
         """
-        op = BumpFootprintExpiration(ledgers_to_expire=ledgers_to_expire, source=source)
+        op = ExtendFootprintTTL(extend_to=extend_to, source=source)
         return self.append_operation(op)
 
     def append_restore_footprint_op(
diff --git a/stellar_sdk/xdr/__init__.py b/stellar_sdk/xdr/__init__.py
index c3015fd6..58e8e07f 100644
--- a/stellar_sdk/xdr/__init__.py
+++ b/stellar_sdk/xdr/__init__.py
@@ -35,9 +35,6 @@
 from .bucket_entry_type import BucketEntryType
 from .bucket_metadata import BucketMetadata
 from .bucket_metadata_ext import BucketMetadataExt
-from .bump_footprint_expiration_op import BumpFootprintExpirationOp
-from .bump_footprint_expiration_result import BumpFootprintExpirationResult
-from .bump_footprint_expiration_result_code import BumpFootprintExpirationResultCode
 from .bump_sequence_op import BumpSequenceOp
 from .bump_sequence_result import BumpSequenceResult
 from .bump_sequence_result_code import BumpSequenceResultCode
@@ -130,7 +127,9 @@
 from .error import Error
 from .error_code import ErrorCode
 from .eviction_iterator import EvictionIterator
-from .expiration_entry import ExpirationEntry
+from .extend_footprint_ttl_op import ExtendFootprintTTLOp
+from .extend_footprint_ttl_result import ExtendFootprintTTLResult
+from .extend_footprint_ttl_result_code import ExtendFootprintTTLResultCode
 from .extension_point import ExtensionPoint
 from .fee_bump_transaction import FeeBumpTransaction
 from .fee_bump_transaction_envelope import FeeBumpTransactionEnvelope
@@ -171,7 +170,6 @@
 from .ledger_close_meta import LedgerCloseMeta
 from .ledger_close_meta_v0 import LedgerCloseMetaV0
 from .ledger_close_meta_v1 import LedgerCloseMetaV1
-from .ledger_close_meta_v2 import LedgerCloseMetaV2
 from .ledger_close_value_signature import LedgerCloseValueSignature
 from .ledger_entry import LedgerEntry
 from .ledger_entry_change import LedgerEntryChange
@@ -197,10 +195,10 @@
 from .ledger_key_contract_code import LedgerKeyContractCode
 from .ledger_key_contract_data import LedgerKeyContractData
 from .ledger_key_data import LedgerKeyData
-from .ledger_key_expiration import LedgerKeyExpiration
 from .ledger_key_liquidity_pool import LedgerKeyLiquidityPool
 from .ledger_key_offer import LedgerKeyOffer
 from .ledger_key_trust_line import LedgerKeyTrustLine
+from .ledger_key_ttl import LedgerKeyTtl
 from .ledger_scp_messages import LedgerSCPMessages
 from .ledger_upgrade import LedgerUpgrade
 from .ledger_upgrade_type import LedgerUpgradeType
@@ -367,11 +365,12 @@
 from .soroban_transaction_data import SorobanTransactionData
 from .soroban_transaction_meta import SorobanTransactionMeta
 from .sponsorship_descriptor import SponsorshipDescriptor
-from .state_expiration_settings import StateExpirationSettings
+from .state_archival_settings import StateArchivalSettings
 from .stellar_message import StellarMessage
 from .stellar_value import StellarValue
 from .stellar_value_ext import StellarValueExt
 from .stellar_value_type import StellarValueType
+from .stored_debug_transaction_set import StoredDebugTransactionSet
 from .stored_transaction_set import StoredTransactionSet
 from .string32 import String32
 from .string64 import String64
@@ -423,6 +422,7 @@
 from .trust_line_entry_v1 import TrustLineEntryV1
 from .trust_line_entry_v1_ext import TrustLineEntryV1Ext
 from .trust_line_flags import TrustLineFlags
+from .ttl_entry import TTLEntry
 from .tx_advert_vector import TxAdvertVector
 from .tx_demand_vector import TxDemandVector
 from .tx_set_component import TxSetComponent
diff --git a/stellar_sdk/xdr/bump_footprint_expiration_result.py b/stellar_sdk/xdr/bump_footprint_expiration_result.py
deleted file mode 100644
index 1606bbd9..00000000
--- a/stellar_sdk/xdr/bump_footprint_expiration_result.py
+++ /dev/null
@@ -1,110 +0,0 @@
-# This is an automatically generated file.
-# DO NOT EDIT or your changes may be overwritten
-from __future__ import annotations
-
-import base64
-
-from xdrlib3 import Packer, Unpacker
-
-from .bump_footprint_expiration_result_code import BumpFootprintExpirationResultCode
-
-__all__ = ["BumpFootprintExpirationResult"]
-
-
-class BumpFootprintExpirationResult:
-    """
-    XDR Source Code::
-
-        union BumpFootprintExpirationResult switch (BumpFootprintExpirationResultCode code)
-        {
-        case BUMP_FOOTPRINT_EXPIRATION_SUCCESS:
-            void;
-        case BUMP_FOOTPRINT_EXPIRATION_MALFORMED:
-        case BUMP_FOOTPRINT_EXPIRATION_RESOURCE_LIMIT_EXCEEDED:
-        case BUMP_FOOTPRINT_EXPIRATION_INSUFFICIENT_REFUNDABLE_FEE:
-            void;
-        };
-    """
-
-    def __init__(
-        self,
-        code: BumpFootprintExpirationResultCode,
-    ) -> None:
-        self.code = code
-
-    def pack(self, packer: Packer) -> None:
-        self.code.pack(packer)
-        if (
-            self.code
-            == BumpFootprintExpirationResultCode.BUMP_FOOTPRINT_EXPIRATION_SUCCESS
-        ):
-            return
-        if (
-            self.code
-            == BumpFootprintExpirationResultCode.BUMP_FOOTPRINT_EXPIRATION_MALFORMED
-        ):
-            return
-        if (
-            self.code
-            == BumpFootprintExpirationResultCode.BUMP_FOOTPRINT_EXPIRATION_RESOURCE_LIMIT_EXCEEDED
-        ):
-            return
-        if (
-            self.code
-            == BumpFootprintExpirationResultCode.BUMP_FOOTPRINT_EXPIRATION_INSUFFICIENT_REFUNDABLE_FEE
-        ):
-            return
-
-    @classmethod
-    def unpack(cls, unpacker: Unpacker) -> BumpFootprintExpirationResult:
-        code = BumpFootprintExpirationResultCode.unpack(unpacker)
-        if code == BumpFootprintExpirationResultCode.BUMP_FOOTPRINT_EXPIRATION_SUCCESS:
-            return cls(code=code)
-        if (
-            code
-            == BumpFootprintExpirationResultCode.BUMP_FOOTPRINT_EXPIRATION_MALFORMED
-        ):
-            return cls(code=code)
-        if (
-            code
-            == BumpFootprintExpirationResultCode.BUMP_FOOTPRINT_EXPIRATION_RESOURCE_LIMIT_EXCEEDED
-        ):
-            return cls(code=code)
-        if (
-            code
-            == BumpFootprintExpirationResultCode.BUMP_FOOTPRINT_EXPIRATION_INSUFFICIENT_REFUNDABLE_FEE
-        ):
-            return cls(code=code)
-        return cls(code=code)
-
-    def to_xdr_bytes(self) -> bytes:
-        packer = Packer()
-        self.pack(packer)
-        return packer.get_buffer()
-
-    @classmethod
-    def from_xdr_bytes(cls, xdr: bytes) -> BumpFootprintExpirationResult:
-        unpacker = Unpacker(xdr)
-        return cls.unpack(unpacker)
-
-    def to_xdr(self) -> str:
-        xdr_bytes = self.to_xdr_bytes()
-        return base64.b64encode(xdr_bytes).decode()
-
-    @classmethod
-    def from_xdr(cls, xdr: str) -> BumpFootprintExpirationResult:
-        xdr_bytes = base64.b64decode(xdr.encode())
-        return cls.from_xdr_bytes(xdr_bytes)
-
-    def __hash__(self):
-        return hash((self.code,))
-
-    def __eq__(self, other: object):
-        if not isinstance(other, self.__class__):
-            return NotImplemented
-        return self.code == other.code
-
-    def __str__(self):
-        out = []
-        out.append(f"code={self.code}")
-        return f"<BumpFootprintExpirationResult [{', '.join(out)}]>"
diff --git a/stellar_sdk/xdr/config_setting_entry.py b/stellar_sdk/xdr/config_setting_entry.py
index 59e77d1f..f9085ce2 100644
--- a/stellar_sdk/xdr/config_setting_entry.py
+++ b/stellar_sdk/xdr/config_setting_entry.py
@@ -20,7 +20,7 @@
 from .config_setting_id import ConfigSettingID
 from .contract_cost_params import ContractCostParams
 from .eviction_iterator import EvictionIterator
-from .state_expiration_settings import StateExpirationSettings
+from .state_archival_settings import StateArchivalSettings
 from .uint32 import Uint32
 from .uint64 import Uint64
 
@@ -53,8 +53,8 @@ class ConfigSettingEntry:
             uint32 contractDataKeySizeBytes;
         case CONFIG_SETTING_CONTRACT_DATA_ENTRY_SIZE_BYTES:
             uint32 contractDataEntrySizeBytes;
-        case CONFIG_SETTING_STATE_EXPIRATION:
-            StateExpirationSettings stateExpirationSettings;
+        case CONFIG_SETTING_STATE_ARCHIVAL:
+            StateArchivalSettings stateArchivalSettings;
         case CONFIG_SETTING_CONTRACT_EXECUTION_LANES:
             ConfigSettingContractExecutionLanesV0 contractExecutionLanes;
         case CONFIG_SETTING_BUCKETLIST_SIZE_WINDOW:
@@ -77,7 +77,7 @@ def __init__(
         contract_cost_params_mem_bytes: ContractCostParams = None,
         contract_data_key_size_bytes: Uint32 = None,
         contract_data_entry_size_bytes: Uint32 = None,
-        state_expiration_settings: StateExpirationSettings = None,
+        state_archival_settings: StateArchivalSettings = None,
         contract_execution_lanes: ConfigSettingContractExecutionLanesV0 = None,
         bucket_list_size_window: List[Uint64] = None,
         eviction_iterator: EvictionIterator = None,
@@ -101,7 +101,7 @@ def __init__(
         self.contract_cost_params_mem_bytes = contract_cost_params_mem_bytes
         self.contract_data_key_size_bytes = contract_data_key_size_bytes
         self.contract_data_entry_size_bytes = contract_data_entry_size_bytes
-        self.state_expiration_settings = state_expiration_settings
+        self.state_archival_settings = state_archival_settings
         self.contract_execution_lanes = contract_execution_lanes
         self.bucket_list_size_window = bucket_list_size_window
         self.eviction_iterator = eviction_iterator
@@ -182,10 +182,10 @@ def pack(self, packer: Packer) -> None:
                 raise ValueError("contract_data_entry_size_bytes should not be None.")
             self.contract_data_entry_size_bytes.pack(packer)
             return
-        if self.config_setting_id == ConfigSettingID.CONFIG_SETTING_STATE_EXPIRATION:
-            if self.state_expiration_settings is None:
-                raise ValueError("state_expiration_settings should not be None.")
-            self.state_expiration_settings.pack(packer)
+        if self.config_setting_id == ConfigSettingID.CONFIG_SETTING_STATE_ARCHIVAL:
+            if self.state_archival_settings is None:
+                raise ValueError("state_archival_settings should not be None.")
+            self.state_archival_settings.pack(packer)
             return
         if (
             self.config_setting_id
@@ -289,11 +289,11 @@ def unpack(cls, unpacker: Unpacker) -> ConfigSettingEntry:
                 config_setting_id=config_setting_id,
                 contract_data_entry_size_bytes=contract_data_entry_size_bytes,
             )
-        if config_setting_id == ConfigSettingID.CONFIG_SETTING_STATE_EXPIRATION:
-            state_expiration_settings = StateExpirationSettings.unpack(unpacker)
+        if config_setting_id == ConfigSettingID.CONFIG_SETTING_STATE_ARCHIVAL:
+            state_archival_settings = StateArchivalSettings.unpack(unpacker)
             return cls(
                 config_setting_id=config_setting_id,
-                state_expiration_settings=state_expiration_settings,
+                state_archival_settings=state_archival_settings,
             )
         if config_setting_id == ConfigSettingID.CONFIG_SETTING_CONTRACT_EXECUTION_LANES:
             contract_execution_lanes = ConfigSettingContractExecutionLanesV0.unpack(
@@ -352,7 +352,7 @@ def __hash__(self):
                 self.contract_cost_params_mem_bytes,
                 self.contract_data_key_size_bytes,
                 self.contract_data_entry_size_bytes,
-                self.state_expiration_settings,
+                self.state_archival_settings,
                 self.contract_execution_lanes,
                 self.bucket_list_size_window,
                 self.eviction_iterator,
@@ -377,7 +377,7 @@ def __eq__(self, other: object):
             and self.contract_data_key_size_bytes == other.contract_data_key_size_bytes
             and self.contract_data_entry_size_bytes
             == other.contract_data_entry_size_bytes
-            and self.state_expiration_settings == other.state_expiration_settings
+            and self.state_archival_settings == other.state_archival_settings
             and self.contract_execution_lanes == other.contract_execution_lanes
             and self.bucket_list_size_window == other.bucket_list_size_window
             and self.eviction_iterator == other.eviction_iterator
@@ -417,8 +417,8 @@ def __str__(self):
             f"contract_data_entry_size_bytes={self.contract_data_entry_size_bytes}"
         ) if self.contract_data_entry_size_bytes is not None else None
         out.append(
-            f"state_expiration_settings={self.state_expiration_settings}"
-        ) if self.state_expiration_settings is not None else None
+            f"state_archival_settings={self.state_archival_settings}"
+        ) if self.state_archival_settings is not None else None
         out.append(
             f"contract_execution_lanes={self.contract_execution_lanes}"
         ) if self.contract_execution_lanes is not None else None
diff --git a/stellar_sdk/xdr/config_setting_id.py b/stellar_sdk/xdr/config_setting_id.py
index c176dc4b..8057da03 100644
--- a/stellar_sdk/xdr/config_setting_id.py
+++ b/stellar_sdk/xdr/config_setting_id.py
@@ -26,7 +26,7 @@ class ConfigSettingID(IntEnum):
             CONFIG_SETTING_CONTRACT_COST_PARAMS_MEMORY_BYTES = 7,
             CONFIG_SETTING_CONTRACT_DATA_KEY_SIZE_BYTES = 8,
             CONFIG_SETTING_CONTRACT_DATA_ENTRY_SIZE_BYTES = 9,
-            CONFIG_SETTING_STATE_EXPIRATION = 10,
+            CONFIG_SETTING_STATE_ARCHIVAL = 10,
             CONFIG_SETTING_CONTRACT_EXECUTION_LANES = 11,
             CONFIG_SETTING_BUCKETLIST_SIZE_WINDOW = 12,
             CONFIG_SETTING_EVICTION_ITERATOR = 13
@@ -43,7 +43,7 @@ class ConfigSettingID(IntEnum):
     CONFIG_SETTING_CONTRACT_COST_PARAMS_MEMORY_BYTES = 7
     CONFIG_SETTING_CONTRACT_DATA_KEY_SIZE_BYTES = 8
     CONFIG_SETTING_CONTRACT_DATA_ENTRY_SIZE_BYTES = 9
-    CONFIG_SETTING_STATE_EXPIRATION = 10
+    CONFIG_SETTING_STATE_ARCHIVAL = 10
     CONFIG_SETTING_CONTRACT_EXECUTION_LANES = 11
     CONFIG_SETTING_BUCKETLIST_SIZE_WINDOW = 12
     CONFIG_SETTING_EVICTION_ITERATOR = 13
diff --git a/stellar_sdk/xdr/contract_cost_type.py b/stellar_sdk/xdr/contract_cost_type.py
index afbb30e1..044d3667 100644
--- a/stellar_sdk/xdr/contract_cost_type.py
+++ b/stellar_sdk/xdr/contract_cost_type.py
@@ -17,95 +17,80 @@ class ContractCostType(IntEnum):
         enum ContractCostType {
             // Cost of running 1 wasm instruction
             WasmInsnExec = 0,
-            // Cost of growing wasm linear memory by 1 page
-            WasmMemAlloc = 1,
-            // Cost of allocating a chuck of host memory (in bytes)
-            HostMemAlloc = 2,
-            // Cost of copying a chuck of bytes into a pre-allocated host memory
-            HostMemCpy = 3,
-            // Cost of comparing two slices of host memory
-            HostMemCmp = 4,
+            // Cost of allocating a slice of memory (in bytes)
+            MemAlloc = 1,
+            // Cost of copying a slice of bytes into a pre-allocated memory
+            MemCpy = 2,
+            // Cost of comparing two slices of memory
+            MemCmp = 3,
             // Cost of a host function dispatch, not including the actual work done by
             // the function nor the cost of VM invocation machinary
-            DispatchHostFunction = 5,
+            DispatchHostFunction = 4,
             // Cost of visiting a host object from the host object storage. Exists to
             // make sure some baseline cost coverage, i.e. repeatly visiting objects
             // by the guest will always incur some charges.
-            VisitObject = 6,
+            VisitObject = 5,
             // Cost of serializing an xdr object to bytes
-            ValSer = 7,
+            ValSer = 6,
             // Cost of deserializing an xdr object from bytes
-            ValDeser = 8,
+            ValDeser = 7,
             // Cost of computing the sha256 hash from bytes
-            ComputeSha256Hash = 9,
+            ComputeSha256Hash = 8,
             // Cost of computing the ed25519 pubkey from bytes
-            ComputeEd25519PubKey = 10,
-            // Cost of accessing an entry in a Map.
-            MapEntry = 11,
-            // Cost of accessing an entry in a Vec
-            VecEntry = 12,
+            ComputeEd25519PubKey = 9,
             // Cost of verifying ed25519 signature of a payload.
-            VerifyEd25519Sig = 13,
-            // Cost of reading a slice of vm linear memory
-            VmMemRead = 14,
-            // Cost of writing to a slice of vm linear memory
-            VmMemWrite = 15,
+            VerifyEd25519Sig = 10,
             // Cost of instantiation a VM from wasm bytes code.
-            VmInstantiation = 16,
+            VmInstantiation = 11,
             // Cost of instantiation a VM from a cached state.
-            VmCachedInstantiation = 17,
+            VmCachedInstantiation = 12,
             // Cost of invoking a function on the VM. If the function is a host function,
             // additional cost will be covered by `DispatchHostFunction`.
-            InvokeVmFunction = 18,
+            InvokeVmFunction = 13,
             // Cost of computing a keccak256 hash from bytes.
-            ComputeKeccak256Hash = 19,
-            // Cost of computing an ECDSA secp256k1 pubkey from bytes.
-            ComputeEcdsaSecp256k1Key = 20,
+            ComputeKeccak256Hash = 14,
             // Cost of computing an ECDSA secp256k1 signature from bytes.
-            ComputeEcdsaSecp256k1Sig = 21,
+            ComputeEcdsaSecp256k1Sig = 15,
             // Cost of recovering an ECDSA secp256k1 key from a signature.
-            RecoverEcdsaSecp256k1Key = 22,
+            RecoverEcdsaSecp256k1Key = 16,
             // Cost of int256 addition (`+`) and subtraction (`-`) operations
-            Int256AddSub = 23,
+            Int256AddSub = 17,
             // Cost of int256 multiplication (`*`) operation
-            Int256Mul = 24,
+            Int256Mul = 18,
             // Cost of int256 division (`/`) operation
-            Int256Div = 25,
+            Int256Div = 19,
             // Cost of int256 power (`exp`) operation
-            Int256Pow = 26,
+            Int256Pow = 20,
             // Cost of int256 shift (`shl`, `shr`) operation
-            Int256Shift = 27
+            Int256Shift = 21,
+            // Cost of drawing random bytes using a ChaCha20 PRNG
+            ChaCha20DrawBytes = 22
         };
     """
 
     WasmInsnExec = 0
-    WasmMemAlloc = 1
-    HostMemAlloc = 2
-    HostMemCpy = 3
-    HostMemCmp = 4
-    DispatchHostFunction = 5
-    VisitObject = 6
-    ValSer = 7
-    ValDeser = 8
-    ComputeSha256Hash = 9
-    ComputeEd25519PubKey = 10
-    MapEntry = 11
-    VecEntry = 12
-    VerifyEd25519Sig = 13
-    VmMemRead = 14
-    VmMemWrite = 15
-    VmInstantiation = 16
-    VmCachedInstantiation = 17
-    InvokeVmFunction = 18
-    ComputeKeccak256Hash = 19
-    ComputeEcdsaSecp256k1Key = 20
-    ComputeEcdsaSecp256k1Sig = 21
-    RecoverEcdsaSecp256k1Key = 22
-    Int256AddSub = 23
-    Int256Mul = 24
-    Int256Div = 25
-    Int256Pow = 26
-    Int256Shift = 27
+    MemAlloc = 1
+    MemCpy = 2
+    MemCmp = 3
+    DispatchHostFunction = 4
+    VisitObject = 5
+    ValSer = 6
+    ValDeser = 7
+    ComputeSha256Hash = 8
+    ComputeEd25519PubKey = 9
+    VerifyEd25519Sig = 10
+    VmInstantiation = 11
+    VmCachedInstantiation = 12
+    InvokeVmFunction = 13
+    ComputeKeccak256Hash = 14
+    ComputeEcdsaSecp256k1Sig = 15
+    RecoverEcdsaSecp256k1Key = 16
+    Int256AddSub = 17
+    Int256Mul = 18
+    Int256Div = 19
+    Int256Pow = 20
+    Int256Shift = 21
+    ChaCha20DrawBytes = 22
 
     def pack(self, packer: Packer) -> None:
         packer.pack_int(self.value)
diff --git a/stellar_sdk/xdr/contract_executable.py b/stellar_sdk/xdr/contract_executable.py
index f324c491..8be3a9a7 100644
--- a/stellar_sdk/xdr/contract_executable.py
+++ b/stellar_sdk/xdr/contract_executable.py
@@ -20,7 +20,7 @@ class ContractExecutable:
         {
         case CONTRACT_EXECUTABLE_WASM:
             Hash wasm_hash;
-        case CONTRACT_EXECUTABLE_TOKEN:
+        case CONTRACT_EXECUTABLE_STELLAR_ASSET:
             void;
         };
     """
@@ -40,7 +40,7 @@ def pack(self, packer: Packer) -> None:
                 raise ValueError("wasm_hash should not be None.")
             self.wasm_hash.pack(packer)
             return
-        if self.type == ContractExecutableType.CONTRACT_EXECUTABLE_TOKEN:
+        if self.type == ContractExecutableType.CONTRACT_EXECUTABLE_STELLAR_ASSET:
             return
 
     @classmethod
@@ -49,7 +49,7 @@ def unpack(cls, unpacker: Unpacker) -> ContractExecutable:
         if type == ContractExecutableType.CONTRACT_EXECUTABLE_WASM:
             wasm_hash = Hash.unpack(unpacker)
             return cls(type=type, wasm_hash=wasm_hash)
-        if type == ContractExecutableType.CONTRACT_EXECUTABLE_TOKEN:
+        if type == ContractExecutableType.CONTRACT_EXECUTABLE_STELLAR_ASSET:
             return cls(type=type)
         return cls(type=type)
 
diff --git a/stellar_sdk/xdr/contract_executable_type.py b/stellar_sdk/xdr/contract_executable_type.py
index 7619af81..13c30193 100644
--- a/stellar_sdk/xdr/contract_executable_type.py
+++ b/stellar_sdk/xdr/contract_executable_type.py
@@ -17,12 +17,12 @@ class ContractExecutableType(IntEnum):
         enum ContractExecutableType
         {
             CONTRACT_EXECUTABLE_WASM = 0,
-            CONTRACT_EXECUTABLE_TOKEN = 1
+            CONTRACT_EXECUTABLE_STELLAR_ASSET = 1
         };
     """
 
     CONTRACT_EXECUTABLE_WASM = 0
-    CONTRACT_EXECUTABLE_TOKEN = 1
+    CONTRACT_EXECUTABLE_STELLAR_ASSET = 1
 
     def pack(self, packer: Packer) -> None:
         packer.pack_int(self.value)
diff --git a/stellar_sdk/xdr/bump_footprint_expiration_op.py b/stellar_sdk/xdr/extend_footprint_ttl_op.py
similarity index 61%
rename from stellar_sdk/xdr/bump_footprint_expiration_op.py
rename to stellar_sdk/xdr/extend_footprint_ttl_op.py
index b3c48ef1..082c642d 100644
--- a/stellar_sdk/xdr/bump_footprint_expiration_op.py
+++ b/stellar_sdk/xdr/extend_footprint_ttl_op.py
@@ -9,39 +9,39 @@
 from .extension_point import ExtensionPoint
 from .uint32 import Uint32
 
-__all__ = ["BumpFootprintExpirationOp"]
+__all__ = ["ExtendFootprintTTLOp"]
 
 
-class BumpFootprintExpirationOp:
+class ExtendFootprintTTLOp:
     """
     XDR Source Code::
 
-        struct BumpFootprintExpirationOp
+        struct ExtendFootprintTTLOp
         {
             ExtensionPoint ext;
-            uint32 ledgersToExpire;
+            uint32 extendTo;
         };
     """
 
     def __init__(
         self,
         ext: ExtensionPoint,
-        ledgers_to_expire: Uint32,
+        extend_to: Uint32,
     ) -> None:
         self.ext = ext
-        self.ledgers_to_expire = ledgers_to_expire
+        self.extend_to = extend_to
 
     def pack(self, packer: Packer) -> None:
         self.ext.pack(packer)
-        self.ledgers_to_expire.pack(packer)
+        self.extend_to.pack(packer)
 
     @classmethod
-    def unpack(cls, unpacker: Unpacker) -> BumpFootprintExpirationOp:
+    def unpack(cls, unpacker: Unpacker) -> ExtendFootprintTTLOp:
         ext = ExtensionPoint.unpack(unpacker)
-        ledgers_to_expire = Uint32.unpack(unpacker)
+        extend_to = Uint32.unpack(unpacker)
         return cls(
             ext=ext,
-            ledgers_to_expire=ledgers_to_expire,
+            extend_to=extend_to,
         )
 
     def to_xdr_bytes(self) -> bytes:
@@ -50,7 +50,7 @@ def to_xdr_bytes(self) -> bytes:
         return packer.get_buffer()
 
     @classmethod
-    def from_xdr_bytes(cls, xdr: bytes) -> BumpFootprintExpirationOp:
+    def from_xdr_bytes(cls, xdr: bytes) -> ExtendFootprintTTLOp:
         unpacker = Unpacker(xdr)
         return cls.unpack(unpacker)
 
@@ -59,7 +59,7 @@ def to_xdr(self) -> str:
         return base64.b64encode(xdr_bytes).decode()
 
     @classmethod
-    def from_xdr(cls, xdr: str) -> BumpFootprintExpirationOp:
+    def from_xdr(cls, xdr: str) -> ExtendFootprintTTLOp:
         xdr_bytes = base64.b64decode(xdr.encode())
         return cls.from_xdr_bytes(xdr_bytes)
 
@@ -67,20 +67,18 @@ def __hash__(self):
         return hash(
             (
                 self.ext,
-                self.ledgers_to_expire,
+                self.extend_to,
             )
         )
 
     def __eq__(self, other: object):
         if not isinstance(other, self.__class__):
             return NotImplemented
-        return (
-            self.ext == other.ext and self.ledgers_to_expire == other.ledgers_to_expire
-        )
+        return self.ext == other.ext and self.extend_to == other.extend_to
 
     def __str__(self):
         out = [
             f"ext={self.ext}",
-            f"ledgers_to_expire={self.ledgers_to_expire}",
+            f"extend_to={self.extend_to}",
         ]
-        return f"<BumpFootprintExpirationOp [{', '.join(out)}]>"
+        return f"<ExtendFootprintTTLOp [{', '.join(out)}]>"
diff --git a/stellar_sdk/xdr/extend_footprint_ttl_result.py b/stellar_sdk/xdr/extend_footprint_ttl_result.py
new file mode 100644
index 00000000..52596c9b
--- /dev/null
+++ b/stellar_sdk/xdr/extend_footprint_ttl_result.py
@@ -0,0 +1,101 @@
+# This is an automatically generated file.
+# DO NOT EDIT or your changes may be overwritten
+from __future__ import annotations
+
+import base64
+
+from xdrlib3 import Packer, Unpacker
+
+from .extend_footprint_ttl_result_code import ExtendFootprintTTLResultCode
+
+__all__ = ["ExtendFootprintTTLResult"]
+
+
+class ExtendFootprintTTLResult:
+    """
+    XDR Source Code::
+
+        union ExtendFootprintTTLResult switch (ExtendFootprintTTLResultCode code)
+        {
+        case EXTEND_FOOTPRINT_TTL_SUCCESS:
+            void;
+        case EXTEND_FOOTPRINT_TTL_MALFORMED:
+        case EXTEND_FOOTPRINT_TTL_RESOURCE_LIMIT_EXCEEDED:
+        case EXTEND_FOOTPRINT_TTL_INSUFFICIENT_REFUNDABLE_FEE:
+            void;
+        };
+    """
+
+    def __init__(
+        self,
+        code: ExtendFootprintTTLResultCode,
+    ) -> None:
+        self.code = code
+
+    def pack(self, packer: Packer) -> None:
+        self.code.pack(packer)
+        if self.code == ExtendFootprintTTLResultCode.EXTEND_FOOTPRINT_TTL_SUCCESS:
+            return
+        if self.code == ExtendFootprintTTLResultCode.EXTEND_FOOTPRINT_TTL_MALFORMED:
+            return
+        if (
+            self.code
+            == ExtendFootprintTTLResultCode.EXTEND_FOOTPRINT_TTL_RESOURCE_LIMIT_EXCEEDED
+        ):
+            return
+        if (
+            self.code
+            == ExtendFootprintTTLResultCode.EXTEND_FOOTPRINT_TTL_INSUFFICIENT_REFUNDABLE_FEE
+        ):
+            return
+
+    @classmethod
+    def unpack(cls, unpacker: Unpacker) -> ExtendFootprintTTLResult:
+        code = ExtendFootprintTTLResultCode.unpack(unpacker)
+        if code == ExtendFootprintTTLResultCode.EXTEND_FOOTPRINT_TTL_SUCCESS:
+            return cls(code=code)
+        if code == ExtendFootprintTTLResultCode.EXTEND_FOOTPRINT_TTL_MALFORMED:
+            return cls(code=code)
+        if (
+            code
+            == ExtendFootprintTTLResultCode.EXTEND_FOOTPRINT_TTL_RESOURCE_LIMIT_EXCEEDED
+        ):
+            return cls(code=code)
+        if (
+            code
+            == ExtendFootprintTTLResultCode.EXTEND_FOOTPRINT_TTL_INSUFFICIENT_REFUNDABLE_FEE
+        ):
+            return cls(code=code)
+        return cls(code=code)
+
+    def to_xdr_bytes(self) -> bytes:
+        packer = Packer()
+        self.pack(packer)
+        return packer.get_buffer()
+
+    @classmethod
+    def from_xdr_bytes(cls, xdr: bytes) -> ExtendFootprintTTLResult:
+        unpacker = Unpacker(xdr)
+        return cls.unpack(unpacker)
+
+    def to_xdr(self) -> str:
+        xdr_bytes = self.to_xdr_bytes()
+        return base64.b64encode(xdr_bytes).decode()
+
+    @classmethod
+    def from_xdr(cls, xdr: str) -> ExtendFootprintTTLResult:
+        xdr_bytes = base64.b64decode(xdr.encode())
+        return cls.from_xdr_bytes(xdr_bytes)
+
+    def __hash__(self):
+        return hash((self.code,))
+
+    def __eq__(self, other: object):
+        if not isinstance(other, self.__class__):
+            return NotImplemented
+        return self.code == other.code
+
+    def __str__(self):
+        out = []
+        out.append(f"code={self.code}")
+        return f"<ExtendFootprintTTLResult [{', '.join(out)}]>"
diff --git a/stellar_sdk/xdr/bump_footprint_expiration_result_code.py b/stellar_sdk/xdr/extend_footprint_ttl_result_code.py
similarity index 54%
rename from stellar_sdk/xdr/bump_footprint_expiration_result_code.py
rename to stellar_sdk/xdr/extend_footprint_ttl_result_code.py
index 52330e97..c9d7b982 100644
--- a/stellar_sdk/xdr/bump_footprint_expiration_result_code.py
+++ b/stellar_sdk/xdr/extend_footprint_ttl_result_code.py
@@ -7,35 +7,35 @@
 
 from xdrlib3 import Packer, Unpacker
 
-__all__ = ["BumpFootprintExpirationResultCode"]
+__all__ = ["ExtendFootprintTTLResultCode"]
 
 
-class BumpFootprintExpirationResultCode(IntEnum):
+class ExtendFootprintTTLResultCode(IntEnum):
     """
     XDR Source Code::
 
-        enum BumpFootprintExpirationResultCode
+        enum ExtendFootprintTTLResultCode
         {
             // codes considered as "success" for the operation
-            BUMP_FOOTPRINT_EXPIRATION_SUCCESS = 0,
+            EXTEND_FOOTPRINT_TTL_SUCCESS = 0,
 
             // codes considered as "failure" for the operation
-            BUMP_FOOTPRINT_EXPIRATION_MALFORMED = -1,
-            BUMP_FOOTPRINT_EXPIRATION_RESOURCE_LIMIT_EXCEEDED = -2,
-            BUMP_FOOTPRINT_EXPIRATION_INSUFFICIENT_REFUNDABLE_FEE = -3
+            EXTEND_FOOTPRINT_TTL_MALFORMED = -1,
+            EXTEND_FOOTPRINT_TTL_RESOURCE_LIMIT_EXCEEDED = -2,
+            EXTEND_FOOTPRINT_TTL_INSUFFICIENT_REFUNDABLE_FEE = -3
         };
     """
 
-    BUMP_FOOTPRINT_EXPIRATION_SUCCESS = 0
-    BUMP_FOOTPRINT_EXPIRATION_MALFORMED = -1
-    BUMP_FOOTPRINT_EXPIRATION_RESOURCE_LIMIT_EXCEEDED = -2
-    BUMP_FOOTPRINT_EXPIRATION_INSUFFICIENT_REFUNDABLE_FEE = -3
+    EXTEND_FOOTPRINT_TTL_SUCCESS = 0
+    EXTEND_FOOTPRINT_TTL_MALFORMED = -1
+    EXTEND_FOOTPRINT_TTL_RESOURCE_LIMIT_EXCEEDED = -2
+    EXTEND_FOOTPRINT_TTL_INSUFFICIENT_REFUNDABLE_FEE = -3
 
     def pack(self, packer: Packer) -> None:
         packer.pack_int(self.value)
 
     @classmethod
-    def unpack(cls, unpacker: Unpacker) -> BumpFootprintExpirationResultCode:
+    def unpack(cls, unpacker: Unpacker) -> ExtendFootprintTTLResultCode:
         value = unpacker.unpack_int()
         return cls(value)
 
@@ -45,7 +45,7 @@ def to_xdr_bytes(self) -> bytes:
         return packer.get_buffer()
 
     @classmethod
-    def from_xdr_bytes(cls, xdr: bytes) -> BumpFootprintExpirationResultCode:
+    def from_xdr_bytes(cls, xdr: bytes) -> ExtendFootprintTTLResultCode:
         unpacker = Unpacker(xdr)
         return cls.unpack(unpacker)
 
@@ -54,6 +54,6 @@ def to_xdr(self) -> str:
         return base64.b64encode(xdr_bytes).decode()
 
     @classmethod
-    def from_xdr(cls, xdr: str) -> BumpFootprintExpirationResultCode:
+    def from_xdr(cls, xdr: str) -> ExtendFootprintTTLResultCode:
         xdr_bytes = base64.b64decode(xdr.encode())
         return cls.from_xdr_bytes(xdr_bytes)
diff --git a/stellar_sdk/xdr/invoke_host_function_result.py b/stellar_sdk/xdr/invoke_host_function_result.py
index 5449d9e7..de976289 100644
--- a/stellar_sdk/xdr/invoke_host_function_result.py
+++ b/stellar_sdk/xdr/invoke_host_function_result.py
@@ -23,7 +23,7 @@ class InvokeHostFunctionResult:
         case INVOKE_HOST_FUNCTION_MALFORMED:
         case INVOKE_HOST_FUNCTION_TRAPPED:
         case INVOKE_HOST_FUNCTION_RESOURCE_LIMIT_EXCEEDED:
-        case INVOKE_HOST_FUNCTION_ENTRY_EXPIRED:
+        case INVOKE_HOST_FUNCTION_ENTRY_ARCHIVED:
         case INVOKE_HOST_FUNCTION_INSUFFICIENT_REFUNDABLE_FEE:
             void;
         };
@@ -53,7 +53,10 @@ def pack(self, packer: Packer) -> None:
             == InvokeHostFunctionResultCode.INVOKE_HOST_FUNCTION_RESOURCE_LIMIT_EXCEEDED
         ):
             return
-        if self.code == InvokeHostFunctionResultCode.INVOKE_HOST_FUNCTION_ENTRY_EXPIRED:
+        if (
+            self.code
+            == InvokeHostFunctionResultCode.INVOKE_HOST_FUNCTION_ENTRY_ARCHIVED
+        ):
             return
         if (
             self.code
@@ -76,7 +79,7 @@ def unpack(cls, unpacker: Unpacker) -> InvokeHostFunctionResult:
             == InvokeHostFunctionResultCode.INVOKE_HOST_FUNCTION_RESOURCE_LIMIT_EXCEEDED
         ):
             return cls(code=code)
-        if code == InvokeHostFunctionResultCode.INVOKE_HOST_FUNCTION_ENTRY_EXPIRED:
+        if code == InvokeHostFunctionResultCode.INVOKE_HOST_FUNCTION_ENTRY_ARCHIVED:
             return cls(code=code)
         if (
             code
diff --git a/stellar_sdk/xdr/invoke_host_function_result_code.py b/stellar_sdk/xdr/invoke_host_function_result_code.py
index 0989d21c..26e3879a 100644
--- a/stellar_sdk/xdr/invoke_host_function_result_code.py
+++ b/stellar_sdk/xdr/invoke_host_function_result_code.py
@@ -23,7 +23,7 @@ class InvokeHostFunctionResultCode(IntEnum):
             INVOKE_HOST_FUNCTION_MALFORMED = -1,
             INVOKE_HOST_FUNCTION_TRAPPED = -2,
             INVOKE_HOST_FUNCTION_RESOURCE_LIMIT_EXCEEDED = -3,
-            INVOKE_HOST_FUNCTION_ENTRY_EXPIRED = -4,
+            INVOKE_HOST_FUNCTION_ENTRY_ARCHIVED = -4,
             INVOKE_HOST_FUNCTION_INSUFFICIENT_REFUNDABLE_FEE = -5
         };
     """
@@ -32,7 +32,7 @@ class InvokeHostFunctionResultCode(IntEnum):
     INVOKE_HOST_FUNCTION_MALFORMED = -1
     INVOKE_HOST_FUNCTION_TRAPPED = -2
     INVOKE_HOST_FUNCTION_RESOURCE_LIMIT_EXCEEDED = -3
-    INVOKE_HOST_FUNCTION_ENTRY_EXPIRED = -4
+    INVOKE_HOST_FUNCTION_ENTRY_ARCHIVED = -4
     INVOKE_HOST_FUNCTION_INSUFFICIENT_REFUNDABLE_FEE = -5
 
     def pack(self, packer: Packer) -> None:
diff --git a/stellar_sdk/xdr/ledger_close_meta.py b/stellar_sdk/xdr/ledger_close_meta.py
index 6424cee9..5f186c78 100644
--- a/stellar_sdk/xdr/ledger_close_meta.py
+++ b/stellar_sdk/xdr/ledger_close_meta.py
@@ -9,7 +9,6 @@
 from .base import Integer
 from .ledger_close_meta_v0 import LedgerCloseMetaV0
 from .ledger_close_meta_v1 import LedgerCloseMetaV1
-from .ledger_close_meta_v2 import LedgerCloseMetaV2
 
 __all__ = ["LedgerCloseMeta"]
 
@@ -24,8 +23,6 @@ class LedgerCloseMeta:
             LedgerCloseMetaV0 v0;
         case 1:
             LedgerCloseMetaV1 v1;
-        case 2:
-            LedgerCloseMetaV2 v2;
         };
     """
 
@@ -34,12 +31,10 @@ def __init__(
         v: int,
         v0: LedgerCloseMetaV0 = None,
         v1: LedgerCloseMetaV1 = None,
-        v2: LedgerCloseMetaV2 = None,
     ) -> None:
         self.v = v
         self.v0 = v0
         self.v1 = v1
-        self.v2 = v2
 
     def pack(self, packer: Packer) -> None:
         Integer(self.v).pack(packer)
@@ -53,11 +48,6 @@ def pack(self, packer: Packer) -> None:
                 raise ValueError("v1 should not be None.")
             self.v1.pack(packer)
             return
-        if self.v == 2:
-            if self.v2 is None:
-                raise ValueError("v2 should not be None.")
-            self.v2.pack(packer)
-            return
 
     @classmethod
     def unpack(cls, unpacker: Unpacker) -> LedgerCloseMeta:
@@ -68,9 +58,6 @@ def unpack(cls, unpacker: Unpacker) -> LedgerCloseMeta:
         if v == 1:
             v1 = LedgerCloseMetaV1.unpack(unpacker)
             return cls(v=v, v1=v1)
-        if v == 2:
-            v2 = LedgerCloseMetaV2.unpack(unpacker)
-            return cls(v=v, v2=v2)
         return cls(v=v)
 
     def to_xdr_bytes(self) -> bytes:
@@ -98,24 +85,17 @@ def __hash__(self):
                 self.v,
                 self.v0,
                 self.v1,
-                self.v2,
             )
         )
 
     def __eq__(self, other: object):
         if not isinstance(other, self.__class__):
             return NotImplemented
-        return (
-            self.v == other.v
-            and self.v0 == other.v0
-            and self.v1 == other.v1
-            and self.v2 == other.v2
-        )
+        return self.v == other.v and self.v0 == other.v0 and self.v1 == other.v1
 
     def __str__(self):
         out = []
         out.append(f"v={self.v}")
         out.append(f"v0={self.v0}") if self.v0 is not None else None
         out.append(f"v1={self.v1}") if self.v1 is not None else None
-        out.append(f"v2={self.v2}") if self.v2 is not None else None
         return f"<LedgerCloseMeta [{', '.join(out)}]>"
diff --git a/stellar_sdk/xdr/ledger_close_meta_v1.py b/stellar_sdk/xdr/ledger_close_meta_v1.py
index 91fc79b9..6991c557 100644
--- a/stellar_sdk/xdr/ledger_close_meta_v1.py
+++ b/stellar_sdk/xdr/ledger_close_meta_v1.py
@@ -7,10 +7,14 @@
 
 from xdrlib3 import Packer, Unpacker
 
+from .extension_point import ExtensionPoint
 from .generalized_transaction_set import GeneralizedTransactionSet
+from .ledger_entry import LedgerEntry
 from .ledger_header_history_entry import LedgerHeaderHistoryEntry
+from .ledger_key import LedgerKey
 from .scp_history_entry import SCPHistoryEntry
 from .transaction_result_meta import TransactionResultMeta
+from .uint64 import Uint64
 from .upgrade_entry_meta import UpgradeEntryMeta
 
 __all__ = ["LedgerCloseMetaV1"]
@@ -22,6 +26,10 @@ class LedgerCloseMetaV1:
 
         struct LedgerCloseMetaV1
         {
+            // We forgot to add an ExtensionPoint in v0 but at least
+            // we can add one now in v1.
+            ExtensionPoint ext;
+
             LedgerHeaderHistoryEntry ledgerHeader;
 
             GeneralizedTransactionSet txSet;
@@ -36,16 +44,31 @@ class LedgerCloseMetaV1:
 
             // other misc information attached to the ledger close
             SCPHistoryEntry scpInfo<>;
+
+            // Size in bytes of BucketList, to support downstream
+            // systems calculating storage fees correctly.
+            uint64 totalByteSizeOfBucketList;
+
+            // Temp keys that are being evicted at this ledger.
+            LedgerKey evictedTemporaryLedgerKeys<>;
+
+            // Archived restorable ledger entries that are being
+            // evicted at this ledger.
+            LedgerEntry evictedPersistentLedgerEntries<>;
         };
     """
 
     def __init__(
         self,
+        ext: ExtensionPoint,
         ledger_header: LedgerHeaderHistoryEntry,
         tx_set: GeneralizedTransactionSet,
         tx_processing: List[TransactionResultMeta],
         upgrades_processing: List[UpgradeEntryMeta],
         scp_info: List[SCPHistoryEntry],
+        total_byte_size_of_bucket_list: Uint64,
+        evicted_temporary_ledger_keys: List[LedgerKey],
+        evicted_persistent_ledger_entries: List[LedgerEntry],
     ) -> None:
         _expect_max_length = 4294967295
         if tx_processing and len(tx_processing) > _expect_max_length:
@@ -62,13 +85,34 @@ def __init__(
             raise ValueError(
                 f"The maximum length of `scp_info` should be {_expect_max_length}, but got {len(scp_info)}."
             )
+        _expect_max_length = 4294967295
+        if (
+            evicted_temporary_ledger_keys
+            and len(evicted_temporary_ledger_keys) > _expect_max_length
+        ):
+            raise ValueError(
+                f"The maximum length of `evicted_temporary_ledger_keys` should be {_expect_max_length}, but got {len(evicted_temporary_ledger_keys)}."
+            )
+        _expect_max_length = 4294967295
+        if (
+            evicted_persistent_ledger_entries
+            and len(evicted_persistent_ledger_entries) > _expect_max_length
+        ):
+            raise ValueError(
+                f"The maximum length of `evicted_persistent_ledger_entries` should be {_expect_max_length}, but got {len(evicted_persistent_ledger_entries)}."
+            )
+        self.ext = ext
         self.ledger_header = ledger_header
         self.tx_set = tx_set
         self.tx_processing = tx_processing
         self.upgrades_processing = upgrades_processing
         self.scp_info = scp_info
+        self.total_byte_size_of_bucket_list = total_byte_size_of_bucket_list
+        self.evicted_temporary_ledger_keys = evicted_temporary_ledger_keys
+        self.evicted_persistent_ledger_entries = evicted_persistent_ledger_entries
 
     def pack(self, packer: Packer) -> None:
+        self.ext.pack(packer)
         self.ledger_header.pack(packer)
         self.tx_set.pack(packer)
         packer.pack_uint(len(self.tx_processing))
@@ -80,9 +124,19 @@ def pack(self, packer: Packer) -> None:
         packer.pack_uint(len(self.scp_info))
         for scp_info_item in self.scp_info:
             scp_info_item.pack(packer)
+        self.total_byte_size_of_bucket_list.pack(packer)
+        packer.pack_uint(len(self.evicted_temporary_ledger_keys))
+        for evicted_temporary_ledger_keys_item in self.evicted_temporary_ledger_keys:
+            evicted_temporary_ledger_keys_item.pack(packer)
+        packer.pack_uint(len(self.evicted_persistent_ledger_entries))
+        for (
+            evicted_persistent_ledger_entries_item
+        ) in self.evicted_persistent_ledger_entries:
+            evicted_persistent_ledger_entries_item.pack(packer)
 
     @classmethod
     def unpack(cls, unpacker: Unpacker) -> LedgerCloseMetaV1:
+        ext = ExtensionPoint.unpack(unpacker)
         ledger_header = LedgerHeaderHistoryEntry.unpack(unpacker)
         tx_set = GeneralizedTransactionSet.unpack(unpacker)
         length = unpacker.unpack_uint()
@@ -97,12 +151,25 @@ def unpack(cls, unpacker: Unpacker) -> LedgerCloseMetaV1:
         scp_info = []
         for _ in range(length):
             scp_info.append(SCPHistoryEntry.unpack(unpacker))
+        total_byte_size_of_bucket_list = Uint64.unpack(unpacker)
+        length = unpacker.unpack_uint()
+        evicted_temporary_ledger_keys = []
+        for _ in range(length):
+            evicted_temporary_ledger_keys.append(LedgerKey.unpack(unpacker))
+        length = unpacker.unpack_uint()
+        evicted_persistent_ledger_entries = []
+        for _ in range(length):
+            evicted_persistent_ledger_entries.append(LedgerEntry.unpack(unpacker))
         return cls(
+            ext=ext,
             ledger_header=ledger_header,
             tx_set=tx_set,
             tx_processing=tx_processing,
             upgrades_processing=upgrades_processing,
             scp_info=scp_info,
+            total_byte_size_of_bucket_list=total_byte_size_of_bucket_list,
+            evicted_temporary_ledger_keys=evicted_temporary_ledger_keys,
+            evicted_persistent_ledger_entries=evicted_persistent_ledger_entries,
         )
 
     def to_xdr_bytes(self) -> bytes:
@@ -127,11 +194,15 @@ def from_xdr(cls, xdr: str) -> LedgerCloseMetaV1:
     def __hash__(self):
         return hash(
             (
+                self.ext,
                 self.ledger_header,
                 self.tx_set,
                 self.tx_processing,
                 self.upgrades_processing,
                 self.scp_info,
+                self.total_byte_size_of_bucket_list,
+                self.evicted_temporary_ledger_keys,
+                self.evicted_persistent_ledger_entries,
             )
         )
 
@@ -139,19 +210,30 @@ def __eq__(self, other: object):
         if not isinstance(other, self.__class__):
             return NotImplemented
         return (
-            self.ledger_header == other.ledger_header
+            self.ext == other.ext
+            and self.ledger_header == other.ledger_header
             and self.tx_set == other.tx_set
             and self.tx_processing == other.tx_processing
             and self.upgrades_processing == other.upgrades_processing
             and self.scp_info == other.scp_info
+            and self.total_byte_size_of_bucket_list
+            == other.total_byte_size_of_bucket_list
+            and self.evicted_temporary_ledger_keys
+            == other.evicted_temporary_ledger_keys
+            and self.evicted_persistent_ledger_entries
+            == other.evicted_persistent_ledger_entries
         )
 
     def __str__(self):
         out = [
+            f"ext={self.ext}",
             f"ledger_header={self.ledger_header}",
             f"tx_set={self.tx_set}",
             f"tx_processing={self.tx_processing}",
             f"upgrades_processing={self.upgrades_processing}",
             f"scp_info={self.scp_info}",
+            f"total_byte_size_of_bucket_list={self.total_byte_size_of_bucket_list}",
+            f"evicted_temporary_ledger_keys={self.evicted_temporary_ledger_keys}",
+            f"evicted_persistent_ledger_entries={self.evicted_persistent_ledger_entries}",
         ]
         return f"<LedgerCloseMetaV1 [{', '.join(out)}]>"
diff --git a/stellar_sdk/xdr/ledger_close_meta_v2.py b/stellar_sdk/xdr/ledger_close_meta_v2.py
deleted file mode 100644
index 8eafb67c..00000000
--- a/stellar_sdk/xdr/ledger_close_meta_v2.py
+++ /dev/null
@@ -1,239 +0,0 @@
-# This is an automatically generated file.
-# DO NOT EDIT or your changes may be overwritten
-from __future__ import annotations
-
-import base64
-from typing import List
-
-from xdrlib3 import Packer, Unpacker
-
-from .extension_point import ExtensionPoint
-from .generalized_transaction_set import GeneralizedTransactionSet
-from .ledger_entry import LedgerEntry
-from .ledger_header_history_entry import LedgerHeaderHistoryEntry
-from .ledger_key import LedgerKey
-from .scp_history_entry import SCPHistoryEntry
-from .transaction_result_meta import TransactionResultMeta
-from .uint64 import Uint64
-from .upgrade_entry_meta import UpgradeEntryMeta
-
-__all__ = ["LedgerCloseMetaV2"]
-
-
-class LedgerCloseMetaV2:
-    """
-    XDR Source Code::
-
-        struct LedgerCloseMetaV2
-        {
-            // We forgot to add an ExtensionPoint in v1 but at least
-            // we can add one now in v2.
-            ExtensionPoint ext;
-
-            LedgerHeaderHistoryEntry ledgerHeader;
-
-            GeneralizedTransactionSet txSet;
-
-            // NB: transactions are sorted in apply order here
-            // fees for all transactions are processed first
-            // followed by applying transactions
-            TransactionResultMeta txProcessing<>;
-
-            // upgrades are applied last
-            UpgradeEntryMeta upgradesProcessing<>;
-
-            // other misc information attached to the ledger close
-            SCPHistoryEntry scpInfo<>;
-
-            // Size in bytes of BucketList, to support downstream
-            // systems calculating storage fees correctly.
-            uint64 totalByteSizeOfBucketList;
-
-            // Expired temp keys that are being evicted at this ledger.
-            LedgerKey evictedTemporaryLedgerKeys<>;
-
-            // Expired restorable ledger entries that are being
-            // evicted at this ledger.
-            LedgerEntry evictedPersistentLedgerEntries<>;
-        };
-    """
-
-    def __init__(
-        self,
-        ext: ExtensionPoint,
-        ledger_header: LedgerHeaderHistoryEntry,
-        tx_set: GeneralizedTransactionSet,
-        tx_processing: List[TransactionResultMeta],
-        upgrades_processing: List[UpgradeEntryMeta],
-        scp_info: List[SCPHistoryEntry],
-        total_byte_size_of_bucket_list: Uint64,
-        evicted_temporary_ledger_keys: List[LedgerKey],
-        evicted_persistent_ledger_entries: List[LedgerEntry],
-    ) -> None:
-        _expect_max_length = 4294967295
-        if tx_processing and len(tx_processing) > _expect_max_length:
-            raise ValueError(
-                f"The maximum length of `tx_processing` should be {_expect_max_length}, but got {len(tx_processing)}."
-            )
-        _expect_max_length = 4294967295
-        if upgrades_processing and len(upgrades_processing) > _expect_max_length:
-            raise ValueError(
-                f"The maximum length of `upgrades_processing` should be {_expect_max_length}, but got {len(upgrades_processing)}."
-            )
-        _expect_max_length = 4294967295
-        if scp_info and len(scp_info) > _expect_max_length:
-            raise ValueError(
-                f"The maximum length of `scp_info` should be {_expect_max_length}, but got {len(scp_info)}."
-            )
-        _expect_max_length = 4294967295
-        if (
-            evicted_temporary_ledger_keys
-            and len(evicted_temporary_ledger_keys) > _expect_max_length
-        ):
-            raise ValueError(
-                f"The maximum length of `evicted_temporary_ledger_keys` should be {_expect_max_length}, but got {len(evicted_temporary_ledger_keys)}."
-            )
-        _expect_max_length = 4294967295
-        if (
-            evicted_persistent_ledger_entries
-            and len(evicted_persistent_ledger_entries) > _expect_max_length
-        ):
-            raise ValueError(
-                f"The maximum length of `evicted_persistent_ledger_entries` should be {_expect_max_length}, but got {len(evicted_persistent_ledger_entries)}."
-            )
-        self.ext = ext
-        self.ledger_header = ledger_header
-        self.tx_set = tx_set
-        self.tx_processing = tx_processing
-        self.upgrades_processing = upgrades_processing
-        self.scp_info = scp_info
-        self.total_byte_size_of_bucket_list = total_byte_size_of_bucket_list
-        self.evicted_temporary_ledger_keys = evicted_temporary_ledger_keys
-        self.evicted_persistent_ledger_entries = evicted_persistent_ledger_entries
-
-    def pack(self, packer: Packer) -> None:
-        self.ext.pack(packer)
-        self.ledger_header.pack(packer)
-        self.tx_set.pack(packer)
-        packer.pack_uint(len(self.tx_processing))
-        for tx_processing_item in self.tx_processing:
-            tx_processing_item.pack(packer)
-        packer.pack_uint(len(self.upgrades_processing))
-        for upgrades_processing_item in self.upgrades_processing:
-            upgrades_processing_item.pack(packer)
-        packer.pack_uint(len(self.scp_info))
-        for scp_info_item in self.scp_info:
-            scp_info_item.pack(packer)
-        self.total_byte_size_of_bucket_list.pack(packer)
-        packer.pack_uint(len(self.evicted_temporary_ledger_keys))
-        for evicted_temporary_ledger_keys_item in self.evicted_temporary_ledger_keys:
-            evicted_temporary_ledger_keys_item.pack(packer)
-        packer.pack_uint(len(self.evicted_persistent_ledger_entries))
-        for (
-            evicted_persistent_ledger_entries_item
-        ) in self.evicted_persistent_ledger_entries:
-            evicted_persistent_ledger_entries_item.pack(packer)
-
-    @classmethod
-    def unpack(cls, unpacker: Unpacker) -> LedgerCloseMetaV2:
-        ext = ExtensionPoint.unpack(unpacker)
-        ledger_header = LedgerHeaderHistoryEntry.unpack(unpacker)
-        tx_set = GeneralizedTransactionSet.unpack(unpacker)
-        length = unpacker.unpack_uint()
-        tx_processing = []
-        for _ in range(length):
-            tx_processing.append(TransactionResultMeta.unpack(unpacker))
-        length = unpacker.unpack_uint()
-        upgrades_processing = []
-        for _ in range(length):
-            upgrades_processing.append(UpgradeEntryMeta.unpack(unpacker))
-        length = unpacker.unpack_uint()
-        scp_info = []
-        for _ in range(length):
-            scp_info.append(SCPHistoryEntry.unpack(unpacker))
-        total_byte_size_of_bucket_list = Uint64.unpack(unpacker)
-        length = unpacker.unpack_uint()
-        evicted_temporary_ledger_keys = []
-        for _ in range(length):
-            evicted_temporary_ledger_keys.append(LedgerKey.unpack(unpacker))
-        length = unpacker.unpack_uint()
-        evicted_persistent_ledger_entries = []
-        for _ in range(length):
-            evicted_persistent_ledger_entries.append(LedgerEntry.unpack(unpacker))
-        return cls(
-            ext=ext,
-            ledger_header=ledger_header,
-            tx_set=tx_set,
-            tx_processing=tx_processing,
-            upgrades_processing=upgrades_processing,
-            scp_info=scp_info,
-            total_byte_size_of_bucket_list=total_byte_size_of_bucket_list,
-            evicted_temporary_ledger_keys=evicted_temporary_ledger_keys,
-            evicted_persistent_ledger_entries=evicted_persistent_ledger_entries,
-        )
-
-    def to_xdr_bytes(self) -> bytes:
-        packer = Packer()
-        self.pack(packer)
-        return packer.get_buffer()
-
-    @classmethod
-    def from_xdr_bytes(cls, xdr: bytes) -> LedgerCloseMetaV2:
-        unpacker = Unpacker(xdr)
-        return cls.unpack(unpacker)
-
-    def to_xdr(self) -> str:
-        xdr_bytes = self.to_xdr_bytes()
-        return base64.b64encode(xdr_bytes).decode()
-
-    @classmethod
-    def from_xdr(cls, xdr: str) -> LedgerCloseMetaV2:
-        xdr_bytes = base64.b64decode(xdr.encode())
-        return cls.from_xdr_bytes(xdr_bytes)
-
-    def __hash__(self):
-        return hash(
-            (
-                self.ext,
-                self.ledger_header,
-                self.tx_set,
-                self.tx_processing,
-                self.upgrades_processing,
-                self.scp_info,
-                self.total_byte_size_of_bucket_list,
-                self.evicted_temporary_ledger_keys,
-                self.evicted_persistent_ledger_entries,
-            )
-        )
-
-    def __eq__(self, other: object):
-        if not isinstance(other, self.__class__):
-            return NotImplemented
-        return (
-            self.ext == other.ext
-            and self.ledger_header == other.ledger_header
-            and self.tx_set == other.tx_set
-            and self.tx_processing == other.tx_processing
-            and self.upgrades_processing == other.upgrades_processing
-            and self.scp_info == other.scp_info
-            and self.total_byte_size_of_bucket_list
-            == other.total_byte_size_of_bucket_list
-            and self.evicted_temporary_ledger_keys
-            == other.evicted_temporary_ledger_keys
-            and self.evicted_persistent_ledger_entries
-            == other.evicted_persistent_ledger_entries
-        )
-
-    def __str__(self):
-        out = [
-            f"ext={self.ext}",
-            f"ledger_header={self.ledger_header}",
-            f"tx_set={self.tx_set}",
-            f"tx_processing={self.tx_processing}",
-            f"upgrades_processing={self.upgrades_processing}",
-            f"scp_info={self.scp_info}",
-            f"total_byte_size_of_bucket_list={self.total_byte_size_of_bucket_list}",
-            f"evicted_temporary_ledger_keys={self.evicted_temporary_ledger_keys}",
-            f"evicted_persistent_ledger_entries={self.evicted_persistent_ledger_entries}",
-        ]
-        return f"<LedgerCloseMetaV2 [{', '.join(out)}]>"
diff --git a/stellar_sdk/xdr/ledger_entry.py b/stellar_sdk/xdr/ledger_entry.py
index 22240fcc..deaf0c0b 100644
--- a/stellar_sdk/xdr/ledger_entry.py
+++ b/stellar_sdk/xdr/ledger_entry.py
@@ -41,8 +41,8 @@ class LedgerEntry:
                 ContractCodeEntry contractCode;
             case CONFIG_SETTING:
                 ConfigSettingEntry configSetting;
-            case EXPIRATION:
-                ExpirationEntry expiration;
+            case TTL:
+                TTLEntry ttl;
             }
             data;
 
diff --git a/stellar_sdk/xdr/ledger_entry_data.py b/stellar_sdk/xdr/ledger_entry_data.py
index 004e70c3..2651a14b 100644
--- a/stellar_sdk/xdr/ledger_entry_data.py
+++ b/stellar_sdk/xdr/ledger_entry_data.py
@@ -12,11 +12,11 @@
 from .contract_code_entry import ContractCodeEntry
 from .contract_data_entry import ContractDataEntry
 from .data_entry import DataEntry
-from .expiration_entry import ExpirationEntry
 from .ledger_entry_type import LedgerEntryType
 from .liquidity_pool_entry import LiquidityPoolEntry
 from .offer_entry import OfferEntry
 from .trust_line_entry import TrustLineEntry
+from .ttl_entry import TTLEntry
 
 __all__ = ["LedgerEntryData"]
 
@@ -45,8 +45,8 @@ class LedgerEntryData:
                 ContractCodeEntry contractCode;
             case CONFIG_SETTING:
                 ConfigSettingEntry configSetting;
-            case EXPIRATION:
-                ExpirationEntry expiration;
+            case TTL:
+                TTLEntry ttl;
             }
     """
 
@@ -62,7 +62,7 @@ def __init__(
         contract_data: ContractDataEntry = None,
         contract_code: ContractCodeEntry = None,
         config_setting: ConfigSettingEntry = None,
-        expiration: ExpirationEntry = None,
+        ttl: TTLEntry = None,
     ) -> None:
         self.type = type
         self.account = account
@@ -74,7 +74,7 @@ def __init__(
         self.contract_data = contract_data
         self.contract_code = contract_code
         self.config_setting = config_setting
-        self.expiration = expiration
+        self.ttl = ttl
 
     def pack(self, packer: Packer) -> None:
         self.type.pack(packer)
@@ -123,10 +123,10 @@ def pack(self, packer: Packer) -> None:
                 raise ValueError("config_setting should not be None.")
             self.config_setting.pack(packer)
             return
-        if self.type == LedgerEntryType.EXPIRATION:
-            if self.expiration is None:
-                raise ValueError("expiration should not be None.")
-            self.expiration.pack(packer)
+        if self.type == LedgerEntryType.TTL:
+            if self.ttl is None:
+                raise ValueError("ttl should not be None.")
+            self.ttl.pack(packer)
             return
 
     @classmethod
@@ -159,9 +159,9 @@ def unpack(cls, unpacker: Unpacker) -> LedgerEntryData:
         if type == LedgerEntryType.CONFIG_SETTING:
             config_setting = ConfigSettingEntry.unpack(unpacker)
             return cls(type=type, config_setting=config_setting)
-        if type == LedgerEntryType.EXPIRATION:
-            expiration = ExpirationEntry.unpack(unpacker)
-            return cls(type=type, expiration=expiration)
+        if type == LedgerEntryType.TTL:
+            ttl = TTLEntry.unpack(unpacker)
+            return cls(type=type, ttl=ttl)
         return cls(type=type)
 
     def to_xdr_bytes(self) -> bytes:
@@ -196,7 +196,7 @@ def __hash__(self):
                 self.contract_data,
                 self.contract_code,
                 self.config_setting,
-                self.expiration,
+                self.ttl,
             )
         )
 
@@ -214,7 +214,7 @@ def __eq__(self, other: object):
             and self.contract_data == other.contract_data
             and self.contract_code == other.contract_code
             and self.config_setting == other.config_setting
-            and self.expiration == other.expiration
+            and self.ttl == other.ttl
         )
 
     def __str__(self):
@@ -241,7 +241,5 @@ def __str__(self):
         out.append(
             f"config_setting={self.config_setting}"
         ) if self.config_setting is not None else None
-        out.append(
-            f"expiration={self.expiration}"
-        ) if self.expiration is not None else None
+        out.append(f"ttl={self.ttl}") if self.ttl is not None else None
         return f"<LedgerEntryData [{', '.join(out)}]>"
diff --git a/stellar_sdk/xdr/ledger_entry_type.py b/stellar_sdk/xdr/ledger_entry_type.py
index 19b1a0fd..83494083 100644
--- a/stellar_sdk/xdr/ledger_entry_type.py
+++ b/stellar_sdk/xdr/ledger_entry_type.py
@@ -25,7 +25,7 @@ class LedgerEntryType(IntEnum):
             CONTRACT_DATA = 6,
             CONTRACT_CODE = 7,
             CONFIG_SETTING = 8,
-            EXPIRATION = 9
+            TTL = 9
         };
     """
 
@@ -38,7 +38,7 @@ class LedgerEntryType(IntEnum):
     CONTRACT_DATA = 6
     CONTRACT_CODE = 7
     CONFIG_SETTING = 8
-    EXPIRATION = 9
+    TTL = 9
 
     def pack(self, packer: Packer) -> None:
         packer.pack_int(self.value)
diff --git a/stellar_sdk/xdr/ledger_key.py b/stellar_sdk/xdr/ledger_key.py
index be975004..4046c705 100644
--- a/stellar_sdk/xdr/ledger_key.py
+++ b/stellar_sdk/xdr/ledger_key.py
@@ -13,10 +13,10 @@
 from .ledger_key_contract_code import LedgerKeyContractCode
 from .ledger_key_contract_data import LedgerKeyContractData
 from .ledger_key_data import LedgerKeyData
-from .ledger_key_expiration import LedgerKeyExpiration
 from .ledger_key_liquidity_pool import LedgerKeyLiquidityPool
 from .ledger_key_offer import LedgerKeyOffer
 from .ledger_key_trust_line import LedgerKeyTrustLine
+from .ledger_key_ttl import LedgerKeyTtl
 
 __all__ = ["LedgerKey"]
 
@@ -82,12 +82,12 @@ class LedgerKey:
             {
                 ConfigSettingID configSettingID;
             } configSetting;
-        case EXPIRATION:
+        case TTL:
             struct
             {
-                // Hash of the LedgerKey that is associated with this ExpirationEntry
+                // Hash of the LedgerKey that is associated with this TTLEntry
                 Hash keyHash;
-            } expiration;
+            } ttl;
         };
     """
 
@@ -103,7 +103,7 @@ def __init__(
         contract_data: LedgerKeyContractData = None,
         contract_code: LedgerKeyContractCode = None,
         config_setting: LedgerKeyConfigSetting = None,
-        expiration: LedgerKeyExpiration = None,
+        ttl: LedgerKeyTtl = None,
     ) -> None:
         self.type = type
         self.account = account
@@ -115,7 +115,7 @@ def __init__(
         self.contract_data = contract_data
         self.contract_code = contract_code
         self.config_setting = config_setting
-        self.expiration = expiration
+        self.ttl = ttl
 
     def pack(self, packer: Packer) -> None:
         self.type.pack(packer)
@@ -164,10 +164,10 @@ def pack(self, packer: Packer) -> None:
                 raise ValueError("config_setting should not be None.")
             self.config_setting.pack(packer)
             return
-        if self.type == LedgerEntryType.EXPIRATION:
-            if self.expiration is None:
-                raise ValueError("expiration should not be None.")
-            self.expiration.pack(packer)
+        if self.type == LedgerEntryType.TTL:
+            if self.ttl is None:
+                raise ValueError("ttl should not be None.")
+            self.ttl.pack(packer)
             return
 
     @classmethod
@@ -200,9 +200,9 @@ def unpack(cls, unpacker: Unpacker) -> LedgerKey:
         if type == LedgerEntryType.CONFIG_SETTING:
             config_setting = LedgerKeyConfigSetting.unpack(unpacker)
             return cls(type=type, config_setting=config_setting)
-        if type == LedgerEntryType.EXPIRATION:
-            expiration = LedgerKeyExpiration.unpack(unpacker)
-            return cls(type=type, expiration=expiration)
+        if type == LedgerEntryType.TTL:
+            ttl = LedgerKeyTtl.unpack(unpacker)
+            return cls(type=type, ttl=ttl)
         return cls(type=type)
 
     def to_xdr_bytes(self) -> bytes:
@@ -237,7 +237,7 @@ def __hash__(self):
                 self.contract_data,
                 self.contract_code,
                 self.config_setting,
-                self.expiration,
+                self.ttl,
             )
         )
 
@@ -255,7 +255,7 @@ def __eq__(self, other: object):
             and self.contract_data == other.contract_data
             and self.contract_code == other.contract_code
             and self.config_setting == other.config_setting
-            and self.expiration == other.expiration
+            and self.ttl == other.ttl
         )
 
     def __str__(self):
@@ -282,7 +282,5 @@ def __str__(self):
         out.append(
             f"config_setting={self.config_setting}"
         ) if self.config_setting is not None else None
-        out.append(
-            f"expiration={self.expiration}"
-        ) if self.expiration is not None else None
+        out.append(f"ttl={self.ttl}") if self.ttl is not None else None
         return f"<LedgerKey [{', '.join(out)}]>"
diff --git a/stellar_sdk/xdr/ledger_key_expiration.py b/stellar_sdk/xdr/ledger_key_ttl.py
similarity index 81%
rename from stellar_sdk/xdr/ledger_key_expiration.py
rename to stellar_sdk/xdr/ledger_key_ttl.py
index fead22d1..99180ee2 100644
--- a/stellar_sdk/xdr/ledger_key_expiration.py
+++ b/stellar_sdk/xdr/ledger_key_ttl.py
@@ -8,16 +8,16 @@
 
 from .hash import Hash
 
-__all__ = ["LedgerKeyExpiration"]
+__all__ = ["LedgerKeyTtl"]
 
 
-class LedgerKeyExpiration:
+class LedgerKeyTtl:
     """
     XDR Source Code::
 
         struct
             {
-                // Hash of the LedgerKey that is associated with this ExpirationEntry
+                // Hash of the LedgerKey that is associated with this TTLEntry
                 Hash keyHash;
             }
     """
@@ -32,7 +32,7 @@ def pack(self, packer: Packer) -> None:
         self.key_hash.pack(packer)
 
     @classmethod
-    def unpack(cls, unpacker: Unpacker) -> LedgerKeyExpiration:
+    def unpack(cls, unpacker: Unpacker) -> LedgerKeyTtl:
         key_hash = Hash.unpack(unpacker)
         return cls(
             key_hash=key_hash,
@@ -44,7 +44,7 @@ def to_xdr_bytes(self) -> bytes:
         return packer.get_buffer()
 
     @classmethod
-    def from_xdr_bytes(cls, xdr: bytes) -> LedgerKeyExpiration:
+    def from_xdr_bytes(cls, xdr: bytes) -> LedgerKeyTtl:
         unpacker = Unpacker(xdr)
         return cls.unpack(unpacker)
 
@@ -53,7 +53,7 @@ def to_xdr(self) -> str:
         return base64.b64encode(xdr_bytes).decode()
 
     @classmethod
-    def from_xdr(cls, xdr: str) -> LedgerKeyExpiration:
+    def from_xdr(cls, xdr: str) -> LedgerKeyTtl:
         xdr_bytes = base64.b64decode(xdr.encode())
         return cls.from_xdr_bytes(xdr_bytes)
 
@@ -69,4 +69,4 @@ def __str__(self):
         out = [
             f"key_hash={self.key_hash}",
         ]
-        return f"<LedgerKeyExpiration [{', '.join(out)}]>"
+        return f"<LedgerKeyTtl [{', '.join(out)}]>"
diff --git a/stellar_sdk/xdr/operation.py b/stellar_sdk/xdr/operation.py
index f6331ea7..7fb68f22 100644
--- a/stellar_sdk/xdr/operation.py
+++ b/stellar_sdk/xdr/operation.py
@@ -76,8 +76,8 @@ class Operation:
                 LiquidityPoolWithdrawOp liquidityPoolWithdrawOp;
             case INVOKE_HOST_FUNCTION:
                 InvokeHostFunctionOp invokeHostFunctionOp;
-            case BUMP_FOOTPRINT_EXPIRATION:
-                BumpFootprintExpirationOp bumpFootprintExpirationOp;
+            case EXTEND_FOOTPRINT_TTL:
+                ExtendFootprintTTLOp extendFootprintTTLOp;
             case RESTORE_FOOTPRINT:
                 RestoreFootprintOp restoreFootprintOp;
             }
diff --git a/stellar_sdk/xdr/operation_body.py b/stellar_sdk/xdr/operation_body.py
index e590a0f7..e45fb235 100644
--- a/stellar_sdk/xdr/operation_body.py
+++ b/stellar_sdk/xdr/operation_body.py
@@ -8,7 +8,6 @@
 
 from .allow_trust_op import AllowTrustOp
 from .begin_sponsoring_future_reserves_op import BeginSponsoringFutureReservesOp
-from .bump_footprint_expiration_op import BumpFootprintExpirationOp
 from .bump_sequence_op import BumpSequenceOp
 from .change_trust_op import ChangeTrustOp
 from .claim_claimable_balance_op import ClaimClaimableBalanceOp
@@ -17,6 +16,7 @@
 from .create_account_op import CreateAccountOp
 from .create_claimable_balance_op import CreateClaimableBalanceOp
 from .create_passive_sell_offer_op import CreatePassiveSellOfferOp
+from .extend_footprint_ttl_op import ExtendFootprintTTLOp
 from .invoke_host_function_op import InvokeHostFunctionOp
 from .liquidity_pool_deposit_op import LiquidityPoolDepositOp
 from .liquidity_pool_withdraw_op import LiquidityPoolWithdrawOp
@@ -92,8 +92,8 @@ class OperationBody:
                 LiquidityPoolWithdrawOp liquidityPoolWithdrawOp;
             case INVOKE_HOST_FUNCTION:
                 InvokeHostFunctionOp invokeHostFunctionOp;
-            case BUMP_FOOTPRINT_EXPIRATION:
-                BumpFootprintExpirationOp bumpFootprintExpirationOp;
+            case EXTEND_FOOTPRINT_TTL:
+                ExtendFootprintTTLOp extendFootprintTTLOp;
             case RESTORE_FOOTPRINT:
                 RestoreFootprintOp restoreFootprintOp;
             }
@@ -125,7 +125,7 @@ def __init__(
         liquidity_pool_deposit_op: LiquidityPoolDepositOp = None,
         liquidity_pool_withdraw_op: LiquidityPoolWithdrawOp = None,
         invoke_host_function_op: InvokeHostFunctionOp = None,
-        bump_footprint_expiration_op: BumpFootprintExpirationOp = None,
+        extend_footprint_ttl_op: ExtendFootprintTTLOp = None,
         restore_footprint_op: RestoreFootprintOp = None,
     ) -> None:
         self.type = type
@@ -152,7 +152,7 @@ def __init__(
         self.liquidity_pool_deposit_op = liquidity_pool_deposit_op
         self.liquidity_pool_withdraw_op = liquidity_pool_withdraw_op
         self.invoke_host_function_op = invoke_host_function_op
-        self.bump_footprint_expiration_op = bump_footprint_expiration_op
+        self.extend_footprint_ttl_op = extend_footprint_ttl_op
         self.restore_footprint_op = restore_footprint_op
 
     def pack(self, packer: Packer) -> None:
@@ -278,10 +278,10 @@ def pack(self, packer: Packer) -> None:
                 raise ValueError("invoke_host_function_op should not be None.")
             self.invoke_host_function_op.pack(packer)
             return
-        if self.type == OperationType.BUMP_FOOTPRINT_EXPIRATION:
-            if self.bump_footprint_expiration_op is None:
-                raise ValueError("bump_footprint_expiration_op should not be None.")
-            self.bump_footprint_expiration_op.pack(packer)
+        if self.type == OperationType.EXTEND_FOOTPRINT_TTL:
+            if self.extend_footprint_ttl_op is None:
+                raise ValueError("extend_footprint_ttl_op should not be None.")
+            self.extend_footprint_ttl_op.pack(packer)
             return
         if self.type == OperationType.RESTORE_FOOTPRINT:
             if self.restore_footprint_op is None:
@@ -380,11 +380,9 @@ def unpack(cls, unpacker: Unpacker) -> OperationBody:
         if type == OperationType.INVOKE_HOST_FUNCTION:
             invoke_host_function_op = InvokeHostFunctionOp.unpack(unpacker)
             return cls(type=type, invoke_host_function_op=invoke_host_function_op)
-        if type == OperationType.BUMP_FOOTPRINT_EXPIRATION:
-            bump_footprint_expiration_op = BumpFootprintExpirationOp.unpack(unpacker)
-            return cls(
-                type=type, bump_footprint_expiration_op=bump_footprint_expiration_op
-            )
+        if type == OperationType.EXTEND_FOOTPRINT_TTL:
+            extend_footprint_ttl_op = ExtendFootprintTTLOp.unpack(unpacker)
+            return cls(type=type, extend_footprint_ttl_op=extend_footprint_ttl_op)
         if type == OperationType.RESTORE_FOOTPRINT:
             restore_footprint_op = RestoreFootprintOp.unpack(unpacker)
             return cls(type=type, restore_footprint_op=restore_footprint_op)
@@ -436,7 +434,7 @@ def __hash__(self):
                 self.liquidity_pool_deposit_op,
                 self.liquidity_pool_withdraw_op,
                 self.invoke_host_function_op,
-                self.bump_footprint_expiration_op,
+                self.extend_footprint_ttl_op,
                 self.restore_footprint_op,
             )
         )
@@ -472,7 +470,7 @@ def __eq__(self, other: object):
             and self.liquidity_pool_deposit_op == other.liquidity_pool_deposit_op
             and self.liquidity_pool_withdraw_op == other.liquidity_pool_withdraw_op
             and self.invoke_host_function_op == other.invoke_host_function_op
-            and self.bump_footprint_expiration_op == other.bump_footprint_expiration_op
+            and self.extend_footprint_ttl_op == other.extend_footprint_ttl_op
             and self.restore_footprint_op == other.restore_footprint_op
         )
 
@@ -549,8 +547,8 @@ def __str__(self):
             f"invoke_host_function_op={self.invoke_host_function_op}"
         ) if self.invoke_host_function_op is not None else None
         out.append(
-            f"bump_footprint_expiration_op={self.bump_footprint_expiration_op}"
-        ) if self.bump_footprint_expiration_op is not None else None
+            f"extend_footprint_ttl_op={self.extend_footprint_ttl_op}"
+        ) if self.extend_footprint_ttl_op is not None else None
         out.append(
             f"restore_footprint_op={self.restore_footprint_op}"
         ) if self.restore_footprint_op is not None else None
diff --git a/stellar_sdk/xdr/operation_result.py b/stellar_sdk/xdr/operation_result.py
index b475d85c..b1aa649c 100644
--- a/stellar_sdk/xdr/operation_result.py
+++ b/stellar_sdk/xdr/operation_result.py
@@ -71,8 +71,8 @@ class OperationResult:
                 LiquidityPoolWithdrawResult liquidityPoolWithdrawResult;
             case INVOKE_HOST_FUNCTION:
                 InvokeHostFunctionResult invokeHostFunctionResult;
-            case BUMP_FOOTPRINT_EXPIRATION:
-                BumpFootprintExpirationResult bumpFootprintExpirationResult;
+            case EXTEND_FOOTPRINT_TTL:
+                ExtendFootprintTTLResult extendFootprintTTLResult;
             case RESTORE_FOOTPRINT:
                 RestoreFootprintResult restoreFootprintResult;
             }
diff --git a/stellar_sdk/xdr/operation_result_tr.py b/stellar_sdk/xdr/operation_result_tr.py
index 351d5c23..3a68d0bc 100644
--- a/stellar_sdk/xdr/operation_result_tr.py
+++ b/stellar_sdk/xdr/operation_result_tr.py
@@ -9,7 +9,6 @@
 from .account_merge_result import AccountMergeResult
 from .allow_trust_result import AllowTrustResult
 from .begin_sponsoring_future_reserves_result import BeginSponsoringFutureReservesResult
-from .bump_footprint_expiration_result import BumpFootprintExpirationResult
 from .bump_sequence_result import BumpSequenceResult
 from .change_trust_result import ChangeTrustResult
 from .claim_claimable_balance_result import ClaimClaimableBalanceResult
@@ -18,6 +17,7 @@
 from .create_account_result import CreateAccountResult
 from .create_claimable_balance_result import CreateClaimableBalanceResult
 from .end_sponsoring_future_reserves_result import EndSponsoringFutureReservesResult
+from .extend_footprint_ttl_result import ExtendFootprintTTLResult
 from .inflation_result import InflationResult
 from .invoke_host_function_result import InvokeHostFunctionResult
 from .liquidity_pool_deposit_result import LiquidityPoolDepositResult
@@ -93,8 +93,8 @@ class OperationResultTr:
                 LiquidityPoolWithdrawResult liquidityPoolWithdrawResult;
             case INVOKE_HOST_FUNCTION:
                 InvokeHostFunctionResult invokeHostFunctionResult;
-            case BUMP_FOOTPRINT_EXPIRATION:
-                BumpFootprintExpirationResult bumpFootprintExpirationResult;
+            case EXTEND_FOOTPRINT_TTL:
+                ExtendFootprintTTLResult extendFootprintTTLResult;
             case RESTORE_FOOTPRINT:
                 RestoreFootprintResult restoreFootprintResult;
             }
@@ -128,7 +128,7 @@ def __init__(
         liquidity_pool_deposit_result: LiquidityPoolDepositResult = None,
         liquidity_pool_withdraw_result: LiquidityPoolWithdrawResult = None,
         invoke_host_function_result: InvokeHostFunctionResult = None,
-        bump_footprint_expiration_result: BumpFootprintExpirationResult = None,
+        extend_footprint_ttl_result: ExtendFootprintTTLResult = None,
         restore_footprint_result: RestoreFootprintResult = None,
     ) -> None:
         self.type = type
@@ -161,7 +161,7 @@ def __init__(
         self.liquidity_pool_deposit_result = liquidity_pool_deposit_result
         self.liquidity_pool_withdraw_result = liquidity_pool_withdraw_result
         self.invoke_host_function_result = invoke_host_function_result
-        self.bump_footprint_expiration_result = bump_footprint_expiration_result
+        self.extend_footprint_ttl_result = extend_footprint_ttl_result
         self.restore_footprint_result = restore_footprint_result
 
     def pack(self, packer: Packer) -> None:
@@ -299,10 +299,10 @@ def pack(self, packer: Packer) -> None:
                 raise ValueError("invoke_host_function_result should not be None.")
             self.invoke_host_function_result.pack(packer)
             return
-        if self.type == OperationType.BUMP_FOOTPRINT_EXPIRATION:
-            if self.bump_footprint_expiration_result is None:
-                raise ValueError("bump_footprint_expiration_result should not be None.")
-            self.bump_footprint_expiration_result.pack(packer)
+        if self.type == OperationType.EXTEND_FOOTPRINT_TTL:
+            if self.extend_footprint_ttl_result is None:
+                raise ValueError("extend_footprint_ttl_result should not be None.")
+            self.extend_footprint_ttl_result.pack(packer)
             return
         if self.type == OperationType.RESTORE_FOOTPRINT:
             if self.restore_footprint_result is None:
@@ -435,13 +435,10 @@ def unpack(cls, unpacker: Unpacker) -> OperationResultTr:
             return cls(
                 type=type, invoke_host_function_result=invoke_host_function_result
             )
-        if type == OperationType.BUMP_FOOTPRINT_EXPIRATION:
-            bump_footprint_expiration_result = BumpFootprintExpirationResult.unpack(
-                unpacker
-            )
+        if type == OperationType.EXTEND_FOOTPRINT_TTL:
+            extend_footprint_ttl_result = ExtendFootprintTTLResult.unpack(unpacker)
             return cls(
-                type=type,
-                bump_footprint_expiration_result=bump_footprint_expiration_result,
+                type=type, extend_footprint_ttl_result=extend_footprint_ttl_result
             )
         if type == OperationType.RESTORE_FOOTPRINT:
             restore_footprint_result = RestoreFootprintResult.unpack(unpacker)
@@ -496,7 +493,7 @@ def __hash__(self):
                 self.liquidity_pool_deposit_result,
                 self.liquidity_pool_withdraw_result,
                 self.invoke_host_function_result,
-                self.bump_footprint_expiration_result,
+                self.extend_footprint_ttl_result,
                 self.restore_footprint_result,
             )
         )
@@ -541,8 +538,7 @@ def __eq__(self, other: object):
             and self.liquidity_pool_withdraw_result
             == other.liquidity_pool_withdraw_result
             and self.invoke_host_function_result == other.invoke_host_function_result
-            and self.bump_footprint_expiration_result
-            == other.bump_footprint_expiration_result
+            and self.extend_footprint_ttl_result == other.extend_footprint_ttl_result
             and self.restore_footprint_result == other.restore_footprint_result
         )
 
@@ -625,8 +621,8 @@ def __str__(self):
             f"invoke_host_function_result={self.invoke_host_function_result}"
         ) if self.invoke_host_function_result is not None else None
         out.append(
-            f"bump_footprint_expiration_result={self.bump_footprint_expiration_result}"
-        ) if self.bump_footprint_expiration_result is not None else None
+            f"extend_footprint_ttl_result={self.extend_footprint_ttl_result}"
+        ) if self.extend_footprint_ttl_result is not None else None
         out.append(
             f"restore_footprint_result={self.restore_footprint_result}"
         ) if self.restore_footprint_result is not None else None
diff --git a/stellar_sdk/xdr/operation_type.py b/stellar_sdk/xdr/operation_type.py
index cc8810e6..14d66f4d 100644
--- a/stellar_sdk/xdr/operation_type.py
+++ b/stellar_sdk/xdr/operation_type.py
@@ -41,7 +41,7 @@ class OperationType(IntEnum):
             LIQUIDITY_POOL_DEPOSIT = 22,
             LIQUIDITY_POOL_WITHDRAW = 23,
             INVOKE_HOST_FUNCTION = 24,
-            BUMP_FOOTPRINT_EXPIRATION = 25,
+            EXTEND_FOOTPRINT_TTL = 25,
             RESTORE_FOOTPRINT = 26
         };
     """
@@ -71,7 +71,7 @@ class OperationType(IntEnum):
     LIQUIDITY_POOL_DEPOSIT = 22
     LIQUIDITY_POOL_WITHDRAW = 23
     INVOKE_HOST_FUNCTION = 24
-    BUMP_FOOTPRINT_EXPIRATION = 25
+    EXTEND_FOOTPRINT_TTL = 25
     RESTORE_FOOTPRINT = 26
 
     def pack(self, packer: Packer) -> None:
diff --git a/stellar_sdk/xdr/soroban_transaction_data.py b/stellar_sdk/xdr/soroban_transaction_data.py
index 2fd42875..0dfca0d6 100644
--- a/stellar_sdk/xdr/soroban_transaction_data.py
+++ b/stellar_sdk/xdr/soroban_transaction_data.py
@@ -21,8 +21,16 @@ class SorobanTransactionData:
         {
             ExtensionPoint ext;
             SorobanResources resources;
-            // Portion of transaction `fee` allocated to refundable fees.
-            int64 refundableFee;
+            // Amount of the transaction `fee` allocated to the Soroban resource fees.
+            // The fraction of `resourceFee` corresponding to `resources` specified
+            // above is *not* refundable (i.e. fees for instructions, ledger I/O), as
+            // well as fees for the transaction size.
+            // The remaining part of the fee is refundable and the charged value is
+            // based on the actual consumption of refundable resources (events, ledger
+            // rent bumps).
+            // The `inclusionFee` used for prioritization of the transaction is defined
+            // as `tx.fee - resourceFee`.
+            int64 resourceFee;
         };
     """
 
@@ -30,26 +38,26 @@ def __init__(
         self,
         ext: ExtensionPoint,
         resources: SorobanResources,
-        refundable_fee: Int64,
+        resource_fee: Int64,
     ) -> None:
         self.ext = ext
         self.resources = resources
-        self.refundable_fee = refundable_fee
+        self.resource_fee = resource_fee
 
     def pack(self, packer: Packer) -> None:
         self.ext.pack(packer)
         self.resources.pack(packer)
-        self.refundable_fee.pack(packer)
+        self.resource_fee.pack(packer)
 
     @classmethod
     def unpack(cls, unpacker: Unpacker) -> SorobanTransactionData:
         ext = ExtensionPoint.unpack(unpacker)
         resources = SorobanResources.unpack(unpacker)
-        refundable_fee = Int64.unpack(unpacker)
+        resource_fee = Int64.unpack(unpacker)
         return cls(
             ext=ext,
             resources=resources,
-            refundable_fee=refundable_fee,
+            resource_fee=resource_fee,
         )
 
     def to_xdr_bytes(self) -> bytes:
@@ -76,7 +84,7 @@ def __hash__(self):
             (
                 self.ext,
                 self.resources,
-                self.refundable_fee,
+                self.resource_fee,
             )
         )
 
@@ -86,13 +94,13 @@ def __eq__(self, other: object):
         return (
             self.ext == other.ext
             and self.resources == other.resources
-            and self.refundable_fee == other.refundable_fee
+            and self.resource_fee == other.resource_fee
         )
 
     def __str__(self):
         out = [
             f"ext={self.ext}",
             f"resources={self.resources}",
-            f"refundable_fee={self.refundable_fee}",
+            f"resource_fee={self.resource_fee}",
         ]
         return f"<SorobanTransactionData [{', '.join(out)}]>"
diff --git a/stellar_sdk/xdr/state_expiration_settings.py b/stellar_sdk/xdr/state_archival_settings.py
similarity index 63%
rename from stellar_sdk/xdr/state_expiration_settings.py
rename to stellar_sdk/xdr/state_archival_settings.py
index 0b4f6729..1bf9dac3 100644
--- a/stellar_sdk/xdr/state_expiration_settings.py
+++ b/stellar_sdk/xdr/state_archival_settings.py
@@ -10,24 +10,24 @@
 from .uint32 import Uint32
 from .uint64 import Uint64
 
-__all__ = ["StateExpirationSettings"]
+__all__ = ["StateArchivalSettings"]
 
 
-class StateExpirationSettings:
+class StateArchivalSettings:
     """
     XDR Source Code::
 
-        struct StateExpirationSettings {
-            uint32 maxEntryExpiration;
-            uint32 minTempEntryExpiration;
-            uint32 minPersistentEntryExpiration;
+        struct StateArchivalSettings {
+            uint32 maxEntryTTL;
+            uint32 minTemporaryTTL;
+            uint32 minPersistentTTL;
 
             // rent_fee = wfee_rate_average / rent_rate_denominator_for_type
             int64 persistentRentRateDenominator;
             int64 tempRentRateDenominator;
 
-            // max number of entries that emit expiration meta in a single ledger
-            uint32 maxEntriesToExpire;
+            // max number of entries that emit archival meta in a single ledger
+            uint32 maxEntriesToArchive;
 
             // Number of snapshots to use when calculating average BucketList size
             uint32 bucketListSizeWindowSampleSize;
@@ -42,55 +42,55 @@ class StateExpirationSettings:
 
     def __init__(
         self,
-        max_entry_expiration: Uint32,
-        min_temp_entry_expiration: Uint32,
-        min_persistent_entry_expiration: Uint32,
+        max_entry_ttl: Uint32,
+        min_temporary_ttl: Uint32,
+        min_persistent_ttl: Uint32,
         persistent_rent_rate_denominator: Int64,
         temp_rent_rate_denominator: Int64,
-        max_entries_to_expire: Uint32,
+        max_entries_to_archive: Uint32,
         bucket_list_size_window_sample_size: Uint32,
         eviction_scan_size: Uint64,
         starting_eviction_scan_level: Uint32,
     ) -> None:
-        self.max_entry_expiration = max_entry_expiration
-        self.min_temp_entry_expiration = min_temp_entry_expiration
-        self.min_persistent_entry_expiration = min_persistent_entry_expiration
+        self.max_entry_ttl = max_entry_ttl
+        self.min_temporary_ttl = min_temporary_ttl
+        self.min_persistent_ttl = min_persistent_ttl
         self.persistent_rent_rate_denominator = persistent_rent_rate_denominator
         self.temp_rent_rate_denominator = temp_rent_rate_denominator
-        self.max_entries_to_expire = max_entries_to_expire
+        self.max_entries_to_archive = max_entries_to_archive
         self.bucket_list_size_window_sample_size = bucket_list_size_window_sample_size
         self.eviction_scan_size = eviction_scan_size
         self.starting_eviction_scan_level = starting_eviction_scan_level
 
     def pack(self, packer: Packer) -> None:
-        self.max_entry_expiration.pack(packer)
-        self.min_temp_entry_expiration.pack(packer)
-        self.min_persistent_entry_expiration.pack(packer)
+        self.max_entry_ttl.pack(packer)
+        self.min_temporary_ttl.pack(packer)
+        self.min_persistent_ttl.pack(packer)
         self.persistent_rent_rate_denominator.pack(packer)
         self.temp_rent_rate_denominator.pack(packer)
-        self.max_entries_to_expire.pack(packer)
+        self.max_entries_to_archive.pack(packer)
         self.bucket_list_size_window_sample_size.pack(packer)
         self.eviction_scan_size.pack(packer)
         self.starting_eviction_scan_level.pack(packer)
 
     @classmethod
-    def unpack(cls, unpacker: Unpacker) -> StateExpirationSettings:
-        max_entry_expiration = Uint32.unpack(unpacker)
-        min_temp_entry_expiration = Uint32.unpack(unpacker)
-        min_persistent_entry_expiration = Uint32.unpack(unpacker)
+    def unpack(cls, unpacker: Unpacker) -> StateArchivalSettings:
+        max_entry_ttl = Uint32.unpack(unpacker)
+        min_temporary_ttl = Uint32.unpack(unpacker)
+        min_persistent_ttl = Uint32.unpack(unpacker)
         persistent_rent_rate_denominator = Int64.unpack(unpacker)
         temp_rent_rate_denominator = Int64.unpack(unpacker)
-        max_entries_to_expire = Uint32.unpack(unpacker)
+        max_entries_to_archive = Uint32.unpack(unpacker)
         bucket_list_size_window_sample_size = Uint32.unpack(unpacker)
         eviction_scan_size = Uint64.unpack(unpacker)
         starting_eviction_scan_level = Uint32.unpack(unpacker)
         return cls(
-            max_entry_expiration=max_entry_expiration,
-            min_temp_entry_expiration=min_temp_entry_expiration,
-            min_persistent_entry_expiration=min_persistent_entry_expiration,
+            max_entry_ttl=max_entry_ttl,
+            min_temporary_ttl=min_temporary_ttl,
+            min_persistent_ttl=min_persistent_ttl,
             persistent_rent_rate_denominator=persistent_rent_rate_denominator,
             temp_rent_rate_denominator=temp_rent_rate_denominator,
-            max_entries_to_expire=max_entries_to_expire,
+            max_entries_to_archive=max_entries_to_archive,
             bucket_list_size_window_sample_size=bucket_list_size_window_sample_size,
             eviction_scan_size=eviction_scan_size,
             starting_eviction_scan_level=starting_eviction_scan_level,
@@ -102,7 +102,7 @@ def to_xdr_bytes(self) -> bytes:
         return packer.get_buffer()
 
     @classmethod
-    def from_xdr_bytes(cls, xdr: bytes) -> StateExpirationSettings:
+    def from_xdr_bytes(cls, xdr: bytes) -> StateArchivalSettings:
         unpacker = Unpacker(xdr)
         return cls.unpack(unpacker)
 
@@ -111,19 +111,19 @@ def to_xdr(self) -> str:
         return base64.b64encode(xdr_bytes).decode()
 
     @classmethod
-    def from_xdr(cls, xdr: str) -> StateExpirationSettings:
+    def from_xdr(cls, xdr: str) -> StateArchivalSettings:
         xdr_bytes = base64.b64decode(xdr.encode())
         return cls.from_xdr_bytes(xdr_bytes)
 
     def __hash__(self):
         return hash(
             (
-                self.max_entry_expiration,
-                self.min_temp_entry_expiration,
-                self.min_persistent_entry_expiration,
+                self.max_entry_ttl,
+                self.min_temporary_ttl,
+                self.min_persistent_ttl,
                 self.persistent_rent_rate_denominator,
                 self.temp_rent_rate_denominator,
-                self.max_entries_to_expire,
+                self.max_entries_to_archive,
                 self.bucket_list_size_window_sample_size,
                 self.eviction_scan_size,
                 self.starting_eviction_scan_level,
@@ -134,14 +134,13 @@ def __eq__(self, other: object):
         if not isinstance(other, self.__class__):
             return NotImplemented
         return (
-            self.max_entry_expiration == other.max_entry_expiration
-            and self.min_temp_entry_expiration == other.min_temp_entry_expiration
-            and self.min_persistent_entry_expiration
-            == other.min_persistent_entry_expiration
+            self.max_entry_ttl == other.max_entry_ttl
+            and self.min_temporary_ttl == other.min_temporary_ttl
+            and self.min_persistent_ttl == other.min_persistent_ttl
             and self.persistent_rent_rate_denominator
             == other.persistent_rent_rate_denominator
             and self.temp_rent_rate_denominator == other.temp_rent_rate_denominator
-            and self.max_entries_to_expire == other.max_entries_to_expire
+            and self.max_entries_to_archive == other.max_entries_to_archive
             and self.bucket_list_size_window_sample_size
             == other.bucket_list_size_window_sample_size
             and self.eviction_scan_size == other.eviction_scan_size
@@ -150,14 +149,14 @@ def __eq__(self, other: object):
 
     def __str__(self):
         out = [
-            f"max_entry_expiration={self.max_entry_expiration}",
-            f"min_temp_entry_expiration={self.min_temp_entry_expiration}",
-            f"min_persistent_entry_expiration={self.min_persistent_entry_expiration}",
+            f"max_entry_ttl={self.max_entry_ttl}",
+            f"min_temporary_ttl={self.min_temporary_ttl}",
+            f"min_persistent_ttl={self.min_persistent_ttl}",
             f"persistent_rent_rate_denominator={self.persistent_rent_rate_denominator}",
             f"temp_rent_rate_denominator={self.temp_rent_rate_denominator}",
-            f"max_entries_to_expire={self.max_entries_to_expire}",
+            f"max_entries_to_archive={self.max_entries_to_archive}",
             f"bucket_list_size_window_sample_size={self.bucket_list_size_window_sample_size}",
             f"eviction_scan_size={self.eviction_scan_size}",
             f"starting_eviction_scan_level={self.starting_eviction_scan_level}",
         ]
-        return f"<StateExpirationSettings [{', '.join(out)}]>"
+        return f"<StateArchivalSettings [{', '.join(out)}]>"
diff --git a/stellar_sdk/xdr/stored_debug_transaction_set.py b/stellar_sdk/xdr/stored_debug_transaction_set.py
new file mode 100644
index 00000000..56698aa2
--- /dev/null
+++ b/stellar_sdk/xdr/stored_debug_transaction_set.py
@@ -0,0 +1,97 @@
+# This is an automatically generated file.
+# DO NOT EDIT or your changes may be overwritten
+from __future__ import annotations
+
+import base64
+
+from xdrlib3 import Packer, Unpacker
+
+from .stellar_value import StellarValue
+from .stored_transaction_set import StoredTransactionSet
+from .uint32 import Uint32
+
+__all__ = ["StoredDebugTransactionSet"]
+
+
+class StoredDebugTransactionSet:
+    """
+    XDR Source Code::
+
+                                                                struct StoredDebugTransactionSet
+                                                                {
+                                                                        StoredTransactionSet txSet;
+                                                                        uint32 ledgerSeq;
+                                                                        StellarValue scpValue;
+                                                                };
+    """
+
+    def __init__(
+        self,
+        tx_set: StoredTransactionSet,
+        ledger_seq: Uint32,
+        scp_value: StellarValue,
+    ) -> None:
+        self.tx_set = tx_set
+        self.ledger_seq = ledger_seq
+        self.scp_value = scp_value
+
+    def pack(self, packer: Packer) -> None:
+        self.tx_set.pack(packer)
+        self.ledger_seq.pack(packer)
+        self.scp_value.pack(packer)
+
+    @classmethod
+    def unpack(cls, unpacker: Unpacker) -> StoredDebugTransactionSet:
+        tx_set = StoredTransactionSet.unpack(unpacker)
+        ledger_seq = Uint32.unpack(unpacker)
+        scp_value = StellarValue.unpack(unpacker)
+        return cls(
+            tx_set=tx_set,
+            ledger_seq=ledger_seq,
+            scp_value=scp_value,
+        )
+
+    def to_xdr_bytes(self) -> bytes:
+        packer = Packer()
+        self.pack(packer)
+        return packer.get_buffer()
+
+    @classmethod
+    def from_xdr_bytes(cls, xdr: bytes) -> StoredDebugTransactionSet:
+        unpacker = Unpacker(xdr)
+        return cls.unpack(unpacker)
+
+    def to_xdr(self) -> str:
+        xdr_bytes = self.to_xdr_bytes()
+        return base64.b64encode(xdr_bytes).decode()
+
+    @classmethod
+    def from_xdr(cls, xdr: str) -> StoredDebugTransactionSet:
+        xdr_bytes = base64.b64decode(xdr.encode())
+        return cls.from_xdr_bytes(xdr_bytes)
+
+    def __hash__(self):
+        return hash(
+            (
+                self.tx_set,
+                self.ledger_seq,
+                self.scp_value,
+            )
+        )
+
+    def __eq__(self, other: object):
+        if not isinstance(other, self.__class__):
+            return NotImplemented
+        return (
+            self.tx_set == other.tx_set
+            and self.ledger_seq == other.ledger_seq
+            and self.scp_value == other.scp_value
+        )
+
+    def __str__(self):
+        out = [
+            f"tx_set={self.tx_set}",
+            f"ledger_seq={self.ledger_seq}",
+            f"scp_value={self.scp_value}",
+        ]
+        return f"<StoredDebugTransactionSet [{', '.join(out)}]>"
diff --git a/stellar_sdk/xdr/expiration_entry.py b/stellar_sdk/xdr/ttl_entry.py
similarity index 65%
rename from stellar_sdk/xdr/expiration_entry.py
rename to stellar_sdk/xdr/ttl_entry.py
index ee4c3a85..1cbaf44a 100644
--- a/stellar_sdk/xdr/expiration_entry.py
+++ b/stellar_sdk/xdr/ttl_entry.py
@@ -9,39 +9,39 @@
 from .hash import Hash
 from .uint32 import Uint32
 
-__all__ = ["ExpirationEntry"]
+__all__ = ["TTLEntry"]
 
 
-class ExpirationEntry:
+class TTLEntry:
     """
     XDR Source Code::
 
-        struct ExpirationEntry {
-            // Hash of the LedgerKey that is associated with this ExpirationEntry
+        struct TTLEntry {
+            // Hash of the LedgerKey that is associated with this TTLEntry
             Hash keyHash;
-            uint32 expirationLedgerSeq;
+            uint32 liveUntilLedgerSeq;
         };
     """
 
     def __init__(
         self,
         key_hash: Hash,
-        expiration_ledger_seq: Uint32,
+        live_until_ledger_seq: Uint32,
     ) -> None:
         self.key_hash = key_hash
-        self.expiration_ledger_seq = expiration_ledger_seq
+        self.live_until_ledger_seq = live_until_ledger_seq
 
     def pack(self, packer: Packer) -> None:
         self.key_hash.pack(packer)
-        self.expiration_ledger_seq.pack(packer)
+        self.live_until_ledger_seq.pack(packer)
 
     @classmethod
-    def unpack(cls, unpacker: Unpacker) -> ExpirationEntry:
+    def unpack(cls, unpacker: Unpacker) -> TTLEntry:
         key_hash = Hash.unpack(unpacker)
-        expiration_ledger_seq = Uint32.unpack(unpacker)
+        live_until_ledger_seq = Uint32.unpack(unpacker)
         return cls(
             key_hash=key_hash,
-            expiration_ledger_seq=expiration_ledger_seq,
+            live_until_ledger_seq=live_until_ledger_seq,
         )
 
     def to_xdr_bytes(self) -> bytes:
@@ -50,7 +50,7 @@ def to_xdr_bytes(self) -> bytes:
         return packer.get_buffer()
 
     @classmethod
-    def from_xdr_bytes(cls, xdr: bytes) -> ExpirationEntry:
+    def from_xdr_bytes(cls, xdr: bytes) -> TTLEntry:
         unpacker = Unpacker(xdr)
         return cls.unpack(unpacker)
 
@@ -59,7 +59,7 @@ def to_xdr(self) -> str:
         return base64.b64encode(xdr_bytes).decode()
 
     @classmethod
-    def from_xdr(cls, xdr: str) -> ExpirationEntry:
+    def from_xdr(cls, xdr: str) -> TTLEntry:
         xdr_bytes = base64.b64decode(xdr.encode())
         return cls.from_xdr_bytes(xdr_bytes)
 
@@ -67,7 +67,7 @@ def __hash__(self):
         return hash(
             (
                 self.key_hash,
-                self.expiration_ledger_seq,
+                self.live_until_ledger_seq,
             )
         )
 
@@ -76,12 +76,12 @@ def __eq__(self, other: object):
             return NotImplemented
         return (
             self.key_hash == other.key_hash
-            and self.expiration_ledger_seq == other.expiration_ledger_seq
+            and self.live_until_ledger_seq == other.live_until_ledger_seq
         )
 
     def __str__(self):
         out = [
             f"key_hash={self.key_hash}",
-            f"expiration_ledger_seq={self.expiration_ledger_seq}",
+            f"live_until_ledger_seq={self.live_until_ledger_seq}",
         ]
-        return f"<ExpirationEntry [{', '.join(out)}]>"
+        return f"<TTLEntry [{', '.join(out)}]>"
diff --git a/xdr/Stellar-contract-config-setting.x b/xdr/Stellar-contract-config-setting.x
index 9512f0c4..b187a18c 100644
--- a/xdr/Stellar-contract-config-setting.x
+++ b/xdr/Stellar-contract-config-setting.x
@@ -92,64 +92,54 @@ struct ConfigSettingContractBandwidthV0
 enum ContractCostType {
     // Cost of running 1 wasm instruction
     WasmInsnExec = 0,
-    // Cost of growing wasm linear memory by 1 page
-    WasmMemAlloc = 1,
-    // Cost of allocating a chuck of host memory (in bytes)
-    HostMemAlloc = 2,
-    // Cost of copying a chuck of bytes into a pre-allocated host memory
-    HostMemCpy = 3,
-    // Cost of comparing two slices of host memory
-    HostMemCmp = 4,
+    // Cost of allocating a slice of memory (in bytes)
+    MemAlloc = 1,
+    // Cost of copying a slice of bytes into a pre-allocated memory
+    MemCpy = 2,
+    // Cost of comparing two slices of memory
+    MemCmp = 3,
     // Cost of a host function dispatch, not including the actual work done by
     // the function nor the cost of VM invocation machinary
-    DispatchHostFunction = 5,
+    DispatchHostFunction = 4,
     // Cost of visiting a host object from the host object storage. Exists to 
     // make sure some baseline cost coverage, i.e. repeatly visiting objects
     // by the guest will always incur some charges.
-    VisitObject = 6,
+    VisitObject = 5,
     // Cost of serializing an xdr object to bytes
-    ValSer = 7,
+    ValSer = 6,
     // Cost of deserializing an xdr object from bytes
-    ValDeser = 8,
+    ValDeser = 7,
     // Cost of computing the sha256 hash from bytes
-    ComputeSha256Hash = 9,
+    ComputeSha256Hash = 8,
     // Cost of computing the ed25519 pubkey from bytes
-    ComputeEd25519PubKey = 10,
-    // Cost of accessing an entry in a Map.
-    MapEntry = 11,
-    // Cost of accessing an entry in a Vec
-    VecEntry = 12,
+    ComputeEd25519PubKey = 9,
     // Cost of verifying ed25519 signature of a payload.
-    VerifyEd25519Sig = 13,
-    // Cost of reading a slice of vm linear memory
-    VmMemRead = 14,
-    // Cost of writing to a slice of vm linear memory
-    VmMemWrite = 15,
+    VerifyEd25519Sig = 10,
     // Cost of instantiation a VM from wasm bytes code.
-    VmInstantiation = 16,
+    VmInstantiation = 11,
     // Cost of instantiation a VM from a cached state.
-    VmCachedInstantiation = 17,
+    VmCachedInstantiation = 12,
     // Cost of invoking a function on the VM. If the function is a host function,
     // additional cost will be covered by `DispatchHostFunction`.
-    InvokeVmFunction = 18,
+    InvokeVmFunction = 13,
     // Cost of computing a keccak256 hash from bytes.
-    ComputeKeccak256Hash = 19,
-    // Cost of computing an ECDSA secp256k1 pubkey from bytes.
-    ComputeEcdsaSecp256k1Key = 20,
+    ComputeKeccak256Hash = 14,
     // Cost of computing an ECDSA secp256k1 signature from bytes.
-    ComputeEcdsaSecp256k1Sig = 21,
+    ComputeEcdsaSecp256k1Sig = 15,
     // Cost of recovering an ECDSA secp256k1 key from a signature.
-    RecoverEcdsaSecp256k1Key = 22,
+    RecoverEcdsaSecp256k1Key = 16,
     // Cost of int256 addition (`+`) and subtraction (`-`) operations
-    Int256AddSub = 23,
+    Int256AddSub = 17,
     // Cost of int256 multiplication (`*`) operation
-    Int256Mul = 24,
+    Int256Mul = 18,
     // Cost of int256 division (`/`) operation
-    Int256Div = 25,
+    Int256Div = 19,
     // Cost of int256 power (`exp`) operation
-    Int256Pow = 26,
+    Int256Pow = 20,
     // Cost of int256 shift (`shl`, `shr`) operation
-    Int256Shift = 27
+    Int256Shift = 21,
+    // Cost of drawing random bytes using a ChaCha20 PRNG
+    ChaCha20DrawBytes = 22
 };
 
 struct ContractCostParamEntry {
@@ -160,17 +150,17 @@ struct ContractCostParamEntry {
     int64 linearTerm;
 };
 
-struct StateExpirationSettings {
-    uint32 maxEntryExpiration;
-    uint32 minTempEntryExpiration;
-    uint32 minPersistentEntryExpiration;
+struct StateArchivalSettings {
+    uint32 maxEntryTTL;
+    uint32 minTemporaryTTL;
+    uint32 minPersistentTTL;
 
     // rent_fee = wfee_rate_average / rent_rate_denominator_for_type
     int64 persistentRentRateDenominator;
     int64 tempRentRateDenominator;
 
-    // max number of entries that emit expiration meta in a single ledger
-    uint32 maxEntriesToExpire;
+    // max number of entries that emit archival meta in a single ledger
+    uint32 maxEntriesToArchive;
 
     // Number of snapshots to use when calculating average BucketList size
     uint32 bucketListSizeWindowSampleSize;
@@ -206,7 +196,7 @@ enum ConfigSettingID
     CONFIG_SETTING_CONTRACT_COST_PARAMS_MEMORY_BYTES = 7,
     CONFIG_SETTING_CONTRACT_DATA_KEY_SIZE_BYTES = 8,
     CONFIG_SETTING_CONTRACT_DATA_ENTRY_SIZE_BYTES = 9,
-    CONFIG_SETTING_STATE_EXPIRATION = 10,
+    CONFIG_SETTING_STATE_ARCHIVAL = 10,
     CONFIG_SETTING_CONTRACT_EXECUTION_LANES = 11,
     CONFIG_SETTING_BUCKETLIST_SIZE_WINDOW = 12,
     CONFIG_SETTING_EVICTION_ITERATOR = 13
@@ -234,8 +224,8 @@ case CONFIG_SETTING_CONTRACT_DATA_KEY_SIZE_BYTES:
     uint32 contractDataKeySizeBytes;
 case CONFIG_SETTING_CONTRACT_DATA_ENTRY_SIZE_BYTES:
     uint32 contractDataEntrySizeBytes;
-case CONFIG_SETTING_STATE_EXPIRATION:
-    StateExpirationSettings stateExpirationSettings;
+case CONFIG_SETTING_STATE_ARCHIVAL:
+    StateArchivalSettings stateArchivalSettings;
 case CONFIG_SETTING_CONTRACT_EXECUTION_LANES:
     ConfigSettingContractExecutionLanesV0 contractExecutionLanes;
 case CONFIG_SETTING_BUCKETLIST_SIZE_WINDOW:
diff --git a/xdr/Stellar-contract.x b/xdr/Stellar-contract.x
index 7c7469c7..51130056 100644
--- a/xdr/Stellar-contract.x
+++ b/xdr/Stellar-contract.x
@@ -165,14 +165,14 @@ struct Int256Parts {
 enum ContractExecutableType
 {
     CONTRACT_EXECUTABLE_WASM = 0,
-    CONTRACT_EXECUTABLE_TOKEN = 1
+    CONTRACT_EXECUTABLE_STELLAR_ASSET = 1
 };
 
 union ContractExecutable switch (ContractExecutableType type)
 {
 case CONTRACT_EXECUTABLE_WASM:
     Hash wasm_hash;
-case CONTRACT_EXECUTABLE_TOKEN:
+case CONTRACT_EXECUTABLE_STELLAR_ASSET:
     void;
 };
 
diff --git a/xdr/Stellar-internal.x b/xdr/Stellar-internal.x
index 73684db7..02f1b81e 100644
--- a/xdr/Stellar-internal.x
+++ b/xdr/Stellar-internal.x
@@ -17,6 +17,13 @@ case 1:
 	GeneralizedTransactionSet generalizedTxSet;
 };
 
+struct StoredDebugTransactionSet
+{
+	StoredTransactionSet txSet;
+	uint32 ledgerSeq;
+	StellarValue scpValue;
+};
+
 struct PersistedSCPStateV0
 {
 	SCPEnvelope scpEnvelopes<>;
diff --git a/xdr/Stellar-ledger-entries.x b/xdr/Stellar-ledger-entries.x
index f0664840..8a8784e2 100644
--- a/xdr/Stellar-ledger-entries.x
+++ b/xdr/Stellar-ledger-entries.x
@@ -101,7 +101,7 @@ enum LedgerEntryType
     CONTRACT_DATA = 6,
     CONTRACT_CODE = 7,
     CONFIG_SETTING = 8,
-    EXPIRATION = 9
+    TTL = 9
 };
 
 struct Signer
@@ -515,10 +515,10 @@ struct ContractCodeEntry {
     opaque code<>;
 };
 
-struct ExpirationEntry {
-    // Hash of the LedgerKey that is associated with this ExpirationEntry
+struct TTLEntry {
+    // Hash of the LedgerKey that is associated with this TTLEntry
     Hash keyHash;
-    uint32 expirationLedgerSeq;
+    uint32 liveUntilLedgerSeq;
 };
 
 struct LedgerEntryExtensionV1
@@ -557,8 +557,8 @@ struct LedgerEntry
         ContractCodeEntry contractCode;
     case CONFIG_SETTING:
         ConfigSettingEntry configSetting;
-    case EXPIRATION:
-        ExpirationEntry expiration;
+    case TTL:
+        TTLEntry ttl;
     }
     data;
 
@@ -630,12 +630,12 @@ case CONFIG_SETTING:
     {
         ConfigSettingID configSettingID;
     } configSetting;
-case EXPIRATION:
+case TTL:
     struct
     {
-        // Hash of the LedgerKey that is associated with this ExpirationEntry
+        // Hash of the LedgerKey that is associated with this TTLEntry
         Hash keyHash;
-    } expiration;
+    } ttl;
 };
 
 // list of all envelope types used in the application
diff --git a/xdr/Stellar-ledger.x b/xdr/Stellar-ledger.x
index a1bbac4b..b18a3a0d 100644
--- a/xdr/Stellar-ledger.x
+++ b/xdr/Stellar-ledger.x
@@ -486,26 +486,8 @@ struct LedgerCloseMetaV0
 
 struct LedgerCloseMetaV1
 {
-    LedgerHeaderHistoryEntry ledgerHeader;
-
-    GeneralizedTransactionSet txSet;
-
-    // NB: transactions are sorted in apply order here
-    // fees for all transactions are processed first
-    // followed by applying transactions
-    TransactionResultMeta txProcessing<>;
-
-    // upgrades are applied last
-    UpgradeEntryMeta upgradesProcessing<>;
-
-    // other misc information attached to the ledger close
-    SCPHistoryEntry scpInfo<>;
-};
-
-struct LedgerCloseMetaV2
-{
-    // We forgot to add an ExtensionPoint in v1 but at least
-    // we can add one now in v2.
+    // We forgot to add an ExtensionPoint in v0 but at least
+    // we can add one now in v1.
     ExtensionPoint ext;
 
     LedgerHeaderHistoryEntry ledgerHeader;
@@ -527,10 +509,10 @@ struct LedgerCloseMetaV2
     // systems calculating storage fees correctly.
     uint64 totalByteSizeOfBucketList;
 
-    // Expired temp keys that are being evicted at this ledger.
+    // Temp keys that are being evicted at this ledger.
     LedgerKey evictedTemporaryLedgerKeys<>;
 
-    // Expired restorable ledger entries that are being
+    // Archived restorable ledger entries that are being
     // evicted at this ledger.
     LedgerEntry evictedPersistentLedgerEntries<>;
 };
@@ -541,7 +523,5 @@ case 0:
     LedgerCloseMetaV0 v0;
 case 1:
     LedgerCloseMetaV1 v1;
-case 2:
-    LedgerCloseMetaV2 v2;
 };
 }
diff --git a/xdr/Stellar-transaction.x b/xdr/Stellar-transaction.x
index 366f3b03..cf1a0acd 100644
--- a/xdr/Stellar-transaction.x
+++ b/xdr/Stellar-transaction.x
@@ -63,7 +63,7 @@ enum OperationType
     LIQUIDITY_POOL_DEPOSIT = 22,
     LIQUIDITY_POOL_WITHDRAW = 23,
     INVOKE_HOST_FUNCTION = 24,
-    BUMP_FOOTPRINT_EXPIRATION = 25,
+    EXTEND_FOOTPRINT_TTL = 25,
     RESTORE_FOOTPRINT = 26
 };
 
@@ -585,19 +585,19 @@ struct InvokeHostFunctionOp
     SorobanAuthorizationEntry auth<>;
 };
 
-/* Bump the expiration ledger of the entries specified in the readOnly footprint
-   so they'll expire at least ledgersToExpire ledgers from lcl.
+/* Extend the TTL of the entries specified in the readOnly footprint
+   so they will live at least extendTo ledgers from lcl.
 
     Threshold: med
-    Result: BumpFootprintExpirationResult
+    Result: ExtendFootprintTTLResult
 */
-struct BumpFootprintExpirationOp
+struct ExtendFootprintTTLOp
 {
     ExtensionPoint ext;
-    uint32 ledgersToExpire;
+    uint32 extendTo;
 };
 
-/* Restore the expired or evicted entries specified in the readWrite footprint.
+/* Restore the archived entries specified in the readWrite footprint.
 
     Threshold: med
     Result: RestoreFootprintOp
@@ -667,8 +667,8 @@ struct Operation
         LiquidityPoolWithdrawOp liquidityPoolWithdrawOp;
     case INVOKE_HOST_FUNCTION:
         InvokeHostFunctionOp invokeHostFunctionOp;
-    case BUMP_FOOTPRINT_EXPIRATION:
-        BumpFootprintExpirationOp bumpFootprintExpirationOp;
+    case EXTEND_FOOTPRINT_TTL:
+        ExtendFootprintTTLOp extendFootprintTTLOp;
     case RESTORE_FOOTPRINT:
         RestoreFootprintOp restoreFootprintOp;
     }
@@ -821,8 +821,16 @@ struct SorobanTransactionData
 {
     ExtensionPoint ext;
     SorobanResources resources;
-    // Portion of transaction `fee` allocated to refundable fees.
-    int64 refundableFee;
+    // Amount of the transaction `fee` allocated to the Soroban resource fees.
+    // The fraction of `resourceFee` corresponding to `resources` specified 
+    // above is *not* refundable (i.e. fees for instructions, ledger I/O), as
+    // well as fees for the transaction size.
+    // The remaining part of the fee is refundable and the charged value is
+    // based on the actual consumption of refundable resources (events, ledger
+    // rent bumps).
+    // The `inclusionFee` used for prioritization of the transaction is defined
+    // as `tx.fee - resourceFee`.
+    int64 resourceFee;
 };
 
 // TransactionV0 is a transaction with the AccountID discriminant stripped off,
@@ -1789,7 +1797,7 @@ enum InvokeHostFunctionResultCode
     INVOKE_HOST_FUNCTION_MALFORMED = -1,
     INVOKE_HOST_FUNCTION_TRAPPED = -2,
     INVOKE_HOST_FUNCTION_RESOURCE_LIMIT_EXCEEDED = -3,
-    INVOKE_HOST_FUNCTION_ENTRY_EXPIRED = -4,
+    INVOKE_HOST_FUNCTION_ENTRY_ARCHIVED = -4,
     INVOKE_HOST_FUNCTION_INSUFFICIENT_REFUNDABLE_FEE = -5
 };
 
@@ -1800,29 +1808,29 @@ case INVOKE_HOST_FUNCTION_SUCCESS:
 case INVOKE_HOST_FUNCTION_MALFORMED:
 case INVOKE_HOST_FUNCTION_TRAPPED:
 case INVOKE_HOST_FUNCTION_RESOURCE_LIMIT_EXCEEDED:
-case INVOKE_HOST_FUNCTION_ENTRY_EXPIRED:
+case INVOKE_HOST_FUNCTION_ENTRY_ARCHIVED:
 case INVOKE_HOST_FUNCTION_INSUFFICIENT_REFUNDABLE_FEE:
     void;
 };
 
-enum BumpFootprintExpirationResultCode
+enum ExtendFootprintTTLResultCode
 {
     // codes considered as "success" for the operation
-    BUMP_FOOTPRINT_EXPIRATION_SUCCESS = 0,
+    EXTEND_FOOTPRINT_TTL_SUCCESS = 0,
 
     // codes considered as "failure" for the operation
-    BUMP_FOOTPRINT_EXPIRATION_MALFORMED = -1,
-    BUMP_FOOTPRINT_EXPIRATION_RESOURCE_LIMIT_EXCEEDED = -2,
-    BUMP_FOOTPRINT_EXPIRATION_INSUFFICIENT_REFUNDABLE_FEE = -3
+    EXTEND_FOOTPRINT_TTL_MALFORMED = -1,
+    EXTEND_FOOTPRINT_TTL_RESOURCE_LIMIT_EXCEEDED = -2,
+    EXTEND_FOOTPRINT_TTL_INSUFFICIENT_REFUNDABLE_FEE = -3
 };
 
-union BumpFootprintExpirationResult switch (BumpFootprintExpirationResultCode code)
+union ExtendFootprintTTLResult switch (ExtendFootprintTTLResultCode code)
 {
-case BUMP_FOOTPRINT_EXPIRATION_SUCCESS:
+case EXTEND_FOOTPRINT_TTL_SUCCESS:
     void;
-case BUMP_FOOTPRINT_EXPIRATION_MALFORMED:
-case BUMP_FOOTPRINT_EXPIRATION_RESOURCE_LIMIT_EXCEEDED:
-case BUMP_FOOTPRINT_EXPIRATION_INSUFFICIENT_REFUNDABLE_FEE:
+case EXTEND_FOOTPRINT_TTL_MALFORMED:
+case EXTEND_FOOTPRINT_TTL_RESOURCE_LIMIT_EXCEEDED:
+case EXTEND_FOOTPRINT_TTL_INSUFFICIENT_REFUNDABLE_FEE:
     void;
 };
 
@@ -1915,8 +1923,8 @@ case opINNER:
         LiquidityPoolWithdrawResult liquidityPoolWithdrawResult;
     case INVOKE_HOST_FUNCTION:
         InvokeHostFunctionResult invokeHostFunctionResult;
-    case BUMP_FOOTPRINT_EXPIRATION:
-        BumpFootprintExpirationResult bumpFootprintExpirationResult;
+    case EXTEND_FOOTPRINT_TTL:
+        ExtendFootprintTTLResult extendFootprintTTLResult;
     case RESTORE_FOOTPRINT:
         RestoreFootprintResult restoreFootprintResult;
     }


Test patch:
diff --git a/tests/operation/test_bump_footprint_expiration.py b/tests/operation/test_extend_footprint_ttl.py
similarity index 74%
rename from tests/operation/test_bump_footprint_expiration.py
rename to tests/operation/test_extend_footprint_ttl.py
index c302e8c9..f59ab768 100644
--- a/tests/operation/test_bump_footprint_expiration.py
+++ b/tests/operation/test_extend_footprint_ttl.py
@@ -3,14 +3,14 @@
 import pytest
 
 from stellar_sdk import Operation
-from stellar_sdk.operation import BumpFootprintExpiration
+from stellar_sdk.operation import ExtendFootprintTTL
 
 from . import *
 
 
-class TestBumpFootprintExpiration:
+class TestExtendFootprintTTL:
     @pytest.mark.parametrize(
-        "ledgers_to_expire, source, xdr",
+        "extend_to, source, xdr",
         [
             pytest.param(
                 1234567890, None, "AAAAAAAAABkAAAAASZYC0g==", id="without_source"
@@ -37,18 +37,18 @@ class TestBumpFootprintExpiration:
     )
     def test_xdr(
         self,
-        ledgers_to_expire: int,
+        extend_to: int,
         source: Optional[Union[MuxedAccount, str]],
         xdr: str,
     ):
-        op = BumpFootprintExpiration(ledgers_to_expire, source)
-        assert op.ledgers_to_expire == ledgers_to_expire
+        op = ExtendFootprintTTL(extend_to, source)
+        assert op.extend_to == extend_to
         check_source(op.source, source)
         xdr_object = op.to_xdr_object()
         assert xdr_object.to_xdr() == xdr
         assert Operation.from_xdr_object(xdr_object) == op
 
-    @pytest.mark.parametrize("ledgers_to_expire", [-1, 2**32])
-    def test_invalid_ledgers_to_expire(self, ledgers_to_expire):
+    @pytest.mark.parametrize("extend_to", [-1, 2**32])
+    def test_invalid_extend_to(self, extend_to):
         with pytest.raises(ValueError):
-            BumpFootprintExpiration(ledgers_to_expire)
+            ExtendFootprintTTL(extend_to)
diff --git a/tests/test_soroban_data_builder.py b/tests/test_soroban_data_builder.py
index 6a944a95..d8c31e91 100644
--- a/tests/test_soroban_data_builder.py
+++ b/tests/test_soroban_data_builder.py
@@ -6,7 +6,7 @@
 class TestSorobanDataBuilder:
     empty_instance = stellar_xdr.SorobanTransactionData(
         ext=stellar_xdr.ExtensionPoint(0),
-        refundable_fee=stellar_xdr.Int64(0),
+        resource_fee=stellar_xdr.Int64(0),
         resources=stellar_xdr.SorobanResources(
             footprint=stellar_xdr.LedgerFootprint(
                 read_only=[],
@@ -26,7 +26,7 @@ def test_init(self):
     def test_from_xdr_object(self):
         xdr_obj = stellar_xdr.SorobanTransactionData(
             ext=stellar_xdr.ExtensionPoint(0),
-            refundable_fee=stellar_xdr.Int64(0),
+            resource_fee=stellar_xdr.Int64(0),
             resources=stellar_xdr.SorobanResources(
                 footprint=stellar_xdr.LedgerFootprint(
                     read_only=[],
@@ -45,7 +45,7 @@ def test_from_xdr_object(self):
     def test_from_xdr_base64(self):
         xdr_obj = stellar_xdr.SorobanTransactionData(
             ext=stellar_xdr.ExtensionPoint(0),
-            refundable_fee=stellar_xdr.Int64(0),
+            resource_fee=stellar_xdr.Int64(0),
             resources=stellar_xdr.SorobanResources(
                 footprint=stellar_xdr.LedgerFootprint(
                     read_only=[],
@@ -61,16 +61,16 @@ def test_from_xdr_base64(self):
         assert builder.build() == xdr_obj
         assert id(builder._data) != id(xdr_obj)
 
-    def test_set_refundable_fee(self):
+    def test_set_resource_fee(self):
         builder = SorobanDataBuilder()
-        builder.set_refundable_fee(100)
-        assert builder.build().refundable_fee.int64 == 100
+        builder.set_resource_fee(100)
+        assert builder.build().resource_fee.int64 == 100
 
     def test_set_resources(self):
         data = SorobanDataBuilder().set_resources(1, 2, 3).build()
         assert data == stellar_xdr.SorobanTransactionData(
             ext=stellar_xdr.ExtensionPoint(0),
-            refundable_fee=stellar_xdr.Int64(0),
+            resource_fee=stellar_xdr.Int64(0),
             resources=stellar_xdr.SorobanResources(
                 footprint=stellar_xdr.LedgerFootprint(
                     read_only=[],
@@ -94,7 +94,7 @@ def test_set_read_only(self):
         data = SorobanDataBuilder().set_read_only([ledger_key]).build()
         assert data == stellar_xdr.SorobanTransactionData(
             ext=stellar_xdr.ExtensionPoint(0),
-            refundable_fee=stellar_xdr.Int64(0),
+            resource_fee=stellar_xdr.Int64(0),
             resources=stellar_xdr.SorobanResources(
                 footprint=stellar_xdr.LedgerFootprint(
                     read_only=[ledger_key],
@@ -118,7 +118,7 @@ def test_set_read_write(self):
         data = SorobanDataBuilder().set_read_write([ledger_key]).build()
         assert data == stellar_xdr.SorobanTransactionData(
             ext=stellar_xdr.ExtensionPoint(0),
-            refundable_fee=stellar_xdr.Int64(0),
+            resource_fee=stellar_xdr.Int64(0),
             resources=stellar_xdr.SorobanResources(
                 footprint=stellar_xdr.LedgerFootprint(
                     read_only=[],
diff --git a/tests/test_soroban_server_async.py b/tests/test_soroban_server_async.py
index bf2e415d..bc506645 100644
--- a/tests/test_soroban_server_async.py
+++ b/tests/test_soroban_server_async.py
@@ -27,6 +27,7 @@ async def test_load_account(self):
                     "key": "AAAAAAAAAADBPp7TMinJylnn+6dQXJACNc15LF+aJ2Py1BaR4P10JA==",
                     "xdr": "AAAAAAAAAADBPp7TMinJylnn+6dQXJACNc15LF+aJ2Py1BaR4P10JAAAABdIcDhpAAADHAAAAAwAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAADAAAAAAABfI8AAAAAZMK3qQ==",
                     "lastModifiedLedgerSeq": "97423",
+                    "liveUntilLedgerSeq": "97999",
                 }
             ],
             "latestLedger": "108023",
@@ -130,6 +131,7 @@ async def test_get_contract_data(self):
                     "key": "AAAABgAAAAFbihjlAiytnchoNOQZzgshTg9sfCxcBnTGO2xwtRu0awAAABQAAAAB",
                     "xdr": "AAAABgAAAAAAAAABW4oY5QIsrZ3IaDTkGc4LIU4PbHwsXAZ0xjtscLUbtGsAAAAUAAAAAQAAABMAAAAAJEKO7o0EZBi/DpFId2xLI1yGppi+ADrnh9IIE/CfJEcAAAAA",
                     "lastModifiedLedgerSeq": "11715",
+                    "liveUntilLedgerSeq": "12333",
                 }
             ],
             "latestLedger": "12551",
@@ -192,11 +194,13 @@ async def test_get_ledger_entries(self):
                     "key": "AAAAAAAAAACynni6I2ACEzWuORVM1b2y0k1ZDni0W6JlC/Ad/mfCSg==",
                     "xdr": "AAAAAAAAAACynni6I2ACEzWuORVM1b2y0k1ZDni0W6JlC/Ad/mfCSgAAABdIdugAAAAAnwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAA",
                     "lastModifiedLedgerSeq": "159",
+                    "liveUntilLedgerSeq": "288",
                 },
                 {
                     "key": "AAAAAAAAAADBPp7TMinJylnn+6dQXJACNc15LF+aJ2Py1BaR4P10JA==",
                     "xdr": "AAAAAAAAAADBPp7TMinJylnn+6dQXJACNc15LF+aJ2Py1BaR4P10JAAAABdIcmH6AAAAoQAAAAgAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAADAAAAAAAAHAkAAAAAZMPQ0g==",
                     "lastModifiedLedgerSeq": "7177",
+                    "liveUntilLedgerSeq": "9872",
                 },
             ],
             "latestLedger": "7943",
@@ -286,7 +290,7 @@ async def test_get_events(self):
                         "AAAADwAAAAdDT1VOVEVSAA==",
                         "AAAADwAAAAlpbmNyZW1lbnQAAAA=",
                     ],
-                    "value": {"xdr": "AAAAAwAAAAE="},
+                    "value": "AAAAAwAAAAE=",
                     "inSuccessfulContractCall": True,
                 },
                 {
@@ -300,7 +304,7 @@ async def test_get_events(self):
                         "AAAADwAAAAdDT1VOVEVSAA==",
                         "AAAADwAAAAlpbmNyZW1lbnQAAAA=",
                     ],
-                    "value": {"xdr": "AAAAAwAAAAI="},
+                    "value": "AAAAAwAAAAI=",
                     "inSuccessfulContractCall": True,
                 },
             ],
@@ -485,7 +489,7 @@ async def test_prepare_transaction_with_soroban_data(self):
 
         soroban_data = stellar_xdr.SorobanTransactionData(
             ext=stellar_xdr.ExtensionPoint(0),
-            refundable_fee=stellar_xdr.Int64(100),
+            resource_fee=stellar_xdr.Int64(100),
             resources=stellar_xdr.SorobanResources(
                 footprint=stellar_xdr.LedgerFootprint(
                     read_only=[],
diff --git a/tests/test_soroban_server_sync.py b/tests/test_soroban_server_sync.py
index 6b3276ee..59d9fb0c 100644
--- a/tests/test_soroban_server_sync.py
+++ b/tests/test_soroban_server_sync.py
@@ -25,6 +25,7 @@ def test_load_account(self):
                     "key": "AAAAAAAAAADBPp7TMinJylnn+6dQXJACNc15LF+aJ2Py1BaR4P10JA==",
                     "xdr": "AAAAAAAAAADBPp7TMinJylnn+6dQXJACNc15LF+aJ2Py1BaR4P10JAAAABdIcDhpAAADHAAAAAwAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAADAAAAAAABfI8AAAAAZMK3qQ==",
                     "lastModifiedLedgerSeq": "97423",
+                    "liveUntilLedgerSeq": "97999",
                 }
             ],
             "latestLedger": "108023",
@@ -125,6 +126,7 @@ def test_get_contract_data(self):
                     "key": "AAAABgAAAAFbihjlAiytnchoNOQZzgshTg9sfCxcBnTGO2xwtRu0awAAABQAAAAB",
                     "xdr": "AAAABgAAAAAAAAABW4oY5QIsrZ3IaDTkGc4LIU4PbHwsXAZ0xjtscLUbtGsAAAAUAAAAAQAAABMAAAAAJEKO7o0EZBi/DpFId2xLI1yGppi+ADrnh9IIE/CfJEcAAAAA",
                     "lastModifiedLedgerSeq": "11715",
+                    "liveUntilLedgerSeq": "17882",
                 }
             ],
             "latestLedger": "12551",
@@ -186,11 +188,13 @@ def test_get_ledger_entries(self):
                     "key": "AAAAAAAAAACynni6I2ACEzWuORVM1b2y0k1ZDni0W6JlC/Ad/mfCSg==",
                     "xdr": "AAAAAAAAAACynni6I2ACEzWuORVM1b2y0k1ZDni0W6JlC/Ad/mfCSgAAABdIdugAAAAAnwAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAA",
                     "lastModifiedLedgerSeq": "159",
+                    "liveUntilLedgerSeq": "288",
                 },
                 {
                     "key": "AAAAAAAAAADBPp7TMinJylnn+6dQXJACNc15LF+aJ2Py1BaR4P10JA==",
                     "xdr": "AAAAAAAAAADBPp7TMinJylnn+6dQXJACNc15LF+aJ2Py1BaR4P10JAAAABdIcmH6AAAAoQAAAAgAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAADAAAAAAAAHAkAAAAAZMPQ0g==",
                     "lastModifiedLedgerSeq": "7177",
+                    "liveUntilLedgerSeq": "8392",
                 },
             ],
             "latestLedger": "7943",
@@ -278,7 +282,7 @@ def test_get_events(self):
                         "AAAADwAAAAdDT1VOVEVSAA==",
                         "AAAADwAAAAlpbmNyZW1lbnQAAAA=",
                     ],
-                    "value": {"xdr": "AAAAAwAAAAE="},
+                    "value": "AAAAAwAAAAE=",
                     "inSuccessfulContractCall": True,
                 },
                 {
@@ -292,7 +296,7 @@ def test_get_events(self):
                         "AAAADwAAAAdDT1VOVEVSAA==",
                         "AAAADwAAAAlpbmNyZW1lbnQAAAA=",
                     ],
-                    "value": {"xdr": "AAAAAwAAAAI="},
+                    "value": "AAAAAwAAAAI=",
                     "inSuccessfulContractCall": True,
                 },
             ],
@@ -473,7 +477,7 @@ def test_prepare_transaction_with_soroban_data(self):
 
         soroban_data = stellar_xdr.SorobanTransactionData(
             ext=stellar_xdr.ExtensionPoint(0),
-            refundable_fee=stellar_xdr.Int64(100),
+            resource_fee=stellar_xdr.Int64(100),
             resources=stellar_xdr.SorobanResources(
                 footprint=stellar_xdr.LedgerFootprint(
                     read_only=[],
diff --git a/tests/test_transaction_builder.py b/tests/test_transaction_builder.py
index 016970fc..34759500 100644
--- a/tests/test_transaction_builder.py
+++ b/tests/test_transaction_builder.py
@@ -10,8 +10,8 @@
     Address,
     Asset,
     AuthorizationFlag,
-    BumpFootprintExpiration,
     Claimant,
+    ExtendFootprintTTL,
     FeeBumpTransactionEnvelope,
     InvokeHostFunction,
     Keypair,
@@ -827,9 +827,9 @@ def test_append_create_contract_op(self):
         assert tx.build().transaction.operations[0] == expected_op
         check_from_xdr(tx)
 
-    def test_append_create_token_contract_from_asset_op(self):
+    def test_append_create_stellar_asset_contract_from_asset_op(self):
         asset = Asset.native()
-        tx = get_tx_builder().append_create_token_contract_from_asset_op(
+        tx = get_tx_builder().append_create_stellar_asset_contract_from_asset_op(
             asset, kp2.public_key
         )
         asset_param = asset.to_xdr_object()
@@ -840,7 +840,7 @@ def test_append_create_token_contract_from_asset_op(self):
                 from_asset=asset_param,
             ),
             executable=stellar_xdr.ContractExecutable(
-                stellar_xdr.ContractExecutableType.CONTRACT_EXECUTABLE_TOKEN,
+                stellar_xdr.ContractExecutableType.CONTRACT_EXECUTABLE_STELLAR_ASSET,
             ),
         )
 
@@ -854,7 +854,7 @@ def test_append_create_token_contract_from_asset_op(self):
         assert tx.build().transaction.operations[0] == expected_op
         check_from_xdr(tx)
 
-    def test_append_create_token_contract_from_address_op(self):
+    def test_append_create_stellar_asset_contract_from_address_op(self):
         auth = [
             stellar_xdr.SorobanAuthorizationEntry(
                 credentials=stellar_xdr.SorobanCredentials(
@@ -880,7 +880,7 @@ def test_append_create_token_contract_from_address_op(self):
         ]
         salt = b"V2\x1c\x18\xecF\xea-\x83\x90\xdc\x96\xe0\xdd\x8e\x9a}\x96\x88\xc7\x13\xaa\xa5\xef\xc5az\xa3\xf8\xb0F_"
 
-        tx = get_tx_builder().append_create_token_contract_from_address_op(
+        tx = get_tx_builder().append_create_stellar_asset_contract_from_address_op(
             kp2.public_key, salt, auth, kp2.public_key
         )
         create_contract = stellar_xdr.CreateContractArgs(
@@ -892,7 +892,7 @@ def test_append_create_token_contract_from_address_op(self):
                 ),
             ),
             executable=stellar_xdr.ContractExecutable(
-                stellar_xdr.ContractExecutableType.CONTRACT_EXECUTABLE_TOKEN,
+                stellar_xdr.ContractExecutableType.CONTRACT_EXECUTABLE_STELLAR_ASSET,
             ),
         )
 
@@ -922,11 +922,11 @@ def test_append_bump_footprint_expiration_op(self):
         soroban_data = SorobanDataBuilder().set_read_only([ledger_key]).build()
         tx = (
             get_tx_builder()
-            .append_bump_footprint_expiration_op(10, kp2.public_key)
+            .append_extend_footprint_ttl_op(10, kp2.public_key)
             .set_soroban_data(soroban_data)
         )
 
-        expected_op = BumpFootprintExpiration(10, source=kp2.public_key)
+        expected_op = ExtendFootprintTTL(10, source=kp2.public_key)
         assert tx.build().transaction.operations[0] == expected_op
         assert tx.soroban_data == soroban_data
         check_from_xdr(tx)