Documentation Index
Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
Use this file to discover all available pages before exploring further.
В каждой программе Raydium есть хотя бы одна привилегированная роль — ключ, который может обновлять программу, создавать новые конфиги или выводить протокольные комиссии. Минимизация полномочий этих ролей (и защита их мультисигами с задержкой) — главная защита от компрометации администратора. На этой странице описаны все роли и способы их защиты на практике.
Роли по программам
AMM v4
| Роль | Адрес авторитета | Что может делать |
|---|
| Обновление программы | Squads multisig (3/4) | Разворачивает новый байткод программы |
| Администратор пула | Treasury multisig (3/5) | Переключает статус пула, обновляет комиссии в существующих пулах |
CPMM
| Роль | Адрес авторитета | Что может делать |
|---|
| Обновление программы | Squads multisig (3/4) | Разворачивает новый байткод программы |
| Администратор AmmConfig | Treasury multisig (3/5) | Создаёт новые AmmConfigs (уровни комиссий); переключает существующие |
| Получатель разовой комиссии за создание пула | Treasury multisig (3/5) | Получает единовременную комиссию за создание пула |
CLMM
| Роль | Адрес авторитета | Что может делать |
|---|
| Обновление программы | Squads multisig (3/4) | Разворачивает новый байткод программы |
| Администратор AmmConfig | Treasury multisig (3/5) | Создаёт и изменяет AmmConfigs |
| Администратор DynamicFeeConfig | Treasury multisig (3/5) | CreateDynamicFeeConfig / UpdateDynamicFeeConfig — настраивает динамические уровни комиссий, доступные при вызове CreateCustomizablePool |
limit_order_admin (общепрограммный) | Горячий кошелёк операционного назначения, не мультисиг | Исполняет и закрывает лимитные ордера от имени их владельцев. Ключ кипера — единственная общепрограммная константа (разные значения для mainnet и devnet), проверяемая через signer == limit_order.owner || signer == limit_order_admin::ID в инструкциях SettleLimitOrder / CloseLimitOrder. Выходные средства всегда поступают в ATA исходного владельца; кипер не может перенаправить средства, изменить ордера или открыть новые. |
limit_order_admin — намеренно узкая операционная роль. Она существует для того, чтобы off-chain кипер мог исполнять заполненные ордера без участия их владельцев. Ключ кипера горячий (хранится на VM кипера) и ротируется независимо от мультисигов выше. Конкретно, полномочия кипера ограничены:
SettleLimitOrder — отправить заполненный выход ордера в ATA владельца по лимитной цене ордера.
CloseLimitOrder — закрыть аккаунт полностью исполненного ордера для возврата ренты (рента идёт владельцу ордера).
Кипер не может вызвать OpenLimitOrder, IncreaseLimitOrder, DecreaseLimitOrder, изменить какое-либо поле пула или подписать любую другую инструкцию — эти проверки реализованы on-chain через seed и has_one ограничения в структуре Accounts инструкции. Скомпрометированный кипер в худшем случае становится недоступным (ордера остаются незакрытыми, пока владелец не исполнит их самостоятельно) или исполняет/закрывает правомерно заполненные ордера не в том порядке; он не может переместить средства пользователей куда-либо, кроме уже авторизованного владельцем места назначения.
Farm v6
| Роль | Адрес авторитета | Что может делать |
|---|
| Обновление программы | Squads multisig (3/4) | Разворачивает новый байткод программы |
| Создатель фарма (для каждого фарма) | Кошелёк создателя фарма | Пополняет хранилища вознаграждений, продлевает расписания, возвращает неиспользованные вознаграждения |
Отдельные фармы не имеют протокольного администратора — создатель каждого фарма управляет только своим фармом, а его полномочия ограничены (нельзя изъять стейки пользователей, нельзя изменить mint стейкинга).
LaunchLab
| Роль | Адрес авторитета | Что может делать |
|---|
| Обновление программы | Squads multisig (3/4) | Разворачивает новый байткод программы |
| Создатель запуска (для каждого запуска) | Кошелёк создателя запуска | Собирает комиссии создателя после graduation; выводит остаток незавершённой кривой |
У запусков нет протокольного администратора, который мог бы изменять кривые или изымать собранные средства.
Авторитет обновления программы
Программы Raydium используют стандартный механизм обновления Solana — BPF Loader v3. Авторитет обновления для всех программ принадлежит мультисигу Squads с порогом 3/4.
Почему 3/4: достаточно подписантов, чтобы единственная компрометация не давала контроля, и достаточно мало, чтобы согласование легитимного обновления оставалось управляемым. Четыре авторитета — независимые, air-gapped подписанты на холодных устройствах у ключевых участников команды. Последовательное подписание исключает параллельные подтверждения одной транзакции; транзакции имеют фиксированное окно истечения. Операции мультисига периодически проверяются в рамках партнёрства с Solana STRIDE Program (Asymmetric Research).
Удаление авторитета обновления
Raydium не установил авторитет обновления ни одной программы в null. Протокол придерживается принципа, что программы должны быть обновляемыми (для исправления ошибок, добавления расширений вроде Token-2022, устранения дрейфа интеграций). Компромисс: пользователи доверяют тому, что мультисиг 3/4 будет разворачивать только тщательно проверенные обновления.
Для пользователей, предпочитающих неизменяемую альтернативу: более старая программа AMM v4 остаётся стабильной с момента последнего аудита — ноль обновлений за 18 месяцев. Этот путь фактически заморожен, несмотря на то что авторитет всё ещё существует.
Авторитет AmmConfig
Создание каждого нового AmmConfig требует разрешения — казначейский мультисиг 3/5 авторизует новые уровни комиссий и шаги тиков. Существующие пулы ссылаются на свой AmmConfig по PDA; уровень комиссии пула определяется именно AmmConfig.
Могут ли администраторы изменить существующий AmmConfig? Технически да — updateAmmConfig доступен администратору. На практике изменения развёрнутых AmmConfigs избегаются, поскольку они незаметно меняют экономику всех пулов, использующих этот конфиг. Политика протокола — создавать новый AmmConfig при любых изменениях и мигрировать.
Могут ли администраторы украсть протокольные комиссии через конфиг? Нет — AmmConfig содержит параметры комиссий, но не адрес получателя протокольных комиссий; это отдельный неизменяемый адрес для каждого пула.
Получение протокольных комиссий
Часть комиссий swap (как правило, 3–12 bps от 25 bps комиссии swap, в зависимости от конфига) накапливается в хранилище протокольных комиссий. Мультисиг может выводить эти накопленные комиссии. Баланс LP пользователей при этом не изменяется — это заранее выделенная доля протокола, а не средства LP.
Авторитет создателя фарма
В Farm v6 создатель фарма имеет право:
- Пополнять хранилище вознаграждений (добавлять токены).
- Продлевать расписание (откладывать дату окончания).
- Вызывать
withdrawReward после окончания для возврата неиспользованного баланса хранилища.
Создатели фармов не могут:
- Выводить застейканные LP пользователей.
- Изменять mint стейкинга.
- Ретроактивно изменять ставки эмиссии (только в будущем через
setRewards).
- Замораживать харвесты пользователей.
Злоумышленник-создатель фарма в худшем случае может недофинансировать хранилище, чтобы фарм иссяк; основная ставка пользователей всегда в безопасности.
Конфигурация мультисига Squads
Raydium использует два отдельных мультисига Squads для разных категорий рисков. Оба можно проверить on-chain через интерфейс Squads Protocol.
| Мультисиг | Порог | Таймлок | Область действия |
|---|
| Обновление программ | 3/4 | 24 часа | Единственный авторитет для развёртывания нового байткода программ AMM v4, CPMM, CLMM, LaunchLab, Lock, AMM Routing, Stable Swap и устаревших программ Farm/Staking. Просмотр: app.squads.so/.../FytDr…ceZQK. |
| Казначейство | 3/5 | нет | Казначейские активы, доходы протокола, операционные расходы. Также временно держит ограниченный программный авторитет Raydium (создание AmmConfigs, сбор протокольных комиссий, настройка параметров пулов). Просмотр: v3.squads.so/dashboard/RVha…dHdtYz09. |
Операционные свойства мультисига обновлений:
- Таймлок 24 часа на любую транзакцию. Обновление, одобренное сегодня, выполнится не ранее чем через 24 часа, давая пользователям время отреагировать.
- Air-gapped холодные устройства для подписания. Из холодных устройств физически извлечены сетевые карты; они подключаются только к аппаратному кошельку и получают данные транзакций через QR-код с отдельного горячего устройства.
- Последовательное подписание. Только после того как одно холодное устройство создаст и подпишет транзакцию, следующее может начать свой процесс подписания — это исключает конфликтующие или параллельные подписи одной транзакции.
- Истечение транзакций. Каждая транзакция имеет фиксированное окно истечения, поэтому устаревшие транзакции аннулируются автоматически.
- TOTP + физический ключ на горячих устройствах, используемых для инициирования транзакций и on-chain трансляции.
- Публичная очередь транзакций. Любой желающий может отслеживать ожидающие обновления через интерфейс Squads.
Казначейский мультисиг не имеет таймлока — его область действия уже, а рутинные операции (создание AmmConfigs, сбор комиссий) должны выполняться в тот же день. Казначейский мультисиг также держит ограниченный программный авторитет, указанный в таблицах по программам выше; это временное решение, которое периодически пересматривается совместно с партнёрами по безопасности.
Проверка авторитета on-chain
Простейший способ проверить текущий авторитет обновления программы:
solana program show <PROGRAM_ID>
Вывод включает:
Program Id: CPMMoo8L3F4NbTegBCKVNunggL7H1Zpdmwpwh8KMoZ0F
Owner: BPFLoaderUpgradeab1e11111111111111111111111
ProgramData Address: <ProgramDataPDA>
Authority: <EXPECTED_MULTISIG_ADDRESS>
Last Deployed In Slot: <slot>
Data Length: <n> bytes
Если Authority не совпадает с ожидаемым адресом мультисига Squads, что-то не так. Raydium публикует ожидаемые адреса авторитетов на reference/program-addresses.
Для ролей AmmConfig / администратора пула — получите on-chain аккаунт и декодируйте:
const config = await raydium.cpmm.getAmmConfig(configPda);
console.log("AmmConfig admin:", config.admin.toBase58());
// Expected: 3/5 treasury multisig.
История изменений авторитетов
| Дата | Программа | Изменение |
|---|
| 2022-12 | AMM v4 | Авторитет обновления перенесён с одиночной подписи на мультисиг 3/4 после инцидента |
| 2023-02 | Все программы | Все операционные роли объединены под казначейским мультисигом 3/5 |
| 2023-11 | CLMM | Добавлен второй мультисиг только для операций с вознаграждениями для снижения рисков |
| 2024-05 | CPMM | Первоначальное развёртывание с авторитетом мультисига с нулевого дня |
Рекомендации для пользователей
Что стоит делать пользователю/LP/интегратору?
- Проверяйте авторитет обновления перед крупными вложениями. Убедитесь, что он совпадает с задокументированным мультисигом.
- Следите за активностью мультисига. Squads UI показывает ожидающие транзакции; запланированное обновление даёт 24 часа на выход, если вы не согласны с изменением.
- Стратегии вывода с учётом таймлока. Если вы используете авто-компаундер, убедитесь, что путь вывода не зависит от инструкции, которая в данный момент изменяется.
- Не рассчитывайте на неизменяемость программ. Каждая программа Raydium может быть обновлена; планируйте это заранее.
Подводные камни для интеграторов
1. Кэширование адресов авторитетов
Если вы жёстко прописываете авторитет обновления или адрес мультисига администратора в коде, а он впоследствии меняется, ваша проверка перестаёт работать. Получайте актуальные данные с reference/program-addresses во время выполнения или обновляйте их периодически.
2. Предположение о стабильности AmmConfigs
Новый AmmConfig может быть создан в любое время. Ваш агрегатор/роутер должен периодически (раз в час достаточно) перезагружать полный список конфигов.
3. Векторы злоупотреблений со стороны создателя фарма
Если вы вкладываете средства в фарм с низкой репутацией, создатель может досрочно завершить фарм и вернуть хранилище вознаграждений (при условии, что никто ещё не застейкал средства). После того как пользователи застейкали, пропорциональные права требования обеспечиваются программой; вернуть можно только остаток после корректного завершения.
Ссылки
Источники: