Skip to main content
本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
本項目涵蓋即將推出的 LaunchLab 程式更新。在部署前已針對本地發行分支進行驗證。在依賴新帳戶或指令之前,請確認已部署的程式。
平台原本可以透過 PlatformConfig.curve_params 限制建立者可選擇的啟動形狀。該機制僅測試完全相等:一個項目要麼將欄位固定為一個值,要麼用哨兵值進行萬用字元匹配。此外,在平台支援的每個 GlobalConfig 中最多只能有 10 個項目,且它存放在 PlatformConfig 帳戶本身上,每個項目會增加 491 位元組。 隨著協議新增設定,這三個特性產生了衝突。表達「募資目標在 50 到 200 SOL 之間」需要為每個允許的值建立一個項目,因此根本無法實現。同時,GlobalConfig 本身的下限已大幅放寬——1 bps 費率、99999 供應量上限——正是為了讓每個平台都符合要求,這導致平台無法進一步縮小範圍。 本版本用曲線規則取代白名單:每個 (platform, config) 對應一個 PlatformCurveRule 帳戶,最多可容納 10 個檢查群組,每個群組最多 25 個 (field, op, value) 約束,涵蓋 19 個啟動參數,支援 EqGteLteNeq 運算子。群組內的約束使用 AND 邏輯,群組之間使用 OR 邏輯。範圍是同一欄位上的 GteLte 完整模型和九個實作範例位於新頁面:products/launchlab/curve-rules

整合者速查表

  • PlatformConfig 保持大小和所有現有欄位偏移。 固定為 944 位元組。curve_params 已移除;restrict_curve_paramu8)、curve_rule_managerPubkey)和向量長度前綴佔用的 4 位元組全部來自填充區,填充區從 107 位元組縮減至 78 位元組。
  • 解碼器必須捨棄尾部向量。 仍期望在填充後有 Vec<PlatformCurveParam> 的解碼器會將兩個新欄位讀作向量位元組。填充前的所有內容不受影響,因此只讀取費用錢包和費率的解碼器保持正常運作。
  • 啟動建構器在旗標開啟時需要一個額外帳戶。restrict_curve_param1 時,InitializeV2InitializeWithToken2022remaining_accounts 中需要規則 PDA——包括帳戶不存在時,以防止省略它來跳過檢查。推導方式:[b"platform_curve_rule", platform_config, global_config]
  • 預設情況下沒有平台受限。 每個現有帳戶上 restrict_curve_param00 表示程式根本不讀取規則。
  • 兩個指令已移除: UpdatePlatformCurveParamRemovePlatformCurveParam。新增四個:CreatePlatformCurveRuleUpdatePlatformCurveRuleRemovePlatformCurveRuleClosePlatformCurveRule
  • UpdatePlatformConfig 新增兩個變體: 分派索引 13 的 RestrictCurveParam(u64) 和索引 14 的 CurveRuleManager(Pubkey)。現有索引 0–12 保持不變。
  • 新增七個錯誤代碼, 602460306020 CurveParamIsNotExist 保留為佔位符,儘管其最後一個呼叫者已消失,因此後續代碼不會移位。參見 reference/error-codes
  • 需要 IDL 刷新。 新帳戶類型、四個新指令、兩個已移除、兩個新分派變體、七個新錯誤代碼。
  • 在發送任何內容前離線檢查規則。 SDK 公開 checkLaunchAgainstCurveRule(鏡像啟動時檢查,包括失敗關閉行為)和 checkCurveRuleGroupWritable(鏡像寫入時驗證)。兩者都是純函數。參見發送前檢查
  • 在主網啟用前在開發網排練。 開啟 restrict_curve_param 會立即改變建立者的可用選項。建議序列——包括啟動一個應被拒絕的代幣以證明建構器確實通過規則帳戶——位於先在開發網測試

規則能表達而白名單無法表達的內容

19 個欄位包括四個衍生費率——SellRateALockRateMigrateRateAFundRaisingRateB——這使得規則可跨供應量移植,而不是固定於一個。

委派管理

PlatformConfig.curve_rule_manager 是一個熱錢包,可以建立、更新、移除和關閉該平台的規則帳戶。編輯規則是常規操作,平台管理員金鑰通常是多簽;此欄位的作用是將多簽排除在外。透過 UpdatePlatformConfig::CurveRuleManager 設定一次。 平台管理員保留相同的並行權力——程式透過從簽署者重新推導 PlatformConfig PDA 來接受——因此遺失的管理員金鑰可透過輪換此欄位來恢復。Pubkey::default() 表示僅限管理員。 被洩露的管理員金鑰可以放寬或刪除參數規則,並回收規則帳戶的租金。但它無法翻轉 restrict_curve_param、觸及任何費用錢包、質押欄位或 CPMM 設定,或破壞 GlobalConfig 限制。

租金和大小

規則帳戶建立時不含任何群組,每次變更時調整大小,因此平台只需為實際寫入的規則付費,移除群組會將差額退款給簽署者。 由於大小是動態的,解碼器必須讀取帳戶的實際長度,而不是假設常數。

啟動時的計算成本

檢查在啟用時於每次啟動時執行。端到端測量——PDA 推導、remaining_accounts 掃描、反序列化、評估: 衍生約束的成本約為 223 CU,而直接欄位讀取約為 48 CU。即使是完全加載的規則也保持在預設 200 000 CU 每指令預算的三分之一以內。群組按順序評估直到一個匹配,因此最常用的層級應放在最前面。

一次性遷移

使用白名單的平台在旗標可用前由協議在單次通過中進行遷移。一個專用授權為每個平台執行一筆交易,將每個舊版項目轉譯為其命名設定的規則帳戶的檢查群組,清除 PlatformConfig 中的項目,並將該帳戶縮減回 944 位元組。 轉譯精確保留了舊語義:每個項目變成一個群組,每個非哨兵欄位變成一個 Eq 約束,全哨兵項目——匹配每次啟動——變成無約束群組,也匹配每次啟動。 遷移寫入了規則但未啟用它們。遷移的平台保持不受限制,直到自己將 restrict_curve_param 設定為 1。遷移指令現已從程式中移除,因為通過已完成,讀取它的舊版欄位也一併移除。

未變更的內容

  • GlobalConfig 相同的佈局、相同的限制、相同的指令。規則縮小這些限制並與它們一起檢查;它們永遠無法擴寬任何限制。
  • 啟動指令的帳戶列表和參數。 InitializeV2InitializeWithToken2022 採用相同的固定帳戶和相同的參數。只有 remaining_accounts 新增一個項目,且僅在旗標開啟時。
  • 交易、畢業、費用和質押路徑。 未觸及。
  • PlatformAllowConfig 未變更且無關:它決定平台的啟動可使用哪些設定,而規則決定設定內哪些參數。兩個旗標是獨立的。
  • 錯誤代碼 60006023 未變更,包括 6020
  • PlatformConfig 的大小和填充前偏移。 未變更,因此現有帳戶無需自己遷移。

更新的頁面

  • products/launchlab/curve-rules新頁面。 三層模型、19 欄位和 4 運算子表、九個範例、曲線類型限制、兩個離線檢查助手、開發網排練序列、委派管理、租金、推出順序和計算成本。
  • products/launchlab/platform-config — 「曲線參數白名單」替換為「啟動參數規則」;佈局針對 restrict_curve_paramcurve_rule_manager 和 78 位元組填充進行更新;更新路徑表、讀取路徑片段和陷阱已重寫。
  • products/launchlab/instructions — 新增「平台啟動參數規則」部分,涵蓋四個指令、其帳戶、參數和錯誤;清單列已替換。
  • products/launchlab/accountsPlatformCurveRule 新增至清單並獲得自己的部分,含完整佈局和可變大小警告。
  • reference/error-codes60246030 已記錄;60186020 已註解。