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。由 GlobalConfig.max_share_fee_rate 限制在 100 bps。
  3. LP 迁移分配 — 三个存储的整数(platform_scalecreator_scaleburn_scale),总和为 1_000_000。在 2026-08-17 升级之前,创建者规模产生一个单独的创建者费用密钥。升级后执行的迁移将前两个合并为一个平台拥有的锁定 LP 份额;其余的被销毁。
  4. 曲线参数白名单 — 一个 Vec<PlatformCurveParam>,列出该平台允许的确切 (supply, total_base_sell, total_quote_fund_raising, migrate_type, migrate_cpmm_fee_on, vesting_params...) 组合。如果向量为空或所有条目都无效,任何组合都被允许;否则启动必须完全匹配其中一个条目。
  5. 全局配置允许列表 — 一个可选的限制,要求为选定的 GlobalConfig 创建平台的 PlatformAllowConfig
PDA 推导:
(参见源代码中的 create_platform_config 获取规范的种子列表。)

布局

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 声称)。
creator_fee_rateMAX_CREATOR_FEE_RATE = 5000(50 bps)限制。fee_rate(平台费用)由 GlobalConfig.max_share_fee_rate 限制在 10000(100 bps)。

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 路径。新初始化拒绝该迁移类型。

曲线参数白名单

curve_params: Vec<PlatformCurveParam> 是平台限制其启动可以选择的曲线形状的机制。如果向量非空且至少一个条目有效,程序在 Initialize 时强制启动的参数完全匹配至少一个条目。
每个字段都有一个哨兵值,表示通配符(任何值都匹配):u64 字段为 u64::MAXu8 字段为 u8::MAX,供应/销售/筹资字段为 0。所有哨兵的 BondingCurveParam 是”允许任何东西” — 等同于空白名单行为。 Initialize 时的匹配算法:
  1. curve_params 过滤为 global_config 与启动选择的 GlobalConfig 匹配的条目。
  2. 如果过滤列表为空,允许任何参数(平台未为此 GlobalConfig 白名单任何内容)。
  3. 如果过滤列表中的每个条目都有 all_is_invalid()(每个字段都是通配符),允许任何参数。
  4. 否则迭代条目;对于每个条目,根据每个非通配符字段检查启动的参数。如果所有非通配符字段都匹配,接受并返回。
  5. 如果没有条目匹配,以 InvalidInput 回滚。
这让平台可以说”我们只允许标准 1B 供应 / 800M 销售 / 30k USDC 筹资 / 无归属形状”,通过为这四个字段写入具体值和其他地方的通配符的单个条目。或者更严格的平台可能会列举三个或四个离散形状,每个支持的启动层一个。 MAX_CURVE_PARAMS = 10 限制白名单大小。

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 代码。

常见陷阱

  • 白名单哨兵设置错误。 具有 total_locked_amount = 0BondingCurveParam 不是通配符 — 它匹配明确选择退出归属的启动。该字段的通配符是 u64::MAXcliff_periodunlock_period 也存在相同的陷阱。使用 clear()(程序公开的)正确设置哨兵。
  • 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 支付。在平台配置创建时决定你想要哪个模型。
  • 没有允许账户的限制。 在创建所需的 PlatformAllowConfig 之前启用 restrict_global_config 会阻止选择该配置的新启动。

指针

源代码:
  • raydium-launch/programs/launchpad/src/states/platform_config.rsPlatformConfigPlatformParamsMigrateNftInfoPlatformCurveParamBondingCurveParamis_valid_curve_param
  • raydium-launch/programs/launchpad/src/states/platform_allow_config.rsPlatformAllowConfig
  • raydium-launch/programs/launchpad/src/lib.rs — 平台配置和允许配置入口点。