本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
本条目涵盖计划于 2026-10-30 进行的 CPMM 程序升级。部署前已针对
raydium-cp-swap 的 feat/initialize-v2 分支(头部 40cbd81)进行验证。在依赖新指令之前,请确认已部署的程序。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。
