メインコンテンツへスキップ
このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
Raydium は公式の Python SDK を公開していません。ここで示すパターンは、3つのメンテナンスされたコミュニティライブラリを組み合わせたものです:solders(Rust で実装された Solana プリミティブ)、solana-py(RPC クライアント)、anchorpy(IDL からの Anchor スタイルの命令ビルダー)。この組み合わせは TS SDK が提供するすべての機能をカバーしていますが、ポーランドされていません。

環境構築

現在のところ互いに連携するバージョン:
anchorpy は定期的に anchor-lang のバージョンに遅れます。最近デプロイされた Raydium プログラムの場合、コミットする前に、IDL が固定した anchorpy でコンパイルされることを確認してください。

接続とキーペア

AsyncClientasync バリアント;同期の Client はクイックスクリプト向けに利用できますが、複数のリクエストを送信するものには async が推奨されます。

プール状態の読み取り

本番環境ではほとんどのケースで、デコードされたプール状態を Raydium の REST API から読み取ります(sdk-api/rest-api を参照)。オンチェーンデータを手動でデコードするよりも簡単で、ほとんどのユースケースではレイテンシは許容範囲です。
最小限のレイテンシが必要なボットの場合、オンチェーンバイトを直接デコードしてください:
完全なレイアウトは src/raydium/cpmm/layout.ts(TS ソース)にあります。必要に応じて construct に移植してください。anchorpy は IDL が与えられると自動的にこれを行うことができます。以下を参照してください。

スワップの構築と送信

シンプルにするため、Raydium の server-built-transaction エンドポイントを使用してください。サーバーは署名済みのトランザクションを返します。あなたのシグネチャを追加するだけです:
これが機能するボットの最速パスです。サーバークォートはすぐに期限切れになります(≈30秒)。キャッシュしないでください。

クライアント側でスワップを構築(anchorpy 経由)

Raydium の API に到達できないか、レイテンシをさらに低減する必要がある場合(制裁地域、エアギャップセットアップ):
PDA 導出(observation state、pool authority)は CPMM チャプターと同じ公式に従います。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 struct と一致するネイティブ 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 はデフォルトでリクエストごとに 1 つの HTTP コネクションを開きます。高負荷下では、httpx.AsyncClient セッションを再利用し、適切な limits=httpx.Limits(max_connections=100) を設定してください。

4. トランザクションサイズ制限

Python で構築されたトランザクションは TS で構築されたものより小さくありません — 1232 バイト制限は同様に適用されます。複数のプールをルーティングする場合は V0 トランザクション(アドレスルックアップテーブル)を使用してください。

ポインタ

出典: