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

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.

Эта страница переведена с помощью ИИ. За эталон принимается английская версия.Открыть английскую версию →

Итоговая таблица инструкций

Имя дискриминатораКто подписываетЧто делает
Initializeсоздатель пулаСоздаёт новый пул CPMM из двух монет и AmmConfig. Без ограничений: любой может её вызвать. Устанавливает enable_creator_fee = false для нового пула. Аккаунт pool_state может быть либо каноническим PDA, либо случайной свежей парой (см. аккаунты Initialize).
InitializeWithPermissionплательщик + владелец PDA PermissionВерсия Initialize с ограничениями. Вызывающий (payer) должен владеть PDA Permission, производной от его публичного ключа. Используется платформами, нуждающимися в контролируемом создании пула (например, LaunchLab выпуски). Позволяет вызывающему зафиксировать creator_fee_on (BothToken / OnlyToken0 / OnlyToken1) и устанавливает enable_creator_fee = true для нового пула. Поле creator на pool_state принимает значение отдельно переданного аккаунта creator, а не плательщика. Та же гибкость в выборе между каноническим PDA и случайной парой для pool_state, как в Initialize.
DepositLPДобавляет ликвидность в обе монеты; получает LP-токены.
WithdrawLPСжигает LP-токены; получает обе базовые монеты пропорционально.
SwapBaseInputтрейдерСвоп с точным входом (amount_in входит, выходит ≥ minimum_amount_out).
SwapBaseOutputтрейдерСвоп с точным выходом (входит ≤ maximum_amount_in, выходит amount_out).
CollectProtocolFeeprotocol_owner (из AmmConfig)Снимает накопленные комиссии протокола из хранилищ.
CollectFundFeefund_owner (из AmmConfig)Снимает накопленные комиссии фонда из хранилищ.
CollectCreatorFeepool_creatorСнимает накопленные комиссии создателя (если комиссия была включена).
UpdatePoolStatusadminПриостанавливает / возобновляет определённые операции на пуле через битовую маску.
UpdateAmmConfigadminИзменяет ставки комиссий или владельца протокола/фонда на AmmConfig.
CreateAmmConfigadminСоздаёт новый уровень комиссий (новый аккаунт AmmConfig).
CreatePermissionPdaadminВыпускает PDA Permission, позволяющий определённому органу вызывать InitializeWithPermission.
ClosePermissionPdaadminОтзывает ранее выпущенный PDA Permission.
Битовая маска состояния: поле 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. Аргументы
init_amount_0: u64
init_amount_1: u64
open_time:     u64   // Unix timestamp; своп отклоняется до этого момента
Аккаунты (W = записываемый, S = подписывает)
#ИмяWSПримечания
1creatorWSОплачивает ренту; записывается как pool_state.pool_creator.
2amm_configВыбранный уровень комиссий.
3authorityГлобальный PDA полномочий CPMM.
4pool_stateWS*Инициализируется здесь. Либо каноническая PDA ["pool", amm_config, token_0_mint, token_1_mint] либо свежая случайная пара — когда не каноническая PDA, программа требует чтобы pool_state подписала (require_eq!(pool_account_info.is_signer, true)). Путь со случайной парой позволяет создателю избежать фронт-раннинга на канонической PDA. Производные PDA (lp_mint, хранилища, observation_state) выводятся из pool_state.key() в любом случае.
5token_0_mintОтсортирована: token_0_mint < token_1_mint.
6token_1_mint
7lp_mintWИнициализируется здесь. Полномочия установлены на authority.
8creator_token_0WИсходящая ATA для init_amount_0.
9creator_token_1WИсходящая ATA для init_amount_1.
10creator_lp_tokenWНазначение для LP (создаётся если отсутствует).
11token_0_vaultWИнициализируется здесь. Принадлежит authority.
12token_1_vaultW
13create_pool_feeWЦелевая ATA для create_pool_fee, уплачиваемой создателем.
14observation_stateWИнициализируется здесь.
15token_programSPL Token (для LP-минта).
16token_0_programSPL Token или Token-2022.
17token_1_programSPL Token или Token-2022.
18associated_token_program
19system_program
20rent
* pool_state подписывает только на пути со случайной парой; путь с канонической PDA выполняется без подписи pool_state. Предусловия
  • Монеты отсортированы (token_0_mint < token_1_mint по порядку байтов).
  • Ни одна монета не использует расширение вне списка разрешений CPMM (TransferFeeConfig, MetadataPointer, TokenMetadata, InterestBearingConfig, ScaledUiAmount) — см. 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, в то время как 100 LP единиц остаются вне обращения, предотвращая полное истощение пула и деление на ноль.
  • 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; депозиты и снятия работают немедленно.
Частые ошибки (полный список в reference/error-codes)
  • InvalidInput — монеты не отсортированы или идентичны.
  • NotSupportMint — заблокированное расширение Token-2022.
  • ExceededSlippage — редко; если init_amount_0/1 приводят к нулевому LP из-за несовпадения десятичных знаков.

Deposit

Добавляет ликвидность в обе монеты пропорционально пулу. Аргументы
lp_token_amount:   u64   // сколько LP-токенов выпустить LP
maximum_token_0:   u64
maximum_token_1:   u64
Аккаунты
#ИмяWS
1ownerS
2authority
3pool_stateW
4owner_lp_tokenW
5token_0_accountW
6token_1_accountW
7token_0_vaultW
8token_1_vaultW
9token_program
10token_program_2022
11vault_0_mint
12vault_1_mint
13lp_mintW
Математика
needed_token_0 = ceil(lp_token_amount * vault_0 / lp_supply)
needed_token_1 = ceil(lp_token_amount * vault_1 / lp_supply)
require(needed_token_0 <= maximum_token_0, "ExceededSlippage")
require(needed_token_1 <= maximum_token_1, "ExceededSlippage")
Без изменения пропорциональности 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-токены и получает обе базовые монеты пропорционально. Аргументы
lp_token_amount:   u64
minimum_token_0:   u64
minimum_token_1:   u64
Аккаунты
#ИмяWS
1ownerS
2authority
3pool_stateW
4owner_lp_tokenW
5token_0_accountW
6token_1_accountW
7token_0_vaultW
8token_1_vaultW
9token_program
10token_program_2022
11vault_0_mint
12vault_1_mint
13lp_mintW
(Идентичны Deposit; lp_mint записываемый потому что LP-токены сжигаются.) Математика
out_token_0 = floor(lp_token_amount * vault_0 / lp_supply)
out_token_1 = floor(lp_token_amount * vault_1 / lp_supply)
require(out_token_0 >= minimum_token_0, "ExceededSlippage")
require(out_token_1 >= minimum_token_1, "ExceededSlippage")
Постусловия
  • lp_supply -= lp_token_amount.
  • Хранилища отправляют out_token_0 / out_token_1 (полная сумма; пользователь получает с учётом любой комиссии за передачу Token-2022).

SwapBaseInput

Своп с точным входом. Аргументы
amount_in:            u64
minimum_amount_out:   u64
Аккаунты
#ИмяWS
1payerS
2authority
3amm_config
4pool_stateW
5input_token_accountW
6output_token_accountW
7input_vaultW
8output_vaultW
9input_token_program
10output_token_program
11input_token_mint
12output_token_mint
13observation_stateW
Порядок вход → выход задаётся направлением пользователя, а не каноническим token_0 / token_1 пула. Программа определяет какое хранилище какое, сопоставляя минты. Математика — см. products/cpmm/math. Предусловия
  • open_time <= now.
  • pool_status разрешает своп.
  • Ни одна монета не приостановлена или заморожена для этого органа.
  • amount_in > 0.
Частые ошибки
  • ExceededSlippageamount_out < minimum_amount_out.
  • ZeroTradingTokens — сделка округляется до нуля.
  • NotApproved — пул приостановлен для своп через UpdatePoolStatus.
  • InvalidInput — минты не соответствуют ни одной из монет хранилищ пула.

SwapBaseOutput

Своп с точным выходом. Аргументы
max_amount_in:  u64
amount_out:     u64
Аккаунты — как в SwapBaseInput. Математика — обратная кривая с потолком, см. products/cpmm/math. Частые ошибкиExceededSlippage (gross_in > max_amount_in), ZeroTradingTokens, InvalidInput, NotApproved.

CollectProtocolFee

Снимает накопленные комиссии протокола из хранилищ в целевое хранилище протокола. Аргументы — отсутствуют. Аккаунты
#ИмяWS
1ownerSДолжен совпадать с amm_config.protocol_owner.
2authority
3pool_stateW
4amm_config
5token_0_vaultW
6token_1_vaultW
7vault_0_mint
8vault_1_mint
9recipient_token_0_accountW
10recipient_token_1_accountW
11token_program
12token_program_2022
Эффект
transfer pool_state.protocol_fees_token0 from vault_0 to recipient_0
transfer pool_state.protocol_fees_token1 from vault_1 to recipient_1
pool_state.protocol_fees_token0 = 0
pool_state.protocol_fees_token1 = 0
Без изменения эффективных балансов кривой (накопленные комиссии уже исключены). Частая ошибкаNotApproved если подписывающий не является protocol_owner.

CollectFundFee

Та же структура, что CollectProtocolFee, но подписывается fund_owner и обнуляет счётчики fund_fees_*.

CollectCreatorFee

Та же структура, подписывается pool_state.pool_creator. Выпускает передачи только если пул был инициализирован с ненулевой ставкой комиссии создателя.

UpdatePoolStatus

Приостанавливает или возобновляет отдельные операции на пуле. Поле status — битовая маска:
БитФлагЭффект при установке
0DEPOSIT_DISABLEDDeposit отклоняет с NotApproved.
1WITHDRAW_DISABLEDWithdraw отклоняет.
2SWAP_DISABLEDSwapBaseInput / SwapBaseOutput отклоняют.
Аргументы
status: u8      // новая битовая маска
Аккаунты
#ИмяWS
1authoritySДолжен совпадать с ключом администратора в программе CPMM.
2pool_stateW
Ключ администратора — это орган обновления программы CPMM — на практике мультиподпись Raydium. См. security/admin-and-multisig.

CreateAmmConfig

Создаёт новый уровень комиссий. Аргументы
index:             u16
trade_fee_rate:    u64
protocol_fee_rate: u64
fund_fee_rate:     u64
create_pool_fee:   u64
Аккаунты
#ИмяWS
1ownerWSАдминистратор.
2amm_configWИнициализируется здесь.
3system_program
Предусловия
  • Существующей AmmConfig с тем же index нет.
  • protocol_fee_rate + fund_fee_rate <= FEE_RATE_DENOMINATOR_VALUE.

UpdateAmmConfig

Изменяет ставки комиссий или владение на существующем AmmConfig. Берёт param: u8 (дискриминатор какое поле обновлять) и value: u64. Семантика значений для параметра находится в исходном коде; обычно:
  • param = 0trade_fee_rate
  • param = 1protocol_fee_rate
  • param = 2fund_fee_rate
  • param = 3new_protocol_owner (передаёт байты Pubkey как переинтерпретацию)
  • param = 4new_fund_owner
  • param = 5create_pool_fee
  • param = 6disable_create_pool
Изменения подписываются администратором и влияют на каждый пул привязанный к этому AmmConfig при следующем своп. Без миграции; пулы просто читают новые значения.

Матрица изменения состояния

Инструкцияlp_supplyБалансы хранилищПоля накопленных комиссийobservation
Initialize+ LP инициализ.+ init_amount_{0,1}0инициализ.
InitializeWithPermission+ LP инициализ.+ init_amount_{0,1}0инициализ.
Deposit++ обе
Withdraw− обе
SwapBaseInput+ вход, − выход+ trade_fee разделён на протокол/фонд; + creator_fee если включена+ (если интервал истёк)
SwapBaseOutput+ вход, − выход+ trade_fee разделён на протокол/фонд; + creator_fee если включена+ (если интервал истёк)
CollectProtocolFee− (по протокол)protocol_* → 0
CollectFundFee− (по фонду)fund_* → 0
CollectCreatorFee− (по создателю)creator_* → 0
UpdatePoolStatus

Куда дальше

  • products/cpmm/code-demos — запускаемые примеры TypeScript для приведённого выше.
  • reference/error-codes — полная таблица ошибок Anchor.
  • products/cpmm/fees — модель накопления комиссий которую CollectProtocolFee / CollectFundFee / CollectCreatorFee снимают.
Источники: