Skip to main content
Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Баннер версии.
  • SDK: @raydium-io/raydium-sdk-v2@0.2.64-alpha
  • Кластер: Solana mainnet-beta
  • ID программы Stable AMM: 5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h (см. reference/program-addresses)
  • Последняя проверка: 2026-09-09 против исходного кода SDK 0.2.64-alpha и демонстраций amm/trade в raydium-sdk-V2-demo
Модуль liquidity SDK нативно поддерживает пулы Stable AMM. Стабильные пулы отображаются как version: 5 (или pooltype: "StablePool") на ApiV3PoolInfoStandardItem; те же вспомогательные функции addLiquidity / removeLiquidity / swap работают для них, как и для пулов AMM v4 (version: 4) с постоянным произведением — SDK автоматически определяет вариант и генерирует правильные инструкции. Математика стабильной кривой находится в src/raydium/liquidity/stable.ts.

Настройка

initLayout() не опционален для пулов Stable. liquidity.computeAmountOut ветвится по poolInfo.version: для версии 4 используется формула постоянного произведения, а для всех остальных читается this.stableLayout.stableModelData и интерполируется таблица поиска. Этот кэш пуст до запуска initLayout(), поэтому расчёт цены для пула v5 без него даст мусор вместо ошибки. Функция идемпотентна и дешёва — вызовите её один раз при запуске.Построители транзакций (swap, addLiquidity, removeLiquidity) не нуждаются в ней: они ветвятся по pooltype.includes("StablePool") и генерируют инструкции AmmV5*, а переданные вами границы сумм уже вычислены.
liquidity.computeAmountIn не поддерживает пулы Stable. В отличие от computeAmountOut, у неё нет ветвления по версии — она всегда применяет обратную формулу постоянного произведения, поэтому на пуле v5 возвращает неправильный maxAmountIn. Для своппа с фиксированным выходом на пуле Stable используйте getDxByDyBaseIn самостоятельно (см. Вспомогательные функции для расчёта цены ниже) и передайте результат в swap с fixedSide: "out".

Определение пула Stable

Два эквивалентных сигнала на ApiV3PoolInfoStandardItem:
И AMM v4 (version: 4, постоянное произведение), и Stable AMM (version: 5) проходят через один и тот же API LiquidityModule на SDK. Внутри модуль ветвится на:
  • InstructionType.AmmV4AddLiquidity / AmmV4RemoveLiquidity для пулов v4
  • InstructionType.AmmV5AddLiquidity / AmmV5RemoveLiquidity для пулов v5 (Stable)
programId пула (возвращаемый с ключами пула) сообщает SDK, в какую программу выполнить CPI; вам не нужно жёстко кодировать его.

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

Если пара монет имеет и пул v4 (постоянное произведение), и пул v5 (стабильный), ответ включает оба — выберите нужный для вашего потока или передайте оба программе AMM Routing и позвольте ей выбрать лучший маршрут.

Своп через пул Stable

Поток LiquidityModule.swap имеет ту же форму, что и для пулов v4 — просто передайте объект пула v5. Два момента легко упустить: computeAmountOut нуждается в живых резервах пула, привитых к информации пула (элемент API сам по себе их не содержит), и его slippage — это простое число, а не Percent:
SDK читает programId пула из ключей пула и ветвится в программу Stable AMM. Никакой специальный аргумент programId не требуется.

Добавление и удаление ликвидности

addLiquidity и removeLiquidity работают одинаково для пулов v4 и v5:
Внутри SDK генерирует InstructionType.AmmV5AddLiquidity, потому что pooltype.includes("StablePool") истинно. Соответствующий поток removeLiquidity симметричен — передайте lpAmount и минимальные суммы, которые вы примете с каждой стороны.

Вспомогательные функции для расчёта цены (stable.ts)

Для расчёта цены на сервере или бэктестирования SDK предоставляет базовую математику стабильной кривой:
Это чистые функции — без RPC, без подписей. ModelDataInfo из блокчейна загружается один раз initLayout() и кэшируется внутри raydium.liquidity.stableLayout, доступный как .stableModelData. initStableModelLayout() идемпотентна: она повторно загружает только пока validDataCount === 0, поэтому повторный вызов initLayout() бесплатен. Передайте текущие резервы (x, y) и вспомогательные функции вычислят путём двоичного поиска в таблице поиска и линейной интерполяции между двумя окружающими строками DataElement. См. products/stable/math для базового алгоритма.

Маршрутизация через AMM Routing (многоскачковые / лучшая цена)

Если вы не хотите выбирать площадку самостоятельно, программа AMM Routing рассмотрит каждый Raydium AMM (v4 / CPMM / CLMM / Stable) и маршрутизирует через любую комбинацию, которая лучше всего: Маршрутизатор — это пятивызовный конвейер, а не один swap(), и он полностью написан — с советом по кэшированию, который делает его пригодным для использования в production — на products/routing/code-demos. Форма такова:
Нет raydium.tradeV2.fetchRoutes, и tradeV2.swap не принимает inputMint / outputMint / slippage — он принимает уже вычисленный swapInfo из getAllRouteComputeAmountOut. Для одного известного пула используйте построитель этого типа пула (raydium.liquidity.swap для AMM v4 и Stable, raydium.cpmm.swap, raydium.clmm.swap), как показано ранее на этой странице.
Это рекомендуемый путь для production-свопперов и агрегаторов — вам никогда не нужно вручную решать, существует ли пул Stable или является ли он лучшей площадкой сегодня.

Рекомендации

  1. Для свопов конечных пользователей предпочитайте поток маршрутизации tradeV2. Он обрабатывает каждый тип пула Raydium, включая Stable.
  2. Для операций, специфичных для пула (добавление / удаление LP на известном пуле Stable), используйте LiquidityModule напрямую — он автоматически определяет пулы v5.
  3. Для расчёта цены на сервере / аналитики вызовите getStablePrice / getDyByDxBaseIn / getDxByDyBaseIn после initLayout(). Никакого трафика RPC за расчёт после кэширования данных модели.
  4. Не кодируйте вручную сыр инструкции SwapBaseIn. Обновление от 2026-06-22 удалило мёртвые счета OpenBook, поэтому новая раскладка своппа принимает 9 счётов (старая раскладка из 18 счётов всё ещё парсится для обратной совместимости). Deposit теперь 12 счётов (старые 14 совместимы), Withdraw 12 (старые 21/22 совместимы), и WithdrawPnl 10 без пути совместимости. Предварительно построенные вспомогательные функции SDK выбирают правильную раскладку и порядок для вас; самостоятельное написание подвержено ошибкам. См. products/stable/instructions для полных таблиц счётов.

Куда дальше

  • Math — как работает интерполяция таблицы поиска.
  • Instructions — полный справочник инструкций.
  • AMM Routing — маршрутизация между несколькими пулами через AMM v4, CPMM, CLMM, Stable.
Источники: