Skip to main content
本页内容由 AI 自动翻译,所有内容以英文版本为准。查看英文版 →
本页文档记录了每次启动的账户图:PoolState(一次启动的根状态账户)、其两个金库、权限 PDA,以及启动结算时获得的毕业后引用。 关于约束每次启动的协议级配置,请参阅 products/launchlab/global-config。关于每平台的覆盖层,请参阅 products/launchlab/platform-config。关于归属账户(PoolState 上的 VestingSchedule、每个受益人的 VestingRecord),请参阅 products/launchlab/vesting

账户清单

SDK 的 raydium.launchpad.getLaunchById 返回 PoolState 加上一个标志,指示启动是否已毕业;如果已毕业,则包含迁移后的池 ID。

PoolState

每次启动的根状态。下面的字段名称与链上 Rust 结构体(states/pool.rs)匹配;某些值为了可读性已简化——请查阅源代码了解确切的内存布局。
PoolStatus 值(来自 Anchor IDL):
面向集成者的字段:
  • status — 三个值,单调递增(Funding → Migrate → Migrated)。读取始终安全;写入受限。
  • real_basereal_quote — 当前曲线状态。结合 virtual_base / virtual_quote,足以计算现货价格而无需接触金库。参见 bonding-curve
  • total_base_sell vs real_base — UI 的”毕业进度”比率。
  • migrate_type — 新初始化需要 1CPSWAP)。存储的 0 仅对 CPMM 强制执行前创建的现有启动有意义。
  • amm_creator_fee_on — 在毕业后 CPMM 池上选择 creator_fee_on = OnlyQuoteToken0)或 BothToken1)。它不选择迁移目标。参见 creator-fees
  • token_program_flag — 位字段,不是布尔值。Bit0 是基础铸币,Bit1 是报价铸币,每个 0 表示 SPL Token,1 表示 Token-2022,所以字节取四个值:0(两个都是旧版)、1(Token-2022 基础)、2(Token-2022 报价)、3(两个都是 Token-2022)。用 (token_program_flag >> bit) & 1 读取一个铸币。将整个字节与 0 比较以分类基础铸币会将 2 解析为错误的程序。Bit1 在支持 Token-2022 报价铸币之前一直是常数 0
  • quote_protocol_fee / platform_fee / migrate_fee — 三个独立的费用计数器。每个都有自己的声明指令;参见 instructions
  • vesting_schedule — 存在于每个 PoolState 上,但当 total_locked_amount == 0 时不活跃。参见 vesting 了解完整生命周期。

权限 PDA

LaunchLab 在所有启动中使用单个权限 PDA,派生时不使用每次启动的种子:
该单个 PDA 是:
  • 每次启动的 base_vaultquote_vault 上的权限。
  • 每次启动的 base_mint 上的 mint_authority(毕业前)。
  • CPMM 毕业 CPI 上的签署者,以及现有状态的旧版 AMM v4 毕业。
  • ClaimVestedToken 从基础金库转出的签署者。
  • Token-2022 基础铸币的 TransferFeeConfig 上的 transfer_fee_config_authority,用于整个毕业前阶段——以及其 withdraw_withheld_authority,但仅当平台未设置 PlatformConfig.transfer_fee_extension_auth 时。
mint_authorityMigrateToCpswap 或旧版 MigrateToAmm 调用后立即被撤销,因此供应永久固定。 两个额外的 PDA 控制费用金库:
这些在 ClaimCreatorFeeClaimPlatformFeeFromVault 期间签署相应费用金库的转出。

基础铸币

Initialize 内联创建,具有:
  • mint_authority = authority(在毕业时撤销)。
  • freeze_authority = None
  • supply = supply,完全铸造到 base_vault
  • decimals 由创建者在 Initialize 时选择(通常为 6)。
因为完整供应是预铸造的,base_mint.supply 在启动的整个生命周期内是常数。曲线购买将代币从 base_vault 移动到买方,但不调用 mint_to Initialize / InitializeV2 创建 SPL Token 基础铸币。专用的 InitializeWithToken2022 指令允许基础铸币是 Token-2022 铸币(带可选的 TransferFeeConfig)。所有三个初始化路径都需要 CPMM 毕业。 InitializeWithToken2022 附加 TransferFeeConfig 时,铸币使用 transfer_fee_config_authority = authoritywithdraw_withheld_authority = PlatformConfig.transfer_fee_extension_auth 创建,当平台未设置该字段时回退到 authority。两个权限在毕业时重新分配给平台密钥,提取端仅在 PDA 仍持有它时。参见 platform-config 报价铸币独立于基础铸币,本身可能是 Token-2022 铸币——InitializeV2InitializeWithToken2022 在其报价程序槽中接受任一程序。已弃用的 Initialize 不接受:其报价程序账户仍然类型为 SPL Token,因此报价铸币为 Token-2022 的配置只能通过其他两个启动。LaunchLab 从不创建报价铸币;它是 GlobalConfig.quote_mint 命名的任何东西。参见 global-configreference/token-2022-support

金库

base_vaultquote_vault 都是由 LaunchLab authority PDA 拥有的代币账户,每个都在拥有其自己铸币的程序上创建——因此启动可以有旧版基础金库和 Token-2022 报价金库,或任何其他组合。token_program_flag 记录哪个是哪个。地址存储在 PoolState 上,也可以派生:
(在生产中依赖派生之前,从源的 Initialize 账户结构验证确切的种子前缀。)

费用金库

两个 PDA 跨启动聚合费用:
  • 创建者费用金库 — PDA,种子为 [creator, quote_mint]。每次启动在同一报价铸币上赚取相同创建者费用都流入同一金库。创建者通过 ClaimCreatorFee 清扫它。
  • 平台费用金库 — PDA,种子为 [platform_config, quote_mint]。通过同一平台路由的每次启动使用同一报价铸币都流入同一金库。平台的 platform_fee_wallet 通过 ClaimPlatformFeeFromVault 清扫它。还有一个每次启动的清扫变体(ClaimPlatformFee),直接从启动的 quote_vault 拉取,不经过聚合金库。
两者都在第一次产生费用的交换时在拥有报价铸币的程序上懒惰创建。针对旧版和 Token-2022 报价铸币运行启动的创建者或平台最终会为每个铸币获得一个金库,就像它已经为两个不同的旧版铸币所做的那样。 聚合金库模式是让高容量创建者或平台在许多启动中摊销费用累积的租金成本的原因。

报价金库 ↔ real_quote

quote_vault.balancePoolState.real_quote 应保持同步。它们最多可以偏离三个待处理费用计数器的总和(quote_protocol_feeplatform_feemigrate_fee),这些计数器位于金库中但属于费用计数器而非曲线储备。曲线数学始终使用 real_quote,从不使用原始金库余额。 毕业前不变量:

PlatformCurveRule

每个 (PlatformConfig, GlobalConfig) 对一个账户,持有该平台在该配置上允许的启动形状。PDA 种子为 [b"platform_curve_rule", platform_config, global_config]
账户创建时不包含任何组,在每次组更改时调整大小,因此其长度为 150 + Σ(14 + 18 × constraints),解码器不得假设固定大小。组是 OR 的:一旦一个组的约束全部成立,启动就被允许。零组意味着无限制。 仅当拥有的 PlatformConfig.restrict_curve_param1 时读取它——在 0 时程序忽略该账户,旧规则可能就在那里。字段 ID、运算符和操作手册在 products/launchlab/curve-rules

生命周期账户转换

接下来去哪里

来源:
  • raydium-launch/programs/launchpad/src/states/pool.rsPoolStatePoolStatusVestingScheduleAmmCreatorFeeOn
  • raydium-launch/programs/launchpad/src/lib.rs — PDA 种子常数(AUTH_SEEDCREATOR_FEE_VAULT_AUTH_SEEDPLATFORM_FEE_VAULT_AUTH_SEED)。
  • Raydium SDK v2 launchpad 模块