Skip to main content
Halaman ini diterjemahkan secara otomatis oleh AI. Versi bahasa Inggris adalah acuan resmi.Lihat versi bahasa Inggris →
Halaman ini berpasangan dengan products/clmm/accounts (apa itu akun) dan products/clmm/math (apa itu matematika). Halaman ini adalah acuan otoritatif untuk argumen dan urutan akun; tata letak byte spesifik berasal dari IDL.

Inventaris instruksi

Tidak ada instruksi init-tick-array, dan tidak ada yang membutuhkannya. Sebuah tick array dibuat di dalam OpenPosition* / IncreaseLiquidity* oleh TickArrayState::get_or_create_tick_array, dibayar oleh payer. Lewatkan PDA tick-array (yang mungkin masih belum diinisialisasi dan dimiliki system) sebagai tick_array_lower / tick_array_upper dan program akan mengalokasikannya jika belum ada. OpenLimitOrder melakukan hal yang sama untuk satu tick_array-nya.
Sebagian besar instruksi admin-only (CreateAmmConfig, UpdateAmmConfig, UpdatePoolStatus, CreateOperationAccount, UpdateOperationAccount, CloseProtocolPosition) dijaga oleh pubkey admin yang dikodekan keras program. CreatePermissionPda / ClosePermissionPda menerima pubkey admin atau kunci permission_pda_admin khusus; CreateSupportMintAssociated / CloseSupportMintAssociated menerima pubkey admin atau kunci pemilik support-mint khusus. Instruksi admin aliran reward (TransferRewardOwner, CollectRemainingRewards) dijaga oleh pendana reward, bukan admin program. Akhiran V2 berarti “mendukung Token-2022 di vault / NFT, memerlukan slot ekstensi bitmap”. SDK memilih V2 secara default untuk pool baru.

CreatePool

Argumen
Akun (ringkas)
Slot 10 dan 11 bersifat per-mint, bukan “SPL Token lalu Token-2022”. Masing-masing dibatasi oleh mint::token_program pada mint yang bersangkutan, jadi untuk pool yang token_mint_0-nya Token-2022 dan token_mint_1-nya SPL klasik, Anda harus melewatkan Token-2022 pada slot 10 dan SPL Token pada slot 11. CreateCustomizablePool dan CreatePermissionedPool memakai dua slot yang sama.
Prekondisi
  • token_mint_0 < token_mint_1 menurut urutan byte.
  • amm_config.disable_create_pool == false.
  • Mint tidak ditolak oleh daftar putih ekstensi Token-2022.
Postkondisi
  • 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 warisan).
  • pool_state.dynamic_fee_info adalah nol (dynamic fee dinonaktifkan).

CreateCustomizablePool

Direkomendasikan untuk pool baru. Efek yang sama dengan CreatePool ditambah mode pengumpulan biaya per-pool dan opt-in dynamic-fee opsional. Argumen
Akun — tepat 13 akun yang dideklarasikan pada CreatePool. dynamic_fee_config bukan akun yang dideklarasikan.
Ketika enable_dynamic_fee = true, DynamicFeeConfig yang akan di-snapshot harus disediakan sebagai remaining_account terakhir — handler membaca ctx.remaining_accounts.last(). Karena itu PDA bypass SupportMintAssociated apa pun harus datang sebelum-nya, atau program mengambil snapshot akun yang salah dan gagal melakukan deserialisasi. Menghilangkannya sementara flag disetel akan gagal dengan AccountLack.
Prekondisi — sama dengan CreatePool. Jika enable_dynamic_fee = false, tidak ada remaining_account yang diperlukan dan yang dilewatkan hanya dipindai untuk record support-mint. Postkondisi
  • pool_state.fee_on diatur ke varian CollectFeeOn yang dipilih.
  • Jika dynamic fee diaktifkan: pool_state.dynamic_fee_info diinisialisasi dari DynamicFeeConfig yang disediakan (lima parameter kalibrasi disalin; bidang state dinolkan).
  • Jika tidak: pool_state.dynamic_fee_info adalah nol (= dynamic fee tidak aktif selamanya untuk pool ini).
fee_on dan bit enablement dynamic-fee diatur hanya saat pembuatan pool. Tidak ada upgrade di tempat — pool yang dibuat melalui CreatePool warisan tidak dapat secara retroaktif mendapatkan dynamic fee atau biaya satu sisi. Penerapan baru harus default ke instruksi ini.

CreatePermissionedPool

Baik CreatePool maupun CreateCustomizablePool menurunkan PDA pool dari ["pool", amm_config, token_mint_0, token_mint_1], jadi ada tepat satu alamat pool kanonik per triple (config, mint0, mint1)init kedua pada seed yang sama gagal. CreatePermissionedPool menghilangkan pembatasan itu dengan melipat seed_index: u16 yang disediakan klien ke dalam seed PDA pool, memungkinkan beberapa pool untuk pasangan dan tier biaya yang sama — masing-masing di alamatnya sendiri. Karena alamat pool arbitrer adalah kemampuan istimewa, pembayar harus memegang PDA Permission yang mengotorisasinya. Segalanya tentang pool identik dengan CreateCustomizablePool: ia mengambil CreateCustomizableParams yang sama dan mendukung biaya satu sisi dan opt-in dynamic-fee. Argumen
Akun (ringkas) — sama dengan CreateCustomizablePool ditambah, di depan: PDA pool_state diturunkan dari ["pool", amm_config, token_mint_0, token_mint_1, seed_index.to_le_bytes()]. Prekondisi
  • seed_index != 0. seed_index dari 0 dicadangkan untuk pool warisan dan ditolak di sini; komponen seed [0, 0] adalah apa yang membuat alamat pool warisan runtuh ke bentuk empat-seed klasik.
  • PDA permission untuk payer ada (dibuat oleh admin melalui CreatePermissionPda).
  • Aturan mint / daftar putih yang sama dengan CreatePool.
Postkondisi
  • pool_state baru ada di alamat yang diturunkan seed_index, dengan pool_state.seed_index = seed_index.
  • Semua kecocokan post-state lainnya CreateCustomizablePool (mode biaya, dynamic fee opsional).
Instruksi ini tidak memperluas akses pembuatan pool umum — pembuatan tanpa izin terus melalui CreatePool / CreateCustomizablePool, yang tetap satu-pool-per-pasangan. CreatePermissionedPool ada untuk kasus spesifik di mana operator yang masuk daftar putih memerlukan beberapa pool untuk pasangan yang sama (misalnya harga awal berbeda atau kohort peluncuran) dan memegang PDA Permission yang diberikan oleh admin.

OpenPositionV2 / OpenPositionWithToken22Nft

Buat posisi baru di dalam pool yang ada. Argumen
Akun (ringkas) OpenPositionWithToken22Nft adalah daftar yang sama dengan metadata_account (5) dan metadata_program (19) dihapus — instruksi itu menulis metadata posisi melalui extension metadata Token-2022 pada NFT mint — sehingga menghasilkan 20 akun. position_nft_mint-nya adalah Signer biasa dan position_nft_account adalah UncheckedAccount.
tick_array_bitmap_extension bukan akun yang dideklarasikan pada kedua varian. Ketika rentang posisi jatuh di luar tick_array_bitmap inline pool (±512 tick array), tambahkan PDA TickArrayBitmapExtension pada seed ["pool_tick_array_bitmap_extension", pool_state] sebagai remaining_accounts[0].
Matematika — lihat products/clmm/math. Diberikan base_flag, program menyelesaikan liquidity atau (amount_0_max, amount_1_max) menjadi L aktual dan jumlah token aktual yang dikonsumsi. Prekondisi
  • tick_lower < tick_upper, keduanya kelipatan pool.tick_spacing, dalam [MIN_TICK, MAX_TICK].
  • Kedua PDA tick-array dilewatkan. Keduanya tidak harus sudah ada — get_or_create_tick_array mengalokasikan yang belum ada atas biaya payer di dalam instruksi ini. Tidak ada instruksi init-tick-array terpisah.
  • Pengguna memiliki setidaknya amount_0_max dan amount_1_max di ATA sumber.
Postkondisi
  • personal_position ada, liquidity diatur, fee_growth_inside_last diambil snapshot.
  • Entri tick-array di tick_lower dan tick_upper diperbarui (liquidity_gross += L, liquidity_net ± L, snapshot pertumbuhan biaya dipertahankan).
  • pool_state.liquidity += L jika posisi dalam jangkauan (tick_lower ≤ tick_current < tick_upper).
  • Mint NFT posisi mencatat pool_state sebagai otoritas pembekuan. Otoritas mint dihapus setelah NFT tunggal dimint. Mencatat otoritas pembekuan tidak mengubah status akun token NFT.
  • Akun token NFT tetap tidak beku kecuali instruksi adalah OpenPositionV2 atau OpenPositionWithToken22Nft dan otoritas pembekuan mint vault cocok dengan daftar penerbit terbatas CLMM. Hanya jalur V2 yang cocok yang membekukan akun. OpenPosition V1 tidak membekukan.
Kesalahan umumTickInvalidOrder (tick_lower >= tick_upper), TickAndSpacingNotMatch (salah satu endpoint bukan kelipatan tick_spacing), InvalidTickIndex (di luar [MIN_TICK, MAX_TICK]), MissingTickArrayBitmapExtensionAccount (rentang di luar bitmap inline dan extension tidak ditambahkan), NotApproved (pool_state.status memblokir pembukaan), ZeroAmountSpecified.
Pembekuan posisi tidak menambahkan akun instruksi yang dideklarasikan atau argumen. Klien dapat membuka posisi ini dengan tata letak V2 yang ada. Perilaku dipilih on-chain dari vault_0_mint dan vault_1_mint.

IncreaseLiquidityV2

Tambahkan likuiditas ke posisi yang sudah terbuka. Argumen
Akun — 15, dan tidak dapat diturunkan dari OpenPosition: tidak ada rent, tidak ada system_program, tidak ada associated_token_program dan tidak ada akun metadata. Tambahkan PDA TickArrayBitmapExtension sebagai remaining_accounts[0] ketika rentang posisi berada di luar bitmap inline. Efek
  • Mentransfer amount_0_actual / amount_1_actual dari pengguna → vault.
  • Menambah personal_position.liquidity dan pool_state.liquidity (jika dalam jangkauan), dan liquidity_gross / liquidity_net tick endpoint sesuai.
  • Mengumpulkan biaya dan reward yang terhutang sejak sentuhan terakhir dan mengkreditnya ke token_fees_owed_{0,1} / reward_amount_owed. Keduanya dibayarkan hanya pada DecreaseLiquidity / DecreaseLiquidityV2, bukan pada peningkatan — tidak ada instruksi collect mandiri.

DecreaseLiquidityV2

Hapus likuiditas dari posisi. Argumen
Akun — 16, dan bukan bentuk atau urutan yang sama dengan IncreaseLiquidityV2: personal_position dan pool_state ditukar posisinya, vault datang sebelum tick array, akun sisi pengguna diberi nama recipient_token_account_*, dan ada tambahan memo_program. Remaining accounts — tiga per reward aktif yang dikumpulkan, dengan urutan reward_token_vault(W), recipient_token_account(W), reward_vault_mint. Tambahkan PDA TickArrayBitmapExtension di depan ketika rentang posisi berada di luar bitmap inline.
Ini juga satu-satunya cara untuk mengumpulkan biaya dan reward. Untuk mengumpulkan tanpa mengubah posisi, panggil dengan liquidity = 0, amount_0_min = 0, amount_1_min = 0.
Efek
  • Menghitung (amount_0, amount_1) untuk L yang dihapus diberikan sqrt_price_x64 saat ini.
  • Menyelesaikan biaya/reward yang terkumpul sejak sentuhan terakhir, sama dengan IncreaseLiquidity.
  • Mentransfer amount_0 + fees_owed_0 dan amount_1 + fees_owed_1 keluar dari vault ke pengguna.
  • Mengurangi penghitung likuiditas; jika personal_position.liquidity baru == 0, posisi memenuhi syarat untuk ClosePosition.
Slippageamount_0_min dan amount_1_min adalah minimum yang diterima pengguna bersih biaya transfer Token-2022 di sisi output.

ClosePosition

Bakar NFT posisi dan tutup PersonalPositionState. Akun yang dideklarasikan Akun sisa
  • NFT tidak beku: tidak ada yang diperlukan; akun pool tambahan tidak berbahaya karena handler tidak membacanya.
  • NFT beku: tambahkan personal_position.pool_id sebagai akun sisa pertama. Program memuatnya sebagai PoolState dan menggunakan seed PDA-nya untuk menandatangani pencairan.
Prekondisi
  • personal_position.liquidity == 0.
  • tokens_fees_owed_{0,1} == 0.
  • Semua penghitung reward reward_amount_owed == 0.
(Yaitu, kumpulkan semuanya dan kurangi-ke-nol terlebih dahulu.) Efek
  • Jika akun token NFT beku, verifikasi akun sisa pertama sama dengan personal_position.pool_id, kemudian cairkan dengan PDA pool.
  • Bakar NFT.
  • Tutup akun token NFT dan personal_position, mengembalikan sewa ke nft_owner. Jika NFT posisi menggunakan Token-2022, ia juga menutup mint NFT; mint SPL Token klasik tidak dapat ditutup dan tetap dengan pasokan nol.
Pencairan, pembakaran, dan penutupan bersifat atomik. NFT tidak dapat menjadi dapat ditransfer di antara langkah-langkah tersebut. Pemecahan klien bersyarat — tata letak IDL yang dideklarasikan tidak berubah, jadi klien warisan terus menutup posisi yang ada dan tidak beku. Pembangun warisan yang menghilangkan akun sisa pool gagal dengan AccountLack saat menutup posisi beku. Melewatkan pool untuk setiap penutupan adalah strategi kompatibel paling sederhana.

SwapV2

Berjalan di kurva likuiditas; input tepat atau output tepat tergantung pada is_base_input. Argumen
Akun (ringkas) Pemanggil melewatkan daftar tick array berperingkat yang mencakup jalan swap yang diharapkan; program menggunakan sebanyak yang dibutuhkan. SDK menghitung daftar ini melalui PoolUtils.computeAmountOutFormat atau endpoint quote API. Prekondisi
  • pool_state.status memungkinkan swap.
  • now >= open_time.
  • sqrt_price_limit_x64 berada di sisi yang benar dari sqrt_price_x64 untuk arah.
Kesalahan umumTooLittleOutputReceived (slippage exact-in), TooMuchInputPaid (slippage exact-out), SqrtPriceLimitOverflow, NotEnoughTickArrayAccount, InvalidFirstTickArrayAccount, MissingTickArrayBitmapExtensionAccount, LiquidityInsufficient, NotApproved (bit swap disetel pada pool_state.status). CLMM tidak memiliki varian ExceededSlippage — nama itu milik CPMM — dan tidak memiliki TickArrayNotFound. Apa yang SwapV2 lakukan secara internal yang harus diketahui pemanggil (rilis pasca-2025):
  1. Surcharge dynamic fee — jika pool.dynamic_fee_info bukan nol, program memperbarui akumulator volatilitas menggunakan jarak tick yang dilintasi sejak swap terakhir (dengan aturan filter/decay dari products/clmm/fees) dan menambahkan dynamic_fee_component di atas AmmConfig.trade_fee_rate. Total biaya dibatasi pada 10% (MAX_FEE_RATE_NUMERATOR / 1_000_000).
  2. Pencocokan limit-order — ketika jalan harga melintasi tick yang memegang pesanan limit terbuka, program pertama-tama mengisi likuiditas limit-order yang tersedia di tick itu (FIFO menurut order_phase), kemudian melanjutkan di sepanjang kurva likuiditas LP. Jumlah yang terisi memperbarui tick.unfilled_ratio_x64 dan tick.part_filled_orders_remaining untuk penyelesaian nanti; pesanan itu sendiri tetap tidak dihabiskan sampai pemiliknya memanggil SettleLimitOrder.
  3. Perutean biaya satu sisi — ketika pool.fee_on = Token0Only atau Token1Only, langkah swap masih menghitung input-output perdagangan yang sama; biaya kemudian dirutkan ke sisi yang dikonfigurasi. Untuk arah di mana sisi biaya yang dikonfigurasi adalah output, biaya dikurangi dari output swap (pengguna menerima out − fee); untuk arah di mana itu adalah input, perilaku cocok 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, perutean biaya satu sisi, dan pencocokan limit-order yang sama dengan SwapV2; satu-satunya fitur yang tidak dimilikinya adalah dukungan Token-2022 — kedua vault harus SPL Token klasik. Pool dengan mint Token-2022 apa pun harus ditukar melalui SwapV2. Agregator dan SDK sudah lebih suka V2 untuk setiap leg CLMM jadi pemanggil tidak harus bercabang pada tipe mint.

OpenLimitOrder

Tempatkan pesanan jual pada tick tertentu. Pesanan duduk di kohort FIFO per-tick dan terisi saat harga berjalan melewati. Argumen
Akun (ringkas) Remaining accounts[0] tick_array_bitmap_extension, diperlukan hanya ketika menginisialisasi tick array yang indeks awalnya berada di luar bitmap inline pool. Jika tidak, jangan lewatkan apa pun.
Tidak ada akun rent: struct-nya berakhir pada system_program, 13 akun yang dideklarasikan. Sebuah rent liar pada posisi 14 mendarat tepat di tempat extension bitmap opsional dibaca, sehingga pesanan tampak berfungsi sampai saat pertama kali sebuah tick array di luar bitmap inline harus dibuat — dan kemudian gagal.
Perubahan daftar akun (rilis 2026-07). OpenLimitOrder sekarang juga mengambil akun sisi outputoutput_token_account, output_vault, dan output_vault_mint — selain sisi input. Mereka digunakan hanya untuk validasi: program menolak pesanan jika akun token input atau output pemilik beku. Ini menjamin bahwa pengisian dapat benar-benar diselesaikan ke ATA output pemilik, yang penting untuk mint Token-2022 daftar putih / beku default (misalnya token berizin) di mana akun mungkin belum dicairkan. Klien yang dibangun terhadap daftar akun satu sisi yang lebih lama harus menambahkan tiga akun output.
Prekondisi
  • Baik input_token_account maupun output_token_account tidak beku (jika tidak NotApproved).
  • pool_state.status memungkinkan operasi swap (bit 4) dan limit-order (bit 5) (jika tidak NotApproved).
  • tick_index % pool.tick_spacing == 0 dan dalam [MIN_TICK, MAX_TICK].
  • tick_index berada di sisi kanan pool.tick_current untuk arah yang dipilih (menjual token0 → tick harus di atas saat ini, dan sebaliknya). Menjual di tick yang sudah dilintasi akan segera cocok dan ditolak.
Postkondisi
  • limit_order ada, mengambil snapshot tick.order_phase dan tick.unfilled_ratio_x64 saat dibuka.
  • tick.orders_amount += amount (di kohort saat ini).
  • limit_order_nonce.order_nonce += 1.
  • OpenLimitOrderEvent dipancarkan.
Kesalahan umumNotApproved (akun token input atau output beku, atau pool memiliki swap / limit-order dinonaktifkan), ZeroAmountSpecified (amount == 0 setelah biaya transfer sisi input), InvalidLimitOrderAmount (jumlahnya akan menghasilkan output di bawah 1 unit dasar pada tick tersebut, atau melebihi u64), InvalidTickIndex (di luar [MIN_TICK, MAX_TICK], atau di sisi salah tick_current untuk arah yang dipilih), TickAndSpacingNotMatch (tick_index % pool.tick_spacing != 0), OrderPhaseSaturated.

IncreaseLimitOrder

Tambahkan ke pesanan terbuka yang ada. Hanya dapat dipanggil oleh owner pesanan. Argumen
Akun — 8, hanya sisi input. Instruksi ini menghilangkan akun nonce, ketiga akun sisi output dan system_program. Prekondisi
  • limit_order.owner == signer.
  • Pesanan masih dalam kohort yang sama (tick.order_phase == limit_order.order_phase). Jika kohort sudah mulai terisi, pesanan sebagian diselesaikan — pemanggil harus memanggil DecreaseLimitOrder atau SettleLimitOrder terlebih dahulu untuk maju.
Efek
  • Mentransfer amount dari ATA pemilik ke input_vault.
  • limit_order.total_amount += amount; tick.orders_amount += amount.

DecreaseLimitOrder

Kurangi atau batalkan sepenuhnya pesanan terbuka. Membayar sisa yang tidak terisi kembali ke pemilik, ditambah output apa pun yang sudah diselesaikan oleh pengisian parsial masa lalu. Argumen
Akun — kedua sisi token input dan output: Efek
  • Menghitung ulang jumlah terisi pesanan dari unfilled_ratio_x64 kohort sejak dibuka.
  • Mengirim output terisi ke output_token_account.
  • Mengirim amount input yang tidak terisi kembali ke input_token_account.
  • Memperbarui limit_order sesuai. Jika sisa yang tidak terisi baru adalah nol, program menutup akun dan mengembalikan sewa ke owner.

SettleLimitOrder

Dorong token output yang terisi ke pemilik tanpa mengubah sisa yang tidak terisi pesanan. Berguna ketika keeper auto_withdraw ingin menetes-bayar pengisian parsial yang berjalan lama. Pemanggil — baik owner pesanan, atau limit_order_admin program (dompet panas operasional off-chain yang menjalankan loop keeper otomatis). Keeper tidak memiliki otoritas lain — ia tidak dapat memindahkan dana pengguna di luar mendorong output terisi ke ATA owner pesanan. Akun Efek
  • Menghitung output kumulatif yang terhutang menggunakan (limit_order.unfilled_ratio_x64, tick.unfilled_ratio_x64).
  • Mentransfer delta ke output_token_account.
  • Memperbarui limit_order.settled_output.
  • Tidak menutup pesanan; masih terbuka terhadap input yang tersisa.

CloseLimitOrder

Tutup akun pesanan yang sepenuhnya dikonsumsi. Sewa selalu dikembalikan ke limit_order.owner terlepas dari siapa yang menandatangani. Pemanggil — baik owner atau limit_order_admin. Prekondisi
  • Pesanan memiliki sisa yang tidak terisi nol (baik amount == total_amount terisi dan diselesaikan, atau pemilik sebelumnya mengurangi pesanan ke nol dan lupa menutup).
Efek
  • Menutup limit_order; sewa dikirim ke limit_order.owner.

CreateDynamicFeeConfig (admin)

Buat set parameter yang dapat digunakan kembali di bawah indeks u16. Argumen
Akun Kesalahan umumInvalidDynamicFeeConfigParams jika decay_period <= filter_period atau bidang bernilai 0 di luar batas.

UpdateDynamicFeeConfig (admin)

Ubah DynamicFeeConfig yang ada. Pool yang sudah mengambil snapshot konfigurasi saat pembuatan tidak diperbarui secara retroaktif; hanya pool yang baru dibuat yang mereferensikan konfigurasi ini akan mengambil nilai baru. Argumen — lima bidang kalibrasi yang sama dengan CreateDynamicFeeConfig (filter_period, decay_period, reduction_factor, dynamic_fee_control, max_volatility_accumulator); index ditetapkan saat pembuatan dan tidak dilewatkan ulang di sini.

CollectProtocolFee / CollectFundFee

Sapukan biaya protokol/dana yang terkumpul dari vault pool ke penerima, dan nolkan bidang PoolState.protocol_fees_* / fund_fees_* yang sesuai. Ini bukan tata letak CPMM — CLMM tidak memiliki akun authority, dan bidang penerimanya diberi nama recipient_token_account_{0,1} alih-alih recipient_token_{0,1}_account. Argumenamount_0_requested: u64, amount_1_requested: u64.

InitializeReward

Tambahkan aliran reward baru ke pool. Hingga 3 aliran dapat aktif sekaligus. Argumen
Encoding wire-nya adalah ketiga field secara berurutan, sehingga instruksi yang dibangun secara manual tidak terpengaruh — tetapi klien yang digerakkan IDL harus melewatkan satu objek param alih-alih tiga argumen posisional. Akun Prekondisi
  • Kurang dari 3 aliran saat ini aktif di pool.
  • Pendana menyetor total_emission = emissions_per_second × (end_time − open_time) senilai token reward ke vault sebagai bagian dari instruksi ini.
  • Mint reward yang masuk daftar putih per operation_state.

SetRewardParams

Perpanjang, isi ulang, atau ubah laju emisi pada aliran reward yang ada. Biasanya dipanggil oleh pembuat pool atau multisig Raydium. Batasan hidup on-chain: Anda biasanya dapat memperpanjang end_time atau meningkatkan emisi, bukan menyusutnya secara retroaktif. Periksa daftar pemilik operation_state.

UpdateRewardInfos

Pembukuan murni — menyelesaikan reward_growth_global_x64 ke 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) kadang-kadang ingin memicunya.

Collecting rewards

Tidak ada instruksi collect-reward mandiri. Program tidak mengekspos entrypoint CollectReward, dan IDL yang dipublikasikan juga tidak memilikinya.
Reward yang terhutang kepada sebuah posisi dibayarkan oleh DecreaseLiquidity / DecreaseLiquidityV2. Untuk mengumpulkannya tanpa mengubah posisi, panggil instruksi itu dengan liquidity = 0, amount_0_min = 0, amount_1_min = 0. Vault reward dan akun penerima masuk ke remaining_accounts dalam kelompok tiga per reward aktif, dengan urutan reward_token_vault(W), recipient_token_account(W), reward_vault_mint. CollectRemainingRewards adalah hal yang berbeda: instruksi itu memungkinkan pendana reward, setelah end_time sebuah aliran, menyapu token yang tidak pernah dialokasikan ke posisi mana pun.

Matriks perubahan status

Ke mana selanjutnya

Sumber: