Skip to main content
本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
PlatformConfig 是位于 GlobalConfig 之上的平台级覆盖层。GlobalConfig 定义协议范围的规则(“交易费为 1%,供应量至少 1000 万,只有这个钱包可以毕业”),而 PlatformConfig 是每个启动平台(pump.fun、Raydium 自有 UI、第三方启动板)用来添加其费用、声称毕业后 LP 的份额、限制其启动可以选择的启动参数,以及在链上展示其品牌(名称、网站、图像)的方式。

概述

PlatformConfig 账户为平台拥有五个跨领域的关注点:
  1. 品牌 — 名称、网站、图像链接,全部内联存储,以便任何浏览器或聚合器都可以显示启动代币的平台。
  2. 平台费 — 在协议 trade_fee_rate 之上的额外交易费(fee_rate)。累积到平台的 platform_fee_wallet。在创建和更新路径上均限制为 500 bps(50000),从 2026-08-26 的 100 bps(10000)提高 — 见费率上限
  3. LP 迁移分割 — 三个存储的整数(platform_scalecreator_scaleburn_scale),总和为 1_000_000。在 2026-08-17 升级之前,创建者规模产生单独的创建者费用密钥。升级后执行的迁移将前两个合并为一个平台拥有的锁定 LP 份额;其余的被销毁。
  4. 启动参数规则 — 可选的限制(restrict_curve_param),要求启动满足其选择的 GlobalConfigPlatformCurveRule 账户。规则支持值范围、替代层级和代币类型门控;它们存在于自己的账户中,而不是在 PlatformConfig 上。
  5. 全局配置允许列表 — 可选的限制,要求为选定的 GlobalConfig 创建平台的 PlatformAllowConfig
PDA 推导:
(见源代码中的 create_platform_config 获取规范种子列表。)

布局

该账户固定为 944 字节。在 2026-08-31 版本将启动参数移到 PlatformCurveRule 账户之前,它持有尾部的 Vec<PlatformCurveParam>restrict_curve_paramcurve_rule_manager 和 vec 长度前缀占用的 4 字节都来自填充,因此字节计数和每个早期字段偏移都保持不变。有关解码器必须更改的内容,请参阅更改日志条目 platform_scale + creator_scale + burn_scale 必须等于 1_000_000。在 2026-08-17 升级之前,creator_scale 被单独锁定,其费用密钥转到代币创建者。对于升级后执行的迁移,它被添加到 platform_scale,其锁定 LP 权利转到平台。更新逻辑下的示例结果:
  • (0, 100_000, 900_000) — 90% LP 销毁,10% 锁定到平台。
  • (50_000, 100_000, 850_000) — 85% 销毁,15% 锁定到平台。
  • (0, 0, 1_000_000) — 完全销毁,无 NFT 铸造。严格的”无内部人士”启动。

品牌字段

namewebimg 是内联字节数组,用零填充至其大小常数。要将它们作为字符串读取,请切片到第一个 \0
常数故意设置得很大(name: 64web: 256img: 256),以便平台可以包含足够的元数据供浏览器和聚合器使用,而无需触及链外存储。任何超过这些大小的内容都会在 CreatePlatformConfig 处以 InvalidInput 回滚。

费用机制

绑定到 PlatformConfig 的曲线上的交换收取三层费用:
  • trade_fee 累积到协议的 protocol_fee_owner(通过 CollectFee 声称)。
  • platform_fee 累积到每个平台的金库(通过 ClaimPlatformFeeClaimPlatformFeeFromVault 声称;见instructions)。
  • creator_fee 累积到由创建者的公钥 + 报价铸币厂键入的每个创建者金库(通过 ClaimCreatorFee 声称)。

费率上限

两个费率都以 1/1_000_000 计价,因此 5000 是 50 bps,50000 是 500 bps。 fee_rate 的两个强制执行点是不同文件中的单独 require! 调用,因此它们携带不同的错误代码,但它们应用相同的上限。在任何允许的费率下创建的平台可以稍后编辑,包括通过一次重写每个字段的 AllInfo 批量变体。 两个 fee_rate 上限最初都是 100 bps(10000)。更新上限在 2026-01-27 移至 25000(250 bps);在 2026-08-26 两者都移至 50000(500 bps) — 见更改日志条目 GlobalConfig.max_share_fee_rate 限制任何一个费率。它限制四个交换指令采用的每个交易 share_fee_rate 参数 — 推荐费 — 仅此而已。见global-config

