Skip to main content
本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
本項目涵蓋即將推出的 LaunchLab 程式更新。在部署前已針對本地發佈分支進行驗證。在依賴新指令或變更的 MigrateToAmm 配置前,請確認已部署的程式。
這是 LaunchLab 停止攜帶過渡架構的發佈版本。 三個獨立機制曾用於使早期升級順利進行:get_upgrade_timestamp(一個硬編碼的截止日期,多個檢查會將時鐘與其比較)、一個已棄用的 Initialize(在該日期後三天內仍可運作)以及 MigrateToAmm 的 OpenBook 管道(在 AMM v4 於七月移除其自身 OpenBook 依賴後無法使用)。這三個機制現已全部移除。在主網上截止日期已過去數月,因此行為影響為零——但失敗模式已改變,且一個帳戶列表已大幅改變。 框架同時升級:Anchor 0.32.1 升至 =1.0.2,Agave 2.3.0 升至 3.1.10。如同 AMM v4 和 CPMM,新增了一個管理員指令用於回收租金。 交易、費用、質押、曲線規則和平台設定保持不變。

整合者速覽

  • 沒有交易指令改變其帳戶、參數或數學運算。 BuyExactInBuyExactOutSellExactInSellExactOut 位元組相同。沒有帳戶配置改變。
  • Initialize(已棄用版本)現在總是以 NotApproved6000)失敗, 在讀取任何帳戶前。請使用 InitializeV2。已透過它建立的啟動項目可正常交易和畢業。
  • MigrateToAmm 對遷移錢包造成硬性破壞。 它失去了全部三個參數(base_lot_sizequote_lot_sizemarket_vault_signer_nonce)和九個帳戶。詳見下文。
  • 三個交易 remaining_accounts 現在無條件必需,system_program 插槽已驗證。省略它們的建構者現在總是以 NotEnoughRemainingAccounts6018)失敗,而不是僅在截止日期後失敗。
  • 新增一個指令:CollectExcessLamports 僅限管理員。詳見 products/launchlab/instructions
  • 新增一個錯誤代碼:6031 LamportsCalculateError 代碼 60006030 保持不變。
  • 三個 MigrateToCpswap 位址約束移至指令主體, 將其錯誤從 ConstraintAddress2012)改為 RequireKeysEqViolated2502)。
  • 需要 IDL 刷新。 一個新指令、一組移除的參數、九個移除的帳戶、一個新的錯誤變體。

MigrateToAmm 失去了 OpenBook 部分

這是最可能造成破壞的改變。舊指令資料在判別器後攜帶 17 位元組的參數;新資料是裸判別器。舊帳戶列表攜帶九個不再存在於結構中的帳戶,因此第一次移除後的所有內容都錯位了。 移除的參數: base_lot_size: u64quote_lot_size: u64market_vault_signer_nonce: u8。這三個參數僅用於設定程式曾透過 CPI 初始化的 OpenBook 市場。該 CPI——initialize_openbook_market——已消失,驗證 nonce 的 gen_vault_signer_key 檢查也一併消失。 移除的帳戶: openbook_programrequest_queueevent_queuebidsasksmarket_vault_signermarket_base_vaultmarket_quote_vaultamm_open_orders。最後一個被移除是因為 AMM v4 的 Initialize2 不再接受它。 market 帳戶保留, 在其原始位置。AMM v4 仍將市場記錄為 AmmInfo 上的參考欄位,因此 LaunchLab 仍轉發它。關於它的兩件事改變了:程式不再初始化它,且它現在完全未驗證——其宣告是裸 #[account(mut)],沒有所有者、位址或種子約束,因為 owner = openbook_program.key()openbook_program 帳戶一起移除,沒有任何東西取代它。遷移錢包傳遞的任何內容都直接轉發至 AMM v4 的 Initialize2 CPI 並記錄在新池上。想要該欄位後面有真正初始化市場的呼叫者必須事先建立它,程式不會告知否則。 產生的 23 帳戶列表完整記錄在 products/launchlab/instructions MigrateToCpswap 不受影響——它從未有參數,其帳戶列表保持不變。

已棄用的 Initialize 總是失敗

initialize 先前執行軟棄用:它在 get_upgrade_timestamp() + 3 days 前運作,然後返回 NotApproved。隨著時間戳幫助器被刪除,失敗現在無條件——處理器現在只是 msg!err!(NotApproved) 如果你在讀取日誌,有一個細節值得注意:Accounts 結構保持不變,仍攜帶四個 init 約束,因此 Anchor 生成的帳戶驗證序言在處理器返回前執行——並建立那些帳戶。無論如何交易都會還原,所以實際上沒有建立任何東西,但失敗出現在帳戶驗證之後而不是之前。 該指令被保留而不是移除,以便其判別器保持佔用且 IDL 保持穩定形狀。其參數和帳戶定義仍值得記錄以解碼歷史交易,頁面將它們保留在警告後面。

get_upgrade_timestamp 閘道已消失

該幫助器在 localdevnet 功能下返回 0,否則返回硬編碼的主網時間戳 1755522000(2025-08-18 13:00 UTC)。四個指令將時鐘與其比較,跨越源中的五個參考。每個都無條件變成截止日期後分支: 主網時間戳已過去一年多,因此正確、最新的建構者看不到行為改變。改變的是過時的建構者現在確定性失敗,而不是看起來對 devnet 建構有效。新的 system_program 驗證是真正新的:該插槽先前接受任何帳戶。

CollectExcessLamports

SIMD-0437 的第 1 步於 2026 年 9 月 3 日在主網上線,將租金豁免最小值減少 9%,還有四個步驟待進行。每個在步驟前建立的 LaunchLab 池金庫、費用金庫和程式擁有的 PDA 現在都過度資金化。 該指令接受四個固定帳戶——簽署者/目標錢包、一個金庫授權 PDA 和兩個代幣程式——然後 remaining_accounts 中任意數量的源帳戶。 authority 插槽是值得仔細閱讀的部分。LaunchLab 有三個金庫授權 PDA(vault_auth_seedplatform_fee_vault_auth_seedcreator_fee_vault_auth_seed),指令透過重新推導全部三個並匹配來解析你傳遞的任何一個;不匹配任何一個的鑰匙以 InvalidOwner6001)失敗。因為一個呼叫攜帶一個授權,且代幣程式要求每個帳戶的實際所有者簽署,源帳戶必須按授權分組——池金庫、平台費用金庫和建立者費用金庫在單獨的交易中清掃。程式擁有的 PDA 直接扣除,可與任何授權一起進行。 包裝的 SOL 遵循 CPMM 和 AMM v4 使用的相同 SyncNative → 增量大小 UnwrapLamports → 斷言不變序列,如果往返不淨為零則返回 LamportsCalculateError6031)。SOL 報價的啟動項目保持其完整報價儲備。 基礎鑄幣無法清掃。 InitializeV2InitializeWithToken2022 在鑄造供應的同一指令中撤銷 MintTokens,因此沒有鑰匙可以簽署基礎鑄幣的 WithdrawExcessLamports。其租金被設計為擱置。 簽署者可以是共享程式管理員或專用收集 lamports 錢包;位址在 reference/program-addresses

MigrateToCpswap 約束重定位

三個帳戶約束從 Accounts 結構移至指令主體:
要求相同——全部三個仍必須匹配儲存在 PoolState 上的值。只有錯誤表面不同:Anchor 的通用 RequireKeysEqViolated2502),報告時不帶帳戶名稱,而不是 ConstraintAddress2012)命名違規帳戶。更新任何匹配這三個帳戶的 2012 的錯誤處理。

工具鏈和依賴變更

Anchor 1.0 的兩個呼叫位置變更也適用於此:Context 從四個生命週期參數縮減為一個,CpiContext::new 接受程式的 Pubkey 而不是其 AccountInfo。詳見 sdk-api/rust-cpi 兩個構建系統細節沒有鏈上效果:local 功能被 localnet 取代,它從 LAUNCHPAD_LOCALNET_ADMIN 環境變數編譯本地錢包作為 adminyarn test:local-admin 連接它),programs/launchpad/Cargo.toml 中的重複 [profile.release] 區塊被刪除——Cargo 忽略工作區根外的 [profile],因此根區塊已是有效的,包括程式級區塊的 panic = "abort" 從未應用的事實。

未改變的內容

  • 每個帳戶配置。 PoolStateGlobalConfigPlatformConfigPlatformCurveRulePlatformAllowConfig、質押記錄——相同大小、相同偏移。
  • 錯誤代碼 60006030 包括故意保留的 6020
  • 曲線數學、費率、費用累積、質押時間表和畢業 LP 分割。
  • 平台曲線規則和 GlobalConfig 允許列表。 相同指令、相同帳戶、相同語義;只有曲線規則檢查周圍的時鐘閘道消失。
  • MigrateToCpswap 的帳戶列表和 remaining_accounts 索引。
  • Token-2022 轉移費用授權在畢業時的交接。
  • 程式 ID。 保持不變。

更新的頁面

  • products/launchlab/instructions — 新增 CollectExcessLamports 及其帳戶列表、授權解析表和分組警告;記錄 MigrateToAmm 的參數和帳戶移除及完整新列表;Initialize 前置總是失敗警告;新的「交易剩餘帳戶」部分涵蓋現在無條件的三個帳戶和 system_program 檢查;清單和狀態變更矩陣行。
  • products/launchlab/overview — 發佈橫幅;「僅 CPMM」和基礎鑄幣不變量已更正。
  • products/launchlab/accounts — 鑄幣授權撤銷時機已更正為啟動項目建立(之前記錄在畢業時);新增 CollectExcessLamports 行。
  • reference/error-codes — 記錄 6031
  • reference/program-addresses — 新的「超額 lamports 收集錢包」部分。
  • solana-fundamentals/rent-and-reclaimable-rent — 新的「Raydium 程式在其自身側清掃的內容」部分。
  • sdk-api/rust-cpisolana-fundamentals/toolchain — Anchor 1.0 釘選和 CPI 遷移說明。