本頁內容由 AI 自動翻譯,所有內容以英文版本為準。查看英文版 →
曲線規則是平台對「我願意託管哪些啟動?」的回答。
GlobalConfig 設定協議下限 — 至少 10M 供應量、至少 20% 的供應量在曲線上銷售等等 — 這些下限刻意設得很寬鬆,以便每種平台都能符合。曲線規則是你的平台將其縮小到你的產品實際支援的形狀的地方。規則存放在自己的 PlatformCurveRule 帳戶中,每個 (平台、GlobalConfig) 配對一個。它們只能縮小配置已允許的內容;規則永遠無法擴寬協議限制。心智模型
三個層級,從外到內:- 一個群組內的約束是 AND 的。 所有約束都必須成立。
- 一個規則內的群組是 OR 的。 啟動一旦滿足任何單一群組就被允許。
規則只在
PlatformConfig.restrict_curve_param 為 1 時生效。在 0 時,程式根本不讀取規則,這也是你用來推出規則和回滾規則的開關。
約束
約束是一個(欄位、運算子、值) 三元組。沒有其他東西 — 沒有表達式、沒有嵌套。
Gte 作為下限,一個 Lte 作為上限。同一 (欄位、運算子) 配對在一個群組內不能出現兩次,這防止你寫出兩個矛盾的最小值。
欄位
欄位 ID 是永久的。新欄位只會被追加,所以一旦規則帳戶持有它,ID 的含義就永遠不會改變。
衍生欄位是使規則可移植的原因。將
Supply 和 TotalFundRaisingB 固定到精確數字會固定一個啟動形狀;限制 FundRaisingRateB 會固定它們之間的關係,讓創作者選擇任何保持它的供應量。
九個範本
下面的每個範本都是一個規則。約束寫成(欄位、運算子、值)。
1. 一個標準分層
最簡單的規則,也是已停用的曲線參數白名單提供的精確行為:一個形狀,固定。
任何在三個中任何一個偏離的啟動都被拒絕,錯誤為
CurveParamNotMatchPlatformRule。
2. 帶而不是數字
帶存在的原因:創作者選擇你滿意的募資目標,無需你列舉每個值。
一個群組、四個約束,創作者有 50–200 SOL 的走廊。在舊白名單下,這需要每個允許值一個條目,十個條目的上限使其不可能。
3. 並排的分層
群組是 OR 的,所以每個分層是一個群組。
順序對計算很重要,對語義不重要:評估在第一個匹配的群組處停止,所以把你最常用的分層放在前面。
4. 畢業估值帶
FundRaisingRateB 是 TotalFundRaisingB / Supply 以百萬分之一計。限制它會限制代幣畢業的豐富程度,無論創作者選擇的供應量如何。
使用 1e12 供應量和 9 位小數報價鑄幣,
85e9 / 1e12 × 1e6 = 85_000 位於該帶內。創作者若將供應量翻倍,必須大致將目標翻倍以保持在其內 — 這就是重點。兩個約束替代了原本需要的 (供應量、目標) 配對表。
5. 遷移下限
MigrateRateA 是實際進入 CPMM 池的供應量份額,在畢業時:Supply − TotalSellA − TotalLockedAmount,除以供應量。它是畢業池的深度,也是唯一在規則出現前沒有平台端等效物的協議旋鈕。
至少 15% 的供應量進入池。創作者不能在曲線上銷售 95% 並留下淺薄的帳簿。
如果參數不相加 — 鎖定金額大於曲線銷售後剩餘的 — 衍生值無法計算,約束失敗關閉,所以啟動被拒絕而不是無聲地允許。
6. 你實際執行的歸屬
GlobalConfig.max_lock_rate 從上方限制歸屬。規則可以在其下放置下限,並要求真正的懸崖。
供應量的 5% 到 20% 歸屬,至少 30 天的懸崖。對於其宣傳是「無即時解鎖啟動」的平台很有用。
7. 代幣類型閘門
BaseTokenProgram 和 TransferFeeEnabled 是獨立的,這很重要:沒有 TransferFeeConfig 的 Token-2022 鑄幣報告 TransferFeeEnabled = 0,就像 SPL Token 鑄幣一樣。
8. 條件轉帳費上限
沒有「if」運算子,也不需要 — 兩個群組表達條件。
零速率
TransferFeeConfig 不會通過群組 0:擴展存在,所以 TransferFeeEnabled 是 1,只有群組 1 可以接受它。
9. 時間限制促銷,提前排程
UnixTimestamp 是啟動的區塊時間,所以一個群組可以攜帶自己的有效期窗口。你今天寫兩個群組,切換在自己發生。
邊界處不需要交易。成本是兩個群組槽而不是一個。
曲線類型限制
四個欄位讀取TotalSellA:TotalSellA、SellRateA、MigrateAmountA 和 MigrateRateA。在常數乘積配置上,創作者提供該數字。在固定價格或線性價格配置上,曲線改為衍生它,程式比較的值是 0,這會拒絕每個啟動。
與其讓你寫一個無聲地阻止你自己配置的規則,程式在非常數乘積配置上在寫入時拒絕這四個欄位,錯誤為 CurveRuleFieldNotSupportedByCurve。目前只存在常數乘積配置,所以實踐中你不會遇到此錯誤。
發送前檢查
鏈上檢查的兩個方向都可離線使用,所以創作者和平台都不必通過觀看交易回滾來學習規則。版本橫幅。
- SDK:
@raydium-io/raydium-sdk-v2@0.2.42-alpha是本網站上每個其他代碼演示所固定的版本。下面的兩個幫助器隨著 SDK 發佈曲線規則支援而到達;在那之前,從程式的platform_curve_rule.rs移植它們或呼叫程式並讀取錯誤代碼。 - 叢集:先在 Solana
devnet上測試 — 見 先在 devnet 上測試。 - 程式 ID:見
reference/program-addresses
在啟動前:這些參數會通過嗎?
checkLaunchAgainstCurveRule 精確鏡像程式的啟動時檢查,包括其失敗關閉行為。在你的啟動表單中執行它,你可以用原因禁用提交按鈕,而不是讓創作者為回滾交易付費。
- 缺失的規則帳戶和沒有群組的規則都通過。 沒有約束的群組也是。為不存在的帳戶傳遞
rule: undefined;不要將其視為拒絕。 - 不可計算的值失敗關閉。 零供應量沒有速率,鎖定金額大於曲線銷售留下的沒有遷移金額。
actual回來undefined,約束計為不滿足,完全如鏈上。 - 報告所有失敗的約束,不只是第一個。 程式短路因為它只需要判決;幫助器收集一切,所以你的表單可以一次列出每個問題。
UnixTimestamp,將通過視為暫定。
在寫規則前:這個群組有效嗎?
checkCurveRuleGroupWritable 鏡像 UpdatePlatformCurveRule 的寫入時驗證 — 約束 ID、重複 (欄位、運算子) 規則、兩個計數限制和曲線類型限制。在簽署前在你的平台管理工具中執行它。
通過此檢查意味著交易不會因格式不正確而被拒絕。它對規則是否是你的意思沒有說什麼 — 一個群組可以完全有效,仍然拒絕你的 UI 可以產生的每個啟動。這就是上面的啟動端檢查的用途:寫入群組後,通過
checkLaunchAgainstCurveRule 執行你的產品提供的每個形狀,並確認每個仍然找到一個群組。先在 devnet 上測試
在主網上啟用restrict_curve_param 會立即改變你的創作者可以做的事,對每個啟動。在觸及主網前在 devnet 上排練整個序列:
- 在 devnet 上建立平台配置和規則,並寫入你打算發佈的相同群組。
- 通過
checkLaunchAgainstCurveRule執行你的 UI 可以產生的每個啟動形狀,並確認判決是你期望的 — 應該通過的形狀和應該被拒絕的形狀。 - 啟用
restrict_curve_param,然後實際啟動應該通過的代幣和應該被拒絕的代幣。第二個應該失敗,錯誤為CurveParamNotMatchPlatformRule(6025),而不是NotEnoughRemainingAccounts(6018) — 後者意味著你的建構器沒有追加規則 PDA,檢查沒有真正被執行。 - 只有在主網上重複,順序相同。
cluster: "devnet" 當你載入它時,並從 reference/program-addresses 取得 devnet 程式 ID。
第 3 步是值得堅持的。離線幫助器和鏈上程式是相同規則的兩個實現,devnet 啟動是證明它們對你的規則一致的 — 包括你的啟動建構器是否根本傳遞帳戶。
操作規則
委派的管理員
編輯規則是日常工作;平台管理員金鑰通常是多簽。PlatformConfig.curve_rule_manager 正是為此而存在:通過 UpdatePlatformConfig::CurveRuleManager 設定一次,該熱錢包可以自己建立、更新、移除和關閉規則帳戶。平台管理員並行保留相同的權力,所以丟失的管理員金鑰是可恢復的 — 用另一個管理員呼叫輪換它。
受損管理員金鑰的範圍:它可以鬆動或刪除你的參數規則,可以回收規則帳戶的租金。它不能觸及費用錢包、歸屬、CPMM 配置、不能翻轉 restrict_curve_param,不能破壞 GlobalConfig 限制。將其視為配置金鑰,而不是金庫金鑰。
租金跟隨內容
規則帳戶建立時不持有群組,並在每次更改時調整大小,所以你為實際寫入的規則付費。移除群組會將差額退款給簽署者。推出順序
- 在 devnet 上排練整個序列 — 見 先在 devnet 上測試。
- 建立規則帳戶並寫入其群組。還沒有任何改變 — 使用
restrict_curve_param仍為0程式不讀取它們。 - 使用
checkLaunchAgainstCurveRule離線檢查規則:對於你的 UI 可以產生的每個啟動形狀,確認某個群組接受它。 - 將
restrict_curve_param設定為1。從那一刻起,你的創作者的啟動被檢查。 - 要回滾,再次將其設定為
0。規則帳戶保持完整。
啟動時的成本
檢查在啟用時在每個啟動上執行,所以其計算成本是每次啟動稅。端到端測量 — PDA 衍生、remaining_accounts 掃描、反序列化和評估:
「便宜」是直接欄位讀取,如
Supply;「衍生」是計算的,如 MigrateRateA,每個約束成本約 223 CU,而直接讀取約 48。即使是完全載入的衍生約束規則也保持在預設 200 000 CU 每指令預算的三分之一以內,現實的三群組規則在 6 000 以下。群組被評估直到一個匹配,所以將你的常見分層放在前面是免費節省。
下一步去哪裡
products/launchlab/platform-config— 閘門和委派規則的PlatformConfig欄位。products/launchlab/global-config— 規則縮小的協議下限。products/launchlab/instructions— 四個規則指令及其帳戶。products/launchlab/accounts— 帳戶清單中的PlatformCurveRule。sdk-api/typescript-sdk— 兩個檢查幫助器所在的 SDK 表面。reference/changelog/2026-08-31-launchlab-platform-curve-rules— 替代曲線參數白名單的內容,以及解碼器必須改變的內容。
raydium-launch/programs/launchpad/src/states/platform_curve_rule.rs—PlatformCurveRule、CurveRuleGroup、ParamConstraint、欄位和運算子 ID 空間,以及CurveRuleContext::value_of。raydium-launch/programs/launchpad/src/utils/platform_curve_rule.rs— 啟動時檢查。raydium-launch/programs/launchpad/src/instructions/platform/—create、update、remove和close_platform_curve_rule。

