Skip to main content
本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
LaunchLab 提供一套精簡的指令集:六個面向使用者的呼叫加上少數管理員原語。SDK 包裝了所有指令;本頁面記錄了原始介面,供聚合器、監控工具和需要 CPI 的程式使用。

指令清單

「ExactIn/ExactOut」分割鏡像 CPMM 的 SwapBaseInput / SwapBaseOutput — 在鏈上它們是具有略微不同舍入的獨立指令判別器。 畢業路徑選擇。 每個新的 InitializeInitializeV2InitializeWithToken2022 呼叫必須設定 migrate_type = 1CPSWAP)。任何嘗試初始化新的 AMM v4 綁定資金池都會返回 MigrateTypeNotMatchamm_creator_fee_on 僅選擇結果 CPMM 建立者費用是否適用於報價代幣或兩個代幣;它不選擇目標程式。 MigrateToAmm 對於在此限制之前以 migrate_type = 0 初始化的現有 PoolState 仍可呼叫。此版本不會重寫現有資金池狀態或移除舊版指令。 報價端代幣程式。 報價代幣可由 SPL Token 程式或 Token-2022 擁有。每個涉及它的指令 — CreateConfigInitializeV2InitializeWithToken2022、所有四個交易指令、CollectFeeCollectMigrateFeeClaimCreatorFeeClaimPlatformFeeClaimPlatformFeeFromVault — 在其報價程式帳戶槽中取得擁有程式。帳戶位置未改變;僅接受的值改變了。傳遞實際擁有 GlobalConfig.quote_mint 的程式,你可以從現有啟動的 PoolState.token_program_flag bit1 讀取(見accounts)或從代幣帳戶的擁有者讀取。 已棄用的 Initialize 是例外:其報價程式帳戶仍然被類型化為 SPL Token,因此報價代幣為 Token-2022 的設定必須透過 InitializeV2InitializeWithToken2022 啟動。 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_mintsupply = 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 計算(大約)。
  • 對於附加 TransferFeeConfigInitializeWithToken2022transfer_fee_config_authority = launch_authority,且 withdraw_withheld_authority = PlatformConfig.transfer_fee_extension_auth(當該欄位被設定時),否則 launch_authority。提取端在代幣建立時寫入,正是為了讓平台可以在畢業前清掃扣留的費用。見platform-config
常見錯誤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. 牛頓求解曲線以獲得給定後費用報價的 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 ix。程式不在 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
效果 — 對稱於 Buybase_sold 減少,quote_reserve_real 減少。費用仍然累積。

報價端轉帳費用

當報價代幣攜帶 TransferFeeConfig 時,金庫移動的金額和支付者被扣除或貸記的金額不同,滑點界限針對支付者端檢查。在沒有擴展的報價代幣上,下面的每個情況都與普通舊版代幣相同。 報價的兩個後果:
  • 計算為代幣無費用的界限被拒絕。傳遞無費用成本作為 maximum_amount_in,或無費用收益作為 minimum_amount_out,還原為 ExceededSlippage
  • real_quote 僅按到達金庫的金額推進。5% 報價代幣上的 BuyExactIn amount_in 移動 real_quote amount_in × 0.95
100% 費用報價代幣(10000 基點)無法反轉,在精確輸出路徑上還原為 CalculateOverflow 兩個交易端代幣也被限制為在其匹配槽中傳遞的程式,因此不匹配的 base_token_program 現在失敗而不是被忽略。見algorithms/token-2022-transfer-fees以了解基礎費用數學。

MigrateToAmm / MigrateToCpswap

一旦曲線達到 total_quote_fund_raising,將啟動畢業至可交易的資金池。新啟動僅限 CPMM。MigrateToAmm 為存儲 migrate_type0 的現有資金池保留。 誰簽署
  • 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. 對於在 2026-08-17 升級後執行的 CPMM 遷移,將 platform_scale + creator_scale 合併為一個平台擁有的鎖定 LP 份額,並最多向 platform_nft_wallet 鑄造一個費用金鑰 NFT。燒毀 burn_scale 餘額。在升級之前,creator_scale 被單獨鎖定,其費用金鑰去往代幣建立者。已完成的歷史遷移不被修改。對於舊版 AMM v4 畢業,LP 配置遵循該指令的現有流程。
  6. 撤銷 base_mint.mint_authority(設定為 None)。
  7. 翻轉 pool_state.status = Migrated,設定 vesting_schedule.start_time = block_time + cliff_period
Token-2022 轉帳費用授權移交 — 當基礎代幣是攜帶 TransferFeeConfig 的 Token-2022 代幣 PlatformConfig.transfer_fee_extension_auth 非預設時,遷移也將該擴展的授權重新分配給平台金鑰:
  • transfer_fee_config_authority 總是被重新分配。啟動 authority PDA 在整個畢業前階段持有它,因此總有東西要移動。
  • WithheldWithdraw 僅當 authority PDA 仍持有它時才被重新分配。從 2026-08-27 起建立的啟動已經在代幣建立時在該授權上攜帶 transfer_fee_extension_auth,因此該步驟被跳過。守衛是防止遷移在這些代幣上還原的原因 — PDA 無法簽署它不再持有的授權。
如果 transfer_fee_extension_auth 在遷移時是 Pubkey::default(),兩個授權都不移動,兩者都永久留在 authority PDA。見platform-config 後置條件BuyExactInBuyExactOutSellExactInSellExactOut 從此點起將以 PoolMigrated 拒絕。結果 AMM 資金池是規範的,交易如同任何其他 AMM v4 / CPMM 資金池。 常見錯誤PoolFundingPoolMigratedMigrateTypeNotMatchInvalidCpSwapConfigMathOverflow

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;不需要允許帳戶。
  • 1InitializeInitializeV2InitializeWithToken2022 必須在 remaining_accounts 中的任何地方包含匹配的 PlatformAllowConfig
平台管理員使用 CreatePlatformAllowConfigClosePlatformAllowConfig 建立或關閉 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_param1 時,InitializeV2InitializeWithToken2022remaining_accounts 中需要規則 PDA — 包括當它不存在時,以便省略它無法跳過檢查。缺少帳戶是 NotEnoughRemainingAccounts;不滿足任何群組的啟動是 CurveParamNotMatchPlatformRule。檢查在 GlobalConfig 自己的限制之前執行,只能縮小它們。模型和劇本:products/launchlab/curve-rules。兩個錯誤都可在客戶端避免 — SDK 將此檢查鏡像為純函數,見發送前檢查

CollectFee

管理員清掃單個啟動上協議累積的交易費用。 參數 — 無。 帳戶 效果 — 從 quote_vault 轉帳 pool_state.quote_protocol_feerecipient_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_feerecipient_token_account,將計數器歸零。

ClaimPlatformFeeFromVault

每個平台聚合清掃。排空平台的每個報價代幣費用金庫,該金庫從通過平台路由的每個啟動累積費用。 參數 — 無。 帳戶 效果 — 轉帳 platform_fee_vault 的全部餘額至 recipient_token_account。如果金庫為空,還原。

歸屬和平台設定指令

這些在專用頁面上記錄,因為每個都有自己的狀態模型:

狀態變更矩陣

下一步

來源: