本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
LaunchLab 提供了一套精简的指令集:六个面向用户的调用加上少数管理员原语。SDK 包装了所有这些;本页为聚合器、监控工具和需要 CPI 的程序记录了原始接口。
指令清单
“ExactIn/ExactOut” 的分割镜像了 CPMM 的
SwapBaseInput / SwapBaseOutput — 在链上它们是具有略微不同舍入的单独指令判别器。
毕业路径选择。 每个新的 Initialize、InitializeV2 和 InitializeWithToken2022 调用必须设置 migrate_type = 1(CPSWAP)。任何尝试初始化新的 AMM v4 绑定池都会返回 MigrateTypeNotMatch。amm_creator_fee_on 仅选择生成的 CPMM 创建者费用是应用于报价代币还是两个代币;它不选择目标程序。
MigrateToAmm 对于在此限制之前使用 migrate_type = 0 初始化的现有 PoolState 仍然可调用。该版本不会重写现有池状态或删除遗留指令。
Initialize
创建新启动。
参数
前置条件
quote_mint ∈ launch_config.allowed_quote_mints。base_supply_graduation ≤ base_supply_max。- 费用参数通过
launch_config.max_*_fee_rate检查。 open_time ≥ now − slop(SDK 强制≥ now;程序容忍轻微回溯)。curve_type被识别。
base_mint的supply = base_supply_max,全部在base_vault中。base_mint.mint_authority = launch_authority,freeze_authority = None。LaunchState初始化为status = Active,base_sold = 0,quote_reserve_real = 0。quote_reserve_target从曲线参数 +base_supply_graduation+buy_numerator计算(大约)。
InvalidQuoteMint、FeeRateTooHigh、InvalidCurveParams、MathOverflow。
Buy(规范变体:BuyExactIn)
用户提供固定的 quote_in;曲线计算 base_out。
参数
前置条件
launch_state.status == Active。now ≥ open_time。user_quote_ata.balance ≥ quote_in。quote_in > 0。
- 将
quote_in分割为quote_in_after_fee和费用部分。 - 牛顿求解曲线以获得给定后费用报价的
base_out。 require(base_out ≥ minimum_base_out)否则回滚ExceededSlippage。- 移动
quote_in用户 → 金库。移动base_out金库 → 用户。 - 更新
base_sold += base_out,quote_reserve_real += quote_in_after_fee × (lp_share / total_share)。 - 更新费用计数器(
protocol_fees_quote、creator_fees_quote)。 state_data.num_buys += 1。- 如果更新后
quote_reserve_real ≥ quote_reserve_target,SDK 通常在同一交易中链接Graduateix。程序不会在Buy内自动毕业 — 需要后续的Graduate。
BuyExactOut
用户指定精确的 base_out;程序计算 quote_in。
参数
BuyExactIn 相同的账户。使用闭式二次积分(或 curve_type 1 的 CPMM 逆)而不是牛顿迭代。
Sell / SellExactIn / SellExactOut
Buy 的镜像。用户将 base_in 返回给曲线并接收 quote_out。费用从 quote_out 中扣除,因此用户收到的少于原始集成收益。
前置条件 —
user_base_ata.balance ≥ base_in。- 卖出不能将
base_sold推低于 0(考虑到会计一致性是冗余的)。 - 启动是
Active。
Buy。base_sold 减少,quote_reserve_real 减少。费用仍然累积。
MigrateToAmm / MigrateToCpswap
一旦曲线达到 total_quote_fund_raising,将启动毕业到可交易的池。新启动仅限 CPMM。MigrateToAmm 为存储的 migrate_type 为 0 的现有池保留。
谁签署
MigrateToAmm— 绑定GlobalConfig上记录的migrate_to_amm_wallet。MigrateToCpswap— 绑定GlobalConfig上记录的migrate_to_cpswap_wallet。
MigrateToAmm 需要三个(主要是程序转发给 AMM v4 的 OpenBook 市场参数):
MigrateToCpswap 不需要任何参数。
效果(两者共同)
- 验证
pool_state.status == Migrate(即quote_reserve_target已达到)。否则回滚PoolMigrated(状态已是Migrated)或PoolFunding(仍在融资)。 - 验证
pool_state.migrate_type与指令匹配(AMM 为0,CPMM 为1)。否则回滚MigrateTypeNotMatch。 - 计算毕业后的储备:
base_amount_out = base_vault.amount − vesting_schedule.total_locked_amountquote_amount_out = quote_vault.amount − quote_protocol_fee − migrate_fee − platform_fee
- CPI 进入目标程序(
AMM v4 Initialize2或CPMM InitializeWithPermission)使用这些储备来创建毕业后的池。 - 对于在 2026-08-17 升级后执行的 CPMM 迁移,将
platform_scale + creator_scale合并为一个平台拥有的锁定 LP 份额,并最多向platform_nft_wallet铸造一个费用密钥 NFT。销毁burn_scale余额。在升级之前,creator_scale被单独锁定,其费用密钥转到代币创建者。已完成的历史迁移不被修改。对于遗留 AMM v4 毕业,LP 处置遵循该指令的现有流程。 - 撤销
base_mint.mint_authority(设置为None)。 - 翻转
pool_state.status = Migrated,设置vesting_schedule.start_time = block_time + cliff_period。
BuyExactIn、BuyExactOut、SellExactIn、SellExactOut 从此时起将以 PoolMigrated 拒绝。生成的 AMM 池是规范的,交易就像任何其他 AMM v4 / CPMM 池一样。
常见错误 — PoolFunding、PoolMigrated、MigrateTypeNotMatch、InvalidCpSwapConfig、MathOverflow。
CPMM 迁移剩余账户
构建MigrateToCpswap 的客户端必须使用这些固定的 remaining_accounts 索引:
该指令在升级路径上需要至少十个剩余账户。支持铸币账户是只读 CPI 输入。即使铸币没有初始化的支持记录,也要派生两个地址。仍然附加创建者锁定账户或省略索引 8–9 的旧构建器必须更新。
平台 GlobalConfig 允许列表
PlatformConfig.restrict_global_config 控制检查:
0:平台接受任何其他有效的GlobalConfig;不需要允许账户。1:Initialize、InitializeV2和InitializeWithToken2022必须在remaining_accounts中的任何地方包含匹配的PlatformAllowConfig。
CreatePlatformAllowConfig 和 ClosePlatformAllowConfig 创建或关闭 PDA。其种子是 [b"platform_allow_config", platform_config, global_config]。前管理员管理的 PlatformGlobalAccess 指令和 PDA 已停用。
CollectFee
管理员扫除单个启动上协议累积的交易费用。
参数 — 无。
账户
效果 — 将
pool_state.quote_protocol_fee 从 quote_vault 转账到 recipient_token_account,然后将计数器清零。可在第一次买入后的任何时间调用。
CollectMigrateFee
管理员扫除毕业时累积的迁移费用。与 CollectFee 相同的账户形状,但以 migrate_fee_owner 作为签署者(而不是 protocol_fee_owner)和 pool_state.migrate_fee 作为排空的计数器。
ClaimCreatorFee
每个创建者对创建者拥有的每个使用相同报价铸币的启动累积的创建者费用的扫除。排空每个创建者费用金库,而不是每个池的费用金库。
参数 — 无。
账户
效果 — 将
creator_fee_vault 的全部余额转账到 recipient_token_account。如果金库为空,则以大于零的检查回滚。
ClaimPlatformFee
每个平台的扫除,直接排空启动的报价金库。当平台想要为一个特定启动声称其份额而不通过聚合平台金库时使用。
参数 — 无。
账户
效果 — 将
pool_state.platform_fee 从 quote_vault 转账到 recipient_token_account,将计数器清零。
ClaimPlatformFeeFromVault
每个平台的聚合扫除。排空平台的每个报价铸币费用金库,该金库从通过平台路由的每个启动累积费用。
参数 — 无。
账户
效果 — 将
platform_fee_vault 的全部余额转账到 recipient_token_account。如果金库为空则回滚。
归属和平台配置指令
这些在专门页面上记录,因为每个都有自己的状态模型:CreateVestingAccount、CreatePlatformVestingAccount、ClaimVestedTokenCreatePlatformConfig、UpdatePlatformConfig、UpdatePlatformCurveParam、RemovePlatformCurveParam、CreatePlatformAllowConfig、ClosePlatformAllowConfigCreateConfig、UpdateConfig
状态变化矩阵
接下来去哪里
products/launchlab/code-demos— 每个指令的 TypeScript 示例。products/launchlab/accounts— 完整状态形状。reference/error-codes— LaunchLab 错误枚举。
- Raydium SDK v2
LaunchLab模块 - Raydium LaunchLab 程序源代码

