Getting started
Introduction
This SDK offers methods to perform all operations on Vertex such as trading, managing your collaterals, etc.
Basic usage
Before you start, import the necessary utilities:
import time
from vertex_protocol.client import create_vertex_client
from vertex_protocol.engine_client.types.execute import (
OrderParams,
PlaceOrderParams,
WithdrawCollateralParams,
CancelOrdersParams
)
from vertex_protocol.contracts.types import DepositCollateralParams
from vertex_protocol.utils.bytes32 import subaccount_to_bytes32, subaccount_to_hex
from vertex_protocol.utils.expiration import OrderType, get_expiration_timestamp
from vertex_protocol.utils.math import to_pow_10, to_x18
from vertex_protocol.utils.nonce import gen_order_nonce
from vertex_protocol.utils.subaccount import SubaccountParams
The following sections outline the main functionalities:
Making a deposit
Note
Remember to always keep your signer’s private key securely stored and never expose it to the public.
The core client supports two modes:
sepolia-testnet: Connects to our test environment on Arbitrum Sepolia.
mainnet: Connects to our production environment on Arbitrum One.
The primary entry point of the SDK is via create_vertex_client, which allows you to create an instance of VertexClient. See API Reference for more details.
>>> private_key = "xxx"
>>> print("setting up vertex client...")
>>> client = create_vertex_client("sepolia-testnet", private_key)
>>> # You must first approve allowance for the amount you want to deposit.
>>> print("approving allowance...")
>>> approve_allowance_tx_hash = client.spot.approve_allowance(0, to_pow_10(100000, 6))
>>> print("approve allowance tx hash:", approve_allowance_tx_hash)
>>> # Now, you can make the actual deposit.
>>> print("depositing collateral...")
>>> deposit_tx_hash = client.spot.deposit(
DepositCollateralParams(
subaccount_name="default", product_id=0, amount=to_pow_10(100000, 6)
)
)
>>> print("deposit collateral tx hash:", deposit_tx_hash)
Placing an order
Places an order via execute:place_order.
>>> owner = client.context.engine_client.signer.address
>>> print("placing order...")
>>> product_id = 1
>>> order = OrderParams(
sender=SubaccountParams(
subaccount_owner=owner,
subaccount_name="default",
),
priceX18=to_x18(20000),
amount=to_pow_10(1, 17),
expiration=get_expiration_timestamp(OrderType.POST_ONLY, int(time.time()) + 40),
nonce=gen_order_nonce(),
)
>>> res = client.market.place_order(PlaceOrderParams(product_id=1, order=order))
>>> print("order result:", res.json(indent=2))
Viewing open orders
Queries your open orders via query:subaccount_orders.
>>> sender = subaccount_to_hex(order.sender)
>>> print("querying open orders...")
>>> open_orders = client.market.get_subaccount_open_orders(1, sender)
>>> print("open orders:", open_orders.json(indent=2))
Retrieving an order digest
Note
The order digest is necessary to perform order cancellation via client.market.cancel_orders
>>> order.sender = subaccount_to_bytes32(order.sender)
>>> order_digest = client.context.engine_client.get_order_digest(order, product_id)
>>> print("order digest:", order_digest)
Cancelling an order
Cancels open orders via execute:cancel_orders.
>>> print("cancelling order...")
>>> res = client.market.cancel_orders(
CancelOrdersParams(productIds=[product_id], digests=[order_digest], sender=sender)
)
>>> print("cancel order result:", res.json(indent=2))
Withdrawing collateral
Withdraw spot collaterals from Vertex via execute:withdraw_collateral.
>>> print("withdrawing collateral...")
>>> withdraw_collateral_params = WithdrawCollateralParams(
productId=0, amount=to_pow_10(10000, 6), sender=sender
)
>>> res = client.spot.withdraw(withdraw_collateral_params)
>>> print("withdraw result:", res.json(indent=2))