Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ XDRS = xdr/Stellar-SCP.x \
xdr/Stellar-types.x

# Stellar XDR definitions repository commit hash
XDR_COMMIT = 0a621ec7811db000a60efae5b35f78dee3aa2533
XDR_COMMIT = cff714a5ebaaaf2dac343b3546c2df73f0b7a36e

# Command prefix for running Python tools with uv
UV_RUN_CMD = uv run --frozen --all-extras
Expand Down
20 changes: 20 additions & 0 deletions docs/en/api.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1402,6 +1402,10 @@ Duration
--------
.. autoclass:: stellar_sdk.xdr.duration.Duration

EncodedLedgerKey
----------------
.. autoclass:: stellar_sdk.xdr.encoded_ledger_key.EncodedLedgerKey

EncryptedBody
-------------
.. autoclass:: stellar_sdk.xdr.encrypted_body.EncryptedBody
Expand Down Expand Up @@ -1474,6 +1478,22 @@ FloodDemand
-----------
.. autoclass:: stellar_sdk.xdr.flood_demand.FloodDemand

FreezeBypassTxs
---------------
.. autoclass:: stellar_sdk.xdr.freeze_bypass_txs.FreezeBypassTxs

FreezeBypassTxsDelta
--------------------
.. autoclass:: stellar_sdk.xdr.freeze_bypass_txs_delta.FreezeBypassTxsDelta

FrozenLedgerKeys
----------------
.. autoclass:: stellar_sdk.xdr.frozen_ledger_keys.FrozenLedgerKeys

FrozenLedgerKeysDelta
---------------------
.. autoclass:: stellar_sdk.xdr.frozen_ledger_keys_delta.FrozenLedgerKeysDelta

GeneralizedTransactionSet
-------------------------
.. autoclass:: stellar_sdk.xdr.generalized_transaction_set.GeneralizedTransactionSet
Expand Down
5 changes: 5 additions & 0 deletions stellar_sdk/xdr/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@
from .diagnostic_event import *
from .dont_have import *
from .duration import *
from .encoded_ledger_key import *
from .encrypted_body import *
from .end_sponsoring_future_reserves_result import *
from .end_sponsoring_future_reserves_result_code import *
Expand All @@ -138,6 +139,10 @@
from .fee_bump_transaction_inner_tx import *
from .flood_advert import *
from .flood_demand import *
from .freeze_bypass_txs import *
from .freeze_bypass_txs_delta import *
from .frozen_ledger_keys import *
from .frozen_ledger_keys_delta import *
from .generalized_transaction_set import *
from .hash import *
from .hash_id_preimage import *
Expand Down
19 changes: 18 additions & 1 deletion stellar_sdk/xdr/claim_claimable_balance_result.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ class ClaimClaimableBalanceResult:
case CLAIM_CLAIMABLE_BALANCE_LINE_FULL:
case CLAIM_CLAIMABLE_BALANCE_NO_TRUST:
case CLAIM_CLAIMABLE_BALANCE_NOT_AUTHORIZED:
case CLAIM_CLAIMABLE_BALANCE_TRUSTLINE_FROZEN:
void;
};
"""
Expand Down Expand Up @@ -65,6 +66,11 @@ def pack(self, packer: Packer) -> None:
== ClaimClaimableBalanceResultCode.CLAIM_CLAIMABLE_BALANCE_NOT_AUTHORIZED
):
return
if (
self.code
== ClaimClaimableBalanceResultCode.CLAIM_CLAIMABLE_BALANCE_TRUSTLINE_FROZEN
):
return
raise ValueError("Invalid code.")

@classmethod
Expand Down Expand Up @@ -92,6 +98,11 @@ def unpack(
== ClaimClaimableBalanceResultCode.CLAIM_CLAIMABLE_BALANCE_NOT_AUTHORIZED
):
return cls(code=code)
if (
code
== ClaimClaimableBalanceResultCode.CLAIM_CLAIMABLE_BALANCE_TRUSTLINE_FROZEN
):
return cls(code=code)
raise ValueError("Invalid code.")

def to_xdr_bytes(self) -> bytes:
Expand Down Expand Up @@ -152,6 +163,11 @@ def to_json_dict(self):
== ClaimClaimableBalanceResultCode.CLAIM_CLAIMABLE_BALANCE_NOT_AUTHORIZED
):
return "not_authorized"
if (
self.code
== ClaimClaimableBalanceResultCode.CLAIM_CLAIMABLE_BALANCE_TRUSTLINE_FROZEN
):
return "trustline_frozen"
raise ValueError(f"Unknown code in ClaimClaimableBalanceResult: {self.code}")

@classmethod
Expand All @@ -163,9 +179,10 @@ def from_json_dict(cls, json_value: str) -> ClaimClaimableBalanceResult:
"line_full",
"no_trust",
"not_authorized",
"trustline_frozen",
):
raise ValueError(
f"Unexpected string '{json_value}' for ClaimClaimableBalanceResult, must be one of: success, does_not_exist, cannot_claim, line_full, no_trust, not_authorized"
f"Unexpected string '{json_value}' for ClaimClaimableBalanceResult, must be one of: success, does_not_exist, cannot_claim, line_full, no_trust, not_authorized, trustline_frozen"
)
code = ClaimClaimableBalanceResultCode.from_json_dict(json_value)
return cls(code=code)
Expand Down
6 changes: 5 additions & 1 deletion stellar_sdk/xdr/claim_claimable_balance_result_code.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
-3: "line_full",
-4: "no_trust",
-5: "not_authorized",
-6: "trustline_frozen",
}
_CLAIM_CLAIMABLE_BALANCE_RESULT_CODE_REVERSE_MAP = {
"success": 0,
Expand All @@ -23,6 +24,7 @@
"line_full": -3,
"no_trust": -4,
"not_authorized": -5,
"trustline_frozen": -6,
}
__all__ = ["ClaimClaimableBalanceResultCode"]

Expand All @@ -38,7 +40,8 @@ class ClaimClaimableBalanceResultCode(IntEnum):
CLAIM_CLAIMABLE_BALANCE_CANNOT_CLAIM = -2,
CLAIM_CLAIMABLE_BALANCE_LINE_FULL = -3,
CLAIM_CLAIMABLE_BALANCE_NO_TRUST = -4,
CLAIM_CLAIMABLE_BALANCE_NOT_AUTHORIZED = -5
CLAIM_CLAIMABLE_BALANCE_NOT_AUTHORIZED = -5,
CLAIM_CLAIMABLE_BALANCE_TRUSTLINE_FROZEN = -6
};
"""

Expand All @@ -48,6 +51,7 @@ class ClaimClaimableBalanceResultCode(IntEnum):
CLAIM_CLAIMABLE_BALANCE_LINE_FULL = -3
CLAIM_CLAIMABLE_BALANCE_NO_TRUST = -4
CLAIM_CLAIMABLE_BALANCE_NOT_AUTHORIZED = -5
CLAIM_CLAIMABLE_BALANCE_TRUSTLINE_FROZEN = -6

def pack(self, packer: Packer) -> None:
packer.pack_int(self.value)
Expand Down
142 changes: 142 additions & 0 deletions stellar_sdk/xdr/config_setting_entry.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@
from .config_setting_scp_timing import ConfigSettingSCPTiming
from .contract_cost_params import ContractCostParams
from .eviction_iterator import EvictionIterator
from .freeze_bypass_txs import FreezeBypassTxs
from .freeze_bypass_txs_delta import FreezeBypassTxsDelta
from .frozen_ledger_keys import FrozenLedgerKeys
from .frozen_ledger_keys_delta import FrozenLedgerKeysDelta
from .state_archival_settings import StateArchivalSettings
from .uint32 import Uint32
from .uint64 import Uint64
Expand Down Expand Up @@ -76,6 +80,14 @@ class ConfigSettingEntry:
ConfigSettingContractLedgerCostExtV0 contractLedgerCostExt;
case CONFIG_SETTING_SCP_TIMING:
ConfigSettingSCPTiming contractSCPTiming;
case CONFIG_SETTING_FROZEN_LEDGER_KEYS:
FrozenLedgerKeys frozenLedgerKeys;
case CONFIG_SETTING_FROZEN_LEDGER_KEYS_DELTA:
FrozenLedgerKeysDelta frozenLedgerKeysDelta;
case CONFIG_SETTING_FREEZE_BYPASS_TXS:
FreezeBypassTxs freezeBypassTxs;
case CONFIG_SETTING_FREEZE_BYPASS_TXS_DELTA:
FreezeBypassTxsDelta freezeBypassTxsDelta;
};
"""

Expand Down Expand Up @@ -105,6 +117,10 @@ def __init__(
] = None,
contract_ledger_cost_ext: Optional[ConfigSettingContractLedgerCostExtV0] = None,
contract_scp_timing: Optional[ConfigSettingSCPTiming] = None,
frozen_ledger_keys: Optional[FrozenLedgerKeys] = None,
frozen_ledger_keys_delta: Optional[FrozenLedgerKeysDelta] = None,
freeze_bypass_txs: Optional[FreezeBypassTxs] = None,
freeze_bypass_txs_delta: Optional[FreezeBypassTxsDelta] = None,
) -> None:
_expect_max_length = 4294967295
if (
Expand Down Expand Up @@ -132,6 +148,10 @@ def __init__(
self.contract_parallel_compute = contract_parallel_compute
self.contract_ledger_cost_ext = contract_ledger_cost_ext
self.contract_scp_timing = contract_scp_timing
self.frozen_ledger_keys = frozen_ledger_keys
self.frozen_ledger_keys_delta = frozen_ledger_keys_delta
self.freeze_bypass_txs = freeze_bypass_txs
self.freeze_bypass_txs_delta = freeze_bypass_txs_delta

def pack(self, packer: Packer) -> None:
self.config_setting_id.pack(packer)
Expand Down Expand Up @@ -260,6 +280,32 @@ def pack(self, packer: Packer) -> None:
raise ValueError("contract_scp_timing should not be None.")
self.contract_scp_timing.pack(packer)
return
if self.config_setting_id == ConfigSettingID.CONFIG_SETTING_FROZEN_LEDGER_KEYS:
if self.frozen_ledger_keys is None:
raise ValueError("frozen_ledger_keys should not be None.")
self.frozen_ledger_keys.pack(packer)
return
if (
self.config_setting_id
== ConfigSettingID.CONFIG_SETTING_FROZEN_LEDGER_KEYS_DELTA
):
if self.frozen_ledger_keys_delta is None:
raise ValueError("frozen_ledger_keys_delta should not be None.")
self.frozen_ledger_keys_delta.pack(packer)
return
if self.config_setting_id == ConfigSettingID.CONFIG_SETTING_FREEZE_BYPASS_TXS:
if self.freeze_bypass_txs is None:
raise ValueError("freeze_bypass_txs should not be None.")
self.freeze_bypass_txs.pack(packer)
return
if (
self.config_setting_id
== ConfigSettingID.CONFIG_SETTING_FREEZE_BYPASS_TXS_DELTA
):
if self.freeze_bypass_txs_delta is None:
raise ValueError("freeze_bypass_txs_delta should not be None.")
self.freeze_bypass_txs_delta.pack(packer)
return
raise ValueError("Invalid config_setting_id.")

@classmethod
Expand Down Expand Up @@ -426,6 +472,33 @@ def unpack(
config_setting_id=config_setting_id,
contract_scp_timing=contract_scp_timing,
)
if config_setting_id == ConfigSettingID.CONFIG_SETTING_FROZEN_LEDGER_KEYS:
frozen_ledger_keys = FrozenLedgerKeys.unpack(unpacker, depth_limit - 1)
return cls(
config_setting_id=config_setting_id,
frozen_ledger_keys=frozen_ledger_keys,
)
if config_setting_id == ConfigSettingID.CONFIG_SETTING_FROZEN_LEDGER_KEYS_DELTA:
frozen_ledger_keys_delta = FrozenLedgerKeysDelta.unpack(
unpacker, depth_limit - 1
)
return cls(
config_setting_id=config_setting_id,
frozen_ledger_keys_delta=frozen_ledger_keys_delta,
)
if config_setting_id == ConfigSettingID.CONFIG_SETTING_FREEZE_BYPASS_TXS:
freeze_bypass_txs = FreezeBypassTxs.unpack(unpacker, depth_limit - 1)
return cls(
config_setting_id=config_setting_id, freeze_bypass_txs=freeze_bypass_txs
)
if config_setting_id == ConfigSettingID.CONFIG_SETTING_FREEZE_BYPASS_TXS_DELTA:
freeze_bypass_txs_delta = FreezeBypassTxsDelta.unpack(
unpacker, depth_limit - 1
)
return cls(
config_setting_id=config_setting_id,
freeze_bypass_txs_delta=freeze_bypass_txs_delta,
)
raise ValueError("Invalid config_setting_id.")

def to_xdr_bytes(self) -> bytes:
Expand Down Expand Up @@ -568,6 +641,28 @@ def to_json_dict(self):
if self.config_setting_id == ConfigSettingID.CONFIG_SETTING_SCP_TIMING:
assert self.contract_scp_timing is not None
return {"scp_timing": self.contract_scp_timing.to_json_dict()}
if self.config_setting_id == ConfigSettingID.CONFIG_SETTING_FROZEN_LEDGER_KEYS:
assert self.frozen_ledger_keys is not None
return {"frozen_ledger_keys": self.frozen_ledger_keys.to_json_dict()}
if (
self.config_setting_id
== ConfigSettingID.CONFIG_SETTING_FROZEN_LEDGER_KEYS_DELTA
):
assert self.frozen_ledger_keys_delta is not None
return {
"frozen_ledger_keys_delta": self.frozen_ledger_keys_delta.to_json_dict()
}
if self.config_setting_id == ConfigSettingID.CONFIG_SETTING_FREEZE_BYPASS_TXS:
assert self.freeze_bypass_txs is not None
return {"freeze_bypass_txs": self.freeze_bypass_txs.to_json_dict()}
if (
self.config_setting_id
== ConfigSettingID.CONFIG_SETTING_FREEZE_BYPASS_TXS_DELTA
):
assert self.freeze_bypass_txs_delta is not None
return {
"freeze_bypass_txs_delta": self.freeze_bypass_txs_delta.to_json_dict()
}
raise ValueError(
f"Unknown config_setting_id in ConfigSettingEntry: {self.config_setting_id}"
)
Expand Down Expand Up @@ -722,6 +817,37 @@ def from_json_dict(cls, json_value: dict) -> ConfigSettingEntry:
config_setting_id=config_setting_id,
contract_scp_timing=contract_scp_timing,
)
if key == "frozen_ledger_keys":
frozen_ledger_keys = FrozenLedgerKeys.from_json_dict(
json_value["frozen_ledger_keys"]
)
return cls(
config_setting_id=config_setting_id,
frozen_ledger_keys=frozen_ledger_keys,
)
if key == "frozen_ledger_keys_delta":
frozen_ledger_keys_delta = FrozenLedgerKeysDelta.from_json_dict(
json_value["frozen_ledger_keys_delta"]
)
return cls(
config_setting_id=config_setting_id,
frozen_ledger_keys_delta=frozen_ledger_keys_delta,
)
if key == "freeze_bypass_txs":
freeze_bypass_txs = FreezeBypassTxs.from_json_dict(
json_value["freeze_bypass_txs"]
)
return cls(
config_setting_id=config_setting_id, freeze_bypass_txs=freeze_bypass_txs
)
if key == "freeze_bypass_txs_delta":
freeze_bypass_txs_delta = FreezeBypassTxsDelta.from_json_dict(
json_value["freeze_bypass_txs_delta"]
)
return cls(
config_setting_id=config_setting_id,
freeze_bypass_txs_delta=freeze_bypass_txs_delta,
)
raise ValueError(f"Unknown key '{key}' for ConfigSettingEntry")

def __hash__(self):
Expand All @@ -745,6 +871,10 @@ def __hash__(self):
self.contract_parallel_compute,
self.contract_ledger_cost_ext,
self.contract_scp_timing,
self.frozen_ledger_keys,
self.frozen_ledger_keys_delta,
self.freeze_bypass_txs,
self.freeze_bypass_txs_delta,
)
)

Expand Down Expand Up @@ -774,6 +904,10 @@ def __eq__(self, other: object):
and self.contract_parallel_compute == other.contract_parallel_compute
and self.contract_ledger_cost_ext == other.contract_ledger_cost_ext
and self.contract_scp_timing == other.contract_scp_timing
and self.frozen_ledger_keys == other.frozen_ledger_keys
and self.frozen_ledger_keys_delta == other.frozen_ledger_keys_delta
and self.freeze_bypass_txs == other.freeze_bypass_txs
and self.freeze_bypass_txs_delta == other.freeze_bypass_txs_delta
)

def __repr__(self):
Expand Down Expand Up @@ -823,4 +957,12 @@ def __repr__(self):
out.append(f"contract_ledger_cost_ext={self.contract_ledger_cost_ext}")
if self.contract_scp_timing is not None:
out.append(f"contract_scp_timing={self.contract_scp_timing}")
if self.frozen_ledger_keys is not None:
out.append(f"frozen_ledger_keys={self.frozen_ledger_keys}")
if self.frozen_ledger_keys_delta is not None:
out.append(f"frozen_ledger_keys_delta={self.frozen_ledger_keys_delta}")
if self.freeze_bypass_txs is not None:
out.append(f"freeze_bypass_txs={self.freeze_bypass_txs}")
if self.freeze_bypass_txs_delta is not None:
out.append(f"freeze_bypass_txs_delta={self.freeze_bypass_txs_delta}")
return f"<ConfigSettingEntry [{', '.join(out)}]>"
Loading
Loading