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(镜像写入时验证)。两者都是纯函数。见 发送前检查
  • 在主网启用前在 devnet 上排练。 启用 restrict_curve_param 会立即改变创建者的可用操作。推荐序列——包括启动一个应被拒绝的代币以证明构建器确实通过规则账户检查——见 先在 devnet 测试

规则能表达而白名单不能的内容

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 操作符表、九个示例、曲线类型限制、两个离线检查助手、devnet 排练序列、委托管理、租金、推出顺序和计算成本。
  • products/launchlab/platform-config — “曲线参数白名单”替换为”启动参数规则”;布局针对 restrict_curve_paramcurve_rule_manager 和 78 字节填充更新;更新路径表、读取路径代码片段和陷阱重写。
  • products/launchlab/instructions — 新增”平台启动参数规则”部分,涵盖四条指令、其账户、参数和错误;库存行替换。
  • products/launchlab/accountsPlatformCurveRule 添加到库存并获得自己的部分,包含完整布局和可变大小警告。
  • reference/error-codes60246030 已记录;60186020 已注释。