Skip to main content
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 kết hợp với products/clmm/accounts (các tài khoản là gì) và products/clmm/math (toán học là gì). Nó là tài liệu chính thức cho các đối số và thứ tự tài khoản; các bố cục byte cụ thể đến từ IDL.

Danh sách hướng dẫn

Không có chỉ thị init-tick-array, và cũng không cần đến. Một tick array được tạo bên trong OpenPosition* / IncreaseLiquidity* bởi TickArrayState::get_or_create_tick_array, do payer chi trả. Hãy truyền PDA tick-array (có thể vẫn chưa được khởi tạo, do system sở hữu) làm tick_array_lower / tick_array_upper và chương trình sẽ cấp phát nó nếu nó còn thiếu. OpenLimitOrder cũng làm điều tương tự cho tick_array duy nhất của nó.
Hầu hết các hướng dẫn chỉ dành cho admin (CreateAmmConfig, UpdateAmmConfig, UpdatePoolStatus, CreateOperationAccount, UpdateOperationAccount, CloseProtocolPosition) được kiểm soát bởi khóa admin được mã hóa cứng của chương trình. CreatePermissionPda / ClosePermissionPda chấp nhận khóa admin hoặc một khóa permission_pda_admin chuyên dụng; CreateSupportMintAssociated / CloseSupportMintAssociated chấp nhận khóa admin hoặc một khóa chủ sở hữu support-mint chuyên dụng. Các hướng dẫn admin luồng phần thưởng (TransferRewardOwner, CollectRemainingRewards) được kiểm soát bởi người tài trợ 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 khe bitmap-extension”. SDK chọn V2 theo mặc định cho các pool mới.

CreatePool

Đối số
Tài khoản (tóm tắt)
Slot 10 và 11 là theo từng mint, không phải “SPL Token rồi Token-2022”. Mỗi slot bị ràng buộc bởi mint::token_program trên mint tương ứng, nên với một pool có token_mint_0 là Token-2022 và token_mint_1 là SPL cổ điển, bạn phải truyền Token-2022 ở slot 10 và SPL Token ở slot 11. CreateCustomizablePool và CreatePermissionedPool dùng cùng hai slot đó.
Đ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 phần mở rộng Token-2022.
Điều kiện hậu
  • pool_state.sqrt_price_x64 = sqrt_price_x64, tick_current = floor(log_{1.0001}(price)).
  • pool_state.liquidity = 0 (chưa có vị trí).
  • pool_state.fee_on = FromInput (mặc định cũ).
  • pool_state.dynamic_fee_info được đặt thành 0 (phí động bị vô hiệu hóa).

CreateCustomizablePool

Được khuyến nghị cho các pool mới. Cùng hiệu ứng với CreatePool cộng với chế độ thu thập phí trên mỗi pool và cờ enable_dynamic_fee tùy chọn. Đối số
Tài khoản — đúng 13 tài khoản được khai báo của CreatePool. dynamic_fee_config không phải là một tài khoản được khai báo.
Khi enable_dynamic_fee = true, DynamicFeeConfig cần được chụp phải được cung cấp làm remaining_account cuối cùng — handler đọc ctx.remaining_accounts.last(). Do đó mọi PDA bypass SupportMintAssociated phải đứng trước nó, nếu không chương trình sẽ chụp sai tài khoản và thất bại khi deserialize. Bỏ qua nó trong khi cờ đang được đặt sẽ thất bại với AccountLack.
Điều kiện tiên quyết — giống như CreatePool. Nếu enable_dynamic_fee = false, không cần remaining_account nào, và bất kỳ tài khoản nào được truyền cũng chỉ được quét để tìm bản ghi support-mint. Điều kiện hậu
  • pool_state.fee_on được đặt thành biến thể CollectFeeOn được 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 thành 0).
  • Nếu không: pool_state.dynamic_fee_info được đặt thành 0 (= phí động không hoạt động mãi mãi cho pool này).
fee_on và bit bật phí động được đặt chỉ khi tạo pool. Không có nâng cấp tại chỗ — các pool được tạo qua CreatePool cũ không thể có phí động hoặc phí một chiều một cách hồi tố. Các triển khai mới nên mặc định sử dụng hướng dẫn này.

CreatePermissionedPool

Cả CreatePool và CreateCustomizablePool đều lấy PDA pool từ ["pool", amm_config, token_mint_0, token_mint_1], vì vậy có chính xác một địa chỉ pool chính tắc cho mỗi bộ ba (config, mint0, mint1) — một init thứ hai ở cùng seed sẽ thất bại. CreatePermissionedPool nâng cao hạn chế đó bằng cách gấp seed_index: u16 do khách hàng cung cấp vào seed PDA pool, cho phép nhiều pool cho cùng một cặp và mức phí — mỗi cái ở địa chỉ riêng của nó. Vì một địa chỉ pool tùy ý là một khả năng có đặc quyền, người trả phí phải giữ một PDA Permission ủy quyền cho nó. Mọi thứ khác về pool đều giống với CreateCustomizablePool: nó lấy cùng CreateCustomizableParams và hỗ trợ phí một chiều và tùy chọn phí động. Đối số
Tài khoản (tóm tắt) — giống như CreateCustomizablePool cộng với, ở phía trước: PDA pool_state được lấy từ ["pool", amm_config, token_mint_0, token_mint_1, seed_index.to_le_bytes()]. Điều kiện tiên quyết
  • seed_index != 0. Một seed_index bằng 0 được dành riêng cho các pool cũ và bị từ chối ở đây; thành phần seed [0, 0] là những gì làm cho địa chỉ pool cũ sụp đổ thành dạng bốn seed cổ điển.
  • PDA permission cho payer tồn tại (được tạo bởi admin qua CreatePermissionPda).
  • Các quy tắc mint / danh sách cho phép giống như CreatePool.
Điều kiện hậu
  • Một pool_state mới tồn tại ở địa chỉ được lấy từ seed_index, với pool_state.seed_index = seed_index.
  • Tất cả các trạng thái hậu khác khớp với CreateCustomizablePool (chế độ phí, phí động tùy chọn).
Hướng dẫn này không mở rộng quyền truy cập tạo pool chung — tạo không cần phép tiếp tục thông qua CreatePool / CreateCustomizablePool, vẫn là một pool trên mỗi cặp. CreatePermissionedPool tồn tại cho trường hợp cụ thể khi một nhà khai thác được liệt kê trắng cần nhiều pool cho cùng một cặp (ví dụ: giá ban đầu khác nhau hoặc nhóm khởi chạy) và giữ một PDA Permission được cấp bởi admin.

OpenPositionV2 / OpenPositionWithToken22Nft

Tạo một vị trí mới bên trong một pool hiện có. Đối số
Tài khoản (tóm tắt) OpenPositionWithToken22Nft là cùng danh sách đó nhưng bỏ metadata_account (5) và metadata_program (19) — nó ghi metadata của vị trí thông qua extension metadata của Token-2022 trên NFT mint — cho ra 20 tài khoản. position_nft_mint của nó là một Signer thuần và position_nft_account là một UncheckedAccount.
tick_array_bitmap_extension không phải là tài khoản được khai báo trên cả hai biến thể. Khi phạm vi của vị trí nằm ngoài tick_array_bitmap nội tuyến của pool (±512 tick array), hãy thêm PDA TickArrayBitmapExtension tại các seed ["pool_tick_array_bitmap_extension", pool_state] làm remaining_accounts[0].
Toán học — xem products/clmm/math. Cho base_flag, chương trình giải quyết liquidity hoặc (amount_0_max, amount_1_max) thành L thực tế và số tiền token thực tế được tiêu thụ. Điều kiện tiên quyết
  • tick_lower < tick_upper, cả hai là bội số của pool.tick_spacing, trong [MIN_TICK, MAX_TICK].
  • Hai PDA tick-array được truyền vào. Chúng không cần tồn tại sẵn — get_or_create_tick_array cấp phát tài khoản còn thiếu bằng chi phí của payer ngay bên trong chỉ thị này. Không có chỉ thị init-tick-array riêng biệt.
  • Người dùng có ít nhất amount_0_max và amount_1_max trong ATA nguồn.
Điều kiện hậu
  • personal_position tồn tại, liquidity được đặt, fee_growth_inside_last được chụp.
  • Các mục tick-array ở tick_lower và tick_upper được cập nhật (liquidity_gross += L, liquidity_net ± L, ảnh chụp tăng trưởng phí được duy trì).
  • pool_state.liquidity += L nếu vị trí nằm trong phạm vi (tick_lower ≤ tick_current < tick_upper).
  • Mint NFT vị trí ghi lại pool_state làm cơ quan đóng băng. Cơ quan mint được loại bỏ sau khi mint NFT duy nhất. Ghi lại cơ quan đóng băng không thay đổi trạng thái của tài khoản token NFT.
  • Tài khoản token NFT vẫn không bị đóng băng trừ khi hướng dẫn là OpenPositionV2 hoặc OpenPositionWithToken22Nft và cơ quan đóng băng của mint vault khớp với danh sách nhà phát hành bị hạn chế của CLMM. Chỉ đường dẫn V2 khớp đó mới đóng băng tài khoản. OpenPosition V1 không đóng băng.
Lỗi phổ biến — TickInvalidOrder (tick_lower >= tick_upper), TickAndSpacingNotMatch (một điểm cuối không phải bội số của tick_spacing), InvalidTickIndex (nằm ngoài [MIN_TICK, MAX_TICK]), MissingTickArrayBitmapExtensionAccount (phạm vi nằm ngoài bitmap nội tuyến và phần mở rộng không được thêm vào), NotApproved (pool_state.status chặn việc mở), ZeroAmountSpecified.
Đóng băng vị trí không thêm các tài khoản hướng dẫn được khai báo hoặc đối số. Khách hàng có thể mở các vị trí này với bố cục V2 hiện có. Hành vi được chọn trên chuỗi từ vault_0_mint và vault_1_mint.

IncreaseLiquidityV2

Thêm thanh khoản vào một vị trí đã mở. Đối số
Tài khoản — 15, và không suy ra được từ OpenPosition: không có rent, không có system_program, không có associated_token_program và không có tài khoản metadata. Hãy thêm PDA TickArrayBitmapExtension làm remaining_accounts[0] khi phạm vi của vị trí nằm ngoài bitmap nội tuyến. Hiệu ứng
  • 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 nằm trong phạm vi), và liquidity_gross / liquidity_net tick điểm cuối tương ứng.
  • Thu thập phí và phần thưởng nợ kể từ lần chạm cuối cùng và ghi có chúng vào token_fees_owed_{0,1} / reward_amount_owed. Những khoản đó chỉ được trả ra khi DecreaseLiquidity / DecreaseLiquidityV2, không phải khi tăng — không có chỉ thị thu thập độc lập nào.

DecreaseLiquidityV2

Loại bỏ thanh khoản từ một vị trí. Đối số
Tài khoản — 16, và không cùng hình dạng hay thứ tự với IncreaseLiquidityV2: personal_position và pool_state bị đổi chỗ, các vault đứng trước các tick array, các tài khoản phía người dùng được đặt tên recipient_token_account_*, và có thêm một memo_program. Tài khoản còn lại — ba tài khoản cho mỗi phần thưởng đang hoạt động được thu thập, theo thứ tự reward_token_vault(W), recipient_token_account(W), reward_vault_mint. Hãy thêm PDA TickArrayBitmapExtension lên đầu khi phạm vi của vị trí nằm ngoài bitmap nội tuyến.
Đây cũng là cách duy nhất để thu thập phí và phần thưởng. Để thu thập mà không thay đổi vị trí, hãy gọi nó với liquidity = 0, amount_0_min = 0, amount_1_min = 0.
Hiệu ứng
  • Tính toán (amount_0, amount_1) cho L được loại bỏ cho sqrt_price_x64 hiện tại.
  • Giải quyết phí/phần thưởng tích lũy kể từ lần chạm cuối cùng, giống như IncreaseLiquidity.
  • Chuyển amount_0 + fees_owed_0 và amount_1 + fees_owed_1 từ vault đến người dùng.
  • Giảm bộ đếm thanh khoản; nếu personal_position.liquidity == 0 mới, vị trí đủ điều kiện cho ClosePosition.
Slippage — amount_0_min và amount_1_min là mức tối thiểu mà người dùng chấp nhận sau khi trừ phí chuyển Token-2022 ở phía đầu ra.

ClosePosition

Đốt NFT vị trí và đóng PersonalPositionState. Tài khoản được khai báo Tài khoản còn lại
  • NFT không bị đóng băng: không cần; một tài khoản pool bổ sung là vô hại vì trình xử lý không đọc nó.
  • NFT bị đóng băng: thêm personal_position.pool_id làm tài khoản còn lại đầu tiên. Chương trình tải nó dưới dạng PoolState và sử dụng seed PDA của nó để ký thaw.
Đ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à, thu thập mọi thứ và giảm xuống 0 trước.) Hiệu ứng
  • Nếu tài khoản token NFT bị đóng băng, xác minh tài khoản còn lại đầu tiên bằng personal_position.pool_id, sau đó rã đông nó với PDA pool.
  • Đốt NFT.
  • Đóng tài khoản token NFT và personal_position, hoàn lại tiền thuê cho nft_owner. Nếu NFT vị trí sử dụng Token-2022, nó cũng đóng mint NFT; mint Token SPL cổ điển không thể đóng và vẫn có cung cấp bằng 0.
Thaw, burn và close là nguyên tử. NFT không thể trở nên có thể chuyển được giữa các bước đó. Ngắt khách hàng có điều kiện — bố cục IDL được khai báo không thay đổi, vì vậy khách hàng cũ tiếp tục đóng các vị trí hiện có và không bị đóng băng. Một trình xây dựng cũ bỏ qua tài khoản pool còn lại sẽ thất bại với AccountLack khi đóng một vị trí bị đóng băng. Chuyển pool cho mỗi lần đóng là chiến lược tương thích đơn giản nhất.

SwapV2

Đi bộ dọc theo đường cong thanh khoản; đầu vào chính xác hoặc đầu ra chính xác tùy thuộc vào is_base_input. Đối số
Tài khoản (tóm tắt) Người gọi chuyển một danh sách tick array được xếp hạng bao quanh bước đi swap dự kiến; chương trình sử dụng bao nhiêu cần thiết. SDK tính toán danh sách này qua PoolUtils.computeAmountOutFormat hoặc điểm cuối trích dẫn 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 ở phía chính xác của sqrt_price_x64 cho hướng.
Lỗi phổ biến — TooLittleOutputReceived (trượt giá exact-in), TooMuchInputPaid (trượt giá exact-out), SqrtPriceLimitOverflow, NotEnoughTickArrayAccount, InvalidFirstTickArrayAccount, MissingTickArrayBitmapExtensionAccount, LiquidityInsufficient, NotApproved (bit swap được đặt trên pool_state.status). CLMM không có biến thể ExceededSlippage — tên đó thuộc CPMM — và cũng không có TickArrayNotFound. Những gì SwapV2 làm nội bộ mà người gọi nên biết (phát hành sau 2025):
  1. Phí bổ sung động — nếu pool.dynamic_fee_info khác 0, chương trình cập nhật bộ tích lũy biến động bằng cách sử dụng khoảng cách tick được duyệt kể từ lần swap cuối cùng (với các quy tắc bộ lọc/phân rã từ products/clmm/fees) và thêm dynamic_fee_component trên AmmConfig.trade_fee_rate. Tổng phí được giới hạn ở 10% (MAX_FEE_RATE_NUMERATOR / 1_000_000).
  2. Khớp lệnh giới hạn — khi bước đi giá vượt qua một tick giữ các lệnh giới hạn mở, chương trình trước tiên điền thanh khoản lệnh giới hạn có sẵn ở tick đó (FIFO theo order_phase), sau đó tiếp tục dọc theo đường cong thanh khoản LP. Các số tiền đã điền cập nhật tick.unfilled_ratio_x64 và tick.part_filled_orders_remaining để giải quyết sau; các lệnh chính nó vẫn chưa được chi tiêu cho đến khi chủ sở hữu gọi SettleLimitOrder.
  3. Đị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 đến phía được cấu hình. Đối với các hướng mà phía phí được cấu hình là đầu ra, phí được khấu trừ từ đầu ra swap (người dùng nhận out − fee); đối với các hướng 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) thực hiện 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 phải là Token SPL cổ điển. Các pool có bất kỳ mint Token-2022 nào phải được swap qua SwapV2. Bộ tập hợp và SDK đã ưu tiên V2 cho mỗi chân CLMM vì vậy người gọi không phải phân nhánh theo loại mint.

OpenLimitOrder

Đặt lệnh bán ở một tick cụ thể. Lệnh nằm trong một nhóm FIFO trên mỗi tick và điền khi giá vượt qua. Đối số
Tài khoản (tóm tắt) Tài khoản còn lại — [0] tick_array_bitmap_extension, chỉ bắt buộc khi khởi tạo một tick array có chỉ số bắt đầu nằm ngoài bitmap nội tuyến của pool. Ngoài ra thì không truyền gì.
Không có tài khoản rent: struct kết thúc ở system_program, tổng cộng 13 tài khoản được khai báo. Một rent lạc vào vị trí 14 sẽ nằm đúng chỗ mà phần mở rộng bitmap tùy chọn được đọc, nên lệnh trông như vẫn hoạt động cho tới lần đầu tiên cần tạo một tick array nằm ngoài bitmap nội tuyến — và rồi thất bại.
Thay đổi danh sách tài khoản (phát hành 2026-07). OpenLimitOrder hiện cũng lấy các tài khoản phía đầu ra — output_token_account, output_vault và output_vault_mint — ngoài phía đầu vào. Chúng chỉ được sử dụng để xác thực: chương trình từ chối lệnh nếu tài khoản token đầu vào hoặc đầu ra của chủ sở hữu bị đóng băng. Điều này đảm bảo rằng một điền có thể thực sự được giải quyết cho ATA đầu ra của chủ sở hữu, điều này quan trọng đối với các mint Token-2022 danh sách cho phép / đóng băng mặc định (ví dụ: token được phép) nơi một tài khoản có thể chưa được rã đông. Khách hàng được xây dựng dựa trên danh sách tài khoản một chiều cũ phải thêm ba tài khoản đầu ra.
Điều kiện tiên quyết
  • Cả input_token_account và output_token_account đều không bị đóng băng (nếu không NotApproved).
  • pool_state.status cho phép cả hoạt động swap (bit 4) và lệnh giới hạn (bit 5) (nếu không NotApproved).
  • tick_index % pool.tick_spacing == 0 và trong [MIN_TICK, MAX_TICK].
  • tick_index nằm ở phía bên phải của pool.tick_current cho hướng được chọn (bán token0 → tick phải ở trên hiện tại, và ngược lại). Bán ở một tick đã vượt qua sẽ được khớp ngay lập tức và bị từ chối.
Điều kiện hậu
  • limit_order tồn tại, chụp tick.order_phase và tick.unfilled_ratio_x64 khi mở.
  • tick.orders_amount += amount (trong nhóm hiện tại).
  • limit_order_nonce.order_nonce += 1.
  • OpenLimitOrderEvent được phát hành.
Lỗi phổ biến — NotApproved (tài khoản token đầu vào hoặc đầu ra bị đóng băng, hoặc pool có swap / lệnh giới hạn bị vô hiệu hóa), ZeroAmountSpecified (amount == 0 sau khi trừ phí chuyển phía đầu vào), InvalidLimitOrderAmount (số lượng sẽ tạo ra đầu ra nhỏ hơn 1 đơn vị cơ sở tại tick đó, hoặc làm tràn u64), InvalidTickIndex (ngoài [MIN_TICK, MAX_TICK], hoặc ở phía sai của tick_current cho hướng được chọn), TickAndSpacingNotMatch (tick_index % pool.tick_spacing != 0), OrderPhaseSaturated.

IncreaseLimitOrder

Thêm vào một lệnh mở hiện có. Chỉ có thể gọi bởi owner của lệnh. Đối số
Tài khoản — 8, chỉ phía đầu vào. Nó bỏ tài khoản nonce, cả ba tài khoản phía đầu ra và system_program. Điều kiện tiên quyết
  • limit_order.owner == signer.
  • Lệnh vẫn nằm trong cùng một nhóm (tick.order_phase == limit_order.order_phase). Nếu nhóm đã bắt đầu điền, lệnh được giải quyết một phần — người gọi nên gọi DecreaseLimitOrder hoặc SettleLimitOrder trước để cuộn tiến.
Hiệu ứng
  • Chuyển amount từ ATA chủ sở hữu đế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 mở. Trả phần còn lại chưa điền cho chủ sở hữu, cộng với bất kỳ đầu ra nào đã được giải quyết bởi các điền một phần trong quá khứ. Đối số
Tài khoản — cả phía token đầu vào và đầu ra: Hiệu ứng
  • Tính toán lại số tiền đã điền của lệnh từ unfilled_ratio_x64 của nhóm kể từ khi mở.
  • Gửi đầu ra đã điền đến output_token_account.
  • Gửi amount của đầu vào chưa điền trở lại input_token_account.
  • Cập nhật limit_order tương ứng. Nếu phần còn lại chưa điền mới bằng 0, chương trình đóng tài khoản và hoàn lại tiền thuê cho owner.

SettleLimitOrder

