メインコンテンツへスキップ
このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
このスクリプトの役割。 選択したフィー階層で新しいCLMMプールを作成し、初期集約ポジションをオープンします。2つのトランザクション、1つのスクリプトで完了です。コードはraydium-sdk-V2-demo/src/clmmの公式デモから取得し、単一のNode実行可能ファイルに適合させています。

セットアップ

クイックスタートの前提条件を読んでから、RPC_URLKEYPAIR、および依存関係がインストールされていることを確認してください。 CLMMプール作成には、初回フィーと初期ポジションに対するティック配列のレントが必要です。また、両方のシードミントをウォレットに用意する必要があります。選択した範囲内に価格がある場合、ポジションをオープンするには両側にリクイディティが必要です。

ステップ1 — config.ts

config.tsとして保存してください。これはデモリポジトリのsrc/config.ts.templateと同じ形式です。disableFeatureChecktrueに強制されています(非自明な統合ではSDKが起動時のフィーチャー検出呼び出しをブロックしないようにするため推奨):

ステップ2 — createPool.ts

config.tsと一緒に保存してください。ソース:src/clmm/createPool.ts

ステップ3 — createPosition.ts

ソース:src/clmm/createPosition.ts

ステップ4 — utils.ts

ソース:src/clmm/utils.ts

実行する

何が起こったか

トランザクション1 — raydium.clmm.createPool は以下を初期化しました:
  • (mint1, mint2, ammConfig)の正規PDAsのプール状態、
  • token_0_vaulttoken_1_vault(ミントバイト順でソート)、
  • observationリングバッファ、
  • インラインティック配列ビットマップ、
そしてinitialPriceから初期sqrt_price_x64を設定しました。 トランザクション2 — raydium.clmm.openPositionFromBase は集約ポジションをオープンしました:
  • ウォレットにポジションNFTをミント(NFTはポジションそのもの。転送するとポジションが転送される)、
  • 下限と上限でティック配列を割り当て(最初のポジションがそれらの範囲内では1回のレント。プログラムはティック配列を閉じる方法を公開していないため、そのレントは永続的。同じ配列内の後続ポジションはレントを追加で支払わない)、
  • mint1inputAmountと対応するmint2の金額をデポジット(PoolUtils.getLiquidityAmountOutFromAmountInで計算)、
  • 範囲幅に比例したリクイディティでポジションにクレジット。
範囲が狭いほど、TVLあたりの資本効率は高くなり、価格が範囲外に移動したときのインパーマネント損失はより大きくなります。上記で使用した範囲([0.000001, 100000])は実質的にフルレンジです。現在のスポット付近のフィーに集約するために範囲を狭めます。

フィー階層の選択

clmmConfigs[0]は最も低いフィー階層です。完全なセットはGET https://api-v3.raydium.io/main/clmm-configで公開されています: 完全な決定マトリックスについてはuser-flows/choosing-a-pool-typeを参照してください。

よくあるエラー

  • Pool already exists for this config — このCLMM プール は既に(mint1, mint2, ammConfig)トリプルに対して存在します。既存のプールIDを検索してステップ2をスキップしてください。
  • Insufficient funds for amount B — ウォレットはmintAの要求額を持っていますが、対応するmintBは持っていません。価格が範囲内にある場合、ポジションをオープンするには両側にリクイディティが必要です。
  • Tick out of rangelowerPriceまたはupperPriceが表現可能な価格範囲の外にあります。現在の価格に対してより合理的な範囲を使用してください。
  • 古い価格 — APIからの引用は5~60秒古い可能性があります。executePositionがスリッページで失敗する場合は、createPosition.tsgetRpcClmmPoolInfoブロックのコメントを解除して、署名直前にライブ価格を再取得してください。

注意事項

  • ポジションNFTは唯一のハンドルです。 NFTを失うか転送すると、ポジションにアクセスできなくなります。キーのように扱ってください。
  • 範囲外のポジションはフィーを獲得しません。 価格が[lowerPrice, upperPrice]の外に移動すると、ポジションは完全に1つのアセットに駐車され、リバランスするまで何も獲得しません。
  • ティック配列のレントは一方通行です。 最初のポジションが初期化されたことがないティック配列に触れると、そのレントを支払います。プログラムはティック配列を閉じるパスを公開していないため、そのレントは永続的です。同じ配列内の後続ポジションは無料です。

次のステップ

ソース: