Skip to main content
このページは AI による自動翻訳です。すべての内容は英語版を正とします。英語版を表示 →
このコードの役割。 選択したフィー階層で新しいCLMMプールを作成し、初期集中ポジションを開きます。4つのファイル(config.tscreatePool.tscreatePosition.tsutils.ts)にまたがる2つのトランザクションを npx tsx で実行します。コードは raydium-sdk-V2-demo/src/clmm の公式デモから引用し、スタンドアロンで実行するように適応させています。

セットアップ

クイックスタートの前提条件を読み、RPC_URLKEYPAIR、および依存関係がインストールされていることを確認してください。 クイックスタートの依存関係に加えて、以下が必要です:
  • decimal.jscreatePool.tscreatePosition.ts での価格とティック計算。
  • bs58 — JSON キーファイルの代わりに KEYPAIR_BS58 を使用する場合、config.ts で base58 エンコードされたキーペアをデコードします。
  • tsxnpx tsx 経由で以下の .ts ファイルを直接実行します。スワップおよび CPMM スクリプトとは異なり、これは node で実行される通常の .mjs ファイルではありません。
CLMMプール作成には1回限りのフィーと初期ポジション用のティック配列レントが必要です。また、ウォレットに両方のシードミントが必要です。選択した範囲内に価格がある場合、ポジションを開くには両側にリクイディティが必要です。 devnetでの実行。 config.tscluster"devnet" に変更するだけでは不十分です。createPool.ts は明示的な programId: CLMM_PROGRAM_ID(メインネットの固定定数で cluster に従いません)を渡します。その直上のコメント化された DEVNET_PROGRAM_ID.CLMM_PROGRAM_ID 行に置き換えてください。createPosition.ts もメインネットの poolId(RAY-USDCプール)をハードコードしています。ステップ2で作成したdevnetプールのIDに置き換えてください。

ステップ1 — config.ts

config.ts として保存します。これはデモリポジトリの src/config.ts.template と同じ形式です。disableFeatureChecktrue に強制されます(SDKがスタートアップ機能検出呼び出しでブロックされないようにするため、非自明な統合では推奨):
config.ts

ステップ2 — createPool.ts

config.ts と同じ場所に保存します。ソース:src/clmm/createPool.ts
createPool.ts

ステップ3 — createPosition.ts

ソース:src/clmm/createPosition.ts
createPosition.ts

ステップ4 — utils.ts

ソース:src/clmm/utils.ts
utils.ts

実行

何が起きたか

トランザクション1 — raydium.clmm.createPool は以下を初期化しました:
  • (mint1, mint2, ammConfig) の正規PDAでのプール状態、
  • 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 — この (mint1, mint2, ammConfig) トリプルに対してCLMMプールが既に存在します。既存のプール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つのアセットに駐車され、リバランスするまで何も獲得しません。
  • ティック配列レントは一方向。 初期化されたことのないティック配列に最初にタッチするポジションがそのレントを支払います。プログラムはティック配列を閉じるパスを公開していないため、そのレントは永続的です。同じ配列内の後続ポジションは無料です。

次のステップ

ソース: