Перейти к основному содержанию

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.

Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Stable AMM разделяет большую часть набора инструкций с AMM v4. Уникальными инструкциями являются InitModelData и UpdateModelData, которые заполняют и обновляют таблицу поиска. Все остальные операции (swap, deposit, withdraw, crank) следуют тому же паттерну, что и AMM v4.

Перечень инструкций

ИнструкцияКатегорияПримечания
InitializeLifecycleСоздать пул (требует предварительно выделенного аккаунта model-data).
PreInitializeLifecycleПомощник для предварительного выделения (устаревший).
InitModelDataModel setupСоздать и инициализировать таблицу поиска.
UpdateModelDataModel setupЗаполнить до 5 элементов таблицы за один вызов.
DepositLiquidityДобавить ликвидность, получить LP.
WithdrawLiquidityСжечь LP, получить обе стороны.
SwapBaseInSwapSwap с фиксированным входом.
SwapBaseOutSwapSwap с фиксированным выходом.
MonitorStepCrankОбработать OpenBook, обновить ордера.
SetParamsAdminИзменить параметры пула.
WithdrawPnlAdminВывести накопленные комиссии протокола.
WithdrawSrmLegacyВывести SRM rebates (устаревший).
SimulateInfoDiagnosticRead-only помощник для котировок.

Initialize

Инициализировать новый пул Stable AMM, привязанный к существующему рынку OpenBook и предварительно созданному аккаунту ModelDataInfo. Аргументы
nonce: u8
open_time: u64
Аккаунты (writable W, signer S)
#ИмяWSПримечания
1token_programSPL Token.
2system_program
3rent
4ammWАккаунт пула AmmInfo.
5amm_authorityPDA программного уровня.
6amm_open_ordersWOpenBook OpenOrders.
7lp_mintWFungible LP token mint.
8coin_mint
9pc_mint
10pool_coin_token_accountWVault для coin пула.
11pool_pc_token_accountWVault для pc пула.
12amm_target_ordersWСетка для ордеров OpenBook.
13model_data_accountАккаунт таблицы поиска.
14serum_programПрограмма OpenBook.
15serum_marketРынок OpenBook.
16user_dest_lp_tokenWLP ATA создателя (получает начальные LP).
17user_walletWSСоздатель; платит за rent, финансирует начальный депозит.
(opt)srm_tokenWАккаунт SRM токена для скидок на комиссии (устаревший).
Предусловия
  • model_data_account должен быть уже создан и инициализирован предыдущим вызовом InitModelData.
  • lp_mint должен быть пуст (нулевое предложение).
  • Vaults должны существовать и быть владены amm_authority.
Постусловия
  • AmmInfo инициализируется со всеми ссылками.
  • TargetOrders обнуляется и готов к первому MonitorStep.
  • Начальные LP токены выпускаются и отправляются на user_dest_lp_token.
  • Ордера OpenBook еще не размещены; первый MonitorStep их размещает.

InitModelData

Создать и инициализировать аккаунт ModelDataInfo. Должна быть вызвана один раз перед Initialize. Аргументы
multiplier: u64       // scale factor (e.g., 10^6)
Аккаунты (writable W, signer S)
#ИмяWSПримечания
1model_data_accountWАккаунт таблицы с 50k элементами.
2amm_adminSАдминистратор пула (должен подписать для подтверждения прав).
Предусловия
  • model_data_account должен быть достаточно большим (~1,2 MB для 50k × 24 bytes).
  • model_data_account должен быть владен программой Stable.
Постусловия
  • status = Initialized.
  • multiplier установлен.
  • valid_data_count = 0 (элементы еще не заполнены; вызовите UpdateModelData для добавления).
  • Массив elements обнулен.

UpdateModelData

Заполнить до 5 элементов таблицы за один вызов. Должна быть вызвана после InitModelData, но перед началом использования таблицы в swaps. Аргументы
array_data: [UpdateModelData; 5]

pub struct UpdateModelData {
  pub index: u64,
  pub data: DataElement,
}
Аккаунты (writable W, signer S)
#ИмяWSПримечания
1amm_adminSПодписант (должен быть администратором пула).
2model_data_accountWАккаунт таблицы.
Предусловия
  • amm_admin должен совпадать с AmmInfo.amm_admin.
  • Каждый индекс в array_data должен быть корректным (в пределах 50,000).
  • Элементы должны быть отсортированы (не проверяется в цепи для скорости): x по возрастанию, y по убыванию, цена по возрастанию.
Постусловия
  • Элементы записываются в model_data_account.elements[index] для каждого входа.
  • valid_data_count обновляется до максимального индекса + 1.
Примечание управления: Порядок сортировки и согласованность цен не проверяются в цепи. Вредоносный или неосторожный администратор может повредить таблицу и вызвать неправильные котировки. На практике этот адрес контролируется мультиподписью Raydium.

Deposit

Добавить ликвидность, получить LP токены. Аргументы
max_coin_amount: u64
max_pc_amount: u64
base_side: u64          // 0 = base on coin, 1 = base on pc
Аккаунты — как в AMM v4, ~13 аккаунтов. Должен включать model_data_account как read-only. Математика — стандартная pro-rata с использованием таблицы поиска для расчета соотношения. SDK вычисляет пару coin/pc для желаемого количества LP и проверяет против максимальных лимитов.

Withdraw

Сжечь LP, получить обе стороны pro-rata. Аргументы
amount: u64            // LP токены для сжигания
Аккаунты — как в AMM v4, с model_data_account как read-only. Предусловия
  • user_lp_token_account содержит минимум amount.
Постусловия
  • amount LP токенов сжигаются.
  • Пользователь получает количества coin и pc согласно текущей pro-rata, с учетом накопленных комиссий.

SwapBaseIn

Swap с фиксированным входом, использующий таблицу поиска для определения цены. Аргументы
amount_in: u64
minimum_amount_out: u64
Аккаунты (~17 всего)
#ИмяWSПримечания
1token_program
2ammW
3amm_authority
4amm_open_ordersW
5amm_target_ordersW
6pool_coin_token_accountW
7pool_pc_token_accountW
8model_data_accountRead-only таблица поиска.
9serum_program
10serum_marketW
11serum_bidsW
12serum_asksW
13serum_event_queueW
14serum_coin_vaultW
15serum_pc_vaultW
16serum_vault_signer
17user_source_tokenWАккаунт входящего токена пользователя.
18user_dest_tokenWАккаунт исходящего токена пользователя.
19user_ownerSПользователь (подписант транзакции).
Предусловия
  • amm.status позволяет swap.
  • user_source_token содержит ≥ amount_in.
Постусловия
  • Пользователь теряет amount_in, получает amount_out ≥ minimum_amount_out.
  • Комиссии пула увеличивают счетчики need_take_pnl_*.
  • Ордера OpenBook могут быть исполнены, если заполнены.
Математика — интерполяция таблицы поиска, как описано в products/stable/math.

SwapBaseOut

Swap с фиксированным выходом (противоположность SwapBaseIn). Те же аккаунты, направление математики другое. Аргументы
max_amount_in: u64
amount_out: u64

MonitorStep

Permissionless crank: обработать заполнения OpenBook, обновить сетку лимит-ордеров. Аргументы
plan_order_limit: u16
place_order_limit: u16
cancel_order_limit: u16
Аккаунты (~18 всего) — то же, что в AMM v4 MonitorStep, плюс model_data_account как read-only. Предусловия
  • Ссылки на аккаунты OpenBook должны совпадать с привязанным рынком пула.
Постусловия
  • Ожидающие заполнения OpenBook обрабатываются в vaults пула.
  • Новые лимит-ордера размещаются на OpenBook на основе кривой таблицы поиска.
  • TargetOrders обновляется.

SetParams

Только администратор. Изменить параметры пула (статус, состояние, комиссии, владелец, ключ model-data и т.д.). Аргументы
param: u8              // какой параметр изменить (Status, State, Fees, и т.д.)
value: Option<u64>    // новое значение (если param числовой)
new_pubkey: Option<Pubkey>  // новый адрес (если param ключ аккаунта)
fees: Option<Fees>    // новые комиссии (если param Fees)
Аккаунты — зависит от param. Всегда требует amm_admin как подписант. Общие params:
  • param = 0 (Status) — изменить маску операций.
  • param = 9 (Fees) — изменить trade_fee, pnl split и т.д.
  • param = 11 (ModelDataKey) — переподключить таблицу поиска (редко, требует действия администратора).

WithdrawPnl

Только администратор. Вывести накопленные комиссии протокола из need_take_pnl_* на назначенные аккаунты PnL. Аргументы — нет (управляется состоянием). Аккаунты (~14 всего)
#ИмяWSПримечания
1token_program
2ammW
3amm_authority
4amm_open_ordersW
5pool_coin_token_accountW
6pool_pc_token_accountW
7coin_pnl_destWАккаунт coin администратора (получает комиссию).
8pc_pnl_destWАккаунт pc администратора (получает комиссию).
9pnl_adminSПодписант (должен совпадать с владельцем пула).
10+Аккаунты OpenBook (~4)Сначала обработать ожидающие заполнения.
Предусловия
  • pnl_admin должен быть авторизован.
Постусловия
  • need_take_pnl_coin и need_take_pnl_pc передаются на аккаунты администратора.
  • Счетчики обнуляются.

WithdrawSrm

Устаревший (не используйте на новых пулах). Выводит SRM fee-discount токен rebates из пулов ранней эпохи Serum. Аргументы
amount: u64

SimulateInfo

Read-only помощник для котировок для клиентов и SDK. Аргументы
param: u8              // PoolInfo, SwapBaseInInfo, SwapBaseOutInfo, RunCrankInfo
swap_base_in_value: Option<SwapInstructionBaseIn>
swap_base_out_value: Option<SwapInstructionBaseOut>
Использование — вызывается через simulateTransaction для получения котировки без выполнения swap.

Что дальше

Источники:
  • raydium-stable/program/src/instruction.rs (enum и pack/unpack)
  • raydium-stable/program/src/processor.rs (логика выполнения)