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 đi kèm với products/clmm/accounts (mô tả các tài khoản) và products/clmm/math (mô tả các phép toán). Đây là tài liệu tham chiếu chính xác về các đối số và thứ tự tài khoản; bố cục byte cụ thể lấy từ IDL.
Danh sách lệnh
| Nhóm | Lệnh | Ghi chú |
|---|
| Admin | CreateAmmConfig | Tạo một bậc phí mới. |
| Admin | UpdateAmmConfig | Thay đổi tỷ lệ phí trên một bậc hiện có. |
| Admin | UpdatePoolStatus | Tạm dừng/tiếp tục hoạt động của pool. |
| Admin | CreateSupportMintAssociated | Đưa cấu hình extension của mint Token-2022 vào danh sách cho phép sử dụng trong các pool CLMM. |
| Admin | CreateOperationAccount | Khởi tạo tài khoản vận hành cấp chương trình (một lần duy nhất). |
| Admin | UpdateOperationAccount | Chỉnh sửa danh sách trắng của tài khoản vận hành. |
| Admin | CreateDynamicFeeConfig | Tạo một bộ tham số phí động có thể tái sử dụng theo chỉ số u16. |
| Admin | UpdateDynamicFeeConfig | Chỉnh sửa một DynamicFeeConfig hiện có. Các pool đã snapshot cấu hình này không bị ảnh hưởng. |
| Pool | CreatePool | Khởi tạo một pool CLMM gắn với một AmmConfig. Đường dẫn phí chuẩn FromInput. Tồn tại song song với CreateCustomizablePool. |
| Pool | CreateCustomizablePool | Khuyến nghị dùng cho pool mới. Tương tự CreatePool nhưng có thêm collect_fee_on và cờ enable_dynamic_fee tùy chọn. |
| Vị thế | OpenPosition / OpenPositionV2 / OpenPositionWithToken22Nft | Mint một NFT vị thế. OpenPositionV2 thay thế V1 (bố cục tài khoản mới hơn với slot bitmap-extension); OpenPositionWithToken22Nft phát hành NFT vị thế theo chuẩn Token-2022 thay vì SPL Token. Code mới nên dùng V2 hoặc biến thể Token-2022. |
| Vị thế | IncreaseLiquidity / IncreaseLiquidityV2 | Thêm thanh khoản vào vị thế hiện có. |
| Vị thế | DecreaseLiquidity / DecreaseLiquidityV2 | Rút thanh khoản; thu phí còn nợ. |
| Vị thế | ClosePosition | Đốt NFT và đóng PersonalPositionState. |
| Vị thế | CloseProtocolPosition | Chỉ dành cho admin — thu hồi các PDA ProtocolPositionState cũ. Chương trình hiện tại không còn tạo hoặc đọc ProtocolPositionState — lệnh này chỉ tồn tại để thu hồi rent từ các tài khoản được tạo bởi phiên bản chương trình cũ hơn. |
| Swap | Swap / SwapV2 | Swap thanh khoản không đổi. Cả hai biến thể đều áp dụng phí động, định tuyến phí một chiều và khớp lệnh giới hạn; điểm khác biệt duy nhất là SwapV2 chấp nhận mint Token-2022 (biến thể V1 yêu cầu cả hai vault đều là SPL Token cổ điển). |
| Swap | SwapRouterBaseIn | Nhiều hop, được router sử dụng. |
| Lệnh giới hạn | OpenLimitOrder | Đặt lệnh bán tại một tick. Token chưa khớp nằm trên tick; engine khớp lệnh sẽ điền chúng khi giá vượt qua. |
| Lệnh giới hạn | IncreaseLimitOrder | Thêm vào một lệnh đang mở. |
| Lệnh giới hạn | DecreaseLimitOrder | Giảm hoặc hủy một lệnh đang mở; trả lại phần chưa khớp cùng bất kỳ đầu ra nào đã được thanh toán. |
| Lệnh giới hạn | SettleLimitOrder | Đẩy token đầu ra đã khớp về cho chủ sở hữu lệnh. Có thể gọi bởi chủ sở hữu hoặc keeper vận hành. |
| Lệnh giới hạn | CloseLimitOrder | Đóng tài khoản lệnh đã được thực hiện hoàn toàn. Rent luôn trả về owner của lệnh. Có thể gọi bởi owner hoặc keeper. |
| Phí | CollectProtocolFee | Admin thu phí giao thức. |
| Phí | CollectFundFee | Admin thu phí quỹ. |
| Phần thưởng | InitializeReward | Gắn một luồng phần thưởng mới vào pool. |
| Phần thưởng | SetRewardParams | Thay đổi tỷ lệ phát thải/thời gian kết thúc của phần thưởng hiện có. |
| Phần thưởng | UpdateRewardInfos | Thanh toán tăng trưởng phần thưởng đến thời điểm hiện tại (được gọi bởi bất kỳ swap/thay đổi vị thế nào). |
| Phần thưởng | TransferRewardOwner | Chuyển quyền có thể thiết lập hoặc nạp thêm một luồng phần thưởng. |
| Phần thưởng | CollectRemainingRewards | Sau end_time của luồng phần thưởng, thu hồi các token chưa được phân bổ về cho người cấp vốn. |
| Tiện ích | InitTickArray | Khởi tạo một tài khoản tick-array (thường được đóng gói cùng OpenPosition). |
Hầu hết các lệnh chỉ dành cho admin (CreateAmmConfig, UpdateAmmConfig, UpdatePoolStatus, CreateSupportMintAssociated, CreateOperationAccount, UpdateOperationAccount, CloseProtocolPosition) được kiểm soát bởi khóa công khai admin được mã hóa cứng trong chương trình. Các lệnh admin của luồng phần thưởng (TransferRewardOwner, CollectRemainingRewards) được kiểm soát bởi người cấp vốn phần thưởng, không phải admin chương trình.
Hậu tố V2 có nghĩa là “hỗ trợ Token-2022 trên vault/NFT, yêu cầu slot bitmap-extension”. SDK mặc định chọn V2 cho các pool mới.
CreatePool
Đối số
sqrt_price_x64: u128 // giá khởi tạo
open_time: u64 // các swap bị từ chối trước thời điểm này
Tài khoản (rút gọn)
| # | Tên | W | S | Ghi chú |
|---|
| 1 | pool_creator | W | S | |
| 2 | amm_config | | | Bậc phí đã chọn. |
| 3 | pool_state | W | | init tại đây. |
| 4 | token_mint_0 | | | Đã sắp xếp. |
| 5 | token_mint_1 | | | |
| 6 | token_vault_0 | W | | init tại đây, thuộc sở hữu của PDA pool authority. |
| 7 | token_vault_1 | W | | |
| 8 | observation_state | W | | init tại đây. |
| 9 | tick_array_bitmap_extension | W | | init tại đây (V2). |
| 10 | token_program | | | |
| 11 | token_program_2022 | | | |
| 12 | system_program, rent | | | |
Điều kiện tiên quyết
token_mint_0 < token_mint_1 theo thứ tự byte.
amm_config.disable_create_pool == false.
- Các mint không bị từ chối bởi danh sách cho phép extension Token-2022.
Trạng thái sau khi thực thi
pool_state.sqrt_price_x64 = sqrt_price_x64, tick_current = floor(log_{1.0001}(price)).
pool_state.liquidity = 0 (chưa có vị thế nào).
pool_state.fee_on = FromInput (mặc định legacy).
pool_state.dynamic_fee_info bằng không (phí động bị vô hiệu hóa).
CreateCustomizablePool
Khuyến nghị cho các pool mới. Có tác dụng tương tự CreatePool cộng thêm chế độ thu phí theo từng pool và tùy chọn bật phí động.
Đối số
pub struct CreateCustomizableParams {
pub sqrt_price_x64: u128,
pub collect_fee_on: CollectFeeOn, // FromInput | Token0Only | Token1Only
pub enable_dynamic_fee: bool,
}
Tài khoản (rút gọn) — tương tự CreatePool, cộng thêm khi enable_dynamic_fee = true:
| # | Tên | W | S | Ghi chú |
|---|
| N | dynamic_fee_config | | | Config dùng chung để snapshot. Phải tồn tại trước. |
Điều kiện tiên quyết — tương tự CreatePool. Nếu enable_dynamic_fee = false, dynamic_fee_config bị bỏ qua.
Trạng thái sau khi thực thi
pool_state.fee_on được đặt theo biến thể CollectFeeOn đã chọn.
- Nếu phí động được bật:
pool_state.dynamic_fee_info được khởi tạo từ DynamicFeeConfig được cung cấp (năm tham số hiệu chỉnh được sao chép; các trường trạng thái được đặt về không).
- Ngược lại:
pool_state.dynamic_fee_info bằng không (= phí động không hoạt động vĩnh viễn đối với pool này).
fee_on và bit bật phí động chỉ được đặt khi tạo pool. Không có cơ chế nâng cấp tại chỗ — các pool được tạo qua CreatePool cũ không thể có phí động hay phí một chiều sau này. Các triển khai mới nên mặc định dùng lệnh này.
OpenPositionV2 / OpenPositionWithToken22Nft
Tạo một vị thế mới trong một pool đã tồn tại.
Đối số
tick_lower_index: i32
tick_upper_index: i32
tick_array_lower_start_index: i32
tick_array_upper_start_index: i32
liquidity: u128 // L mong muốn (hoặc 0 để dùng các số lượng bên dưới)
amount_0_max: u64
amount_1_max: u64
with_metadata: bool // ghi metadata NFT (Metaplex)
base_flag: Option<bool> // true = khớp với amount0; false = khớp với amount1
Tài khoản (rút gọn)
| # | Tên | W | S | |
|---|
| 1 | payer | W | S | |
| 2 | position_nft_owner | | | |
| 3 | position_nft_mint | W | S (keypair) | |
| 4 | position_nft_account | W | | ATA của owner dành cho NFT. |
| 5 | metadata_account | W | | Metaplex (tùy chọn, nếu with_metadata). |
| 6 | pool_state | W | | |
| 7 | protocol_position | | | |
| 8 | tick_array_lower | W | | Được tạo nếu chưa khởi tạo. |
| 9 | tick_array_upper | W | | Tương tự. |
| 10 | personal_position | W | | Được tạo tại đây. |
| 11 | token_account_0, token_account_1 | W | | ATA nguồn của người dùng. |
| 12 | token_vault_0, token_vault_1 | W | | |
| 13 | rent, system_program, token_program | | | |
| 14 | associated_token_program | | | |
| 15 | metadata_program | | | Tùy chọn. |
| 16 | token_program_2022 | | | V2. |
| 17 | vault_0_mint, vault_1_mint | | | V2. |
| 18 | tick_array_bitmap_extension | W | | V2 (nếu bị tác động). |
Toán học — xem products/clmm/math. Dựa vào base_flag, chương trình giải ra L thực tế và số lượng token thực tế được sử dụng từ liquidity hoặc (amount_0_max, amount_1_max).
Điều kiện tiên quyết
tick_lower < tick_upper, cả hai đều là bội số của pool.tick_spacing, trong phạm vi [MIN_TICK, MAX_TICK].
- Các tick array cần thiết được truyền vào và đã khởi tạo (hoặc được tạo tại đây qua CPI
InitTickArray trong transaction).
- Người dùng có ít nhất
amount_0_max và amount_1_max trong các ATA nguồn.
Trạng thái sau khi thực thi
personal_position tồn tại, liquidity được đặt, fee_growth_inside_last được snapshot.
- Các mục tick-array tại
tick_lower và tick_upper được cập nhật (liquidity_gross += L, liquidity_net ± L, duy trì snapshot tăng trưởng phí).
pool_state.liquidity += L nếu vị thế trong phạm vi (tick_lower ≤ tick_current < tick_upper).
Lỗi thường gặp — InvalidTickIndex, NotApproved, ZeroAmountSpecified, TransactionTooLarge (nếu có quá nhiều tick array).
IncreaseLiquidityV2
Thêm thanh khoản vào một vị thế đã mở.
Đối số
liquidity: u128
amount_0_max: u64
amount_1_max: u64
base_flag: Option<bool>
Tài khoản — tương tự OpenPosition nhưng không có NFT mint (vị thế đã tồn tại; NFT được truyền vào như ATA của owner đang giữ 1 token).
Hiệu lực
- Chuyển
amount_0_actual / amount_1_actual từ người dùng → vault.
- Tăng
personal_position.liquidity và pool_state.liquidity (nếu trong phạm vi), cùng với liquidity_gross / liquidity_net của tick endpoint tương ứng.
- Thu phí và phần thưởng còn nợ kể từ lần chạm cuối và ghi có vào
tokens_fees_owed_{0,1} / reward_amount_owed. Các khoản này chỉ được thanh toán khi DecreaseLiquidity hoặc CollectReward, không phải khi tăng.
DecreaseLiquidityV2
Rút thanh khoản khỏi một vị thế.
Đối số
liquidity: u128
amount_0_min: u64
amount_1_min: u64
Tài khoản — cùng cấu trúc với IncreaseLiquidity.
Hiệu lực
- Tính
(amount_0, amount_1) cho L được rút dựa trên sqrt_price_x64 hiện tại.
- Thanh toán phí/phần thưởng tích lũy kể từ lần chạm cuối, tương tự
IncreaseLiquidity.
- Chuyển
amount_0 + fees_owed_0 và amount_1 + fees_owed_1 từ vault về cho người dùng.
- Giảm các bộ đếm thanh khoản; nếu
personal_position.liquidity == 0 mới, vị thế đủ điều kiện để ClosePosition.
Slippage — amount_0_min và amount_1_min là mức tối thiểu người dùng chấp nhận sau khi trừ phí chuyển Token-2022 ở phía đầu ra.
ClosePosition
Đốt NFT vị thế và đóng PersonalPositionState.
Điều kiện tiên quyết
personal_position.liquidity == 0.
tokens_fees_owed_{0,1} == 0.
- Tất cả bộ đếm phần thưởng
reward_amount_owed == 0.
(Tức là phải thu toàn bộ và giảm về không trước.)
Hiệu lực
- Đốt NFT.
- Đóng tài khoản NFT mint và tài khoản
personal_position, hoàn lại rent cho payer.
SwapV2
Duyệt đường cong thanh khoản; chính xác đầu vào hoặc chính xác đầu ra tùy theo is_base_input.
Đối số
amount: u64 // đầu vào nếu is_base_input=true, đầu ra nếu ngược lại
other_amount_threshold: u64 // tối thiểu nhận ra hoặc tối đa bỏ vào
sqrt_price_limit_x64: u128 // giới hạn cứng; 0 ⇒ không giới hạn
is_base_input: bool
Tài khoản (rút gọn)
| # | Tên | W | S | Ghi chú |
|---|
| 1 | payer | | S | |
| 2 | amm_config | | | |
| 3 | pool_state | W | | |
| 4 | input_token_account | W | | |
| 5 | output_token_account | W | | |
| 6 | input_vault | W | | |
| 7 | output_vault | W | | |
| 8 | observation_state | W | | |
| 9 | token_program | | | |
| 10 | token_program_2022 | | | V2. |
| 11 | memo_program | | | V2 (bắt buộc cho một số đường dẫn Token-2022). |
| 12 | input_vault_mint, output_vault_mint | | | V2. |
| 13 | tick_array_bitmap_extension (tùy chọn) | W | | Nếu swap đi vào phần extension. |
| 14+ | tick_array (còn lại) | W | | Đủ số array để bao phủ phạm vi dự kiến của quá trình duyệt. |
Người gọi truyền một danh sách tick array được xếp hạng bao phủ hành trình swap dự kiến; chương trình sử dụng bao nhiêu tùy theo nhu cầu. SDK tính danh sách này qua PoolUtils.computeAmountOutFormat hoặc endpoint báo giá của API.
Điều kiện tiên quyết
pool_state.status cho phép swap.
now >= open_time.
sqrt_price_limit_x64 nằm đúng phía so với sqrt_price_x64 theo chiều giao dịch.
Lỗi thường gặp — ExceededSlippage, SqrtPriceLimitOverflow, TickArrayNotFound, LiquidityInsufficient.
Những gì SwapV2 thực hiện bên trong mà người gọi nên biết (phiên bản sau năm 2025):
- Phụ thu phí động — nếu
pool.dynamic_fee_info khác không, chương trình cập nhật bộ tích lũy biến động bằng khoảng cách tick đã duyệt kể từ swap cuối (theo các quy tắc lọc/suy giảm từ products/clmm/fees) và cộng thêm dynamic_fee_component vào AmmConfig.trade_fee_rate. Tổng phí được giới hạn ở mức 10% (MAX_FEE_RATE_NUMERATOR / 1_000_000).
- Khớp lệnh giới hạn — khi hành trình giá vượt qua một tick có lệnh giới hạn đang mở, chương trình trước tiên điền thanh khoản lệnh giới hạn khả dụng tại tick đó (FIFO theo
order_phase), sau đó tiếp tục theo đường cong thanh khoản LP. Các lượng đã khớp cập nhật tick.unfilled_ratio_x64 và tick.part_filled_orders_remaining để thanh toán sau; bản thân các lệnh vẫn chưa được chi tiêu cho đến khi chủ sở hữu gọi SettleLimitOrder.
- Định tuyến phí một chiều — khi
pool.fee_on = Token0Only hoặc Token1Only, bước swap vẫn tính toán cùng một giao dịch đầu vào-đầu ra; phí sau đó được định tuyến về phía đã cấu hình. Đối với các chiều mà phía phí cấu hình là đầu ra, phí được trừ từ đầu ra swap (người dùng nhận out − fee); đối với các chiều mà nó là đầu vào, hành vi khớp với FromInput. Xem is_fee_on_input(zero_for_one) và is_fee_on_token0(zero_for_one) trên PoolState.
Swap (V1) triển khai cùng phí động, định tuyến phí một chiều và khớp lệnh giới hạn như SwapV2; tính năng duy nhất nó thiếu là hỗ trợ Token-2022 — cả hai vault đều phải là SPL Token cổ điển. Các pool có bất kỳ mint Token-2022 nào phải được swap qua SwapV2. Aggregator và SDK đã ưu tiên V2 cho mọi leg CLMM nên người gọi không cần phân nhánh theo loại mint.
OpenLimitOrder
Đặt lệnh bán tại một tick cụ thể. Lệnh nằm trong một nhóm FIFO theo từng tick và được điền khi giá vượt qua.
Đối số
nonce_index: u8 // chỉ số tài khoản nonce do người dùng chọn (0..255 mỗi ví)
zero_for_one: bool // true: bán token0 lấy token1; false: bán token1 lấy token0
tick_index: i32 // phải là bội số của pool.tick_spacing
amount: u64 // lượng token đầu vào
Tài khoản (rút gọn)
| # | Tên | W | S | Ghi chú |
|---|
| 1 | payer | W | S | Chủ sở hữu lệnh; trả rent. |
| 2 | pool_state | W | | |
| 3 | tick_array | W | | Tick array chứa tick_index. |
| 4 | limit_order_nonce | W | | PDA. init_if_needed — được tạo khi người dùng đặt lệnh đầu tiên với nonce_index này. |
| 5 | limit_order | W | | PDA. init tại đây. |
| 6 | input_token_account | W | | ATA đầu vào của người dùng. |
| 7 | input_vault | W | | Vault đầu vào của pool. |
| 8 | input_vault_mint | | | Xử lý phí Token-2022. |
| 9 | input_token_program | | | SPL hoặc Token-2022. |
| 10 | system_program, rent | | | |
Điều kiện tiên quyết
tick_index % pool.tick_spacing == 0 và trong phạm vi [MIN_TICK, MAX_TICK].
tick_index nằm đúng phía so với pool.tick_current cho chiều đã chọn (bán token0 → tick phải cao hơn hiện tại, và ngược lại). Bán tại một tick đã được vượt qua sẽ bị khớp ngay lập tức và bị từ chối.
pool_state.status cho phép thao tác lệnh giới hạn (bit 5).
Trạng thái sau khi thực thi
limit_order tồn tại, snapshot tick.order_phase và tick.unfilled_ratio_x64 tại thời điểm mở.
tick.orders_amount += amount (trong cohort hiện tại).
limit_order_nonce.order_nonce += 1.
- Phát ra sự kiện
OpenLimitOrderEvent.
Lỗi thường gặp — InvalidLimitOrderAmount (bằng không hoặc dưới mức tối thiểu của pool), InvalidTickIndex (ngoài [MIN_TICK, MAX_TICK], hoặc sai phía so với tick_current cho chiều đã chọn), TickAndSpacingNotMatch (tick_index % pool.tick_spacing != 0), OrderPhaseSaturated.
IncreaseLimitOrder
Thêm vào một lệnh đang mở. Chỉ có thể gọi bởi owner của lệnh.
Đối số
amount: u64 // lượng token đầu vào bổ sung
Tài khoản — tương tự OpenLimitOrder nhưng không có tài khoản nonce; PDA limit_order được truyền trực tiếp.
Điều kiện tiên quyết
limit_order.owner == signer.
- Lệnh vẫn còn trong cùng cohort (
tick.order_phase == limit_order.order_phase). Nếu cohort đã bắt đầu điền, lệnh đã được thanh toán một phần — người gọi nên gọi DecreaseLimitOrder hoặc SettleLimitOrder trước để cuộn tiến.
Hiệu lực
- Chuyển
amount từ ATA của owner đến input_vault.
limit_order.total_amount += amount; tick.orders_amount += amount.
DecreaseLimitOrder
Giảm hoặc hủy hoàn toàn một lệnh đang mở. Trả phần chưa khớp về cho owner, cộng thêm bất kỳ đầu ra nào đã được thanh toán bởi các lần điền một phần trước đó.
Đối số
amount: u64 // lượng token đầu vào cần rút (tối đa = phần chưa khớp còn lại)
amount_min: u64 // mức sàn slippage cho việc rút phía đầu vào
Tài khoản — cả hai phía token đầu vào và đầu ra:
| # | Tên | W | S |
|---|
| 1 | owner | | S |
| 2 | pool_state | W | |
| 3 | tick_array | W | |
| 4 | limit_order | W | |
| 5 | input_token_account | W | |
| 6 | output_token_account | W | |
| 7 | input_vault | W | |
| 8 | output_vault | W | |
| 9 | input_vault_mint, output_vault_mint | | |
| 10 | token_program, token_program_2022 | | |
Hiệu lực
- Tính lại lượng đã khớp của lệnh từ
unfilled_ratio_x64 của cohort kể từ lúc mở.
- Gửi đầu ra đã khớp đến
output_token_account.
- Gửi
amount đầu vào chưa khớp về input_token_account.
- Cập nhật
limit_order tương ứng. Nếu phần chưa khớp còn lại mới bằng không, chương trình đóng tài khoản và hoàn lại rent cho owner.
SettleLimitOrder
Đẩy token đầu ra đã khớp về cho owner mà không thay đổi phần chưa khớp còn lại của lệnh. Hữu ích khi các keeper auto_withdraw muốn thanh toán dần các lần điền một phần kéo dài.
Người gọi — owner của lệnh hoặc limit_order_admin của chương trình (một ví nóng vận hành ngoài chuỗi chạy vòng lặp keeper tự động). Keeper không có quyền hạn khác — nó không thể di chuyển quỹ người dùng ngoài việc đẩy đầu ra đã khớp về ATA owner của lệnh.
Tài khoản
| # | Tên | W | S | |
|---|
| 1 | signer | | S | owner hoặc limit_order_admin |
| 2 | pool_state | | | |
| 3 | tick_array | | | |
| 4 | limit_order | W | | |
| 5 | output_token_account | W | | ATA đầu ra của owner. |
| 6 | output_vault | W | | Vault đầu ra của pool. |
| 7 | output_vault_mint | | | |
| 8 | output_token_program | | | |
Hiệu lực
- Tính đầu ra tích lũy còn nợ bằng cách dùng
(limit_order.unfilled_ratio_x64, tick.unfilled_ratio_x64).
- Chuyển phần chênh lệch đến
output_token_account.
- Cập nhật
limit_order.settled_output.
- Không đóng lệnh; lệnh vẫn còn mở đối với bất kỳ đầu vào nào còn lại.
CloseLimitOrder
Đóng tài khoản lệnh đã được thực hiện hoàn toàn. Rent luôn được trả về limit_order.owner bất kể ai ký.
Người gọi — owner hoặc limit_order_admin.
Điều kiện tiên quyết
- Lệnh có phần chưa khớp còn lại bằng không (hoặc
amount == total_amount đã được khớp và thanh toán, hoặc owner đã giảm lệnh về không trước đó và quên đóng).
Hiệu lực
- Đóng
limit_order; rent được gửi đến limit_order.owner.
CreateDynamicFeeConfig (admin)
Tạo một bộ tham số có thể tái sử dụng theo chỉ số u16.
Đối số
index: u16
filter_period: u16 // giây; ví dụ 30
decay_period: u16 // giây; ví dụ 600. Phải > filter_period
reduction_factor: u16 // 1..10_000; ví dụ 5_000 = giữ lại 50% mỗi cửa sổ suy giảm
dynamic_fee_control: u32 // 1..100_000; hệ số khuếch đại trên đường cong biến động-thành-phí
max_volatility_accumulator: u32 // giới hạn trên
Tài khoản
| # | Tên | W | S | Ghi chú |
|---|
| 1 | owner | W | S | Khóa công khai admin được mã hóa cứng. |
| 2 | dynamic_fee_config | W | | PDA, init tại đây. |
| 3 | system_program | | | |
Lỗi thường gặp — InvalidDynamicFeeConfigParams nếu decay_period <= filter_period hoặc bất kỳ trường nào có giá trị 0 nằm ngoài giới hạn.
UpdateDynamicFeeConfig (admin)
Chỉnh sửa một DynamicFeeConfig hiện có. Các pool đã snapshot cấu hình tại thời điểm tạo không bị cập nhật hồi tố; chỉ các pool mới tạo tham chiếu đến config này mới nhận các giá trị mới.
Đối số — năm trường hiệu chỉnh giống như CreateDynamicFeeConfig (filter_period, decay_period, reduction_factor, dynamic_fee_control, max_volatility_accumulator); index được cố định khi tạo và không cần truyền lại ở đây.
CollectProtocolFee / CollectFundFee
Có cùng cấu trúc với CollectProtocolFee / CollectFundFee của CPMM. Người ký phải khớp với AmmConfig.owner / AmmConfig.fund_owner. Thu phí giao thức/quỹ đã tích lũy từ vault của pool về cho người nhận, đặt các trường PoolState.protocol_fees_* / fund_fees_* tương ứng về không.
InitializeReward
Thêm một luồng phần thưởng mới vào pool. Tối đa 3 luồng có thể hoạt động cùng lúc.
Đối số
open_time: u64
end_time: u64
emissions_per_second_x64: u128 // Q64.64
Tài khoản
| # | Tên | W | S | |
|---|
| 1 | reward_funder | W | S | |
| 2 | funder_token_account | W | | |
| 3 | amm_config | | | |
| 4 | pool_state | W | | |
| 5 | operation_state | | | PDA trạng thái vận hành CLMM kiểm soát việc tạo phần thưởng. |
| 6 | reward_token_mint | | | |
| 7 | reward_token_vault | W | | init tại đây. |
| 8 | reward_token_program | | | |
| 9 | system_program, rent | | | |
Điều kiện tiên quyết
- Ít hơn 3 luồng hiện đang hoạt động trên pool.
- Người cấp vốn nạp
total_emission = emissions_per_second × (end_time − open_time) token phần thưởng vào vault như một phần của lệnh này.
- Mint phần thưởng được đưa vào danh sách trắng theo
operation_state.
SetRewardParams
Gia hạn, nạp thêm hoặc thay đổi tỷ lệ phát thải của một luồng phần thưởng hiện có. Thường được gọi bởi người tạo pool hoặc multisig Raydium. Các ràng buộc nằm trên chuỗi: thông thường bạn có thể gia hạn end_time hoặc tăng phát thải, không thể giảm hồi tố. Kiểm tra danh sách owner của operation_state.
UpdateRewardInfos
Thuần túy kế toán — thanh toán reward_growth_global_x64 đến thời điểm hiện tại bằng cách nhân emissions_per_second × Δt / liquidity. Được gọi nội bộ bởi mọi lệnh chạm đến thanh khoản. Được cung cấp như một lệnh độc lập vì các tác nhân bên ngoài (UI, crank) đôi khi muốn kích hoạt nó.
CollectReward
Chủ sở hữu vị thế nhận token phần thưởng còn nợ.
Tài khoản
| # | Tên | W | S | |
|---|
| 1 | nft_owner | | S | |
| 2 | nft_account | | | ATA của owner đang giữ NFT vị thế. |
| 3 | personal_position | W | | |
| 4 | pool_state | W | | |
| 5 | protocol_position | | | |
| 6 | reward_token_vault | W | | |
| 7 | recipient_token_account | W | | |
| 8 | token_program | | | |
| 9 | token_program_2022 | | | |
Hiệu lực
- Thanh toán tăng trưởng phần thưởng (cùng mẫu với phí).
- Chuyển lượng còn nợ đến ATA người nhận, đặt
reward_amount_owed[i] về không.
Ma trận thay đổi trạng thái
| Lệnh | pool.liquidity | pool.fee_growth_global | pool.reward_growth_global | personal_position.liquidity | Tick array |
|---|
CreatePool | 0 | 0 | — | — | — |
OpenPosition | + nếu trong phạm vi | — | — | mới | thêm liquidity_gross/net |
IncreaseLiquidity | + nếu trong phạm vi | thanh toán nợ | thanh toán nợ | + | điều chỉnh |
DecreaseLiquidity | − nếu trong phạm vi | thanh toán nợ | thanh toán nợ | − | điều chỉnh |
ClosePosition | — | — | — | bị hủy | — |
SwapV2 | ± khi vượt tick | + | — | — | vượt & lật outside; khớp các cohort lệnh giới hạn |
OpenLimitOrder | — | — | — | — | orders_amount += amount trên tick mục tiêu |
IncreaseLimitOrder | — | — | — | — | orders_amount += amount |
DecreaseLimitOrder | — | — | — | — | orders_amount -=, có thể đóng cohort |
SettleLimitOrder | — | — | — | — | — (chỉ đọc trên tick) |
CloseLimitOrder | — | — | — | — | — |
CreateCustomizablePool | 0 | 0 | — | — | — |
UpdateRewardInfos | — | — | + | — | — |
CollectReward | — | — | thanh toán nợ | — | — |
Bước tiếp theo
Nguồn tham khảo: