本頁內容由 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(TypeScript 原始碼);根據需要將其轉移到 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. 基於時段 vs 基於時間戳的推理
某些農場版本使用時段計數器;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 捆綁模式。

