Skip to main content
本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
LaunchLab 公开了一套精简的指令集:六个用户可调用的指令,加上少数管理员原始指令。SDK 对所有这些进行了封装;本页面为聚合器、监控工具和需要使用 CPI 的程序记录了原始接口。

指令清单

“ExactIn/ExactOut” 的拆分镜像了 CPMM 的 SwapBaseInput / SwapBaseOutput —— 在链上它们是单独的指令判别器,舍入方式略有不同。 毕业路径选择。 migrate_typeInitialize{V2,WithToken2022} 时记录在 PoolState 上,决定了两个毕业指令中的哪一个可以运行。Token-2022 启动总是迁移到 CPMM。SPL Token 启动根据 amm_creator_fee_on 设置迁移到 AMM v4 或 CPMM:
  • BothTokenMigrateToAmm → AMM v4 池(创建者费可以从任一侧收取;AMM v4 没有原生创建者费字段,所以创建者费通过 LP 锁定 NFT 机制而被取走)。
  • QuoteTokenMigrateToCpswap → 具有 creator_fee_on = OnlyQuoteToken 的 CPMM 池(创建者通过 LaunchLab Fee Key NFT 继续从 CPMM 池赚取费用 —— 见 products/launchlab/creator-fees)。
关于 AmmCreatorFeeOn 枚举名的说明。 Rust 源代码称此枚举为 AmmCreatorFeeOn,变体为 QuoteTokenBothToken。该名称具有误导性:在当前的操作实践中,变体不仅控制创建者费从毕业后 CPMM 池的哪一侧收取 —— 它还选择毕业目标程序(AMM v4 与 CPMM),并与启动的 PoolState 上的 migrate_type 配对。将该字段视为”迁移目标 + 毕业后创建者费侧”合二为一。链上的枚举名尚未重构,但将其视为 MigrationTarget 更接近现实。

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_authorityfreeze_authority = None
  • LaunchState 初始化,status = Activebase_sold = 0quote_reserve_real = 0
  • quote_reserve_target 从曲线参数 + base_supply_graduation + buy_numerator 计算(大约)。
常见错误 —— InvalidQuoteMintFeeRateTooHighInvalidCurveParamsMathOverflow

Buy(规范变体:BuyExactIn

用户提供固定的 quote_in;曲线计算 base_out 参数
账户 前置条件
  • launch_state.status == Active
  • now ≥ open_time
  • user_quote_ata.balance ≥ quote_in
  • quote_in > 0
效果
  1. quote_in 拆分为 quote_in_after_fee 和费用部分。
  2. Newton 求解给定后费报价的 base_out 的曲线。
  3. require(base_out ≥ minimum_base_out) 否则回退 ExceededSlippage
  4. 移动 quote_in 用户 → 金库。移动 base_out 金库 → 用户。
  5. 更新 base_sold += base_outquote_reserve_real += quote_in_after_fee × (lp_share / total_share)
  6. 更新费用计数器(protocol_fees_quotecreator_fees_quote)。
  7. state_data.num_buys += 1
  8. 如果更新后 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
这些钱包通常由 Raydium 运营的毕业 crank 持有;实际上毕业在阈值被超越后几秒内登陆,无论谁触发了最终买入。 参数 MigrateToAmm 采用三个(主要是 OpenBook 市场参数,程序转发给 AMM v4):
MigrateToCpswap 不采用任何参数。 效果(两者共同)
  1. 验证 pool_state.status == Migrate(即 quote_reserve_target 已被达到)。否则用 PoolMigrated(状态已是 Migrated)或 PoolFunding(仍在筹资中)回退。
  2. 验证 pool_state.migrate_type 与指令匹配(AMM 为 0,CPMM 为 1)。否则用 MigrateTypeNotMatch 回退。
  3. 计算毕业后的储备:
    • base_amount_out = base_vault.amount − vesting_schedule.total_locked_amount
    • quote_amount_out = quote_vault.amount − quote_protocol_fee − migrate_fee − platform_fee
  4. CPI 到目标程序(AMM v4 Initialize2CPMM InitializeWithPermission)以这些储备创建毕业后的池。
  5. 根据绑定的 PlatformConfig.{platform_scale, creator_scale, burn_scale}(仅 CPMM)拆分生成的 LP —— 一片铸造到 platform_nft_wallet,一片到由 LP-Lock 程序包装的创建者 NFT,一片通过 Burn & Earn 烧掉。对于 AMM v4 毕业,LP 处理由 AMM v4 自己的初始化参数控制。
  6. 撤销 base_mint.mint_authority(设置为 None)。
  7. 翻转 pool_state.status = Migrated,设置 vesting_schedule.start_time = block_time + cliff_period
后置条件 —— BuyExactInBuyExactOutSellExactInSellExactOut 从此时起将用 PoolMigrated 拒绝。生成的 AMM 池是规范的,交易如任何其他 AMM v4 / CPMM 池。 常见错误 —— PoolFundingPoolMigratedMigrateTypeNotMatchInvalidCpSwapConfigMathOverflow

CollectFee

管理员收取单个启动上累积的协议交易费用。 参数 —— 无。 账户 效果 —— 将 pool_state.quote_protocol_feequote_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_feequote_vault 转账到 recipient_token_account,将计数器置零。

ClaimPlatformFeeFromVault

按平台的聚合扫款。排空平台的按报价 mint 的费用金库,累积来自通过平台路由的每个启动的费用。 参数 —— 无。 账户 效果 —— 将 platform_fee_vault 的全部余额转账到 recipient_token_account。如果金库为空,则回退。

归属和平台配置指令

这些在专门的页面上记录,因为每一个都有自己的状态模型:

状态变化矩阵

后续步骤

来源: