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.
Halaman ini merupakan pasangan dari products/clmm/accounts (penjelasan akun) dan products/clmm/math (penjelasan matematika). Halaman ini menjadi acuan untuk argumen dan urutan akun; tata letak byte terperinci tersedia di IDL.
Daftar instruksi
| Grup | Instruksi | Catatan |
|---|
| Admin | CreateAmmConfig | Membuat fee tier baru. |
| Admin | UpdateAmmConfig | Mengubah tarif pada fee tier yang sudah ada. |
| Admin | UpdatePoolStatus | Menjeda/melanjutkan operasi pada pool. |
| Admin | CreateSupportMintAssociated | Memasukkan konfigurasi ekstensi mint Token-2022 ke daftar izin untuk digunakan di pool CLMM. |
| Admin | CreateOperationAccount | Menginisialisasi operation account tingkat program (satu kali). |
| Admin | UpdateOperationAccount | Mengubah whitelist operation account. |
| Admin | CreateDynamicFeeConfig | Membuat kumpulan parameter dynamic fee yang dapat digunakan ulang di bawah indeks u16. |
| Admin | UpdateDynamicFeeConfig | Mengubah DynamicFeeConfig yang sudah ada. Pool yang telah mengambil snapshot config ini tidak terpengaruh. |
| Pool | CreatePool | Menginisialisasi pool CLMM yang terikat ke AmmConfig. Jalur fee standar FromInput. Dapat digunakan bersamaan dengan CreateCustomizablePool. |
| Pool | CreateCustomizablePool | Direkomendasikan untuk pool baru. Sama seperti CreatePool ditambah collect_fee_on dan flag opsional enable_dynamic_fee. |
| Position | OpenPosition / OpenPositionV2 / OpenPositionWithToken22Nft | Mencetak NFT posisi. OpenPositionV2 menggantikan V1 (tata letak akun terbaru dengan slot bitmap-extension); OpenPositionWithToken22Nft menerbitkan NFT posisi sebagai Token-2022, bukan SPL Token. Kode baru sebaiknya menggunakan V2 atau varian Token-2022. |
| Position | IncreaseLiquidity / IncreaseLiquidityV2 | Menambah likuiditas ke posisi yang sudah ada. |
| Position | DecreaseLiquidity / DecreaseLiquidityV2 | Mengurangi likuiditas; mengumpulkan fee yang terutang. |
| Position | ClosePosition | Membakar NFT dan menutup PersonalPositionState. |
| Position | CloseProtocolPosition | Sweep khusus admin untuk PDA ProtocolPositionState lama. Program saat ini tidak lagi membuat atau membaca ProtocolPositionState — instruksi ini hanya ada untuk mengambil kembali rent pada akun yang dibuat oleh versi program lama. |
| Swap | Swap / SwapV2 | Swap dengan likuiditas konstan. Kedua varian mendukung dynamic fee, routing fee satu sisi, dan pencocokan limit order; perbedaannya hanya SwapV2 menerima mint Token-2022 (varian V1 mengharuskan kedua vault berupa SPL Token klasik). |
| Swap | SwapRouterBaseIn | Multi-hop, digunakan oleh router. |
| Limit order | OpenLimitOrder | Menempatkan sell order pada tick tertentu. Token yang belum terisi tersimpan di tick; mesin pencocokan mengisinya saat harga melewatinya. |
| Limit order | IncreaseLimitOrder | Menambah jumlah order yang sudah terbuka. |
| Limit order | DecreaseLimitOrder | Mengurangi atau membatalkan order yang terbuka; membayarkan sisa yang belum terisi beserta output yang sudah diselesaikan. |
| Limit order | SettleLimitOrder | Mendorong token output yang sudah terisi ke pemilik order. Dapat dipanggil oleh pemilik atau keeper operasional. |
| Limit order | CloseLimitOrder | Menutup akun order yang sudah sepenuhnya terisi. Rent selalu dikembalikan ke owner order. Dapat dipanggil oleh pemilik atau keeper. |
| Fees | CollectProtocolFee | Sweep admin untuk protocol fee. |
| Fees | CollectFundFee | Sweep admin untuk fund fee. |
| Rewards | InitializeReward | Menambahkan aliran reward baru ke pool. |
| Rewards | SetRewardParams | Mengubah laju emisi/waktu akhir reward yang sudah ada. |
| Rewards | UpdateRewardInfos | Menyelesaikan pertumbuhan reward hingga saat ini (dipanggil oleh setiap swap atau perubahan posisi). |
| Rewards | TransferRewardOwner | Memindahkan otoritas yang dapat mengatur atau mengisi ulang aliran reward. |
| Rewards | CollectRemainingRewards | Setelah end_time aliran reward, menyapu token yang belum dialokasikan kembali ke funder. |
| Utility | InitTickArray | Menginisialisasi akun tick-array (sering digabungkan dengan OpenPosition). |
Sebagian besar instruksi khusus admin (CreateAmmConfig, UpdateAmmConfig, UpdatePoolStatus, CreateSupportMintAssociated, CreateOperationAccount, UpdateOperationAccount, CloseProtocolPosition) dibatasi oleh pubkey admin yang dikodekan langsung ke program. Instruksi admin aliran reward (TransferRewardOwner, CollectRemainingRewards) dibatasi oleh funder reward, bukan admin program.
Sufiks V2 berarti “mendukung Token-2022 pada vault/NFT, memerlukan slot bitmap-extension”. SDK memilih V2 secara default untuk pool baru.
CreatePool
Argumen
sqrt_price_x64: u128 // harga awal
open_time: u64 // swap ditolak sebelum waktu ini
Akun (ringkasan)
| # | Nama | W | S | Catatan |
|---|
| 1 | pool_creator | W | S | |
| 2 | amm_config | | | Fee tier yang dipilih. |
| 3 | pool_state | W | | init di sini. |
| 4 | token_mint_0 | | | Diurutkan. |
| 5 | token_mint_1 | | | |
| 6 | token_vault_0 | W | | init di sini, dimiliki oleh PDA otoritas pool. |
| 7 | token_vault_1 | W | | |
| 8 | observation_state | W | | init di sini. |
| 9 | tick_array_bitmap_extension | W | | init di sini (V2). |
| 10 | token_program | | | |
| 11 | token_program_2022 | | | |
| 12 | system_program, rent | | | |
Prasyarat
token_mint_0 < token_mint_1 berdasarkan urutan byte.
amm_config.disable_create_pool == false.
- Mint tidak ditolak oleh daftar izin ekstensi Token-2022.
Hasil setelah eksekusi
pool_state.sqrt_price_x64 = sqrt_price_x64, tick_current = floor(log_{1.0001}(price)).
pool_state.liquidity = 0 (belum ada posisi).
pool_state.fee_on = FromInput (default lama).
pool_state.dynamic_fee_info dinolkan (dynamic fee dinonaktifkan).
CreateCustomizablePool
Direkomendasikan untuk pool baru. Efeknya sama dengan CreatePool ditambah mode pengumpulan fee per-pool dan opsi dynamic fee opsional.
Argumen
pub struct CreateCustomizableParams {
pub sqrt_price_x64: u128,
pub collect_fee_on: CollectFeeOn, // FromInput | Token0Only | Token1Only
pub enable_dynamic_fee: bool,
}
Akun (ringkasan) — sama seperti CreatePool ditambah, jika enable_dynamic_fee = true:
| # | Nama | W | S | Catatan |
|---|
| N | dynamic_fee_config | | | Config bersama yang akan diambil snapshotnya. Harus sudah ada. |
Prasyarat — sama seperti CreatePool. Jika enable_dynamic_fee = false, dynamic_fee_config diabaikan.
Hasil setelah eksekusi
pool_state.fee_on diatur ke varian CollectFeeOn yang dipilih.
- Jika dynamic fee diaktifkan:
pool_state.dynamic_fee_info diinisialisasi dari DynamicFeeConfig yang diberikan (lima parameter kalibrasi disalin; kolom state dinolkan).
- Jika tidak:
pool_state.dynamic_fee_info dinolkan (= dynamic fee tidak aktif selamanya untuk pool ini).
fee_on dan bit aktifasi dynamic fee hanya dapat diatur saat pembuatan pool. Tidak ada upgrade di tempat — pool yang dibuat melalui CreatePool lama tidak dapat memperoleh dynamic fee atau fee satu sisi secara retroaktif. Penerapan baru sebaiknya menggunakan instruksi ini sebagai default.
OpenPositionV2 / OpenPositionWithToken22Nft
Membuat posisi baru di dalam pool yang sudah ada.
Argumen
tick_lower_index: i32
tick_upper_index: i32
tick_array_lower_start_index: i32
tick_array_upper_start_index: i32
liquidity: u128 // L yang diinginkan (atau 0 untuk menggunakan jumlah di bawah)
amount_0_max: u64
amount_1_max: u64
with_metadata: bool // tulis metadata NFT (Metaplex)
base_flag: Option<bool> // true = sesuaikan dengan amount0; false = sesuaikan dengan amount1
Akun (ringkasan)
| # | Nama | W | S | |
|---|
| 1 | payer | W | S | |
| 2 | position_nft_owner | | | |
| 3 | position_nft_mint | W | S (keypair) | |
| 4 | position_nft_account | W | | ATA pemilik untuk NFT. |
| 5 | metadata_account | W | | Metaplex (opsional, jika with_metadata). |
| 6 | pool_state | W | | |
| 7 | protocol_position | | | |
| 8 | tick_array_lower | W | | Dibuat jika belum diinisialisasi. |
| 9 | tick_array_upper | W | | Sama. |
| 10 | personal_position | W | | Dibuat di sini. |
| 11 | token_account_0, token_account_1 | W | | ATA sumber pengguna. |
| 12 | token_vault_0, token_vault_1 | W | | |
| 13 | rent, system_program, token_program | | | |
| 14 | associated_token_program | | | |
| 15 | metadata_program | | | Opsional. |
| 16 | token_program_2022 | | | V2. |
| 17 | vault_0_mint, vault_1_mint | | | V2. |
| 18 | tick_array_bitmap_extension | W | | V2 (jika disentuh). |
Matematika — lihat products/clmm/math. Berdasarkan base_flag, program menyelesaikan nilai liquidity atau (amount_0_max, amount_1_max) menjadi L aktual dan jumlah token yang dikonsumsi.
Prasyarat
tick_lower < tick_upper, keduanya merupakan kelipatan dari pool.tick_spacing, berada dalam rentang [MIN_TICK, MAX_TICK].
- Tick array yang diperlukan sudah diinisialisasi (atau dibuat di sini melalui CPI
InitTickArray dalam transaksi).
- Pengguna memiliki setidaknya
amount_0_max dan amount_1_max di ATA sumber.
Hasil setelah eksekusi
personal_position ada, liquidity diatur, fee_growth_inside_last diambil snapshotnya.
- Entri tick-array pada
tick_lower dan tick_upper diperbarui (liquidity_gross += L, liquidity_net ± L, snapshot pertumbuhan fee dipertahankan).
pool_state.liquidity += L jika posisi berada dalam rentang (tick_lower ≤ tick_current < tick_upper).
Error umum — InvalidTickIndex, NotApproved, ZeroAmountSpecified, TransactionTooLarge (jika terlalu banyak tick array).
IncreaseLiquidityV2
Menambah likuiditas ke posisi yang sudah terbuka.
Argumen
liquidity: u128
amount_0_max: u64
amount_1_max: u64
base_flag: Option<bool>
Akun — seperti OpenPosition tanpa mint NFT (posisi sudah ada; NFT diteruskan sebagai ATA pemilik yang menyimpan 1 token).
Efek
- Mentransfer
amount_0_actual / amount_1_actual dari pengguna ke vault.
- Menaikkan
personal_position.liquidity dan pool_state.liquidity (jika dalam rentang), serta liquidity_gross / liquidity_net pada tick ujung posisi.
- Mengumpulkan fee dan reward yang terutang sejak sentuhan terakhir dan mengkreditkannya ke
tokens_fees_owed_{0,1} / reward_amount_owed. Jumlah tersebut baru dibayarkan saat DecreaseLiquidity atau CollectReward, bukan saat penambahan.
DecreaseLiquidityV2
Mengurangi likuiditas dari posisi.
Argumen
liquidity: u128
amount_0_min: u64
amount_1_min: u64
Akun — bentuknya sama dengan IncreaseLiquidity.
Efek
- Menghitung
(amount_0, amount_1) untuk L yang dihapus berdasarkan sqrt_price_x64 saat ini.
- Menyelesaikan fee/reward yang terkumpul sejak sentuhan terakhir, sama seperti
IncreaseLiquidity.
- Mentransfer
amount_0 + fees_owed_0 dan amount_1 + fees_owed_1 dari vault ke pengguna.
- Mengurangi penghitung likuiditas; jika
personal_position.liquidity == 0 yang baru, posisi tersebut memenuhi syarat untuk ClosePosition.
Slippage — amount_0_min dan amount_1_min adalah jumlah minimum yang diterima pengguna setelah dikurangi transfer fee Token-2022 pada sisi output.
ClosePosition
Membakar NFT posisi dan menutup PersonalPositionState.
Prasyarat
personal_position.liquidity == 0.
tokens_fees_owed_{0,1} == 0.
- Semua penghitung reward
reward_amount_owed == 0.
(Artinya, kumpulkan semua dan kurangi ke nol terlebih dahulu.)
Efek
- Membakar NFT.
- Menutup akun mint NFT dan akun
personal_position, mengembalikan rent ke payer.
SwapV2
Berjalan di sepanjang kurva likuiditas; input eksak atau output eksak bergantung pada is_base_input.
Argumen
amount: u64 // input jika is_base_input=true, output jika sebaliknya
other_amount_threshold: u64 // minimum output atau maksimum input
sqrt_price_limit_x64: u128 // batas keras; 0 ⇒ tidak dibatasi
is_base_input: bool
Akun (ringkasan)
| # | Nama | W | S | Catatan |
|---|
| 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 (diperlukan untuk sebagian jalur Token-2022). |
| 12 | input_vault_mint, output_vault_mint | | | V2. |
| 13 | tick_array_bitmap_extension (opsional) | W | | Jika swap berjalan ke dalam extension. |
| 14+ | tick_array (sisa) | W | | Cukup array untuk mencakup rentang perjalanan yang diharapkan. |
Pemanggil meneruskan daftar tick array yang mencakup perjalanan swap yang diharapkan; program menggunakan sebanyak yang diperlukan. SDK menghitung daftar ini melalui PoolUtils.computeAmountOutFormat atau endpoint quote API.
Prasyarat
pool_state.status mengizinkan swap.
now >= open_time.
sqrt_price_limit_x64 berada di sisi yang benar dari sqrt_price_x64 untuk arah yang dipilih.
Error umum — ExceededSlippage, SqrtPriceLimitOverflow, TickArrayNotFound, LiquidityInsufficient.
Yang dilakukan SwapV2 secara internal yang perlu diketahui pemanggil (rilis pasca-2025):
- Surcharge dynamic fee — jika
pool.dynamic_fee_info bukan nol, program memperbarui akumulator volatilitas menggunakan jarak tick yang dilalui sejak swap terakhir (dengan aturan filter/peluruhan dari products/clmm/fees) dan menambahkan dynamic_fee_component di atas AmmConfig.trade_fee_rate. Total fee dibatasi pada 10% (MAX_FEE_RATE_NUMERATOR / 1_000_000).
- Pencocokan limit order — saat perjalanan harga melintasi tick yang memiliki limit order terbuka, program pertama-tama mengisi likuiditas limit order yang tersedia pada tick tersebut (FIFO berdasarkan
order_phase), lalu melanjutkan sepanjang kurva likuiditas LP. Jumlah yang terisi memperbarui tick.unfilled_ratio_x64 dan tick.part_filled_orders_remaining untuk penyelesaian selanjutnya; order itu sendiri tetap tidak terselesaikan hingga pemiliknya memanggil SettleLimitOrder.
- Routing fee satu sisi — saat
pool.fee_on = Token0Only atau Token1Only, langkah swap tetap menghitung pertukaran input-output yang sama; fee kemudian diarahkan ke sisi yang dikonfigurasi. Untuk arah di mana sisi fee yang dikonfigurasi adalah output, fee dikurangi dari output swap (pengguna menerima out − fee); untuk arah di mana sisi fee adalah input, perilakunya sama dengan FromInput. Lihat is_fee_on_input(zero_for_one) dan is_fee_on_token0(zero_for_one) pada PoolState.
Swap (V1) mengimplementasikan dynamic fee, routing fee satu sisi, dan pencocokan limit order yang sama dengan SwapV2; satu-satunya fitur yang tidak dimilikinya adalah dukungan Token-2022 — kedua vault harus berupa SPL Token klasik. Pool dengan mint Token-2022 harus di-swap melalui SwapV2. Agregator dan SDK sudah lebih memilih V2 untuk setiap leg CLMM sehingga pemanggil tidak perlu memilah berdasarkan jenis mint.
OpenLimitOrder
Menempatkan sell order pada tick tertentu. Order tersebut berada dalam antrian FIFO per-tick dan terisi saat harga melewatinya.
Argumen
nonce_index: u8 // indeks akun nonce yang dipilih pengguna (0..255 per wallet)
zero_for_one: bool // true: jual token0 untuk token1; false: jual token1 untuk token0
tick_index: i32 // harus merupakan kelipatan dari pool.tick_spacing
amount: u64 // jumlah token input
Akun (ringkasan)
| # | Nama | W | S | Catatan |
|---|
| 1 | payer | W | S | Pemilik order; membayar rent. |
| 2 | pool_state | W | | |
| 3 | tick_array | W | | Tick array yang mengandung tick_index. |
| 4 | limit_order_nonce | W | | PDA. init_if_needed — dibuat saat order pertama pengguna di bawah nonce_index ini. |
| 5 | limit_order | W | | PDA. init di sini. |
| 6 | input_token_account | W | | ATA input pengguna. |
| 7 | input_vault | W | | Vault input pool. |
| 8 | input_vault_mint | | | Penanganan fee Token-2022. |
| 9 | input_token_program | | | SPL atau Token-2022. |
| 10 | system_program, rent | | | |
Prasyarat
tick_index % pool.tick_spacing == 0 dan berada dalam rentang [MIN_TICK, MAX_TICK].
tick_index berada di sisi kanan pool.tick_current untuk arah yang dipilih (menjual token0 → tick harus di atas tick saat ini, dan sebaliknya). Menjual pada tick yang sudah dilewati akan langsung dicocokkan dan ditolak.
pool_state.status mengizinkan operasi limit order (bit 5).
Hasil setelah eksekusi
limit_order ada, mengambil snapshot tick.order_phase dan tick.unfilled_ratio_x64 saat dibuka.
tick.orders_amount += amount (dalam kohort saat ini).
limit_order_nonce.order_nonce += 1.
- Event
OpenLimitOrderEvent dipancarkan.
Error umum — InvalidLimitOrderAmount (nol atau di bawah minimum pool), InvalidTickIndex (di luar [MIN_TICK, MAX_TICK], atau di sisi yang salah dari tick_current untuk arah yang dipilih), TickAndSpacingNotMatch (tick_index % pool.tick_spacing != 0), OrderPhaseSaturated.
IncreaseLimitOrder
Menambah jumlah order yang sudah terbuka. Hanya dapat dipanggil oleh owner order.
Argumen
amount: u64 // jumlah token input tambahan
Akun — seperti OpenLimitOrder tanpa akun nonce; PDA limit_order diteruskan langsung.
Prasyarat
limit_order.owner == signer.
- Order masih berada dalam kohort yang sama (
tick.order_phase == limit_order.order_phase). Jika kohort sudah mulai terisi, order tersebut sebagian diselesaikan — pemanggil sebaiknya memanggil DecreaseLimitOrder atau SettleLimitOrder terlebih dahulu untuk maju ke depan.
Efek
- Mentransfer
amount dari ATA pemilik ke input_vault.
limit_order.total_amount += amount; tick.orders_amount += amount.
DecreaseLimitOrder
Mengurangi atau sepenuhnya membatalkan order yang terbuka. Membayarkan sisa yang belum terisi ke pemilik, beserta output yang sudah diselesaikan dari pengisian parsial sebelumnya.
Argumen
amount: u64 // jumlah token input yang ditarik (maks = sisa yang belum terisi)
amount_min: u64 // batas slippage minimum pada penarikan sisi input
Akun — mencakup kedua sisi token input dan output:
| # | Nama | 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 | | |
Efek
- Menghitung ulang jumlah yang terisi dari
unfilled_ratio_x64 kohort sejak dibuka.
- Mengirim output yang terisi ke
output_token_account.
- Mengirim
amount dari input yang belum terisi kembali ke input_token_account.
- Memperbarui
limit_order sesuai. Jika sisa yang belum terisi yang baru adalah nol, program menutup akun dan mengembalikan rent ke owner.
SettleLimitOrder
Mendorong token output yang sudah terisi ke pemilik tanpa mengubah sisa input order yang belum terisi. Berguna ketika keeper auto_withdraw ingin membayar pengisian parsial yang berjalan lama secara bertahap.
Pemanggil — baik owner order, maupun limit_order_admin program (hot wallet operasional off-chain yang menjalankan loop keeper otomatis). Keeper tidak memiliki otoritas lain — ia tidak dapat memindahkan dana pengguna selain mendorong output yang terisi ke ATA owner order.
Akun
| # | Nama | W | S | |
|---|
| 1 | signer | | S | pemilik atau limit_order_admin |
| 2 | pool_state | | | |
| 3 | tick_array | | | |
| 4 | limit_order | W | | |
| 5 | output_token_account | W | | ATA output pemilik. |
| 6 | output_vault | W | | Vault output pool. |
| 7 | output_vault_mint | | | |
| 8 | output_token_program | | | |
Efek
- Menghitung output kumulatif yang terutang menggunakan
(limit_order.unfilled_ratio_x64, tick.unfilled_ratio_x64).
- Mentransfer selisihnya ke
output_token_account.
- Memperbarui
limit_order.settled_output.
- Tidak menutup order; order masih terbuka terhadap input yang tersisa.
CloseLimitOrder
Menutup akun order yang sudah sepenuhnya dikonsumsi. Rent selalu dikembalikan ke limit_order.owner terlepas dari siapa yang menandatangani.
Pemanggil — baik owner maupun limit_order_admin.
Prasyarat
- Order memiliki sisa yang belum terisi sebesar nol (baik
amount == total_amount sudah terisi dan diselesaikan, atau pemilik sebelumnya mengurangi order ke nol dan lupa menutupnya).
Efek
- Menutup
limit_order; rent dikirimkan ke limit_order.owner.
CreateDynamicFeeConfig (admin)
Membuat kumpulan parameter yang dapat digunakan ulang di bawah indeks u16.
Argumen
index: u16
filter_period: u16 // detik; mis. 30
decay_period: u16 // detik; mis. 600. Harus > filter_period
reduction_factor: u16 // 1..10_000; mis. 5_000 = retensi 50% per jendela peluruhan
dynamic_fee_control: u32 // 1..100_000; gain pada kurva volatilitas-ke-fee
max_volatility_accumulator: u32 // batas atas
Akun
| # | Nama | W | S | Catatan |
|---|
| 1 | owner | W | S | Pubkey admin yang dikodekan langsung. |
| 2 | dynamic_fee_config | W | | PDA, init di sini. |
| 3 | system_program | | | |
Error umum — InvalidDynamicFeeConfigParams jika decay_period <= filter_period atau kolom bernilai 0 di luar batas.
UpdateDynamicFeeConfig (admin)
Mengubah DynamicFeeConfig yang sudah ada. Pool yang telah mengambil snapshot config ini saat dibuat tidak diperbarui secara retroaktif; hanya pool yang baru dibuat dan merujuk config ini yang akan mengambil nilai baru.
Argumen — lima kolom kalibrasi yang sama dengan CreateDynamicFeeConfig (filter_period, decay_period, reduction_factor, dynamic_fee_control, max_volatility_accumulator); index ditetapkan saat pembuatan dan tidak diteruskan ulang di sini.
CollectProtocolFee / CollectFundFee
Bentuknya identik dengan CollectProtocolFee / CollectFundFee pada CPMM. Penandatangan harus cocok dengan AmmConfig.owner / AmmConfig.fund_owner. Menyapu protocol/fund fee yang terkumpul dari vault pool ke penerima, menolkan kolom PoolState.protocol_fees_* / fund_fees_* yang sesuai.
InitializeReward
Menambahkan aliran reward baru ke pool. Maksimal 3 aliran dapat aktif sekaligus.
Argumen
open_time: u64
end_time: u64
emissions_per_second_x64: u128 // Q64.64
Akun
| # | Nama | W | S | |
|---|
| 1 | reward_funder | W | S | |
| 2 | funder_token_account | W | | |
| 3 | amm_config | | | |
| 4 | pool_state | W | | |
| 5 | operation_state | | | PDA operation-state CLMM yang membatasi pembuatan reward. |
| 6 | reward_token_mint | | | |
| 7 | reward_token_vault | W | | init di sini. |
| 8 | reward_token_program | | | |
| 9 | system_program, rent | | | |
Prasyarat
- Kurang dari 3 aliran yang saat ini aktif pada pool.
- Funder menyetor
total_emission = emissions_per_second × (end_time − open_time) token reward ke vault sebagai bagian dari instruksi ini.
- Mint reward diizinkan oleh
operation_state.
SetRewardParams
Memperpanjang, mengisi ulang, atau mengubah laju emisi pada aliran reward yang sudah ada. Biasanya dipanggil oleh pembuat pool atau Raydium multisig. Batasan tersimpan di on-chain: Anda umumnya dapat memperpanjang end_time atau meningkatkan emisi, tetapi tidak dapat menguranginya secara retroaktif. Periksa daftar pemilik operation_state.
UpdateRewardInfos
Hanya pembukuan — menyelesaikan reward_growth_global_x64 hingga waktu saat ini dengan mengalikan emissions_per_second × Δt / liquidity. Dipanggil secara internal oleh setiap instruksi yang menyentuh likuiditas. Diekspos sebagai instruksi mandiri karena aktor eksternal (UI, crank) terkadang ingin memicunya.
CollectReward
Pemilik posisi mengklaim token reward yang terutang.
Akun
| # | Nama | W | S | |
|---|
| 1 | nft_owner | | S | |
| 2 | nft_account | | | ATA pemilik yang menyimpan NFT posisi. |
| 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 | | | |
Efek
- Menyelesaikan pertumbuhan reward (pola yang sama dengan fee).
- Mentransfer jumlah yang terutang ke ATA penerima, menolkan
reward_amount_owed[i].
Matriks perubahan state
| Instruksi | pool.liquidity | pool.fee_growth_global | pool.reward_growth_global | personal_position.liquidity | Tick array |
|---|
CreatePool | 0 | 0 | — | — | — |
OpenPosition | + jika dalam rentang | — | — | baru | tambah liquidity_gross/net |
IncreaseLiquidity | + jika dalam rentang | selesaikan yang terutang | selesaikan yang terutang | + | sesuaikan |
DecreaseLiquidity | − jika dalam rentang | selesaikan yang terutang | selesaikan yang terutang | − | sesuaikan |
ClosePosition | — | — | — | dihapus | — |
SwapV2 | ± saat melintasi | + | — | — | lintas & balik outside; cocokkan kohort limit order |
OpenLimitOrder | — | — | — | — | orders_amount += amount pada tick target |
IncreaseLimitOrder | — | — | — | — | orders_amount += amount |
DecreaseLimitOrder | — | — | — | — | orders_amount -=, mungkin menutup kohort |
SettleLimitOrder | — | — | — | — | — (hanya baca pada tick) |
CloseLimitOrder | — | — | — | — | — |
CreateCustomizablePool | 0 | 0 | — | — | — |
UpdateRewardInfos | — | — | + | — | — |
CollectReward | — | — | selesaikan yang terutang | — | — |
Langkah selanjutnya
Sumber: