Skip to main content
Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
PlatformConfig — это уровень платформы, который накладывается на GlobalConfig. Если GlobalConfig определяет правила на уровне протокола («торговая комиссия 1%, минимальное предложение 10M, только этот кошелёк может выпустить»), то PlatformConfig — это то, что каждая платформа запуска (pump.fun, собственный интерфейс Raydium, сторонние лаунчпады) использует для добавления своей комиссии, получения своей доли LP после выпуска, ограничения параметров запуска, которые могут выбрать их запуски, и отображения своего брендинга (имя, веб-сайт, изображение) в цепи.

Что это такое

Аккаунт PlatformConfig управляет пятью сквозными функциями платформы:
  1. Брендинг — имя, веб-сайт, ссылка на изображение, всё хранится встроенным образом, чтобы любой обозреватель или агрегатор мог отобразить платформу, запустившую токен.
  2. Комиссия платформы — дополнительная торговая комиссия (fee_rate) поверх trade_fee_rate протокола. Начисляется на platform_fee_wallet платформы. Ограничена 500 bps (50000) как при создании, так и при обновлении, повышена с 100 bps (10000) 26 августа 2026 г. — см. Ограничения ставок.
  3. Распределение миграции LP — три сохранённых целых числа (platform_scale, creator_scale, burn_scale), которые в сумме дают 1_000_000. До обновления от 17 августа 2026 г. масштаб создателя создавал отдельный Fee Key создателя. Миграции, выполненные после обновления, объединяют первые два в одну долю заблокированного LP, принадлежащую платформе; остаток сжигается.
  4. Правила параметров запуска — опциональное ограничение (restrict_curve_param), требующее, чтобы запуск удовлетворял аккаунту PlatformCurveRule выбранного GlobalConfig. Правила поддерживают диапазоны значений, альтернативные уровни и ограничения по типам токенов; они находятся в отдельных аккаунтах, а не на PlatformConfig.
  5. Список разрешённых глобальных конфигов — опциональное ограничение, требующее PlatformAllowConfig, созданный платформой, для выбранного GlobalConfig.
Вывод PDA:
(См. create_platform_config в исходном коде для канонического списка seed’ов.)

Структура

Аккаунт имеет фиксированный размер 944 байта. До выпуска от 31 августа 2026 г. он содержал завершающий Vec<PlatformCurveParam>, который переместил параметры запуска в аккаунты PlatformCurveRule; restrict_curve_param, curve_rule_manager и 4 байта, которые занимал префикс длины vec’а, выходят из padding’а, поэтому размер в байтах и все более ранние смещения полей остаются неизменными. См. запись в журнале изменений для информации о том, что должны изменить декодеры. platform_scale + creator_scale + burn_scale должны равняться 1_000_000. До обновления от 17 августа 2026 г. creator_scale был заблокирован отдельно и его Fee Key переходил создателю токена. Для миграций, выполненных после обновления, он добавляется к 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. Строгие запуски «без инсайдеров».

Поля брендинга

name, web и img — это встроенные массивы байтов, дополненные нулями до размера констант. Чтобы прочитать их как строки, срежьте до первого \0:
Константы намеренно щедрые (name: 64, web: 256, img: 256), чтобы платформы могли включить достаточно метаданных для обозревателей и агрегаторов без обращения к хранилищу вне цепи. Всё, что превышает эти размеры, откатывается при CreatePlatformConfig с InvalidInput.

Механика комиссий

Своп на кривой, привязанной к PlatformConfig, взимает три многоуровневые комиссии:
  • trade_fee начисляется на protocol_fee_owner протокола (взимается через CollectFee).
  • platform_fee начисляется на хранилище для каждой платформы (взимается через ClaimPlatformFee или ClaimPlatformFeeFromVault; см. instructions).
  • creator_fee начисляется на хранилище для каждого создателя, ключ которого — публичный ключ создателя + quote mint (взимается через ClaimCreatorFee).

Ограничения ставок

Обе ставки обозначены в 1/1_000_000, поэтому 5000 — это 50 bps, а 50000 — это 500 bps. Две точки применения для fee_rate — это отдельные вызовы require! в разных файлах, поэтому они несут разные коды ошибок, но применяют одинаковый потолок. Платформа, созданная при любой разрешённой ставке, может быть отредактирована позже, включая через вариант AllInfo массового обновления, который переписывает каждое поле сразу. Оба ограничения fee_rate первоначально составляли 100 bps (10000). Ограничение обновления переместилось на 25000 (250 bps) 27 января 2026 г.; 26 августа 2026 г. оба переместились на 50000 (500 bps) — см. запись в журнале изменений. GlobalConfig.max_share_fee_rate не ограничивает ни одну из этих ставок. Он ограничивает аргумент share_fee_rate для каждой транзакции, который принимают четыре инструкции своп — реферальную комиссию — и ничего больше. См. global-config.

Authority для передачи комиссий Token-2022

transfer_fee_extension_auth называет ключ платформы, который в итоге будет держать TransferFeeConfig authority’ты базового mint’а, когда запуск создаётся через InitializeWithToken2022 с прикреплённой комиссией за передачу. Расширение несёт две authority’та, и они передаются в разные моменты жизненного цикла запуска: До 27 августа 2026 г. mint был создан с PDA authority на обеих authority’та, и оба переместились на платформу при выпуске. Программа не предоставляет инструкцию для вывода удержанных средств или сбора, поэтому комиссии, удержанные во время фазы кривой связи, были недоступны до выпуска запуска. Запись стороны вывода при создании mint делает их доступными для взимания с первого своп’а — см. запись в журнале изменений. Два следствия, которые стоит учитывать:
  • Установите поле перед запуском, а не после. Запуск, созданный, пока transfer_fee_extension_auth — это Pubkey::default(), помещает PDA authority на сторону вывода. Установка поля позже всё ещё работает — выпуск находит PDA на месте и передаёт authority — но ничто не может вывести удержанный баланс в то время.
  • Ротация поля между запуском и выпуском разделяет две authority’та. Измените transfer_fee_extension_auth между созданием запуска и его выпуском, и authority вывода удержанных средств mint’а остаётся с ключом, настроенным при создании (PDA больше его не держит, поэтому миграция пропускает эту передачу), в то время как authority конфига комиссии переходит на новый ключ. Ротируйте между запусками или планируйте согласовать два ключа самостоятельно через Token-2022 напрямую.
Платформа, которая оставляет поле на Pubkey::default() на всю жизнь запуска, держит обе authority’та на PDA authority навсегда: ставка комиссии никогда не может быть изменена и удержанный баланс никогда не может быть выведен. Прикрепляйте комиссию за передачу к запуску только если платформа намеревается держать эти ключи.

Распределение миграции NFT (только CPMM)

Когда запуск выпускается в CPMM, инструкция миграции разделяет токены LP, отчеканенные CPMM::InitializeWithPermission, двумя способами:
Если lp_to_platform ненулевой, программа LP-Lock оборачивает его в один Fee Key NFT, принадлежащий platform_nft_wallet. Это заменяет поведение до обновления, которое создавало отдельные Fee Key’и платформы и создателя. Fee Key’и, созданные миграциями, завершёнными до обновления, остаются неизменными. Это право на комиссию LP отделено от комиссий создателя CPMM, контролируемых platform_cp_creator. Доля сжигания сжигается напрямую, поэтому ни один аккаунт не может вывести её или потребовать комиссии LP, представленные этой долей. Существующие запуски с сохранённым migrate_type = 0 всё ещё могут использовать путь наследия AMM v4. Новая инициализация отклоняет этот тип миграции.

Правила параметров запуска

restrict_curve_param — это переключатель. При 0 программа вообще не читает правила. При 1 каждый запуск, маршрутизируемый через эту платформу, должен удовлетворять аккаунту PlatformCurveRule выбранного GlobalConfig, и построитель запуска должен добавить этот аккаунт в remaining_accounts.
Правило — это меню разрешённых форм запуска: ограничения внутри одной группы проверки объединяются через AND, группы объединяются через OR, и каждое ограничение — это тройка (field, op, value), поддерживающая Eq, Gte, Lte и Neq. Это охватывает диапазоны значений, альтернативные уровни, ограничения оценки выпуска, минимумы миграции, ограничения по типам токенов и ограниченные по времени группы — полная модель, таблица полей и девять отработанных сценариев находятся в 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 могут использовать её запуски. Установите restrict_global_config с UpdatePlatformConfig::RestrictGlobalConfig(0 | 1).
Seeds PDA: [b"platform_allow_config", platform_config, global_config]. Администратор платформы создаёт или закрывает один аккаунт на разрешённую пару через CreatePlatformAllowConfig и ClosePlatformAllowConfig. Когда ограничение 1, инициализация ищет в remaining_accounts ожидаемый PDA и отклоняет отсутствующий аккаунт с NotEnoughRemainingAccounts. Когда ограничение 0, аккаунт разрешения не требуется. Управляемый администратором протокола аккаунт PlatformGlobalAccess и его инструкции создания/закрытия сняты с производства. Существующие размеры PlatformConfig и GlobalConfig не изменяются, но декодеры должны заменить старый глобальный флаг на новый флаг платформы. Старые PDA доступа не потребляются новой проверкой.

Путь чтения

Для интерфейса, показывающего «откуда был запущен этот токен», PoolState.platform_config указывает на исходящий PlatformConfig напрямую — получите его один раз и кэшируйте брендинг.

Путь обновления

Ротации кошельков (platform_fee_wallet, platform_nft_wallet, platform_vesting_wallet, platform_cp_creator, transfer_fee_extension_auth, cpswap_config) все проходят через UpdatePlatformConfig. Прочитайте таблицу диспетчеризации update_platform_config в исходном коде для точных кодов param.

Частые ошибки

  • restrict_curve_param включён до обновления построителя. Пока он 1, PDA правила должен быть в remaining_accounts при каждом запуске, даже для конфига без аккаунта правила — отсутствующий аккаунт — это NotEnoughRemainingAccounts, а не пропуск. Сначала отправьте изменение построителя, затем переключите флаг.
  • restrict_curve_param включён с пустым правилом. Правило, содержащее нулевые группы, или группа, содержащая нулевые ограничения, разрешает всё. Включение флага само по себе не является ограничением; напишите группы сначала, проверьте их с помощью проверки SDK и отрепетируйте всю последовательность на devnet.
  • Округление распределения NFT. Три масштаба должны в сумме равняться ровно 1_000_000. Ошибки на единицу при CreatePlatformConfig откатываются; ошибки на единицу во время выполнения отчеканили бы или сожгли бы одну дополнительную единицу LP, что и предотвращает проверка строгого равенства.
  • Двойное распределение вестинга платформы. Если platform_vesting_scale > 0, платформа должна вызвать CreatePlatformVestingAccount один раз после окончания сбора средств запуска; если она забудет, эта доля остаётся нераспределённой и неактивной навсегда (бюджет total_locked_amount запуска потребляется, но платформа никогда не требует).
  • Неоднозначность platform_cp_creator. Когда установлено на Pubkey::default(), создатель запуска записывается как pool_creator пула CPMM после выпуска; когда установлено на реальный ключ, вместо этого записывается этот ключ. Это определяет получателя комиссий создателя CPMM после выпуска и кто может подписать исходный путь CPMM::CollectCreatorFee. Путь сбора без разрешения всё ещё платит канонические ATA’ы этого записанного ключа. Решите при создании конфига платформы, какую модель вы хотите.
  • transfer_fee_extension_auth установлен поздно или ротирован. Поле читается дважды на запуск Token-2022 — один раз при создании mint для withdraw_withheld_authority, один раз при выпуске для transfer_fee_config_authority — поэтому значение, которое изменяется между этими двумя моментами, оставляет две authority’та на разных ключах. См. Authority для передачи комиссий Token-2022.
  • Ограничение без аккаунта разрешения. Включение restrict_global_config перед созданием требуемого PlatformAllowConfig блокирует новые запуски, которые выбирают этот конфиг.

Ссылки

Источники:
  • raydium-launch/programs/launchpad/src/states/platform_config.rsPlatformConfig, PlatformParams, MigrateNftInfo, is_curve_rule_manager, is_platform_admin.
  • raydium-launch/programs/launchpad/src/states/platform_curve_rule.rsPlatformCurveRule, CurveRuleGroup, ParamConstraint.
  • raydium-launch/programs/launchpad/src/states/platform_allow_config.rsPlatformAllowConfig.
  • raydium-launch/programs/launchpad/src/instructions/platform/update_platform_config.rs — диспетчеризация PlatformConfigParam и установщики для каждого поля, которые применяют ограничения ставок во время обновления.
  • raydium-launch/programs/launchpad/src/lib.rs — точки входа конфига платформы и конфига разрешения.
  • raydium-launch/programs/launchpad/src/instructions/initialize_with_token_2022.rs — где transfer_fee_extension_auth записывается в TransferFeeConfig нового mint’а.
  • raydium-launch/programs/launchpad/src/instructions/admin/migrate_to_cpswap.rs — передача authority во время выпуска и её защита get_withdraw_withheld_authority.