Skip to main content
本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
這個流程做什麼。 在你選擇的費用級別建立新的 CLMM 池,然後開啟初始集中頭寸。跨越四個檔案的兩筆交易 — config.tscreatePool.tscreatePosition.tsutils.ts — 使用 npx tsx 執行。程式碼取自官方示例 raydium-sdk-V2-demo/src/clmm,並改編為獨立執行。

設定

確保你已閱讀 快速開始先決條件,並已安裝 RPC_URLKEYPAIR 和相關依賴。 除了快速開始中的依賴外,你還需要:
  • decimal.jscreatePool.tscreatePosition.ts 中的價格和 tick 數學運算。
  • bs58 — 如果使用 KEYPAIR_BS58 而非 JSON 金鑰檔案,在 config.ts 中解碼 base58 編碼的金鑰對。
  • tsx — 直接透過 npx tsx 執行下面的 .ts 檔案;不同於交換和 CPMM 指令碼,這個不是用 node 執行的純 .mjs 檔案。
CLMM 池建立有一次性費用加上初始頭寸的 tick 陣列租金。你的錢包中還需要兩個種子 mint — 當價格位於選定範圍內時開啟頭寸需要雙邊流動性。 在 devnet 上執行。config.ts 中將 cluster 改為 "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 形狀相同 — disableFeatureCheck 被強制設為 true(建議用於任何非平凡的整合,以便 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(按 mint 位元組順序排序),
  • observation 環形緩衝區,
  • 內聯 tick 陣列位圖,
並從你的 initialPrice 設定初始 sqrt_price_x64 交易 2 — raydium.clmm.openPositionFromBase 開啟集中頭寸:
  • 向你的錢包鑄造頭寸 NFT(NFT 就是頭寸;轉移它就轉移了頭寸),
  • 在下限和上限分配 tick 陣列(如果是這些範圍內的第一個頭寸,則為一次性租金;tick 陣列永遠不會被程式關閉,所以同一陣列中的後續頭寸不需支付額外租金),
  • 存入 inputAmountmint1 和匹配的 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 range — 你的 lowerPriceupperPrice 超出可表示的價格範圍。相對於當前價格使用更合理的範圍。
  • 過時價格 — API 的報價可能延遲 5–60 秒。如果 executePosition 因滑點失敗,取消註解 createPosition.ts 中的 getRpcClmmPoolInfo 區塊,在簽署前重新獲取即時價格。

注意事項

  • 頭寸 NFT 是你唯一的控制權。 丟失 NFT 或轉移它,就失去了對頭寸的訪問權。把它當作鑰匙對待。
  • 超出範圍的頭寸不賺取費用。 如果價格移出 [lowerPrice, upperPrice],你的頭寸完全停泊在一項資產中,直到你重新平衡才能賺取任何費用。
  • Tick 陣列租金是單向的。 第一個接觸從未初始化的 tick 陣列的頭寸支付其租金;程式不公開關閉 tick 陣列的路徑,所以該租金是永久的。同一陣列中的後續頭寸是免費的。

下一步

來源: