submit_process_demo.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import requests
  2. import json
  3. import time
  4. from decimal import Decimal # 使用 Decimal 来表示精确的金额和价差
  5. # --- 配置 arb_executor.py 的 HTTP 地址和端口 ---
  6. ARB_EXECUTOR_URL = "http://localhost:5002/submit_process"
  7. # --- 模拟的套利机会数据 ---
  8. # 这是一个示例,实际数据应来自你的 price_checker 逻辑
  9. def create_mock_arbitrage_data():
  10. import ok_chain_client
  11. CHAIN_ID = 1
  12. IN_TOKEN_ADDRESS = '0xdAC17F958D2ee523a2206206994597C13D831ec7' # USDT on Ethereum
  13. IN_TOKEN_DECIMALS = 6
  14. IN_AMOUNT_TO_QUERY = Decimal('20')
  15. OUT_TOKEN_ADDRESS = '0xf816507E690f5Aa4E29d164885EB5fa7a5627860' # RATO on Ethereum
  16. USER_WALLET = '0xb1f33026db86a86372493a3b124d7123e9045bb4'
  17. USER_EXCHANGE_WALLET = '0xc71835a042F4d870B0F4296cc89cAeb921a9f3DA'
  18. SLIPPAGE = 1
  19. MEXC_TARGET_PAIR_USDT = 'RATO_USDT' # MEXC 现货交易对
  20. # 询价,注意!!!这里直接把交易所地址当收款方,省去transfer的流程
  21. data = ok_chain_client.swap(CHAIN_ID,
  22. IN_AMOUNT_TO_QUERY * (10 ** IN_TOKEN_DECIMALS),
  23. IN_TOKEN_ADDRESS,
  24. OUT_TOKEN_ADDRESS,
  25. SLIPPAGE,
  26. USER_WALLET,
  27. USER_EXCHANGE_WALLET, # 这里直接把交易所地址当收款方,省去transfer的流程!!!
  28. )
  29. d = data['data'][0]
  30. tx = d['tx']
  31. # 构造提交给 arb_executor 的数据体
  32. data = {
  33. "tx": tx,
  34. "profit": str(0.02),
  35. "profitLimit": str(0.01),
  36. "symbol": MEXC_TARGET_PAIR_USDT,
  37. "fromToken": IN_TOKEN_ADDRESS,
  38. "fromTokenAmountHuman": IN_AMOUNT_TO_QUERY,
  39. "fromTokenDecimal": IN_TOKEN_DECIMALS,
  40. "toToken": OUT_TOKEN_ADDRESS
  41. }
  42. return data
  43. # --- 发送请求函数 ---
  44. def submit_arbitrage_process(arbitrage_data):
  45. """
  46. 向 arb_executor 服务提交套利处理请求。
  47. """
  48. print(f"正在提交套利数据到 {ARB_EXECUTOR_URL}")
  49. try:
  50. # 发送 POST 请求
  51. response = requests.post(ARB_EXECUTOR_URL, json=arbitrage_data)
  52. # 检查响应状态码
  53. if response.status_code == 201:
  54. print("\n请求成功! 套利流程已启动。")
  55. elif response.status_code == 200:
  56. print("\n请求接收成功,但未达到利润阈值,未启动套利流程。")
  57. elif response.status_code == 400:
  58. print("\n请求失败! 无效的请求数据。")
  59. else:
  60. print(f"\n请求失败! 状态码: {response.status_code}")
  61. # 打印响应体
  62. try:
  63. print("响应体:")
  64. print(json.dumps(response.json(), indent=4))
  65. except json.JSONDecodeError:
  66. print("响应体不是有效的 JSON:")
  67. print(response.text)
  68. except requests.exceptions.ConnectionError as e:
  69. print(f"\n连接错误: 无法连接到 {ARB_EXECUTOR_URL}。请确保 arb_executor.py 正在运行。")
  70. print(f"错误详情: {e}")
  71. except Exception as e:
  72. print(f"\n发送请求时发生未知错误: {e}")
  73. # --- 主执行逻辑 ---
  74. if __name__ == "__main__":
  75. print("--- 模拟 Price Checker 发现套利机会 ---")
  76. # 模拟一个达到利润阈值的套利机会
  77. arb_opportunity_met = create_mock_arbitrage_data()
  78. submit_arbitrage_process(arb_opportunity_met)
  79. print("\n模拟完成。请检查 arb_executor.py 的控制台输出和 /processing, /history 端点查看结果。")