Token-2022 转账费权限

transfer_fee_extension_auth 命名平台密钥,当通过 InitializeWithToken2022 创建启动并附加转账费时,该密钥最终会持有基础铸币厂的 TransferFeeConfig 权限。该扩展携带两个权限,它们在启动生命周期的不同点被移交: 在 2026-08-27 之前,铸币厂是用两个权限上的 authority PDA 创建的,两者都在毕业时移到平台。该程序不公开任何提取扣留或收获指令,因此在债券曲线阶段扣留的费用在启动毕业之前是无法到达的。在铸币厂创建时在提取端写入使它们可从第一笔交易声称 — 见更改日志条目 值得规划的两个后果:
  • 在启动前设置字段,而不是之后。transfer_fee_extension_authPubkey::default() 时创建的启动将 authority PDA 放在提取端。稍后设置字段仍然有效 — 毕业找到 PDA 就位并移交权限 — 但在此期间没有任何东西可以提取扣留的余额。
  • 在启动中旋转字段会分割两个权限。 在启动的创建和毕业之间更改 transfer_fee_extension_auth,铸币厂的提取扣留权限保留在创建时配置的密钥(PDA 不再持有它,所以迁移跳过该移交),而费用配置权限转到新密钥。在启动之间旋转,或计划通过 Token-2022 直接协调两个密钥。
在启动的整个生命周期中将字段保留在 Pubkey::default() 的平台永久将两个权限保留在 authority PDA 上:费率永远无法更改,扣留的余额永远无法提取。仅当平台打算持有这些密钥时才将转账费附加到启动。

NFT 迁移分割(仅 CPMM)

当启动毕业到 CPMM 时,迁移指令将 CPMM::InitializeWithPermission 铸造的 LP 代币分为两种方式:
如果 lp_to_platform 非零,LP-Lock 程序将其包装成一个由 platform_nft_wallet 拥有的费用密钥 NFT。这替代了创建单独平台和创建者费用密钥的升级前行为。由升级前完成的迁移创建的费用密钥保持不变。此 LP 费用权利与由 platform_cp_creator 控制的 CPMM 创建者费用分开。 销毁片段直接被销毁,因此没有账户可以提取它或声称该份额代表的 LP 费用。 具有存储 migrate_type = 0 的现有启动仍可使用旧版 AMM v4 路径。新初始化拒绝该迁移类型。

启动参数规则

restrict_curve_param 是开关。在 0 时,程序根本不读取规则。在 1 时,通过此平台路由的每个启动必须满足其选择的 GlobalConfigPlatformCurveRule 账户,启动构建器必须将该账户附加到 remaining_accounts
规则是允许的启动形状的菜单:一个检查组内的约束是 AND 的,组是 OR 的,每个约束是支持 EqGteLteNeq(field, op, value) 三元组。这涵盖了值范围、替代层级、毕业估值上限、迁移下限、代币类型门控和时间限制的组 — 完整模型、字段表和九个工作手册在 products/launchlab/curve-rules 两件事属于这里而不是那一页:
  • curve_rule_manager 是委托,不是转移。 通过 UpdatePlatformConfig::CurveRuleManager 设置它,该钱包可以创建、更新、删除和关闭此平台的规则账户,而无需管理员密钥。平台管理员并行保持相同的权力,因此旋转或清除字段会恢复控制。Pubkey::default() 意味着只有管理员可以管理规则。它不能翻转 restrict_curve_param,这仍然是仅管理员的调用。
  • 规则在 GlobalConfig 之上强制执行,永远不是代替。 规则检查在配置自己的限制之前运行,只能缩小它们。
这替代了前面的 curve_params: Vec<PlatformCurveParam> 白名单,它只能测试精确相等,最多在所有配置中持有 10 个条目,并增加了 PlatformConfig 账户本身。使用它的平台由协议在一次性通过中迁移;旧版字段、其两个指令和 MAX_CURVE_PARAMS 已消失。

PlatformAllowConfig — 限制平台

每个平台决定是否限制其启动可能使用的 GlobalConfig 账户。使用 UpdatePlatformConfig::RestrictGlobalConfig(0 | 1) 设置 restrict_global_config
PDA 种子:[b"platform_allow_config", platform_config, global_config] 平台管理员通过 CreatePlatformAllowConfigClosePlatformAllowConfig 为每个允许的对创建或关闭一个账户。当限制为 1 时,初始化在 remaining_accounts 中搜索预期的 PDA,并以 NotEnoughRemainingAccounts 拒绝缺失的账户。当限制为 0 时,不需要允许账户。 前面的协议管理员管理的 PlatformGlobalAccess 账户及其创建/关闭指令已停用。现有 PlatformConfigGlobalConfig 大小不变,但解码器必须用新的平台标志替换旧的全局标志。旧访问 PDA 不被新检查消费。

读取路径

对于显示”此代币从哪里启动”的 UI,PoolState.platform_config 直接指向原始 PlatformConfig — 获取一次并缓存品牌。

更新路径

钱包轮换(platform_fee_walletplatform_nft_walletplatform_vesting_walletplatform_cp_creatortransfer_fee_extension_authcpswap_config)都通过 UpdatePlatformConfig 进行。阅读源代码的 update_platform_config 调度表以获取确切的 param 代码。

常见陷阱

  • 在构建器更新之前启用 restrict_curve_param 当它为 1 时,规则 PDA 必须在每个启动的 remaining_accounts 中,即使对于没有规则账户的配置 — 缺失的账户是 NotEnoughRemainingAccounts,而不是通过。首先发布构建器更改,然后翻转标志。
  • 启用 restrict_curve_param 且规则为空。 持有零组的规则,或持有零约束的组,允许一切。启用标志本身不是限制;首先写入组,使用 SDK 检查 验证它们,并在 devnet 上排练整个序列。
  • NFT 分割舍入。 三个规模必须精确总和为 1_000_000CreatePlatformConfig 处的差一错误会回滚;运行时的差一会铸造或销毁一个额外的 LP 单位,这正是严格相等检查所在的位置。
  • 平台归属双重分配。 如果 platform_vesting_scale > 0,平台必须在启动的筹款结束后调用 CreatePlatformVestingAccount 一次;如果它忘记了,该份额保持未分配和休眠状态(启动的 total_locked_amount 预算被消费但平台永远不声称)。
  • platform_cp_creator 歧义。 当设置为 Pubkey::default() 时,启动创建者被记录为毕业后 CPMM 池的 pool_creator;当设置为真实密钥时,该密钥被记录。这决定了毕业后 CPMM 创建者费用的受益人以及谁可以签署原始 CPMM::CollectCreatorFee 路径。无权限收集路径仍向此记录密钥的规范 ATA 支付。在平台配置创建时决定你想要哪个模型。
  • transfer_fee_extension_auth 设置晚或旋转。 该字段每个 Token-2022 启动读取两次 — 一次在铸币厂创建时用于 withdraw_withheld_authority,一次在毕业时用于 transfer_fee_config_authority — 所以在这两个时刻之间更改的值将两个权限留在不同的密钥上。见 Token-2022 转账费权限
  • 限制而无允许账户。 在创建所需的 PlatformAllowConfig 之前启用 restrict_global_config 会阻止选择该配置的新启动。

指针

源代码:
  • raydium-launch/programs/launchpad/src/states/platform_config.rsPlatformConfigPlatformParamsMigrateNftInfois_curve_rule_manageris_platform_admin
  • raydium-launch/programs/launchpad/src/states/platform_curve_rule.rsPlatformCurveRuleCurveRuleGroupParamConstraint
  • raydium-launch/programs/launchpad/src/states/platform_allow_config.rsPlatformAllowConfig
  • raydium-launch/programs/launchpad/src/instructions/platform/update_platform_config.rsPlatformConfigParam 调度和强制执行更新时费率上限的每个字段设置器。
  • raydium-launch/programs/launchpad/src/lib.rs — 平台配置和允许配置入口点。
  • raydium-launch/programs/launchpad/src/instructions/initialize_with_token_2022.rstransfer_fee_extension_auth 被写入新铸币厂的 TransferFeeConfig 的位置。
  • raydium-launch/programs/launchpad/src/instructions/admin/migrate_to_cpswap.rs — 毕业时权限移交及其 get_withdraw_withheld_authority 守卫。