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 платформы. Ограничена 100 bps параметром GlobalConfig.max_share_fee_rate.
  3. Распределение миграции LP — три сохранённых целых числа (platform_scale, creator_scale, burn_scale), которые в сумме дают 1_000_000. До обновления 2026-08-17 creator scale создавал отдельный Fee Key создателя. Миграции, выполненные после обновления, объединяют первые два в одну долю заблокированного LP, принадлежащую платформе; остаток сжигается.
  4. Список разрешённых параметров кривойVec<PlatformCurveParam>, в котором перечислены ровно те комбинации (supply, total_base_sell, total_quote_fund_raising, migrate_type, migrate_cpmm_fee_on, vesting_params...), которые разрешены на этой платформе. Если вектор пуст или все записи недействительны, любая комбинация разрешена; в противном случае запуски должны точно совпадать с одной из записей.
  5. Список разрешённых глобальных конфигов — опциональное ограничение, требующее созданный платформой PlatformAllowConfig для выбранного GlobalConfig.
Вывод PDA:
(Смотрите create_platform_config в исходном коде для канонического списка seed’ов.)

Структура

platform_scale + creator_scale + burn_scale должны равняться 1_000_000. До обновления 2026-08-17 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).
creator_fee_rate ограничена MAX_CREATOR_FEE_RATE = 5000 (50 bps). fee_rate (комиссия платформы) ограничена 10000 (100 bps) параметром GlobalConfig.max_share_fee_rate.

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

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

Список разрешённых параметров кривой

curve_params: Vec<PlatformCurveParam> — это механизм платформы для ограничения форм кривых, которые могут выбирать её запуски. Если вектор непуст и хотя бы одна запись действительна, программа обеспечивает при Initialize, что параметры запуска точно совпадают с хотя бы одной записью.
Каждое поле имеет значение-дозорное, которое означает подстановочный знак (любое значение совпадает): u64::MAX для полей u64, u8::MAX для полей u8, 0 для полей supply / sell / fund-raising. BondingCurveParam со всеми дозорными значениями — это «разрешить всё» — эквивалент поведения пустого списка разрешённых. Алгоритм сопоставления при Initialize:
  1. Отфильтруйте curve_params до записей, чей global_config совпадает с выбранным запуском GlobalConfig.
  2. Если отфильтрованный список пуст, разрешите любые параметры (платформа не внесла в список разрешённых ничего для этого GlobalConfig).
  3. Если каждая запись в отфильтрованном списке имеет all_is_invalid() (каждое поле — подстановочный знак), разрешите любые параметры.
  4. В противном случае переберите записи; для каждой записи проверьте параметры запуска против каждого не-подстановочного поля. Если все не-подстановочные поля совпадают, примите и вернитесь.
  5. Если ни одна запись не совпала, откатитесь с InvalidInput.
Это позволяет платформе сказать «мы разрешаем только стандартную форму 1B-supply / 800M-sold / 30k-USDC-raise / no-vesting», написав одну запись с конкретными значениями для этих четырёх полей и подстановочными знаками везде. Или более строгая платформа может перечислить три или четыре дискретные формы, по одной на поддерживаемый уровень запуска. MAX_CURVE_PARAMS = 10 ограничивает размер списка разрешённых.

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.

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

  • Дозорные значения списка разрешённых установлены неправильно. BondingCurveParam с total_locked_amount = 0 не является подстановочным знаком — он совпадает с запусками, которые явно отказываются от вестинга. Подстановочный знак для этого поля — u64::MAX. Та же ловушка существует для cliff_period и unlock_period. Используйте clear() (который программа предоставляет) для правильной установки дозорных значений.
  • Округление 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 этого записанного ключа. Решите при создании конфигурации платформы, какую модель вы хотите.
  • Ограничение без разрешающего аккаунта. Включение restrict_global_config перед созданием требуемого PlatformAllowConfig блокирует новые запуски, которые выбирают эту конфигурацию.

Ссылки

Источники:
  • raydium-launch/programs/launchpad/src/states/platform_config.rsPlatformConfig, PlatformParams, MigrateNftInfo, PlatformCurveParam, BondingCurveParam, is_valid_curve_param.
  • raydium-launch/programs/launchpad/src/states/platform_allow_config.rsPlatformAllowConfig.
  • raydium-launch/programs/launchpad/src/lib.rs — точки входа конфигурации платформы и разрешающей конфигурации.