Đẩy các token đầu ra đã điền cho chủ sở hữu mà không thay đổi phần còn lại chưa điền của lệnh. Hữu ích khi các keeper auto_withdraw muốn drip-pay các điền một phần chạy dài. Người gọi — hoặc owner của lệnh, hoặc limit_order_admin của chương trình (một ví nóng hoạt động ngoài chuỗi chạy một vòng lặp keeper tự động). Keeper không có cơ quan khác — nó không thể di chuyển quỹ của người dùng ngoài việc đẩy đầu ra đã điền đến ATA owner. Tài khoản Hiệu ứng
  • Tính toán đầu ra tích lũy nợ bằng cách sử dụng (limit_order.unfilled_ratio_x64, tick.unfilled_ratio_x64).
  • Chuyển delta đến output_token_account.
  • Cập nhật limit_order.settled_output.
  • Không đóng lệnh; nó vẫn mở chống lại bất kỳ đầu vào còn lại nào.

CloseLimitOrder

Đóng một tài khoản lệnh đã được tiêu thụ hoàn toàn. Tiền thuê luôn được trả lại cho limit_order.owner bất kể ai ký. Người gọi — hoặc owner hoặc limit_order_admin. Điều kiện tiên quyết
  • Lệnh có phần còn lại chưa điền bằng 0 (hoặc amount == total_amount được điền và giải quyết, hoặc chủ sở hữu trước đó giảm lệnh xuống 0 và quên đóng).
Hiệu ứng
  • Đóng limit_order; tiền thuê được gửi đến limit_order.owner.

CreateDynamicFeeConfig (admin)

Tạo một bộ tham số có thể tái sử dụng dưới một chỉ mục u16. Đối số
Tài khoản Lỗi phổ biến — 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)

Sửa đổi một DynamicFeeConfig hiện có. Các pool đã chụp cấu hình khi tạo không được cập nhật hồi tố; chỉ các pool mới được tạo tham chiếu cấu hình này sẽ nhận các giá trị mới. Đối số — cùng năm trường hiệu chỉnh 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 chuyển lại ở đây.

CollectProtocolFee / CollectFundFee

Quét phí giao thức/quỹ tích lũy từ vault của pool đến một địa chỉ nhận, đặt lại về 0 các trường PoolState.protocol_fees_* / fund_fees_* tương ứng. Đây không phải là bố cục của CPMM — CLMM không có tài khoản authority, và các trường nhận được đặt tên recipient_token_account_{0,1} chứ không phải recipient_token_{0,1}_account. Đối số — amount_0_requested: u64, amount_1_requested: u64.

InitializeReward

Thêm một luồng phần thưởng mới vào một pool. Tối đa 3 luồng có thể hoạt động cùng một lúc. Đối số
Phần mã hóa trên wire là ba trường nối tiếp nhau, nên một chỉ thị được xây thủ công không bị ảnh hưởng — nhưng một client dựa trên IDL phải truyền một đối tượng param thay vì ba đối số theo vị trí. Tài khoản Điều kiện tiên quyết
  • Ít hơn 3 luồng hiện hoạt động trên pool.
  • Người tài trợ gửi total_emission = emissions_per_second × (end_time − open_time) giá trị token phần thưởng vào vault như một phần của hướng dẫn này.
  • Mint phần thưởng được liệt kê trắng theo operation_state.

SetRewardParams

Mở rộng, bổ sung hoặc thay đổi tỷ lệ phát hành trên 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: bạn thường có thể mở rộng end_time hoặc tăng phát hành, không phải thu nhỏ chúng hồi tố. Kiểm tra danh sách chủ sở hữu của operation_state.

UpdateRewardInfos

Sổ sách thuần túy — giải quyết reward_growth_global_x64 cho thời gian 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 hướng dẫn chạm thanh khoản. Được tiếp xúc như một hướng dẫn độc lập vì các diễn viên bên ngoài (UI, crank) đôi khi muốn kích hoạt nó.

Collecting rewards

Không có chỉ thị thu thập phần thưởng độc lập. Chương trình không cung cấp entrypoint CollectReward nào, và IDL được công bố cũng không có.
Phần thưởng nợ một vị trí được trả ra bởi DecreaseLiquidity / DecreaseLiquidityV2. Để thu thập mà không thay đổi vị trí, hãy gọi nó với liquidity = 0, amount_0_min = 0, amount_1_min = 0. Các vault phần thưởng và tài khoản nhận được đặt trong remaining_accounts theo nhóm ba cho mỗi phần thưởng đang hoạt động, theo thứ tự reward_token_vault(W), recipient_token_account(W), reward_vault_mint. CollectRemainingRewards là một thứ khác: nó cho phép người tài trợ phần thưởng, sau end_time của một luồng, quét lại các token chưa bao giờ được phân bổ cho bất kỳ vị trí nào.

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

Tiếp theo

Nguồn: