mirror of
https://github.com/discountry/ritmex-bot.git
synced 2026-09-09 16:28:06 +00:00
refactor: restructure Lighter SDK by removing deprecated Go files and enhancing Python documentation with new examples and models
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
import asyncio
|
||||
import json
|
||||
import logging
|
||||
import sys
|
||||
import time
|
||||
import eth_account
|
||||
import lighter
|
||||
|
||||
logging.basicConfig(level=logging.INFO, force=True)
|
||||
|
||||
# use https://mainnet.zklighter.elliot.ai for mainnet
|
||||
BASE_URL = "https://testnet.zklighter.elliot.ai"
|
||||
ETH_PRIVATE_KEY = "1234567812345678123456781234567812345678123456781234567812345678"
|
||||
API_KEY_INDEX = 253
|
||||
|
||||
|
||||
async def setup_account(eth_private_key, account_index, base_url, api_key_index):
|
||||
private_key, public_key, err = lighter.create_api_key()
|
||||
if err is not None:
|
||||
return None, f"Failed to create API key for account {account_index}: {err}"
|
||||
|
||||
tx_client = lighter.SignerClient(
|
||||
url=base_url,
|
||||
private_key=private_key,
|
||||
account_index=account_index,
|
||||
api_key_index=api_key_index,
|
||||
)
|
||||
|
||||
response, err = await tx_client.change_api_key(
|
||||
eth_private_key=eth_private_key,
|
||||
new_pubkey=public_key,
|
||||
)
|
||||
if err is not None:
|
||||
await tx_client.close()
|
||||
return None, f"Failed to change API key for account {account_index}: {err}"
|
||||
|
||||
time.sleep(5)
|
||||
|
||||
err = tx_client.check_client()
|
||||
if err is not None:
|
||||
await tx_client.close()
|
||||
return None, f"Failed to verify API key for account {account_index}: {err}"
|
||||
|
||||
await tx_client.close()
|
||||
|
||||
return {
|
||||
"api_key_private_key": private_key,
|
||||
"account_index": account_index,
|
||||
"api_key_index": api_key_index,
|
||||
}, None
|
||||
|
||||
|
||||
async def main():
|
||||
config_file = "config.json"
|
||||
if len(sys.argv) > 1:
|
||||
config_file = sys.argv[1]
|
||||
|
||||
api_client = lighter.ApiClient(configuration=lighter.Configuration(host=BASE_URL))
|
||||
eth_acc = eth_account.Account.from_key(ETH_PRIVATE_KEY)
|
||||
eth_address = eth_acc.address
|
||||
|
||||
try:
|
||||
response = await lighter.AccountApi(api_client).accounts_by_l1_address(
|
||||
l1_address=eth_address
|
||||
)
|
||||
except lighter.ApiException as e:
|
||||
if e.data.message == "account not found":
|
||||
print(f"error: account not found for {eth_address}", file=__import__('sys').stderr)
|
||||
await api_client.close()
|
||||
return
|
||||
else:
|
||||
await api_client.close()
|
||||
raise e
|
||||
|
||||
if len(response.sub_accounts) == 0:
|
||||
print(f"error: no accounts found for {eth_address}", file=__import__('sys').stderr)
|
||||
await api_client.close()
|
||||
return
|
||||
|
||||
logging.info(f"Found {len(response.sub_accounts)} account(s)")
|
||||
|
||||
# don't do this async
|
||||
accounts = []
|
||||
for sub_account in response.sub_accounts:
|
||||
logging.info(f"Setting up account index: {sub_account.index}")
|
||||
result, err = await setup_account(
|
||||
ETH_PRIVATE_KEY,
|
||||
sub_account.index,
|
||||
BASE_URL,
|
||||
API_KEY_INDEX,
|
||||
)
|
||||
|
||||
if err is not None:
|
||||
logging.error(err)
|
||||
else:
|
||||
accounts.append(result)
|
||||
|
||||
if not accounts:
|
||||
print("error: failed to setup any accounts", file=__import__('sys').stderr)
|
||||
await api_client.close()
|
||||
return
|
||||
|
||||
with open(config_file, "w", encoding="utf-8") as f:
|
||||
json.dump({
|
||||
"BASE_URL": BASE_URL,
|
||||
"ACCOUNTS": accounts,
|
||||
}, f, ensure_ascii=False, indent=2)
|
||||
|
||||
await api_client.close()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
||||
Reference in New Issue
Block a user