本頁內容由 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 仍可呼叫。此版本不會重寫現有資金池狀態或移除舊版指令。
報價端代幣程式。 報價代幣可由 SPL Token 程式或 Token-2022 擁有。每個涉及它的指令 — CreateConfig、InitializeV2、InitializeWithToken2022、所有四個交易指令、CollectFee、CollectMigrateFee、ClaimCreatorFee、ClaimPlatformFee 和 ClaimPlatformFeeFromVault — 在其報價程式帳戶槽中取得擁有程式。帳戶位置未改變;僅接受的值改變了。傳遞實際擁有 GlobalConfig.quote_mint 的程式,你可以從現有啟動的 PoolState.token_program_flag bit1 讀取(見accounts)或從代幣帳戶的擁有者讀取。
已棄用的 Initialize 是例外:其報價程式帳戶仍然被類型化為 SPL Token,因此報價代幣為 Token-2022 的設定必須透過 InitializeV2 或 InitializeWithToken2022 啟動。
MigrateToCpswap 是另一個例外,方向相反 — 它無條件地取得兩個程式,而不是每個代幣一個。見下面的遷移帳戶。
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計算(大約)。- 對於附加
TransferFeeConfig的InitializeWithToken2022:transfer_fee_config_authority = launch_authority,且withdraw_withheld_authority = PlatformConfig.transfer_fee_extension_auth(當該欄位被設定時),否則launch_authority。提取端在代幣建立時寫入,正是為了讓平台可以在畢業前清掃扣留的費用。見platform-config。
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 減少。費用仍然累積。
報價端轉帳費用
當報價代幣攜帶TransferFeeConfig 時,金庫移動的金額和支付者被扣除或貸記的金額不同,滑點界限針對支付者端檢查。在沒有擴展的報價代幣上,下面的每個情況都與普通舊版代幣相同。
報價的兩個後果:
- 計算為代幣無費用的界限被拒絕。傳遞無費用成本作為
maximum_amount_in,或無費用收益作為minimum_amount_out,還原為ExceededSlippage。 real_quote僅按到達金庫的金額推進。5% 報價代幣上的BuyExactInamount_in移動real_quoteamount_in × 0.95。
10000 基點)無法反轉,在精確輸出路徑上還原為 CalculateOverflow。
兩個交易端代幣也被限制為在其匹配槽中傳遞的程式,因此不匹配的 base_token_program 現在失敗而不是被忽略。見algorithms/token-2022-transfer-fees以了解基礎費用數學。
MigrateToAmm / MigrateToCpswap
一旦曲線達到 total_quote_fund_raising,將啟動畢業至可交易的資金池。新啟動僅限 CPMM。MigrateToAmm 為存儲 migrate_type 為 0 的現有資金池保留。
誰簽署
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)以使用這些儲備建立畢業後資金池。 - 對於在 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。
TransferFeeConfig 的 Token-2022 代幣且 PlatformConfig.transfer_fee_extension_auth 非預設時,遷移也將該擴展的授權重新分配給平台金鑰:
transfer_fee_config_authority總是被重新分配。啟動authorityPDA 在整個畢業前階段持有它,因此總有東西要移動。WithheldWithdraw僅當authorityPDA 仍持有它時才被重新分配。從 2026-08-27 起建立的啟動已經在代幣建立時在該授權上攜帶transfer_fee_extension_auth,因此該步驟被跳過。守衛是防止遷移在這些代幣上還原的原因 — PDA 無法簽署它不再持有的授權。
transfer_fee_extension_auth 在遷移時是 Pubkey::default(),兩個授權都不移動,兩者都永久留在 authority PDA。見platform-config。
後置條件 — BuyExactIn、BuyExactOut、SellExactIn、SellExactOut 從此點起將以 PoolMigrated 拒絕。結果 AMM 資金池是規範的,交易如同任何其他 AMM v4 / CPMM 資金池。
常見錯誤 — PoolFunding、PoolMigrated、MigrateTypeNotMatch、InvalidCpSwapConfig、MathOverflow。
CPMM 遷移剩餘帳戶
建立MigrateToCpswap 的客戶端必須使用這些固定的 remaining_accounts 索引:
該指令在升級路徑上至少需要十個剩餘帳戶。支援代幣帳戶是唯讀 CPI 輸入。即使代幣沒有初始化的支援記錄,也要衍生兩個地址。仍然附加建立者鎖定帳戶或省略索引 8–9 的舊版建立者必須更新。
CPMM 遷移代幣程式
MigrateToCpswap 無條件地取兩個代幣程式,並自己計算出哪個程式擁有每個代幣。其兩個代幣程式帳戶被相應地重新命名:
它們替換了前者的
base_token_program(無論哪個程式擁有基礎代幣)和 quote_token_program(總是舊版)。位置未改變,因此這是值變更而不是佈局變更 — 但兩個值幾乎相反,保持傳遞舊對的建立者一旦任一代幣是 Token-2022 代幣就會在需要舊版程式的地方提供 Token-2022。
舊版程式是必需的,即使兩個代幣都不使用它,因為 CPMM LP 代幣和鎖定流動性費用金鑰 NFT 總是存在於它上面。
平台 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 已停用。
平台啟動參數規則
四個指令管理一個PlatformCurveRule 帳戶。所有四個都由 PlatformConfig.curve_rule_manager 或平台管理員簽署 — 程式透過從簽署者重新衍生 PlatformConfig PDA 接受管理員,因此沒有單獨帳戶證明它。既不是的簽署者返回 InvalidCurveRuleAuthority。
platform_curve_rule 是 [b"platform_curve_rule", platform_config, global_config] 處的 PDA。
Create分配不持有任何群組的帳戶。該狀態不限制任何東西。Update使用該group_id更新插入群組,如果存在則完全替換它。它調整帳戶大小以適應,因此簽署者補充它增長的租金並收回它縮小的租金。超過第十個的新群組返回CurveRuleGroupsExceeded;超過 25 個約束、未知欄位或運算子,或同一群組中相同的(field, op)對兩次返回InvalidCurveRuleConstraint;非常數乘積設定上的四個TotalSellA衍生欄位返回CurveRuleFieldNotSupportedByCurve。Remove按 id 刪除一個群組,縮小帳戶並退款差額。未知 id 返回CurveRuleGroupNotExist。Close將整個租金返回給簽署者。即使restrict_curve_param保持1,設定也不受限制。
UpdatePlatformConfig::RestrictCurveParam(0 | 1),僅平台管理員可呼叫。
在啟動路徑上。 當 restrict_curve_param 是 1 時,InitializeV2 和 InitializeWithToken2022 在 remaining_accounts 中需要規則 PDA — 包括當它不存在時,以便省略它無法跳過檢查。缺少帳戶是 NotEnoughRemainingAccounts;不滿足任何群組的啟動是 CurveParamNotMatchPlatformRule。檢查在 GlobalConfig 自己的限制之前執行,只能縮小它們。模型和劇本:products/launchlab/curve-rules。兩個錯誤都可在客戶端避免 — SDK 將此檢查鏡像為純函數,見發送前檢查。
CollectFee
管理員清掃單個啟動上協議累積的交易費用。
參數 — 無。
帳戶
效果 — 從
quote_vault 轉帳 pool_state.quote_protocol_fee 至 recipient_token_account,然後將計數器歸零。可在第一次買入後的任何時間呼叫。
CollectMigrateFee
管理員清掃在畢業時累積的遷移費用。與 CollectFee 相同的帳戶形狀,但簽署者是 migrate_fee_owner(而不是 protocol_fee_owner),排空的計數器是 pool_state.migrate_fee。
ClaimCreatorFee
每個建立者清掃跨建立者擁有的每個啟動使用相同報價代幣的累積建立者費用。排空每個建立者費用金庫,而不是每個資金池的。
參數 — 無。
帳戶
效果 — 轉帳
creator_fee_vault 的全部餘額至 recipient_token_account。如果金庫為空,還原為大於零檢查。
ClaimPlatformFee
每個平台清掃,直接排空啟動的報價金庫。當平台想為一個特定啟動領取其份額而不經過聚合平台金庫時使用。
參數 — 無。
帳戶
效果 — 從
quote_vault 轉帳 pool_state.platform_fee 至 recipient_token_account,將計數器歸零。
ClaimPlatformFeeFromVault
每個平台聚合清掃。排空平台的每個報價代幣費用金庫,該金庫從通過平台路由的每個啟動累積費用。
參數 — 無。
帳戶
效果 — 轉帳
platform_fee_vault 的全部餘額至 recipient_token_account。如果金庫為空,還原。
歸屬和平台設定指令
這些在專用頁面上記錄,因為每個都有自己的狀態模型:CreateVestingAccount、CreatePlatformVestingAccount、ClaimVestedTokenCreatePlatformConfig、UpdatePlatformConfig、CreatePlatformAllowConfig、ClosePlatformAllowConfigCreatePlatformCurveRule、UpdatePlatformCurveRule、RemovePlatformCurveRule、ClosePlatformCurveRuleCreateConfig、UpdateConfig
狀態變更矩陣
下一步
products/launchlab/code-demos— 每個指令的 TypeScript 範例。products/launchlab/accounts— 完整狀態形狀。reference/error-codes— LaunchLab 錯誤列舉。
- Raydium SDK v2
LaunchLab模組 - Raydium LaunchLab 程式原始碼

