From e487041ebbe5bc7915770e70519ff1162bdb41d0 Mon Sep 17 00:00:00 2001 From: mark Date: Thu, 11 Dec 2025 10:58:41 +0000 Subject: [PATCH 1/4] Add builder order example --- examples/05_bridged_withdrawal.py | 43 +++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 examples/05_bridged_withdrawal.py diff --git a/examples/05_bridged_withdrawal.py b/examples/05_bridged_withdrawal.py new file mode 100644 index 0000000..dd3d20c --- /dev/null +++ b/examples/05_bridged_withdrawal.py @@ -0,0 +1,43 @@ +import logging.handlers +from asyncio import run +from decimal import Decimal + +from examples.init_env import init_env +from x10.config import ETH_USD_MARKET +from x10.perpetual.accounts import StarkPerpetualAccount +from x10.perpetual.configuration import MAINNET_CONFIG +from x10.perpetual.trading_client import PerpetualTradingClient + +LOGGER = logging.getLogger() +MARKET_NAME = ETH_USD_MARKET +ENDPOINT_CONFIG = MAINNET_CONFIG + +# Bridged withdrawal example. Bridge disabled on sepolia, example works only on mainnet +async def run_example(): + env_config = init_env() + amount = 5 + target_chain = "ETH" + + stark_account = StarkPerpetualAccount( + api_key=env_config.api_key, + public_key=env_config.public_key, + private_key=env_config.private_key, + vault=env_config.vault_id, + ) + trading_client = PerpetualTradingClient(ENDPOINT_CONFIG, stark_account) + LOGGER.info("Getting quote") + quote = (await trading_client.account.get_bridge_quote(chain_in="STRK", chain_out=target_chain, amount=amount)).data.id + LOGGER.info("Commiting quote") + await trading_client.account.commit_bridge_quote(quote) + LOGGER.info("Requesting withdrawal") + withdrawal_id = (await trading_client.account.withdraw( + amount=Decimal(amount), + chain_id=target_chain, + quote_id=quote, + )).data + + LOGGER.info("Withdrawal %s requested", withdrawal_id) + + +if __name__ == "__main__": + run(main=run_example()) From a6889293e15399bbc262e6e63110e37373af3da6 Mon Sep 17 00:00:00 2001 From: mark Date: Thu, 11 Dec 2025 10:59:39 +0000 Subject: [PATCH 2/4] Add builder order example --- examples/05_bridged_withdrawal.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/examples/05_bridged_withdrawal.py b/examples/05_bridged_withdrawal.py index dd3d20c..47c9a2d 100644 --- a/examples/05_bridged_withdrawal.py +++ b/examples/05_bridged_withdrawal.py @@ -3,13 +3,11 @@ from decimal import Decimal from examples.init_env import init_env -from x10.config import ETH_USD_MARKET from x10.perpetual.accounts import StarkPerpetualAccount from x10.perpetual.configuration import MAINNET_CONFIG from x10.perpetual.trading_client import PerpetualTradingClient LOGGER = logging.getLogger() -MARKET_NAME = ETH_USD_MARKET ENDPOINT_CONFIG = MAINNET_CONFIG # Bridged withdrawal example. Bridge disabled on sepolia, example works only on mainnet From eeaddf1dd2fc970b40d4ae3cecd10439e9f6ff70 Mon Sep 17 00:00:00 2001 From: mark Date: Thu, 11 Dec 2025 11:02:04 +0000 Subject: [PATCH 3/4] Add fee read example --- examples/05_bridged_withdrawal.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/examples/05_bridged_withdrawal.py b/examples/05_bridged_withdrawal.py index 47c9a2d..0559c16 100644 --- a/examples/05_bridged_withdrawal.py +++ b/examples/05_bridged_withdrawal.py @@ -24,14 +24,17 @@ async def run_example(): ) trading_client = PerpetualTradingClient(ENDPOINT_CONFIG, stark_account) LOGGER.info("Getting quote") - quote = (await trading_client.account.get_bridge_quote(chain_in="STRK", chain_out=target_chain, amount=amount)).data.id + quote = (await trading_client.account.get_bridge_quote(chain_in="STRK", chain_out=target_chain, amount=amount)).data + if quote.fee > Decimal(2): + LOGGER.info("Fee %s is too high", quote.fee) + return LOGGER.info("Commiting quote") - await trading_client.account.commit_bridge_quote(quote) + await trading_client.account.commit_bridge_quote(quote.id) LOGGER.info("Requesting withdrawal") withdrawal_id = (await trading_client.account.withdraw( amount=Decimal(amount), chain_id=target_chain, - quote_id=quote, + quote_id=quote.id, )).data LOGGER.info("Withdrawal %s requested", withdrawal_id) From e234b22dd4768e78772d6ad60c5d77649db24ada Mon Sep 17 00:00:00 2001 From: mark Date: Thu, 11 Dec 2025 11:03:31 +0000 Subject: [PATCH 4/4] Format --- examples/05_bridged_withdrawal.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/examples/05_bridged_withdrawal.py b/examples/05_bridged_withdrawal.py index 0559c16..a11cab1 100644 --- a/examples/05_bridged_withdrawal.py +++ b/examples/05_bridged_withdrawal.py @@ -10,6 +10,7 @@ LOGGER = logging.getLogger() ENDPOINT_CONFIG = MAINNET_CONFIG + # Bridged withdrawal example. Bridge disabled on sepolia, example works only on mainnet async def run_example(): env_config = init_env() @@ -31,11 +32,13 @@ async def run_example(): LOGGER.info("Commiting quote") await trading_client.account.commit_bridge_quote(quote.id) LOGGER.info("Requesting withdrawal") - withdrawal_id = (await trading_client.account.withdraw( - amount=Decimal(amount), - chain_id=target_chain, - quote_id=quote.id, - )).data + withdrawal_id = ( + await trading_client.account.withdraw( + amount=Decimal(amount), + chain_id=target_chain, + quote_id=quote.id, + ) + ).data LOGGER.info("Withdrawal %s requested", withdrawal_id)