Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →
Обзор инструкций
Битовая маска статуса:
status каждого пула — это u8, где бит 0 = депозит отключен, бит 1 = вывод отключен, бит 2 = своп отключен (PoolStatusBitIndex { Deposit, Withdraw, Swap } в программе). Нулевой бит означает, что операция разрешена; установленный бит означает, что она приостановлена. UpdatePoolStatus принимает сырой u8 и перезаписывает существующее значение.
В следующих разделах каждая инструкция рассматривается подробно. Порядок счётов соответствует IDL CPMM; SDK и Rust-клиент в raydium-cp-swap/programs/cp-swap/src/instructions соответствуют этому порядку.
Initialize
Создаёт новый пул CPMM.
Аргументы
* pool_state подписывает только на пути со случайной парой ключей; путь с каноническим PDA работает без подписи pool_state.
Предусловия
- Монеты отсортированы (
token_0_mint < token_1_mintпо порядку байтов). - Ни одна монета не использует расширение вне списка разрешённых CPMM (
TransferFeeConfig,MetadataPointer,TokenMetadata,InterestBearingConfig,ScaledUiAmount) — см./ru/products/cpmm/accounts. Небольшой список разрешённых расширений для каждой монеты внутри программы обходит проверку для поэтапного подключения. creatorимеет как минимумinit_amount_0иinit_amount_1в соответствующих ATA.amm_config.disable_create_pool == false.
pool_stateсуществует сlp_supply = sqrt(init_amount_0 * init_amount_1) − LOCKED_LP.- Стартовый LP в размере
LOCKED_LP(100ламортов LP-токена) навсегда заблокирован в пуле —pool_state.lp_supplyзаписываетliquidity − 100, в то время как100LP-единиц остаются вне обращения, предотвращая полное осушение пула и деление на ноль. observation_stateинициализирован;observation_index = 0иpool_id = pool_state.key().create_pool_feeламортов переводятся от создателя к получателю и синхронизируются как нативный SOL (это ATA wSOL).- Битовая маска статуса пула —
0(депозит / вывод / своп все включены). enable_creator_fee = falseиcreator_fee_on = BothToken.Initializeне поддерживает включение комиссии создателя — этот путь —InitializeWithPermission.open_timeувеличивается доblock_timestamp + 1, если вызывающий передал значение<= block_timestamp. Своп отклоняется доopen_time; депозиты и выводы работают сразу.
/ru/reference/error-codes)
InvalidInput— монеты не отсортированы или идентичны.NotSupportMint— заблокированное расширение Token-2022.ExceededSlippage— редко; еслиinit_amount_0/1приводят к нулевому LP из-за несовпадения десятичных знаков.
Deposit
Добавляет ликвидность в обе монеты пропорционально пулу.
Аргументы
Математика
k — оба хранилища и lp_supply масштабируются на один и тот же коэффициент.
Постусловия
lp_supply += lp_token_amount.vault_0 += needed_token_0(за вычетом любой комиссии за передачу Token-2022 на входе).vault_1 += needed_token_1(за вычетом любой комиссии за передачу Token-2022 на входе).
ExceededSlippage, ZeroTradingTokens, InvalidStatus, если депозит приостановлен.
Withdraw
Сжигает LP-токены и получает обе базовые монеты пропорционально.
Аргументы
(Идентично
Deposit; lp_mint записываемый, потому что LP-токены сжигаются.)
Математика
lp_supply -= lp_token_amount.- Хранилища отправляют
out_token_0/out_token_1(валовой; пользователь получает нетто за вычетом любой комиссии за передачу Token-2022).
SwapBaseInput
Своп с точным входом.
Аргументы
Порядок вход → выход определяется направлением пользователя, а не каноническим
token_0 / token_1 пула. Программа определяет, какое хранилище какое, сопоставляя монеты.
Математика — см. /ru/products/cpmm/math.
Предусловия
open_time <= now.pool_statusразрешает своп.- Ни одна монета не приостановлена или заморожена для этого органа.
amount_in > 0.
ExceededSlippage—amount_out < minimum_amount_out.ZeroTradingTokens— сделка округляется до нуля.NotApproved— пул приостановлен для свопов черезUpdatePoolStatus.InvalidInput— монеты не совпадают ни с одной из монет хранилища пула.
SwapBaseOutput
Своп с точным выходом.
Аргументы
SwapBaseInput.
Математика — обратная кривая с потолком, см. /ru/products/cpmm/math.
Частые ошибки — ExceededSlippage (gross_in > max_amount_in), ZeroTradingTokens, InvalidInput, NotApproved.
CollectProtocolFee
Собирает накопленные комиссии протокола из хранилищ в назначение протокола.
Аргументы — нет.
Счёты
Эффект
NotApproved, если подписывающий не является protocol_owner.
CollectFundFee
Та же структура, что и CollectProtocolFee, но подписана fund_owner и обнуляет счётчики fund_fees_*.
CollectCreatorFee
Подписана pool_state.pool_creator. Переводит полные балансы creator_fees_token_0 и creator_fees_token_1 на токен-счета создателя, затем обнуляет оба счётчика. Возвращает NoFeeCollect, когда оба счётчика равны нулю.
CollectCreatorFeePermissionless
Любой может запустить сбор комиссии создателя. Инструкция всегда отправляет полные накопленные балансы на канонические связанные токен-счета, принадлежащие pool_state.pool_creator; вызывающий не может выбрать другого создателя или назначение. Если какой-либо ATA отсутствует, плательщик финансирует его создание.
Исходный CollectCreatorFee остаётся вызываемым, поэтому существующие клиенты остаются совместимыми.
Аргументы — нет.
Счёты
Эффект
- Переводит все
creator_fees_token_0иcreator_fees_token_1из хранилищ пула на ATA создателя. - Обнуляет оба счётчика комиссии создателя и обновляет
pool_state.recent_epoch. - Возвращает
NoFeeCollect, когда оба счётчика равны нулю.
UpdatePoolStatus
Приостанавливает или возобновляет отдельные операции на пуле. Поле status — это битовая маска:
Аргументы
Ключ администратора — это орган обновления программы CPMM — на практике мультиподпись Raydium. См.
/ru/security/admin-and-multisig.
CreateAmmConfig
Создаёт новый уровень комиссий.
Аргументы
Предусловия
- Нет существующего
AmmConfigс тем жеindex. protocol_fee_rate + fund_fee_rate <= FEE_RATE_DENOMINATOR_VALUE.
UpdateAmmConfig
Изменяет ставки комиссий или владение существующим AmmConfig. Принимает param: u8 (дискриминатор для выбора обновляемого поля) и value: u64. Семантика значения для каждого параметра находится в исходном коде; обычно:
param = 0→trade_fee_rateparam = 1→protocol_fee_rateparam = 2→fund_fee_rateparam = 3→new_protocol_owner(передайте байтыPubkeyкак переинтерпретацию)param = 4→new_fund_ownerparam = 5→create_pool_feeparam = 6→disable_create_pool
AmmConfig при следующем своп. Без миграции; пулы просто читают новые значения.
Матрица изменения состояния
Что дальше
/ru/products/cpmm/code-demos— запускаемые примеры TypeScript для вышеперечисленного./ru/reference/error-codes— полная таблица ошибок Anchor./ru/products/cpmm/fees— модель накопления комиссий, которую инструкцииCollect*Feeосушают.

