跳转到主要内容
本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
本条目涵盖计划于 2026-10-30 进行的 CPMM 程序升级。部署前已针对 raydium-cp-swap 的 feat/initialize-v2 分支(头部 40cbd81)进行验证。在依赖新指令之前,请确认已部署的程序。
每个 CPMM 池都有一个 enable_creator_fee 标志和一个 creator_fee_on 收取侧,两者都在创建时固定。在此之前,创建者只能通过 InitializeWithPermission 设置它们,而这需要管理员签发的 Permission PDA。公开的 Initialize 始终将费用存储为禁用。实际上,只有 LaunchLab 毕业和其他门控流程才能创建收取创建者费用的池。 此版本新增 InitializeV2。它就是多了一个参数 creator_fee_on: Option<CreatorFeeOn> 的 Initialize,任何人都可以调用。池数学、交换、流动性、费用收集以及创建者费用的协议份额均未改动。

集成者速览

  • 新指令:InitializeV2。 无权限。参数为 init_amount_0、init_amount_1、open_time 和 creator_fee_on: Option<CreatorFeeOn>。判别器 [67, 153, 175, 39, 218, 16, 38, 32]。
  • Some(side) 在该侧启用创建者费用;None 保持关闭。 None 存储的内容与 Initialize 完全相同。
  • 账户与 Initialize 相同,但去掉了 rent。 前 19 个账户完全相同,顺序也相同。见账户列表。
  • 创建者就是签名者。 pool_state.pool_creator 是签名的 creator。与 InitializeWithPermission 不同,受益人不能被设置为其他地址。
  • 创建者选择的是开/关和收取侧,而不是费率。 池收取其费用等级的 AmmConfig.creator_fee_rate。该费率默认为 0,因此在这样的等级上已启用的池不会累积任何费用。
  • 现有内容均未改变。 Initialize 和 InitializeWithPermission 保留其判别器、账户、参数和行为。没有账户布局或错误代码改变。
  • 刷新你的 IDL 以获取新指令。从不调用它的客户端无需任何更改。

程序中的变更

新指令:InitializeV2

InitializeV2 运行与 Initialize 相同的创建代码。它:
  • 接受规范池 PDA 或已签名的随机密钥对作为 pool_state;
  • 通过 remaining_accounts 应用相同的 Token-2022 允许列表和 SupportMintAssociated 检查;
  • 当设置了 amm_config.disable_create_pool 时拒绝创建;
  • 当 open_time 不在未来时,将其提升到 block_timestamp + 1;
  • 锁定 100 个 LP 基础单位,并将其余部分铸造给创建者;
  • 收取 amm_config.create_pool_fee。
唯一的区别是它写入新 PoolState 的内容: 无效的标签字节或变体字节会在 Anchor 的参数反序列化阶段失败。不涉及新的错误代码。

三条创建路径的比较

内部重构

三个处理程序现在共享同一个 initialize_pool 例程。此重构不会改变 Initialize 或 InitializeWithPermission 的账户、参数、检查或存储的值。新测试还会检查在同一配置上普通的 Initialize 仍将创建者费用存储为禁用。

创建者需要了解的内容

  • 先检查费用等级。 创建者费率属于 AmmConfig,而不是池。请选择一个 creator_fee_rate 正是你想收取的费率的等级。费率列于 products/cpmm/fees。
  • 这一选择是永久性的。 创建后没有任何指令可以更改 enable_creator_fee 或 creator_fee_on。如需更改,你必须创建一个新池。
  • 交易者在交易费之外支付它。 创建者费用是添加到交换上的单独费率。它不会减少 LP、协议或基金的份额,但确实会使该池的交易成本高于同一等级上关闭费用的池。
  • 收集方式未改变。 使用 CollectCreatorFee 或 CollectCreatorFeePermissionless。2026-09-19 版本的协议份额适用,并且你无法在创建时选择退出。

迁移说明

  • 池创建者。 仅当你希望开启创建者费用时,才从 Initialize 切换到 InitializeV2。传递 Some(side) 并去掉 rent 账户。Initialize 仍然可用。
  • SDK 用户。 @raydium-io/raydium-sdk-v2@0.2.64-alpha 中的 raydium.cpmm.createPool 构建的是 Initialize。在某个版本提供 InitializeV2 构建器之前,请根据刷新后的 IDL 对其进行编码。
  • 索引器和路由器。 预计会有更多 enable_creator_fee = true 的池,由普通钱包而非 LaunchLab 创建。始终根据每个池自身的 enable_creator_fee 和 creator_fee_on 报价,而不要仅根据创建路径或等级。如果你通过指令跟踪池创建,请解码新指令。通过 PoolState 账户跟踪则无需更改。
  • UI。 显示池是否收取创建者费用以及费率,因为同一等级上的两个池现在可能不同。
  • LaunchLab 和其他需要权限的流程。 无变化。当支付者和记录的创建者必须不同时,InitializeWithPermission 仍然是应使用的路径。

未改变的内容

  • 每个账户布局,包括 PoolState 和 AmmConfig。
  • Initialize 和 InitializeWithPermission:判别器、账户、参数和存储的值。
  • Permission、CreatePermissionPda 和 ClosePermissionPda。
  • 交换、存款和提取数学、创建者费用的收取,以及创建者费用的协议份额。
  • 错误代码。 6000–6015 未改变;没有追加任何内容。
  • 程序 ID。

更新的页面

  • products/cpmm/instructions:升级横幅;概览和状态变化矩阵行;包含参数、编码和账户列表的新 InitializeV2 部分;Initialize 后置条件现在指向 InitializeV2。
  • products/cpmm/fees:“创建者费”部分列出全部三条创建路径,并注明启用费用不会设置其费率。
  • products/cpmm/accounts:poolState 和池 ID 说明;creator_fee_on / enable_creator_fee 字段说明;Permission 说明;账户生命周期行。
  • products/cpmm/overview:“新功能”提示框和”可预测的费用”要点。
  • products/cpmm/code-demos:说明 createPool 构建的是 Initialize,以及如何使用 InitializeV2。
  • protocol-overview/shared-infrastructure:创建者费用不再仅限于 LaunchLab 毕业的池。
  • reference/token-2022-support:CPMM 池创建路径。
验证对象:raydium-cp-swap 分支 feat/initialize-v2(40cbd81):programs/cp-swap/src/lib.rs、instructions/initialize_v2.rs、instructions/initialize.rs、instructions/initialize_with_permission.rs、instructions/mod.rs、states/pool.rs,以及 tests/initialize_v2.test.ts。