Skip to main content
Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Эта запись описывает предстоящее обновление программы LaunchLab. Она была проверена на локальной ветке релиза перед развёртыванием. Перед использованием новых аккаунтов или инструкций убедитесь в развёрнутой версии программы.
Платформа уже могла ограничивать, какие формы запуска могут выбирать её создатели, через PlatformConfig.curve_params. Этот механизм проверял только точное совпадение: запись либо фиксировала поле на одно значение, либо подстраивала его с помощью sentinel. Кроме того, он мог содержать максимум 10 записей для каждого GlobalConfig, который поддерживала платформа, и находился на самом аккаунте PlatformConfig, увеличивая его на 491 байт за запись. Эти три свойства столкнулись по мере добавления конфигов в протокол. Выражение «целевой объём сбора средств между 50 и 200 SOL» требовало одной записи на каждое допустимое значение и было поэтому невозможно. Собственные пороги GlobalConfig тем временем были открыты широко — ставки 1 bps, границы предложения 99999 — именно чтобы каждая платформа вписалась под них, что оставило платформы без способа их сузить. Этот релиз заменяет whitelist на правила кривой: один аккаунт PlatformCurveRule на пару (платформа, конфиг), содержащий до 10 групп проверок, каждая содержит до 25 ограничений (field, op, value) над 19 параметрами запуска, с операторами Eq, Gte, Lte и Neq. Ограничения внутри группы связаны AND, группы связаны OR. Диапазон — это Gte плюс Lte на одном поле. Полная модель и девять рабочих примеров находятся на новой странице: products/launchlab/curve-rules.

TL;DR для интеграторов

  • PlatformConfig сохраняет размер и все смещения существующих полей. Это фиксированные 944 байта. curve_params удалён; restrict_curve_param (u8), curve_rule_manager (Pubkey) и 4 байта, которые занимал префикс длины вектора, выходят из padding, который сокращается со 107 до 78.
  • Декодеры должны отбросить завершающий вектор. Декодер, который всё ещё ожидает Vec<PlatformCurveParam> после padding, прочитает два новых поля как байты вектора. Всё перед padding не затронуто, поэтому декодер, который читает только кошельки комиссий и ставки, продолжит работать без изменений.
  • Построители запусков нуждаются в одном дополнительном аккаунте, когда флаг включен. Пока restrict_curve_param равен 1, InitializeV2 и InitializeWithToken2022 требуют PDA правила в remaining_accountsвключая когда аккаунт не существует, чтобы его пропуск не мог обойти проверку. Вывод: [b"platform_curve_rule", platform_config, global_config].
  • Ни одна платформа не ограничена по умолчанию. restrict_curve_param равен 0 на каждом существующем аккаунте, и 0 означает, что программа вообще не читает правила.
  • Две инструкции удалены: UpdatePlatformCurveParam и RemovePlatformCurveParam. Четыре добавлены: CreatePlatformCurveRule, UpdatePlatformCurveRule, RemovePlatformCurveRule, ClosePlatformCurveRule.
  • UpdatePlatformConfig получает два варианта: RestrictCurveParam(u64) с индексом dispatch 13 и CurveRuleManager(Pubkey) с индексом 14. Существующие индексы 0–12 не изменены.
  • Семь кодов ошибок добавлены, 60246030. 6020 CurveParamIsNotExist сохранён как заполнитель, хотя его последний вызывающий удалён, поэтому ничто после него не сдвигается. См. reference/error-codes.
  • Требуется обновление IDL. Новый тип аккаунта, четыре новые инструкции, две удалены, два новых варианта dispatch, семь новых кодов ошибок.
  • Проверьте правила off-chain перед отправкой. SDK предоставляет checkLaunchAgainstCurveRule (отражает проверку во время запуска, включая fail-closed поведение) и checkCurveRuleGroupWritable (отражает валидацию во время записи). Обе — чистые функции. См. Check before you send.
  • Репетируйте на devnet перед включением на mainnet. Включение restrict_curve_param сразу же меняет, что могут делать ваши создатели. Рекомендуемая последовательность — включая запуск одного токена, который должен быть отклонён, чтобы доказать, что ваш построитель действительно проходит проверку правила — находится в Test on devnet first.

Что может выразить правило, чего не мог whitelist

19 полей включают четыре производные ставки — SellRateA, LockRate, MigrateRateA, FundRaisingRateB — что делает правило портативным между предложениями вместо привязки к одному.

Делегированное управление

PlatformConfig.curve_rule_manager — это горячий кошелёк, который может создавать, обновлять, удалять и закрывать аккаунты правил этой платформы. Редактирование правил — рутинная операция, и ключ администратора платформы обычно является multisig; это поле, которое держит multisig вне цикла. Установите его один раз через UpdatePlatformConfig::CurveRuleManager. Администратор платформы сохраняет ту же власть параллельно — программа принимает его путём повторного вывода PDA PlatformConfig от подписывающего — поэтому потерянный ключ менеджера восстанавливается путём ротации поля. Pubkey::default() означает только администратора. Скомпрометированный ключ менеджера может ослабить или удалить правила параметров и вернуть rent аккаунта правила. Он не может переключить restrict_curve_param, трогать кошельки комиссий, поле vesting или конфиг CPMM, или нарушить лимит GlobalConfig.

Rent и размер

Аккаунт правила создаётся без группы и изменяется в размере при каждом изменении, поэтому платформа платит за правила, которые она действительно написала, и удаление группы возвращает разницу подписывающему. Поскольку размер динамический, декодеры должны читать фактическую длину аккаунта, а не предполагать константу.

Стоимость вычислений при запуске

Проверка выполняется при каждом запуске, пока она включена. Измерено end-to-end — вывод PDA, сканирование remaining_accounts, десериализация, оценка: Производное ограничение стоит около 223 CU против около 48 для чтения прямого поля. Даже полностью загруженное правило остаётся в пределах трети бюджета по умолчанию 200 000 CU на инструкцию. Группы оцениваются до тех пор, пока одна не совпадёт, поэтому наиболее используемый уровень должен быть первым.

Одноразовая миграция

Платформы, которые использовали whitelist, были перенесены протоколом в один проход, прежде чем флаг стал доступен для включения. Выделенный орган запустил одну транзакцию на платформу, которая перевела каждую устаревшую запись в группы проверок аккаунта правила конфига, который она назвала, очистила записи из PlatformConfig и сжала этот аккаунт обратно до 944 байт. Перевод сохранил старую семантику точно: каждая запись стала одной группой, каждое не-sentinel поле стало одним ограничением Eq, и запись all-sentinel — которая совпадала с каждым запуском — стала группой без ограничений, которая также совпадает с каждым запуском. Миграция написала правила, но не включила их. Перенесённая платформа оставалась неограниченной, пока она сама не установила restrict_curve_param на 1. Инструкция миграции была удалена из программы теперь, когда проход завершён, вместе с устаревшим полем, которое она читала.

Что не изменилось

  • GlobalConfig. Тот же макет, те же лимиты, те же инструкции. Правила сужают эти лимиты и проверяются вместе с ними; они никогда не могут расширить один.
  • Списки аккаунтов и аргументы инструкций запуска. InitializeV2 и InitializeWithToken2022 принимают те же фиксированные аккаунты и те же аргументы. Только remaining_accounts получает запись, и только пока флаг включен.
  • Пути торговли, выпуска, комиссии и vesting. Не затронуты.
  • PlatformAllowConfig. Не изменён и не связан: он решает, какие конфиги могут использовать запуски платформы, в то время как правило решает, какие параметры внутри конфига. Два флага независимы.
  • Коды ошибок 60006023. Не изменены, 6020 включён.
  • Размер PlatformConfig и смещения перед padding. Не изменены, поэтому существующие аккаунты не нуждаются в собственной миграции.

Обновлённые страницы

  • products/launchlab/curve-rulesновая страница. Трёхуровневая модель, таблицы 19 полей и 4 операторов, девять примеров, ограничение типа кривой, два off-chain помощника проверки, последовательность репетиции devnet, делегированное управление, rent, порядок развёртывания и стоимость вычислений.
  • products/launchlab/platform-config — «Whitelist параметров кривой» заменён на «Правила параметров запуска»; макет обновлён для restrict_curve_param, curve_rule_manager и 78-байтного padding; таблица пути обновления, фрагмент пути чтения и подводные камни переписаны.
  • products/launchlab/instructions — новый раздел «Правила параметров запуска платформы», охватывающий четыре инструкции, их аккаунты, аргументы и ошибки; строка инвентаря заменена.
  • products/launchlab/accountsPlatformCurveRule добавлен в инвентарь и получил собственный раздел с полным макетом и предупреждением о переменном размере.
  • reference/error-codes60246030 задокументированы; 6018 и 6020 аннотированы.