Langsung ke konten utama

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 diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →
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

GrupInstruksiCatatan
AdminCreateAmmConfigMembuat fee tier baru.
AdminUpdateAmmConfigMengubah tarif pada fee tier yang sudah ada.
AdminUpdatePoolStatusMenjeda/melanjutkan operasi pada pool.
AdminCreateSupportMintAssociatedMemasukkan konfigurasi ekstensi mint Token-2022 ke daftar izin untuk digunakan di pool CLMM.
AdminCreateOperationAccountMenginisialisasi operation account tingkat program (satu kali).
AdminUpdateOperationAccountMengubah whitelist operation account.
AdminCreateDynamicFeeConfigMembuat kumpulan parameter dynamic fee yang dapat digunakan ulang di bawah indeks u16.
AdminUpdateDynamicFeeConfigMengubah DynamicFeeConfig yang sudah ada. Pool yang telah mengambil snapshot config ini tidak terpengaruh.
PoolCreatePoolMenginisialisasi pool CLMM yang terikat ke AmmConfig. Jalur fee standar FromInput. Dapat digunakan bersamaan dengan CreateCustomizablePool.
PoolCreateCustomizablePoolDirekomendasikan untuk pool baru. Sama seperti CreatePool ditambah collect_fee_on dan flag opsional enable_dynamic_fee.
PositionOpenPosition / OpenPositionV2 / OpenPositionWithToken22NftMencetak 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.
PositionIncreaseLiquidity / IncreaseLiquidityV2Menambah likuiditas ke posisi yang sudah ada.
PositionDecreaseLiquidity / DecreaseLiquidityV2Mengurangi likuiditas; mengumpulkan fee yang terutang.
PositionClosePositionMembakar NFT dan menutup PersonalPositionState.
PositionCloseProtocolPositionSweep 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.
SwapSwap / SwapV2Swap 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).
SwapSwapRouterBaseInMulti-hop, digunakan oleh router.
Limit orderOpenLimitOrderMenempatkan sell order pada tick tertentu. Token yang belum terisi tersimpan di tick; mesin pencocokan mengisinya saat harga melewatinya.
Limit orderIncreaseLimitOrderMenambah jumlah order yang sudah terbuka.
Limit orderDecreaseLimitOrderMengurangi atau membatalkan order yang terbuka; membayarkan sisa yang belum terisi beserta output yang sudah diselesaikan.
Limit orderSettleLimitOrderMendorong token output yang sudah terisi ke pemilik order. Dapat dipanggil oleh pemilik atau keeper operasional.
Limit orderCloseLimitOrderMenutup akun order yang sudah sepenuhnya terisi. Rent selalu dikembalikan ke owner order. Dapat dipanggil oleh pemilik atau keeper.
FeesCollectProtocolFeeSweep admin untuk protocol fee.
FeesCollectFundFeeSweep admin untuk fund fee.
RewardsInitializeRewardMenambahkan aliran reward baru ke pool.
RewardsSetRewardParamsMengubah laju emisi/waktu akhir reward yang sudah ada.
RewardsUpdateRewardInfosMenyelesaikan pertumbuhan reward hingga saat ini (dipanggil oleh setiap swap atau perubahan posisi).
RewardsTransferRewardOwnerMemindahkan otoritas yang dapat mengatur atau mengisi ulang aliran reward.
RewardsCollectRemainingRewardsSetelah end_time aliran reward, menyapu token yang belum dialokasikan kembali ke funder.
UtilityInitTickArrayMenginisialisasi 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)
#NamaWSCatatan
1pool_creatorWS
2amm_configFee tier yang dipilih.
3pool_stateWinit di sini.
4token_mint_0Diurutkan.
5token_mint_1
6token_vault_0Winit di sini, dimiliki oleh PDA otoritas pool.
7token_vault_1W
8observation_stateWinit di sini.
9tick_array_bitmap_extensionWinit di sini (V2).
10token_program
11token_program_2022
12system_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:
#NamaWSCatatan
Ndynamic_fee_configConfig 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)
#NamaWS
1payerWS
2position_nft_owner
3position_nft_mintWS (keypair)
4position_nft_accountWATA pemilik untuk NFT.
5metadata_accountWMetaplex (opsional, jika with_metadata).
6pool_stateW
7protocol_position
8tick_array_lowerWDibuat jika belum diinisialisasi.
9tick_array_upperWSama.
10personal_positionWDibuat di sini.
11token_account_0, token_account_1WATA sumber pengguna.
12token_vault_0, token_vault_1W
13rent, system_program, token_program
14associated_token_program
15metadata_programOpsional.
16token_program_2022V2.
17vault_0_mint, vault_1_mintV2.
18tick_array_bitmap_extensionWV2 (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 umumInvalidTickIndex, 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.
Slippageamount_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)
#NamaWSCatatan
1payerS
2amm_config
3pool_stateW
4input_token_accountW
5output_token_accountW
6input_vaultW
7output_vaultW
8observation_stateW
9token_program
10token_program_2022V2.
11memo_programV2 (diperlukan untuk sebagian jalur Token-2022).
12input_vault_mint, output_vault_mintV2.
13tick_array_bitmap_extension (opsional)WJika swap berjalan ke dalam extension.
14+tick_array (sisa)WCukup 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 umumExceededSlippage, SqrtPriceLimitOverflow, TickArrayNotFound, LiquidityInsufficient. Yang dilakukan SwapV2 secara internal yang perlu diketahui pemanggil (rilis pasca-2025):
  1. 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).
  2. 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.
  3. 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)
#NamaWSCatatan
1payerWSPemilik order; membayar rent.
2pool_stateW
3tick_arrayWTick array yang mengandung tick_index.
4limit_order_nonceWPDA. init_if_needed — dibuat saat order pertama pengguna di bawah nonce_index ini.
5limit_orderWPDA. init di sini.
6input_token_accountWATA input pengguna.
7input_vaultWVault input pool.
8input_vault_mintPenanganan fee Token-2022.
9input_token_programSPL atau Token-2022.
10system_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 umumInvalidLimitOrderAmount (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:
#NamaWS
1ownerS
2pool_stateW
3tick_arrayW
4limit_orderW
5input_token_accountW
6output_token_accountW
7input_vaultW
8output_vaultW
9input_vault_mint, output_vault_mint
10token_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
#NamaWS
1signerSpemilik atau limit_order_admin
2pool_state
3tick_array
4limit_orderW
5output_token_accountWATA output pemilik.
6output_vaultWVault output pool.
7output_vault_mint
8output_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
#NamaWSCatatan
1ownerWSPubkey admin yang dikodekan langsung.
2dynamic_fee_configWPDA, init di sini.
3system_program
Error umumInvalidDynamicFeeConfigParams 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
#NamaWS
1reward_funderWS
2funder_token_accountW
3amm_config
4pool_stateW
5operation_statePDA operation-state CLMM yang membatasi pembuatan reward.
6reward_token_mint
7reward_token_vaultWinit di sini.
8reward_token_program
9system_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
#NamaWS
1nft_ownerS
2nft_accountATA pemilik yang menyimpan NFT posisi.
3personal_positionW
4pool_stateW
5protocol_position
6reward_token_vaultW
7recipient_token_accountW
8token_program
9token_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

Instruksipool.liquiditypool.fee_growth_globalpool.reward_growth_globalpersonal_position.liquidityTick array
CreatePool00
OpenPosition+ jika dalam rentangbarutambah liquidity_gross/net
IncreaseLiquidity+ jika dalam rentangselesaikan yang terutangselesaikan yang terutang+sesuaikan
DecreaseLiquidity− jika dalam rentangselesaikan yang terutangselesaikan yang terutangsesuaikan
ClosePositiondihapus
SwapV2± saat melintasi+lintas & balik outside; cocokkan kohort limit order
OpenLimitOrderorders_amount += amount pada tick target
IncreaseLimitOrderorders_amount += amount
DecreaseLimitOrderorders_amount -=, mungkin menutup kohort
SettleLimitOrder— (hanya baca pada tick)
CloseLimitOrder
CreateCustomizablePool00
UpdateRewardInfos+
CollectRewardselesaikan yang terutang

Langkah selanjutnya

Sumber: