mirror of
https://github.com/discountry/ritmex-bot.git
synced 2026-09-09 16:28:06 +00:00
docs: 更新 lighter-python-main 文档,添加示例代码和 API 说明,重构部分内容以提高可读性
This commit is contained in:
@@ -0,0 +1,138 @@
|
||||
import asyncio
|
||||
import logging
|
||||
import lighter
|
||||
import json
|
||||
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
|
||||
# The API_KEY_PRIVATE_KEY provided belongs to a dummy account registered on Testnet.
|
||||
# It was generated using the setup_system.py script, and servers as an example.
|
||||
BASE_URL = "https://testnet.zklighter.elliot.ai"
|
||||
API_KEY_PRIVATE_KEY = "0xed636277f3753b6c0275f7a28c2678a7f3a95655e09deaebec15179b50c5da7f903152e50f594f7b"
|
||||
ACCOUNT_INDEX = 65
|
||||
API_KEY_INDEX = 1
|
||||
|
||||
def trim_exception(e: Exception) -> str:
|
||||
return str(e).strip().split("\n")[-1]
|
||||
|
||||
|
||||
async def main():
|
||||
# Initialize configuration and clients
|
||||
configuration = lighter.Configuration(BASE_URL)
|
||||
api_client = lighter.ApiClient(configuration)
|
||||
transaction_api = lighter.TransactionApi(api_client)
|
||||
|
||||
# Initialize signer client
|
||||
client = lighter.SignerClient(
|
||||
url=BASE_URL,
|
||||
private_key=API_KEY_PRIVATE_KEY,
|
||||
account_index=ACCOUNT_INDEX,
|
||||
api_key_index=API_KEY_INDEX
|
||||
)
|
||||
|
||||
# Check client connection
|
||||
err = client.check_client()
|
||||
if err is not None:
|
||||
print(f"CheckClient error: {trim_exception(err)}")
|
||||
return
|
||||
|
||||
# use next nonce for getting nonces
|
||||
next_nonce = await transaction_api.next_nonce(account_index=ACCOUNT_INDEX, api_key_index=API_KEY_INDEX)
|
||||
nonce_value = next_nonce.nonce
|
||||
|
||||
ask_tx_info, error = client.sign_create_order(
|
||||
market_index=0,
|
||||
client_order_index=1001, # Unique identifier for this order
|
||||
base_amount=100000,
|
||||
price=280000,
|
||||
is_ask=True,
|
||||
order_type=client.ORDER_TYPE_LIMIT,
|
||||
time_in_force=client.ORDER_TIME_IN_FORCE_GOOD_TILL_TIME,
|
||||
reduce_only=False,
|
||||
trigger_price=0,
|
||||
nonce=nonce_value
|
||||
)
|
||||
nonce_value += 1
|
||||
|
||||
if error is not None:
|
||||
print(f"Error signing first order (first batch): {trim_exception(error)}")
|
||||
return
|
||||
|
||||
# Sign second order
|
||||
bid_tx_info, error = client.sign_create_order(
|
||||
market_index=0,
|
||||
client_order_index=1002, # Different unique identifier
|
||||
base_amount=200000,
|
||||
price=200000,
|
||||
is_ask=False,
|
||||
order_type=client.ORDER_TYPE_LIMIT,
|
||||
time_in_force=client.ORDER_TIME_IN_FORCE_GOOD_TILL_TIME,
|
||||
reduce_only=False,
|
||||
trigger_price=0,
|
||||
nonce=nonce_value
|
||||
)
|
||||
nonce_value += 1
|
||||
|
||||
if error is not None:
|
||||
print(f"Error signing second order (first batch): {trim_exception(error)}")
|
||||
return
|
||||
|
||||
tx_types = json.dumps([client.TX_TYPE_CREATE_ORDER, client.TX_TYPE_CREATE_ORDER])
|
||||
tx_infos = json.dumps([ask_tx_info, bid_tx_info])
|
||||
|
||||
try:
|
||||
tx_hashes = await transaction_api.send_tx_batch(tx_types=tx_types, tx_infos=tx_infos)
|
||||
print(f"Batch transaction successful: {tx_hashes}")
|
||||
except Exception as e:
|
||||
print(f"Error sending batch transaction: {trim_exception(e)}")
|
||||
|
||||
# In case we want to see the changes in the UI, sleep a bit
|
||||
import time
|
||||
time.sleep(5)
|
||||
|
||||
cancel_tx_info, error = client.sign_cancel_order(
|
||||
market_index=0,
|
||||
order_index=1001, # the index of the order we want cancelled
|
||||
nonce=nonce_value
|
||||
)
|
||||
nonce_value += 1
|
||||
|
||||
if error is not None:
|
||||
print(f"Error signing first order (second batch): {trim_exception(error)}")
|
||||
return
|
||||
|
||||
# Sign second order
|
||||
new_ask_tx_info, error = client.sign_create_order(
|
||||
market_index=0,
|
||||
client_order_index=1003, # Different unique identifier
|
||||
base_amount=300000,
|
||||
price=310000,
|
||||
is_ask=True,
|
||||
order_type=client.ORDER_TYPE_LIMIT,
|
||||
time_in_force=client.ORDER_TIME_IN_FORCE_GOOD_TILL_TIME,
|
||||
reduce_only=False,
|
||||
trigger_price=0,
|
||||
nonce=nonce_value
|
||||
)
|
||||
nonce_value += 1
|
||||
|
||||
if error is not None:
|
||||
print(f"Error signing second order (second batch): {trim_exception(error)}")
|
||||
return
|
||||
|
||||
tx_types = json.dumps([client.TX_TYPE_CANCEL_ORDER, client.TX_TYPE_CREATE_ORDER])
|
||||
tx_infos = json.dumps([cancel_tx_info, new_ask_tx_info])
|
||||
|
||||
try:
|
||||
tx_hashes = await transaction_api.send_tx_batch(tx_types=tx_types, tx_infos=tx_infos)
|
||||
print(f"Batch 2 transaction successful: {tx_hashes}")
|
||||
except Exception as e:
|
||||
print(f"Error sending batch transaction 2: {trim_exception(e)}")
|
||||
|
||||
# Clean up
|
||||
await client.close()
|
||||
await api_client.close()
|
||||
|
||||
# Run the async main function
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
Reference in New Issue
Block a user