本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
这个脚本做什么。 在你选择的费用等级创建新的 CLMM 池,然后开启初始集中头寸。跨四个文件的两笔交易 —
config.ts、createPool.ts、createPosition.ts 和 utils.ts — 使用 npx tsx 运行。代码取自官方演示 raydium-sdk-V2-demo/src/clmm,并适配为独立运行。设置
确保你已阅读 快速开始前置条件,并已安装RPC_URL、KEYPAIR 和相关依赖。
除了快速开始中的依赖外,你还需要:
decimal.js—createPool.ts和createPosition.ts中的价格和 tick 数学运算。bs58— 如果使用KEYPAIR_BS58而非 JSON 密钥文件,在config.ts中解码 base58 编码的密钥对。tsx— 通过npx tsx直接运行下面的.ts文件;与交换和 CPMM 脚本不同,这个不是用node运行的普通.mjs文件。
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_vault和token_1_vault(按 mint 字节顺序排序),observation环形缓冲区,- 内联 tick 数组位图,
initialPrice 设置初始 sqrt_price_x64。
交易 2 — raydium.clmm.openPositionFromBase 开启了集中头寸:
- 向你的钱包铸造了头寸 NFT(NFT 就是头寸;转移它就转移了头寸),
- 在下界和上界分配了 tick 数组(如果是这些范围内的第一个头寸则是一次性租金;tick 数组永远不会被程序关闭,所以同一数组中的后续头寸不需要额外租金),
- 存入了
inputAmount的mint1和匹配的mint2对应金额(由PoolUtils.getLiquidityAmountOutFromAmountIn计算), - 根据范围宽度向头寸记入流动性。
[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— 你的lowerPrice或upperPrice超出可表示的价格范围。使用相对于当前价格更合理的范围。- 过期价格 — API 的报价可能有 5–60 秒的延迟。如果
executePosition因滑点失败,取消注释createPosition.ts中的getRpcClmmPoolInfo块以在签名前重新获取实时价格。
注意事项
- 头寸 NFT 是你唯一的句柄。 丢失 NFT 或转移它,就失去了对头寸的访问权。把它当作密钥对待。
- 超出范围的头寸不赚取费用。 如果价格移出
[lowerPrice, upperPrice],你的头寸完全停泊在一种资产中,直到你重新平衡才能赚取任何费用。 - Tick 数组租金是单向的。 第一个接触从未初始化的 tick 数组的头寸支付其租金;程序不公开关闭 tick 数组的路径,所以该租金是永久的。同一数组中的后续头寸是免费的。
下一步
products/clmm/overview— 完整 CLMM 机制。products/clmm/ticks-and-positions— tick 背后的数学。algorithms/impermanent-loss— 量化 CLMM IL 放大。user-flows/create-clmm-pool— 通过 Raydium UI 的相同流程。

