本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
Raydium 不发布官方 Python SDK。这里的模式由三个维护良好的社区库组成:
solders(Rust 绑定的 Solana 基元)、solana-py(RPC 客户端)和 anchorpy(从 IDL 生成的 Anchor 风格指令构建器)。这种组合涵盖了 TS SDK 的所有功能,只是不那么精细。环境
anchorpy 会定期落后于 anchor-lang 的版本;对于最近部署的 Raydium 程序,在提交前应验证 IDL 在你固定的 anchorpy 版本下能够编译。
连接和密钥对
AsyncClient 是异步变体;同步的 Client 可用于快速脚本,但异步更适合发送多个请求的场景。
读取池状态
大多数生产用途从 Raydium 的 REST API 读取已解码的池状态(参见sdk-api/rest-api),而不是手动解码链上数据——这样做更简单,延迟对大多数用例都是可接受的。
src/raydium/cpmm/layout.ts(TS 源码)中;根据需要将其移植到 construct。anchorpy 可以在给定 IDL 的情况下自动完成此操作——见下文。
构建和发送交换
为简起见,使用 Raydium 的服务器构建交易端点。服务器返回签名就绪的交易;你只需添加自己的签名:通过 anchorpy 在客户端构建交换
当你需要更低的延迟或无法访问 Raydium API 时(受制裁地区、离线设置):
anchorpy 不会自动推导它们。
典型机器人架构
常见的 Python Raydium 机器人结构:- RPC 提供商。 公开主网 RPC 会积极限流。使用专用提供商(Helius、QuickNode、Triton)以应对持续流量。
- WebSocket 用于池状态。
client.account_subscribe(pool_id)在每个状态变化时推送更新。比轮询紧凑得多。 - 优先费提供商。 Helius 有
getPriorityFeeEstimate端点;Triton 有自己的。根据目标程序上最近费用的第 75 个百分位数来调整你的费用。 - 用于 MEV 敏感交易的捆绑。 如果你无法容忍三明治风险,通过 Jito 的区块引擎路由。Python 库:
jito-sdk-python(第三方,质量参差不齐)。
读取农场状态
anchorpy 的 .account["X"].decode(bytes) 给出与 IDL 结构匹配的原生 Python 对象。
陷阱
1. 小数处理
Python 的原生float 是 IEEE-754 双精度浮点;9 位小数代币中的金额(1 SOL = 1e9 单位)保持准确,但比率和乘积会丧失精度。使用 int(solders 为所有金额字段返回 int),并对任何价格算术通过 decimal.Decimal 路由。
2. 基于插槽与基于时间戳的推理
某些农场版本使用插槽计数器;LaunchLab 使用时间戳。solana-py 在 RPC 响应中返回 slot,但将插槽转换为时间戳会有损失(因领导者日程而异)。如果你需要挂钟时间,显式调用 get_block_time(slot)。
3. 连接池耗尽
AsyncClient 默认为每个请求打开一个 HTTP 连接。在高负载下,重用 httpx.AsyncClient 会话并设置适当的 limits=httpx.Limits(max_connections=100)。
4. 交易大小限制
Python 构建的交易不会比 TS 构建的交易更小——1232 字节限制同样适用。对于通过超过 2 个池的任何路由,使用 V0 交易(地址查找表)。指针
sdk-api/rest-api—— 上述使用的 HTTP 端点。sdk-api/anchor-idl—— 获取anchorpyIDL 的位置。integration-guides/routing-and-mev—— Jito 捆绑模式。

