Documentation Index
Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
Use this file to discover all available pages before exploring further.
LaunchLab 公开了一套精简的指令集:六个用户可调用的指令,加上少数管理员原始指令。SDK 对所有这些进行了封装;本页面为聚合器、监控工具和需要使用 CPI 的程序记录了原始接口。
指令清单
| 分组 | 指令 | 可由以下调用 |
|---|
| 全局配置 | CreateConfig / UpdateConfig | 管理员 |
| 启动生命周期 | Initialize / InitializeV2 | 任何人(创建者)—— SPL Token 启动;V2 记录 amm_creator_fee_on 用于最终的 CPMM 毕业 |
| 启动生命周期 | InitializeWithToken2022 | 任何人(创建者)—— Token-2022 启动,可选的 TransferFeeConfig |
| 交易 | BuyExactIn / BuyExactOut | 任何人 —— 精准输入/精准输出买入键合曲线 |
| 交易 | SellExactIn / SellExactOut | 任何人 —— 精准输入/精准输出卖出键合曲线 |
| 毕业 | MigrateToAmm | 迁移钱包(在 GlobalConfig 上设置)—— 毕业到 AMM v4。当 amm_creator_fee_on = BothToken 时使用,以便创建者费可以从任一侧收取。 |
| 毕业 | MigrateToCpswap | 迁移钱包 —— 毕业到 CPMM。当 amm_creator_fee_on = QuoteToken 时使用,Token-2022 启动需要此项。包装 CPMM 上的 InitializeWithPermission。 |
| 费用 | CollectFee | 管理员 —— 从启动中收取协议费用 |
| 费用 | CollectMigrateFee | 管理员 —— 收取累积的迁移费用 |
| 费用 | ClaimCreatorFee | 创建者 —— 在曲线阶段声明累积的创建者费用 |
| 归属 | CreateVestingAccount | 创建者 —— 为受益人分配锁定的代币,毕业后解锁 |
| 归属 | CreatePlatformVestingAccount | 平台管理员 —— 为平台侧受益人分配锁定的代币 |
| 归属 | ClaimVestedToken | 受益人 —— 在悬崖期后声明解锁的代币 |
| 平台配置 | CreatePlatformConfig / UpdatePlatformConfig | 平台管理员 |
| 平台配置 | UpdatePlatformCurveParam / RemovePlatformCurveParam | 平台管理员 —— 管理每个平台允许的曲线形状列表 |
| 平台费用 | ClaimPlatformFee / ClaimPlatformFeeFromVault | 平台管理员 |
| 平台访问 | CreatePlatformGlobalAccess / ClosePlatformGlobalAccess | 管理员 —— 限制哪些平台可以使用给定的 GlobalConfig |
“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)。
关于 AmmCreatorFeeOn 枚举名的说明。 Rust 源代码称此枚举为 AmmCreatorFeeOn,变体为 QuoteToken 和 BothToken。该名称具有误导性:在当前的操作实践中,变体不仅控制创建者费从毕业后 CPMM 池的哪一侧收取 —— 它还选择毕业目标程序(AMM v4 与 CPMM),并与启动的 PoolState 上的 migrate_type 配对。将该字段视为”迁移目标 + 毕业后创建者费侧”合二为一。链上的枚举名尚未重构,但将其视为 MigrationTarget 更接近现实。
Initialize
创建新启动。
参数
launch_params: {
curve_type: u8,
base_supply_max: u64,
base_supply_graduation: u64,
k: u128, // 或 curve_type=1 的 initial_virtual_quote_reserve
open_time: u64,
quote_mint: Pubkey,
base_token_metadata: { // 内联 name/symbol/uri;程序 CPI 到 Metaplex
name: String,
symbol: String,
uri: String,
},
fees: {
buy_numerator: u64,
buy_denominator: u64,
sell_numerator: u64,
sell_denominator: u64,
lp_share: u64,
creator_share: u64,
protocol_share: u64,
total_share: u64,
},
post_graduation_lp_policy: u8, // 0 = Burn, 1 = Lock, 2 = ToCreator
}
账户(简化)
| # | 名称 | W | S | 说明 |
|---|
| 1 | creator | W | S | 支付租金 + base mint 创建。 |
| 2 | launch_config | | | 协议配置绑定。 |
| 3 | launch_state | W | | 新账户。 |
| 4 | launch_authority | | | PDA。 |
| 5 | base_mint | W | S | 全新 Keypair(或 PDA)—— 此指令初始化它。 |
| 6 | base_vault | W | | launch_authority 在 base_mint 上的 ATA。 |
| 7 | quote_mint | | | |
| 8 | quote_vault | W | | launch_authority 在 quote_mint 上的 ATA。 |
| 9 | metadata | W | | Metaplex 元数据 PDA。 |
| 10 | metaplex_program | | | |
| 11 | token_program | | | 仅 SPL Token。 |
| 12 | system_program | | | |
| 13 | rent | | | |
前置条件
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。
参数
quote_in: u64
minimum_base_out: u64
账户
| # | 名称 | W | S |
|---|
| 1 | user | W | S |
| 2 | launch_state | W | |
| 3 | launch_authority | | |
| 4 | base_vault | W | |
| 5 | quote_vault | W | |
| 6 | user_base_ata | W | |
| 7 | user_quote_ata | W | |
| 8 | base_mint | | |
| 9 | quote_mint | | |
| 10 | token_program | | |
| 11 | associated_token_program | | |
| 12 | system_program | | |
前置条件
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。
参数
base_out: u64
maximum_quote_in: u64
与 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):
base_lot_size: u64
quote_lot_size: u64
market_vault_signer_nonce: u8
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_amount
quote_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
管理员收取单个启动上累积的协议交易费用。
参数 —— 无。
账户
| # | 名称 | W | S | 说明 |
|---|
| 1 | protocol_fee_owner | | S | 必须等于 global_config.protocol_fee_owner。 |
| 2 | authority | | | PDA [b"vault_auth_seed"];签署金库转账。 |
| 3 | pool_state | W | | 突变为零 quote_protocol_fee。 |
| 4 | global_config | | | 签名者的真实来源。 |
| 5 | quote_vault | W | | 被 quote_protocol_fee 排空。 |
| 6 | recipient_token_account | W | | protocol_fee_owner 在 quote_mint 上的 ATA。 |
| 7 | quote_mint | | | |
| 8 | token_program | | | SPL Token(报价 mint 始终是 SPL Token)。 |
效果 —— 将 pool_state.quote_protocol_fee 从 quote_vault 转账到 recipient_token_account,然后将计数器置零。可在第一次买入后的任何时间调用。
CollectMigrateFee
管理员收取毕业时累积的迁移费用。账户形状与 CollectFee 相同,但以 migrate_fee_owner 作为签名者(而不是 protocol_fee_owner),并以 pool_state.migrate_fee 作为排空的计数器。
ClaimCreatorFee
按创建者对使用相同报价 mint 的创建者拥有的每个启动累积的创建者费进行扫款。排空按创建者的费用金库,而非按池的费用金库。
参数 —— 无。
账户
| # | 名称 | W | S | 说明 |
|---|
| 1 | creator | W | S | 池创建者。 |
| 2 | fee_vault_authority | | | PDA [b"creator_fee_vault_auth_seed"]。 |
| 3 | creator_fee_vault | W | | PDA,种子为 [creator, quote_mint];聚合创建者金库。 |
| 4 | recipient_token_account | W | | init_if_needed;creator 在 quote_mint 上的 ATA。 |
| 5 | quote_mint | | | |
| 6 | token_program | | | |
| 7 | system_program | | | 用于需要时的 ATA 创建。 |
| 8 | associated_token_program | | | |
效果 —— 将 creator_fee_vault 的整个余额转账到 recipient_token_account。如果金库为空,会回退并返回大于零检查的 require。
按平台的扫款,直接排空启动的报价金库。当平台想要为一个特定启动声明其份额而不通过聚合平台金库时使用。
参数 —— 无。
账户
| # | 名称 | W | S | 说明 |
|---|
| 1 | platform_fee_wallet | W | S | 必须等于 platform_config.platform_fee_wallet。 |
| 2 | authority | | | PDA [b"vault_auth_seed"]。 |
| 3 | pool_state | W | | 被 pool_state.platform_fee 排空。 |
| 4 | platform_config | | | 签名者的真实来源。 |
| 5 | quote_vault | W | | 被排空。 |
| 6 | recipient_token_account | W | | init_if_needed;platform_fee_wallet 的 ATA。 |
| 7 | quote_mint | | | |
| 8 | token_program | | | |
| 9 | system_program | | | |
| 10 | associated_token_program | | | |
效果 —— 将 pool_state.platform_fee 从 quote_vault 转账到 recipient_token_account,将计数器置零。
按平台的聚合扫款。排空平台的按报价 mint 的费用金库,累积来自通过平台路由的每个启动的费用。
参数 —— 无。
账户
| # | 名称 | W | S | 说明 |
|---|
| 1 | platform_fee_wallet | W | S | 必须等于 platform_config.platform_fee_wallet。 |
| 2 | fee_vault_authority | | | PDA [b"platform_fee_vault_auth_seed"]。 |
| 3 | platform_config | | | |
| 4 | platform_fee_vault | W | | PDA,种子为 [platform_config, quote_mint]。 |
| 5 | recipient_token_account | W | | init_if_needed;platform_fee_wallet 的 ATA。 |
| 6 | quote_mint | | | |
| 7 | token_program | | | |
| 8 | system_program | | | |
| 9 | associated_token_program | | | |
效果 —— 将 platform_fee_vault 的全部余额转账到 recipient_token_account。如果金库为空,则回退。
归属和平台配置指令
这些在专门的页面上记录,因为每一个都有自己的状态模型:
状态变化矩阵
| 指令 | status | real_base | real_quote | 费用计数器 | 毕业后池 |
|---|
Initialize{V2,WithToken2022} | Funding | 0 | 0 | 0 | — |
BuyExactIn(q_in) | Funding | +∆ | +∆q_after_fee | quote_protocol_fee += ∆,platform_fee += ∆ | — |
SellExactIn(b_in) | Funding | −∆ | −∆q_before_fee | (相同) | — |
| 阈值达到 | → Migrate | — | — | — | — |
MigrateToAmm / MigrateToCpswap | → Migrated | (冻结) | (冻结) | migrate_fee 设置 | 已创建,LP 按 PlatformConfig 拆分 |
CollectFee / CollectMigrateFee | 任何 | — | — | 计数器置零 | — |
ClaimCreatorFee / ClaimPlatformFee* | 任何 | — | — | 排空金库 | — |
CreateVestingAccount | Funding | — | — | — | 碰撞 allocated_share_amount |
ClaimVestedToken | Migrated | — | — | — | 排空 base_vault |
后续步骤
来源: