Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Программы продуктов Raydium — это независимые кодовые базы, но они разработаны в соответствии с общим набором соглашений. Эта страница является каноническим справочником по этим соглашениям. Главы по отдельным продуктам описывают, как соглашения реализованы в их учетных записях; эта страница описывает сами соглашения.
Что здесь означает «общее»
Через кодовую базу проходят три вида совместного использования:- Совместное использование соглашений. Каждая программа использует один и тот же паттерн вывода PDA, одну и ту же форму разделения комиссий и одну и ту же идею учетной записи наблюдений — но каждая реализует их в своей собственной программе с собственными seeds.
- Совместное использование учетных записей. Несколько учетных записей — это буквально один и тот же записи во многих пулах (глобальный PDA органа управления в CPMM, учетные записи AmmConfig).
- Совместное использование вне цепи. Один REST API и один TypeScript SDK обслуживают все четыре программы. Интеграторы взаимодействуют с одним хостом HTTP и одним пакетом NPM независимо от того, какую программу они в итоге вызывают.
1. PDA органов управления
Каждая программа Raydium имеет ровно один PDA, который владеет своими хранилищами токенов. Пользователи никогда не держат полномочия хранилища напрямую — PDA органа управления — это единственный подписант, который может перемещать средства, и он подписывает только когда действительная инструкция программы ему это говорит. Паттерн идентичен во всех продуктах; seeds отличаются:
Из этого следует несколько вещей:
- Для CPMM и CLMM PDA органа управления — это глобальная учетная запись — каждый пул этого типа использует его. Если вы выполняете CPI в CPMM, вам нужен он один раз, а не для каждого пула.
- Для органов управления для каждого пула / фермы вы выводите PDA из ID пула/фермы. SDK делает это в
getPoolKeys/getFarmKeys; если вы интегрируетесь напрямую, вы выводите с помощьюfindProgramAddressSync. - Владение хранилищем не может быть изменено. Как только учетная запись токена создана с PDA органа управления в качестве владельца, только этот PDA — вызванный программой — может передавать средства. Нет переопределения администратора.
products/cpmm/accounts, products/clmm/accounts, products/amm-v4/accounts, products/farm-staking/accounts, products/launchlab/accounts.
2. Учетные записи администратора и конфигурации
CPMM и CLMM используют паттерн учетной записи конфигурации, называемыйAmmConfig: небольшую глобальную учетную запись, индексируемую u16, содержащую ставки комиссий и направления администратора, которые применяются ко всему уровню комиссии. Пулы привязываются к конфигурации при создании и никогда не переподключаются.
- Уровни комиссий глобальны. Когда пул говорит «это пул с комиссией 0,25%», это означает, что он привязан к AmmConfig, чей
trade_fee_rateбыл 0,25% во время создания. Нет переопределения ставки для каждого пула. - Конфигурация может быть изменена, но пулы не следуют. Если орган управления конфигурацией редактирует AmmConfig, каждый существующий пул, привязанный к этой конфигурации, немедленно получает новую ставку. Это особенность, а не ошибка; это то, как экономические изменения на уровне протокола распространяются без миграций для каждого пула.
disable_create_pool— это рычаг устаревания. Когда уровень комиссии закрывается, мультиподпись протокола устанавливает этот флаг — существующие пулы продолжают работать, но новые пулы не могут выбрать уровень.protocol_owner/fund_owner— это подписанты для вызовов сбора комиссий. Установка их на мультиподпись — это то, что ограничивает вывод комиссий. Это НЕ адреса назначения для самих комиссий; этоprotocol_fee_destination/fund_fee_destinationна той же учетной записи.
AmmConfig — его параметры комиссий зависят от пула и жестко закодированы при создании. Farm и LaunchLab имеют свои собственные эквиваленты (FarmConfig, LaunchConfig), описанные в их соответствующих главах.
Полная таблица того, кто может изменять что, находится в security/admin-and-multisig. Текущие пользовательские разделения комиссий находятся в ray/protocol-fees.
3. Разделение комиссий протокола / фонда / создателя
Каждая комиссия за обмен CPMM и CLMM разделяется между до четырьмя направлениями на выходе:- Комиссия за торговлю накапливается в пуле. Комиссия удаляется из входной стороны обмена, и сумма после комиссии — это то, что видит математика постоянного произведения. Это то, что означает «LP получает комиссию» —
kрастет и растет подразумеваемая стоимость на токен LP. - Доли протокола/фонда/создателя вычитаются из этого накопления на стороне LP в учетные записи счетчиков для каждого пула. Они находятся в состоянии пула (
protocol_fees_token{0,1},fund_fees_token{0,1}и т. д.) до тех пор, пока кто-нибудь не вызовет соответствующую инструкцию сбора. Они не покидают хранилища пула до этого момента; с точки зрения обмена они все еще «в пуле». - Сбор перемещает их. Пути протокола и фонда требуют соответствующего подписанта
protocol_owner/fund_ownerизAmmConfig. Комиссии создателя CPMM используют либо путьCollectCreatorFee, подписанный создателем, либоCollectCreatorFeePermissionless, который может запустить любой плательщик, но который фиксирует направления на канонические ATA создателя.
- Процентные доли разделения — это доля от комиссии за торговлю, а не от торговли. Комиссия за торговлю 0,25% с долей протокола 12% означает, что протокол получает
0,25% × 12% = 0,03%торговли — не 12% торговли. - Комиссии создателя существуют только в пулах, выпущенных LaunchLab. Стандартные пулы CPMM/CLMM имеют трехстороннее разделение (LP / протокол / фонд). LaunchLab добавляет четвертый слот, направленный тому, кто запустил токен, настроенный при
Initializeи неизменяемый. - AMM v4 разделяется только двумя способами, жестко закодированными для каждого пула: LP и протокол. Нет слота фонда, нет слота создателя.
- Фонд против протокола — оба являются направлениями казны протокола, но они имеют разные подписанты и разные предполагаемые использования.
protocolисторически финансирует операции;fund— это более долгосрочная казна. Разделение между ними само по себе настраивается.
reference/fee-comparison и ray/protocol-fees.
4. Учетные записи наблюдений (кольцевой буфер TWAP)
Как CPMM, так и CLMM поддерживают учетную запись наблюдений для каждого пула — кольцевой буфер фиксированного размера образцов(timestamp, cumulative_price), которые другие контракты могут использовать для получения устойчивого к манипуляциям TWAP.
- Каждый обмен вызывает
update_observation. Программа читает текущую цену, умножает на прошедшие секунды с момента предыдущего наблюдения и добавляет это в кумулятивный счетчик. Новая запись перезаписывает самый старый слот (в стиле кольцевого буфера). - TWAP за окно =
(cumul[end] − cumul[start]) / (timestamp[end] − timestamp[start]). Потребители выбирают два наблюдения, охватывающие желаемое окно, и делят. - Raydium сам не использует TWAP для ценообразования. Математика AMM читает спотовые резервы напрямую. Наблюдения — это внешний эффект — Raydium платит стоимость их записи, чтобы другие контракты могли их читать.
- AMM v4 не имеет учетной записи наблюдений. Это старше, чем дизайн ObservationState; интеграторы, желающие получить TWAP v4, должны вычислить его вне цепи из истории логов.
products/cpmm/accounts и products/clmm/accounts.
5. REST API + SDK + IDL
Поверхность вне цепи — это единая тройка, используемая каждым продуктом:- REST API —
https://api-v3.raydium.io. Индексированное представление всего состояния в цепи, в основном для чтения, плюс механизм котировок. Один хост, одна схема. - TypeScript SDK —
@raydium-io/raydium-sdk-v2на NPM. Создает и подписывает транзакции для каждой программы. Обращается к API для котировок/метаданных, обращается к Solana RPC для обновления состояния перед подписью. - Реестр IDL — Anchor IDL для каждой опубликованной программы находятся в репозитории
raydium-idl(один JSON для каждой программы: CPMM, CLMM, LaunchLab). TypeScript SDK использует эти IDL внутри; нижестоящие клиенты Rust / Python регенерируют из одних и тех же файлов.
Частая ошибка — подавать выходные данные REST API прямо в транзакцию. Не делайте этого — повторно получите соответствующее состояние пула/позиции из Solana RPC в слоте, в котором вы подписываете. SDK делает это автоматически для потоков первой стороны; если вы обходите SDK, вы должны сделать это сами.
Полный справочник находится в
sdk-api/, с поверхностью IDL конкретно в sdk-api/anchor-idl.
6. Индексеры и ценовые каналы
REST API питается собственным индексером Raydium, который подписывается на логи программ из флота Solana RPC и записывает денормализованные записи в хранилище SQL. Два следствия для интеграторов:- Индексер — это единственное, что «знает» о состоянии между программами. Сопоставление пула CPMM с его аналогом CLMM, вычисление числа объема за 24 часа в версиях программ, выбор фермы, связанной с минтом LP — все это работа индексера. Сами программы этого не делают.
- Простой индексера — это простой API. Если API возвращает устаревшие или пустые данные, индексер — это подозреваемый. Состояние в цепи не затронуто; интеграторы с собственным RPC и SDK могут продолжать транзакции.
priceUsd в большинстве ответов пула; это вычисляется вне цепи из снимка представления индексера резервов пула и цены справочного предложения (пулы USDC как общая точка опоры). Это достаточно хорошо для UI; это не безопасно использовать как оракул в цепи. Используйте для этого наблюдение TWAP.
Что не является общим
Стоит явно перечислить, потому что новые читатели часто предполагают больше совместного использования, чем существует:- Программы не вызывают друг друга. Обмен CPMM никогда не выполняет CPI в CLMM или AMM v4. Единственная программа, которая компонует несколько AMM, — это программа маршрутизации AMM — и она сама тонкая, просто выполняя CPI в каждый AMM по очереди.
- Нет общего органа управления обновлениями между программами. Каждая программа в цепи имеет свой собственный ключ обновления программы (мультиподпись 3/4 плюс блокировка на 24 часа). Они не связаны.
- Нет общего состояния между фермами и AMM. Ферма не знает, из какого пула CPMM, NFT позиции CLMM или несвязанного токена SPL происходит LP, который она ставит. Программа фермы рассматривает минт ставок как непрозрачный.
- Нет зависимости от оракула. Ценообразование — это резервы в цепи. Нет резервного варианта Pyth/Switchboard; AMM не проверяет оракул перед очисткой.
Указатели
protocol-overview/architecture— каноническая диаграмма, показывающая, как эти части компонуются.protocol-overview/versions-and-migration— как соглашения развивались в версиях программ.security/admin-and-multisig— кто контролирует ключи за AmmConfigs.reference/fee-comparison— матрица ставок комиссий для каждого продукта.reference/program-addresses— канонические ID программ.
- Raydium SDK v2 — источник истины для seeds PDA, макетов учетных записей и определений IDL.
- Реестр Raydium IDL — Anchor IDL.
- Страницы учетных записей для каждого продукта, цитируемые выше.

