Chuyển đến nội dung chính

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.

Trang này được dịch tự động bằng AI. Phiên bản tiếng Anh là bản chính thức.Xem bản tiếng Anh →
Trang này là tài liệu tham khảo chỉ thị có thẩm quyền. Để xem code thực tế tạo ra các chỉ thị này, xem products/cpmm/code-demos. Để hiểu ý nghĩa mã lỗi, xem reference/error-codes.

Tóm tắt chỉ thị

Tên phân biệtAi kýNó làm gì
Initializenhà tạo poolTạo pool CPMM mới từ hai mint và một AmmConfig. Không cần phép; bất kỳ ai cũng có thể gọi nó. Cứng mã enable_creator_fee = false trên pool mới. Tài khoản pool_state có thể là PDA chính tắc hoặc một keypair ngẫu nhiên mới (xem Accounts của Initialize).
InitializeWithPermissionngười trả tiền + chủ sở hữu PDA PermissionPhiên bản được phép của Initialize. Người gọi (payer) phải sở hữu một PDA Permission được dẫn xuất từ pubkey của họ. Được sử dụng bởi các nền tảng cần tạo pool có gating (ví dụ: graduations của LaunchLab). Cho phép người gọi ghim creator_fee_on (BothToken / OnlyToken0 / OnlyToken1) và bắt buộc enable_creator_fee = true trên pool mới. Trường creator trên pool_state được đặt thành tài khoản creator được truyền riêng biệt, không phải người trả tiền. Cùng tính linh hoạt PDA-chính-tắc-hoặc-random-keypair cho pool_state như Initialize.
DepositLPThêm thanh khoản trong cả hai token; nhận token LP.
WithdrawLPĐốt token LP; nhận cả hai token cơ sở theo tỷ lệ.
SwapBaseInputngười trao đổiSwap input chính xác (amount_in vào, ≥ minimum_amount_out ra).
SwapBaseOutputngười trao đổiSwap output chính xác (≤ maximum_amount_in vào, amount_out ra).
CollectProtocolFeeprotocol_owner (từ AmmConfig)Thu gom phí giao thức tích lũy từ các kho.
CollectFundFeefund_owner (từ AmmConfig)Thu gom phí quỹ tích lũy từ các kho.
CollectCreatorFeepool_creatorThu gom phí tạo tích lũy (nếu phí tạo được bật).
UpdatePoolStatusadminTạm dừng / tiếp tục các hoạt động cụ thể trên pool thông qua một bitmask.
UpdateAmmConfigadminThay đổi tỷ lệ phí hoặc chủ sở hữu giao thức/quỹ trên một AmmConfig.
CreateAmmConfigadminTạo tầng phí mới (tài khoản AmmConfig mới).
CreatePermissionPdaadminMint một PDA Permission cho phép một cơ quan cụ thể gọi InitializeWithPermission.
ClosePermissionPdaadminThu hồi một PDA Permission đã phát hành trước đó.
Bitmask trạng thái: mỗi status của pool là u8 trong đó bit 0 = deposit bị vô hiệu hóa, bit 1 = withdraw bị vô hiệu hóa, bit 2 = swap bị vô hiệu hóa (PoolStatusBitIndex { Deposit, Withdraw, Swap } trong chương trình). Một bit rõ ràng có nghĩa là hoạt động được phép; một bit được đặt có nghĩa là nó bị tạm dừng. UpdatePoolStatus nhận một u8 thô và ghi đè giá trị hiện có. Các phần tiếp theo đi qua từng phần chi tiết. Thứ tự tài khoản tuân theo IDL của CPMM; SDK và client Rust trong raydium-cp-swap/programs/cp-swap/src/instructions phù hợp với thứ tự này.

Initialize

Tạo pool CPMM mới. Các đối số
init_amount_0: u64
init_amount_1: u64
open_time:     u64   // Unix timestamp; swaps bị từ chối trước thời điểm này
Tài khoản (W = có thể ghi, S = người ký)
#TênWSGhi chú
1creatorWSTrả tiền thuê; được ghi lại là pool_state.pool_creator.
2amm_configTầng phí được chọn.
3authorityPDA cơ quan toàn cầu CPMM.
4pool_stateWS*Được init tại đây. Hoặc PDA chính tắc ["pool", amm_config, token_0_mint, token_1_mint] hoặc một keypair ngẫu nhiên mới — khi không phải PDA chính tắc, chương trình yêu cầu pool_state ký (require_eq!(pool_account_info.is_signer, true)). Đường dẫn keypair ngẫu nhiên cho phép người tạo tránh những nỗ lực front-running trên PDA chính tắc. Các PDA xuôi dòng (lp_mint, vaults, observation_state) được dẫn xuất từ pool_state.key() dù sao.
5token_0_mintĐược sắp xếp: token_0_mint < token_1_mint.
6token_1_mint
7lp_mintWĐược init tại đây. Cơ quan được đặt thành authority.
8creator_token_0WATA nguồn cho init_amount_0.
9creator_token_1WATA nguồn cho init_amount_1.
10creator_lp_tokenWĐích cho LP (tạo nếu thiếu).
11token_0_vaultWĐược init tại đây. Được sở hữu bởi authority.
12token_1_vaultW
13create_pool_feeWATA đích cho create_pool_fee được trả bởi người tạo.
14observation_stateWĐược init tại đây.
15token_programSPL Token (cho LP mint).
16token_0_programSPL Token hoặc Token-2022.
17token_1_programSPL Token hoặc Token-2022.
18associated_token_program
19system_program
20rent
* pool_state chỉ ký trên đường dẫn random-keypair; đường dẫn PDA chính tắc chạy mà không cần pool_state ký. Điều kiện tiền
  • Mint được sắp xếp (token_0_mint < token_1_mint theo thứ tự byte).
  • Không mint nào sử dụng extension ngoài danh sách cho phép CPMM (TransferFeeConfig, MetadataPointer, TokenMetadata, InterestBearingConfig, ScaledUiAmount) — xem products/cpmm/accounts. Danh sách cho phép nhỏ cho mỗi mint bên trong chương trình bỏ qua kiểm tra để tự onboarding từng trường hợp.
  • creator có ít nhất init_amount_0init_amount_1 trong các ATA tương ứng.
  • amm_config.disable_create_pool == false.
Điều kiện sau
  • pool_state tồn tại với lp_supply = sqrt(init_amount_0 * init_amount_1) − LOCKED_LP.
  • Người khởi tạo LP của LOCKED_LP (100 lamports token LP) bị khóa vĩnh viễn trong pool — pool_state.lp_supply ghi liquidity − 100 trong khi 100 đơn vị LP vẫn ở ngoài lưu thông, ngăn pool bị thoát hoàn toàn và chia cho không.
  • observation_state được khởi tạo; observation_index = 0pool_id = pool_state.key().
  • create_pool_fee lamports được chuyển từ người tạo đến người nhận và đồng bộ hóa dưới dạng SOL gốc (nó là một ATA wSOL).
  • Bitmask trạng thái của pool là 0 (deposit / withdraw / swap tất cả đều được bật).
  • enable_creator_fee = falsecreator_fee_on = BothToken. Initialize không hỗ trợ bật phí tạo — đường dẫn đó là InitializeWithPermission.
  • open_time được đẩy tới block_timestamp + 1 nếu người gọi truyền một giá trị <= block_timestamp. Swap bị từ chối trước open_time; deposit và withdrawal hoạt động ngay lập tức.
Lỗi phổ biến (danh sách đầy đủ trong reference/error-codes)
  • InvalidInput — mint không được sắp xếp, hoặc mint giống hệt nhau.
  • NotSupportMint — extension Token-2022 bị chặn.
  • ExceededSlippage — hiếm; nếu init_amount_0/1 dẫn đến zero LP do mismatch decimals.

Deposit

Thêm thanh khoản trong cả hai token theo tỷ lệ của pool. Các đối số
lp_token_amount:   u64   // bao nhiêu token LP để mint cho LP
maximum_token_0:   u64
maximum_token_1:   u64
Tài khoản
#TênWS
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
Toán học
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")
Không có thay đổi đối với tính tỷ lệ của k — cả kho và lp_supply tỷ lệ theo cùng một hệ số. Điều kiện sau
  • lp_supply += lp_token_amount.
  • vault_0 += needed_token_0 (ròng của bất kỳ phí chuyển Token-2022 nào trên input).
  • vault_1 += needed_token_1 (ròng của bất kỳ phí chuyển Token-2022 nào trên input).
Lỗi phổ biếnExceededSlippage, ZeroTradingTokens, InvalidStatus nếu deposit bị tạm dừng.

Withdraw

Đốt token LP và nhận cả hai token cơ sở theo tỷ lệ. Các đối số
lp_token_amount:   u64
minimum_token_0:   u64
minimum_token_1:   u64
Tài khoản
#TênWS
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
(Giống hệt như Deposit; lp_mint có thể ghi vì token LP bị đốt.) Toán học
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")
Điều kiện sau
  • lp_supply -= lp_token_amount.
  • Kho gửi out_token_0 / out_token_1 (gross; người dùng nhận ròng của bất kỳ phí chuyển Token-2022 nào).

SwapBaseInput

Swap input chính xác. Các đối số
amount_in:            u64
minimum_amount_out:   u64
Tài khoản
#TênWS
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
Thứ tự input → output là theo hướng của người dùng, không phải token_0 / token_1 chính tắc của pool. Chương trình tìm ra kho nào là kho nào bằng cách so khớp mint. Toán học — xem products/cpmm/math. Điều kiện tiền
  • open_time <= now.
  • pool_status cho phép swap.
  • Không mint nào bị tạm dừng hoặc đóng băng cho cơ quan này.
  • amount_in > 0.
Lỗi phổ biến
  • ExceededSlippageamount_out < minimum_amount_out.
  • ZeroTradingTokens — giao dịch làm tròn xuống không.
  • NotApproved — pool bị tạm dừng cho swap thông qua UpdatePoolStatus.
  • InvalidInput — mint không khớp với bất kỳ mint kho nào của pool.

SwapBaseOutput

Swap output chính xác. Các đối số
max_amount_in:  u64
amount_out:     u64
Tài khoản — giống như SwapBaseInput. Toán học — đường cong nghịch đảo với ceiling, xem products/cpmm/math. Lỗi phổ biếnExceededSlippage (gross_in > max_amount_in), ZeroTradingTokens, InvalidInput, NotApproved.

CollectProtocolFee

Thu gom phí giao thức tích lũy từ các kho đến đích giao thức. Các đối số — không có. Tài khoản
#TênWS
1ownerSPhải khớp với 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
Hiệu ứng
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
Không có thay đổi đối với cân bằng hiệu quả của đường cong (phí tích lũy đã được loại trừ). Lỗi phổ biếnNotApproved nếu người ký không phải là protocol_owner.

CollectFundFee

Cùng hình dạng như CollectProtocolFee nhưng được ký bởi fund_owner và zeroing các bộ đếm fund_fees_*.

CollectCreatorFee

Cùng hình dạng lần nữa, được ký bởi pool_state.pool_creator. Chỉ phát ra chuyển nếu pool được khởi tạo với tỷ lệ phí tạo không-không.

UpdatePoolStatus

Tạm dừng hoặc tiếp tục các hoạt động riêng lẻ trên pool. Trường status là một bitmask:
BitCờHiệu ứng khi được đặt
0DEPOSIT_DISABLEDDeposit từ chối với NotApproved.
1WITHDRAW_DISABLEDWithdraw từ chối.
2SWAP_DISABLEDSwapBaseInput / SwapBaseOutput từ chối.
Các đối số
status: u8      // bitmask mới
Tài khoản
#TênWS
1authoritySPhải khớp với khóa admin trên chương trình CPMM.
2pool_stateW
Khóa admin là cơ quan nâng cấp trên chương trình CPMM — trong thực tế, multisig của Raydium. Xem security/admin-and-multisig.

CreateAmmConfig

Tạo tầng phí mới. Các đối số
index:             u16
trade_fee_rate:    u64
protocol_fee_rate: u64
fund_fee_rate:     u64
create_pool_fee:   u64
Tài khoản
#TênWS
1ownerWSAdmin.
2amm_configWĐược init tại đây.
3system_program
Điều kiện tiền
  • Không có AmmConfig hiện có với cùng index.
  • protocol_fee_rate + fund_fee_rate <= FEE_RATE_DENOMINATOR_VALUE.

UpdateAmmConfig

Thay đổi tỷ lệ phí hoặc quyền sở hữu trên một AmmConfig hiện có. Nhận một param: u8 (phân biệt cho trường nào để cập nhật) và một value: u64. Ngữ nghĩa giá trị cho mỗi param trong nguồn; thường là:
  • param = 0trade_fee_rate
  • param = 1protocol_fee_rate
  • param = 2fund_fee_rate
  • param = 3new_protocol_owner (chuyển byte Pubkey dưới dạng reinterpret)
  • param = 4new_fund_owner
  • param = 5create_pool_fee
  • param = 6disable_create_pool
Các thay đổi được ký bởi admin và ảnh hưởng đến mọi pool ràng buộc với AmmConfig này trong swap tiếp theo. Không có migration; pool chỉ đơn giản đọc các giá trị mới.

Ma trận thay đổi trạng thái

Chỉ thịlp_supplyCân bằng khoTrường phí tích lũyobservation
Initialize+ init LP+ init_amount_{0,1}0init
InitializeWithPermission+ init LP+ init_amount_{0,1}0init
Deposit++ cả hai
Withdraw− cả hai
SwapBaseInput+ in, − out+ trade_fee chia thành giao thức/quỹ; + creator_fee nếu được bật+ (nếu khoảng thời gian đã trôi qua)
SwapBaseOutput+ in, − out+ trade_fee chia thành giao thức/quỹ; + creator_fee nếu được bật+ (nếu khoảng thời gian đã trôi qua)
CollectProtocolFee− (bằng bucket giao thức)protocol_* → 0
CollectFundFee− (bằng bucket quỹ)fund_* → 0
CollectCreatorFee− (bằng bucket tạo)creator_* → 0
UpdatePoolStatus

Tiếp theo là gì

Nguồn: