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 hướng dẫn chính thức. Để xem mã thực tế soạn các hướng dẫn này, hãy xem
products/cpmm/code-demos. Để biết ý nghĩa mã lỗi, xem reference/error-codes.Tóm tắt hướng dẫn
Bitmask trạng thái:
status của mỗi pool là một 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). Bit rõ ràng có nghĩa là hoạt động được phép; bit được đặt có nghĩa là nó bị tạm dừng. UpdatePoolStatus lấy 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 CPMM IDL; SDK và client Rust trong raydium-cp-swap/programs/cp-swap/src/instructions khớp với thứ tự này.
Initialize
Tạo một pool CPMM mới.
Đối số
* pool_state chỉ ký trên đường dẫn keypair ngẫu nhiên; đường dẫn PDA chính tắc chạy mà không cần pool_state ký.
Điều kiện trước
- Mint được sắp xếp (
token_0_mint < token_1_minttheo thứ tự byte). - Không mint nào sử dụng phần mở rộng ngoài danh sách cho phép CPMM (
TransferFeeConfig,MetadataPointer,TokenMetadata,InterestBearingConfig,ScaledUiAmount) — xemproducts/cpmm/accounts. Một danh sách cho phép nhỏ cho mỗi mint bên trong chương trình bỏ qua kiểm tra để onboarding từng trường hợp. creatorcó ít nhấtinit_amount_0vàinit_amount_1trong các ATA tương ứng.amm_config.disable_create_pool == false.
pool_statetồn tại vớilp_supply = sqrt(init_amount_0 * init_amount_1) − LOCKED_LP.- Người khởi động LP của
LOCKED_LP(100lamport của token LP) bị khóa vĩnh viễn trong pool —pool_state.lp_supplyghi lạiliquidity − 100trong khi100đơn vị LP vẫn ngoài lưu thông, ngăn pool bị thoát hết và chia cho không. observation_stateđược khởi tạo;observation_index = 0vàpool_id = pool_state.key().create_pool_feelamport được chuyển từ người tạo đến người nhận và được đồ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 đều được bật). enable_creator_fee = falsevàcreator_fee_on = BothToken.Initializekhông hỗ trợ bật phí người tạo — đường dẫn đó làInitializeWithPermission.open_timeđược tăng lênblock_timestamp + 1nếu người gọi truyền một giá trị<= block_timestamp. Swap bị từ chối trướcopen_time; deposit và withdraw hoạt động ngay lập tức.
reference/error-codes)
InvalidInput— mint không được sắp xếp hoặc mint giống nhau.NotSupportMint— phần mở rộng Token-2022 bị chặn.ExceededSlippage— hiếm khi; nếuinit_amount_0/1dẫn đến LP bằng không do không khớp số thập phân.
Deposit
Thêm thanh khoản ở cả hai token theo tỷ lệ với pool.
Đối số
Toán học
k — cả vault và lp_supply được mở rộng 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 đầu vào).vault_1 += needed_token_1(ròng của bất kỳ phí chuyển Token-2022 nào trên đầu vào).
ExceededSlippage, ZeroTradingTokens, InvalidStatus nếu deposit bị tạm dừng.
Withdraw
Đốt token LP và nhận cả hai token cơ bản theo tỷ lệ.
Đối số
(Giống hệt như
Deposit; lp_mint có thể ghi vì token LP được đốt.)
Toán học
lp_supply -= lp_token_amount.- Vault gửi
out_token_0/out_token_1(tổng; người dùng nhận ròng của bất kỳ phí chuyển Token-2022 nào).
SwapBaseInput
Swap đầu vào chính xác.
Đối số
Thứ tự input → output là theo hướng của người dùng, không phải theo
token_0 / token_1 chính tắc của pool. Chương trình tìm ra vault nào là cái nào bằng cách khớp mint.
Toán học — xem products/cpmm/math.
Điều kiện trước
open_time <= now.pool_statuscho phép swap.- Không mint nào bị tạm dừng hoặc đóng băng cho quyền hạn này.
amount_in > 0.
ExceededSlippage—amount_out < minimum_amount_out.ZeroTradingTokens— giao dịch làm tròn thành không.NotApproved— pool bị tạm dừng cho swap thông quaUpdatePoolStatus.InvalidInput— mint không khớp với bất kỳ mint vault nào của pool.
SwapBaseOutput
Swap đầu ra chính xác.
Đối số
SwapBaseInput.
Toán học — đường cong nghịch đảo với trần, xem products/cpmm/math.
Lỗi phổ biến — ExceededSlippage (gross_in > max_amount_in), ZeroTradingTokens, InvalidInput, NotApproved.
CollectProtocolFee
Quét phí giao thức tích lũy từ vault đến đích giao thức.
Đối số — không có.
Tài khoản
Hiệu ứng
NotApproved 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à đặt lại các bộ đếm fund_fees_*.
CollectCreatorFee
Được ký bởi pool_state.pool_creator. Nó chuyển toàn bộ số dư creator_fees_token_0 và creator_fees_token_1 đến các tài khoản token của người tạo, sau đó đặt lại cả hai bộ đếm. Nó trả về NoFeeCollect khi cả hai bộ đếm bằng không.
CollectCreatorFeePermissionless
Bất kỳ ai cũng có thể kích hoạt việc thu thập phí người tạo. Hướng dẫn luôn gửi toàn bộ số dư tích lũy đến các tài khoản token liên kết chính tắc được sở hữu bởi pool_state.pool_creator; người gọi không thể chọn người tạo hoặc đích khác. Nếu bất kỳ ATA nào bị thiếu, payer tài trợ việc tạo của nó.
CollectCreatorFee gốc vẫn có thể gọi được, vì vậy các client hiện có vẫn tương thích.
Đối số — không có.
Tài khoản
Hiệu ứng
- Chuyển tất cả
creator_fees_token_0vàcreator_fees_token_1từ vault pool đến ATA người tạo. - Đặt lại cả hai bộ đếm phí người tạo và cập nhật
pool_state.recent_epoch. - Trả về
NoFeeCollectkhi cả hai bộ đếm bằ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:
Đối số
Khóa admin là quyền hạn nâng cấp trên chương trình CPMM — trong thực tế, multisig Raydium. Xem
security/admin-and-multisig.
CreateAmmConfig
Tạo một tầng phí mới.
Đối số
Điều kiện trước
- Không có
AmmConfighiện có với cùngindex. 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ó. Lấy một param: u8 (discriminator cho trường nào cần cập nhật) và một value: u64. Ngữ nghĩa giá trị cho mỗi param nằm trong nguồn; thường:
param = 0→trade_fee_rateparam = 1→protocol_fee_rateparam = 2→fund_fee_rateparam = 3→new_protocol_owner(chuyển bytePubkeydưới dạng reinterpret)param = 4→new_fund_ownerparam = 5→create_pool_feeparam = 6→disable_create_pool
AmmConfig này trên swap tiếp theo. Không có di chuyển; pool chỉ đơn giản đọc các giá trị mới.
Ma trận thay đổi trạng thái
Tiếp theo
products/cpmm/code-demos— mẫu TypeScript có thể chạy được cho các hướng dẫn trên.reference/error-codes— bảng lỗi Anchor hoàn chỉnh.products/cpmm/fees— mô hình tích lũy phí mà các hướng dẫnCollect*Feexả.

