本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
LaunchLab 公开了一套精简的指令集:六个用户可调用的指令,加上少数管理员原始指令。SDK 对所有这些进行了封装;本页面为聚合器、监控工具和需要使用 CPI 的程序记录了原始接口。
指令清单
“ExactIn/ExactOut” 的拆分镜像了 CPMM 的
SwapBaseInput / SwapBaseOutput —— 在链上它们是单独的指令判别器,舍入方式略有不同。
毕业路径选择。 migrate_type 在 Initialize{V2,WithToken2022} 时记录在 PoolState 上,决定了两个毕业指令中的哪一个可以运行。Token-2022 启动总是迁移到 CPMM。SPL Token 启动根据 amm_creator_fee_on 设置迁移到 AMM v4 或 CPMM:
BothToken→MigrateToAmm→ AMM v4 池(创建者费可以从任一侧收取;AMM v4 没有原生创建者费字段,所以创建者费通过 LP 锁定 NFT 机制而被取走)。QuoteToken→MigrateToCpswap→ 具有creator_fee_on = OnlyQuoteToken的 CPMM 池(创建者通过 LaunchLab Fee Key NFT 继续从 CPMM 池赚取费用 —— 见products/launchlab/creator-fees)。
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和费用部分。 - Newton 求解给定后费报价的
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 通常在同一交易中链接Graduate指令。程序不会在Buy内自动毕业 —— 需要后续的Graduate。
BuyExactOut
用户指定精准的 base_out;程序计算 quote_in。
参数
BuyExactIn 相同的账户。使用闭式二次积分(或 curve_type 1 的 CPMM 反函数)而不是 Newton 迭代。
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 后,将启动毕业到可交易的 AMM 池。这两个指令对应两个毕业目标 —— AMM v4 和 CPMM —— 并且对于任何给定的启动,只有其中一个有效,由 pool_state.migrate_type 决定(在 Initialize 时设置)。
谁签名
MigrateToAmm—— 绑定GlobalConfig上记录的migrate_to_amm_wallet。MigrateToCpswap—— 绑定GlobalConfig上记录的migrate_to_cpswap_wallet。
MigrateToAmm 采用三个(主要是 OpenBook 市场参数,程序转发给 AMM v4):
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)以这些储备创建毕业后的池。 - 根据绑定的
PlatformConfig.{platform_scale, creator_scale, burn_scale}(仅 CPMM)拆分生成的 LP —— 一片铸造到platform_nft_wallet,一片到由 LP-Lock 程序包装的创建者 NFT,一片通过 Burn & Earn 烧掉。对于 AMM v4 毕业,LP 处理由 AMM v4 自己的初始化参数控制。 - 撤销
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。
CollectFee
管理员收取单个启动上累积的协议交易费用。
参数 —— 无。
账户
效果 —— 将
pool_state.quote_protocol_fee 从 quote_vault 转账到 recipient_token_account,然后将计数器置零。可在第一次买入后的任何时间调用。
CollectMigrateFee
管理员收取毕业时累积的迁移费用。账户形状与 CollectFee 相同,但以 migrate_fee_owner 作为签名者(而不是 protocol_fee_owner),并以 pool_state.migrate_fee 作为排空的计数器。
ClaimCreatorFee
按创建者对使用相同报价 mint 的创建者拥有的每个启动累积的创建者费进行扫款。排空按创建者的费用金库,而非按池的费用金库。
参数 —— 无。
账户
效果 —— 将
creator_fee_vault 的整个余额转账到 recipient_token_account。如果金库为空,会回退并返回大于零检查的 require。
ClaimPlatformFee
按平台的扫款,直接排空启动的报价金库。当平台想要为一个特定启动声明其份额而不通过聚合平台金库时使用。
参数 —— 无。
账户
效果 —— 将
pool_state.platform_fee 从 quote_vault 转账到 recipient_token_account,将计数器置零。
ClaimPlatformFeeFromVault
按平台的聚合扫款。排空平台的按报价 mint 的费用金库,累积来自通过平台路由的每个启动的费用。
参数 —— 无。
账户
效果 —— 将
platform_fee_vault 的全部余额转账到 recipient_token_account。如果金库为空,则回退。
归属和平台配置指令
这些在专门的页面上记录,因为每一个都有自己的状态模型:CreateVestingAccount、CreatePlatformVestingAccount、ClaimVestedTokenCreatePlatformConfig、UpdatePlatformConfig、UpdatePlatformCurveParam、RemovePlatformCurveParam、CreatePlatformGlobalAccess、ClosePlatformGlobalAccessCreateConfig、UpdateConfig
状态变化矩阵
后续步骤
products/launchlab/code-demos—— 每个指令的 TypeScript 示例。products/launchlab/accounts—— 完整的状态形状。reference/error-codes—— LaunchLab 错误枚举。
- Raydium SDK v2
LaunchLab模块 - Raydium LaunchLab 程序源代码

