Diese Seite wurde mit KI automatisch übersetzt. Maßgeblich ist stets die englische Version.Englische Version ansehen →
Diese Seite ergänzt
products/clmm/accounts (Beschreibung der Accounts) und products/clmm/math (Beschreibung der Mathematik). Sie ist maßgeblich für Argumente und Account-Reihenfolge; konkrete Byte-Layouts entnehmen Sie dem IDL.Instruktionsübersicht
| Gruppe | Instruktion | Hinweise |
|---|---|---|
| Admin | CreateAmmConfig | Neue Fee-Stufe definieren. |
| Admin | UpdateAmmConfig | Raten einer bestehenden Stufe ändern. |
| Admin | UpdatePoolStatus | Operationen eines Pools pausieren/fortsetzen. |
| Admin | CreateSupportMintAssociated | Token-2022-Mint-Extension-Konfiguration für CLMM-Pools zulassen. |
| Admin | CreateOperationAccount | Programmweiten Operation-Account einmalig initialisieren. |
| Admin | UpdateOperationAccount | Whitelist des Operation-Accounts anpassen. |
| Admin | CreateDynamicFeeConfig | Wiederverwendbaren Dynamic-Fee-Parametersatz unter einem u16-Index anlegen. |
| Admin | UpdateDynamicFeeConfig | Bestehende DynamicFeeConfig bearbeiten. Pools, die die Konfiguration bereits gespeichert haben, bleiben unverändert. |
| Pool | CreatePool | CLMM-Pool an eine AmmConfig binden. Standardmäßiger FromInput-Fee-Pfad. Koexistiert mit CreateCustomizablePool. |
| Pool | CreateCustomizablePool | Empfohlen für neue Pools. Gleiche Struktur wie CreatePool, zusätzlich collect_fee_on und ein optionales enable_dynamic_fee-Flag. |
| Position | OpenPosition / OpenPositionV2 / OpenPositionWithToken22Nft | Position-NFT minten. OpenPositionV2 ersetzt V1 (neues Account-Layout mit Bitmap-Extension-Slot); OpenPositionWithToken22Nft gibt das Position-NFT als Token-2022 statt als SPL Token aus. Neuer Code sollte V2 oder die Token-2022-Variante verwenden. |
| Position | IncreaseLiquidity / IncreaseLiquidityV2 | Liquidität zu einer bestehenden Position hinzufügen. |
| Position | DecreaseLiquidity / DecreaseLiquidityV2 | Liquidität entfernen; ausstehende Gebühren werden eingesammelt. |
| Position | ClosePosition | NFT verbrennen und PersonalPositionState schließen. |
| Position | CloseProtocolPosition | Nur Admin: Legacy-ProtocolPositionState-PDAs bereinigen. Das aktuelle Programm erstellt und liest keine ProtocolPositionState mehr — diese Instruktion existiert ausschließlich zur Rückforderung von Rent auf Accounts älterer Programmversionen. |
| Swap | Swap / SwapV2 | Constant-Liquidity-Swap. Beide Varianten unterstützen Dynamic Fee, einseitiges Fee-Routing und Limit-Order-Matching; der einzige Unterschied besteht darin, dass SwapV2 Token-2022-Mints akzeptiert (V1 erfordert klassische SPL-Token-Vaults). |
| Swap | SwapRouterBaseIn | Multi-Hop, vom Router genutzt. |
| Limit Order | OpenLimitOrder | Verkaufsorder an einem Tick platzieren. Nicht gefüllte Token verbleiben am Tick; die Matching-Engine füllt sie, sobald der Preis diesen Tick passiert. |
| Limit Order | IncreaseLimitOrder | Bestehende offene Order aufstocken. |
| Limit Order | DecreaseLimitOrder | Offene Order reduzieren oder stornieren; der ungefüllte Rest sowie bereits abgewickelte Ausgaben werden ausgezahlt. |
| Limit Order | SettleLimitOrder | Gefüllte Ausgabe-Token an den Order-Inhaber übermitteln. Aufrufbar durch den Inhaber oder den operativen Keeper. |
| Limit Order | CloseLimitOrder | Vollständig ausgeführten Order-Account schließen. Rent wird stets an den owner der Order zurückgegeben. Aufrufbar durch Inhaber oder Keeper. |
| Fees | CollectProtocolFee | Admin-Sweep der Protokollgebühren. |
| Fees | CollectFundFee | Admin-Sweep der Fondsgebühren. |
| Rewards | InitializeReward | Neuen Reward-Stream an einen Pool anhängen. |
| Rewards | SetRewardParams | Emissionsrate/Endzeitpunkt eines bestehenden Rewards ändern. |
| Rewards | UpdateRewardInfos | Reward-Wachstum bis jetzt abrechnen (wird von jedem Swap/jeder Positionsänderung aufgerufen). |
| Rewards | TransferRewardOwner | Autorität, die einen Reward-Stream einstellen oder auffüllen kann, übertragen. |
| Rewards | CollectRemainingRewards | Nach Ablauf von end_time eines Reward-Streams nicht zugeteilte Token an den Funder zurückführen. |
| Utility | InitTickArray | Tick-Array-Account initialisieren (wird häufig zusammen mit OpenPosition gebündelt). |
CreateAmmConfig, UpdateAmmConfig, UpdatePoolStatus, CreateSupportMintAssociated, CreateOperationAccount, UpdateOperationAccount, CloseProtocolPosition) sind durch den fest programmierten admin-Pubkey des Programms geschützt. Reward-Stream-Admin-Instruktionen (TransferRewardOwner, CollectRemainingRewards) werden durch den Reward-Funder, nicht durch den Programm-Admin, kontrolliert.
Das Suffix V2 bedeutet: „Token-2022 auf Vaults/NFT unterstützt, Bitmap-Extension-Slot erforderlich”. Das SDK wählt für neue Pools standardmäßig V2.
CreatePool
Argumente
| # | Name | W | S | Hinweise |
|---|---|---|---|---|
| 1 | pool_creator | W | S | |
| 2 | amm_config | Gewählte Fee-Stufe. | ||
| 3 | pool_state | W | Wird hier initialisiert. | |
| 4 | token_mint_0 | Sortiert. | ||
| 5 | token_mint_1 | |||
| 6 | token_vault_0 | W | Wird hier initialisiert, Eigentümer ist die Pool-Authority-PDA. | |
| 7 | token_vault_1 | W | ||
| 8 | observation_state | W | Wird hier initialisiert. | |
| 9 | tick_array_bitmap_extension | W | Wird hier initialisiert (V2). | |
| 10 | token_program | |||
| 11 | token_program_2022 | |||
| 12 | system_program, rent |
token_mint_0 < token_mint_1nach Byte-Reihenfolge.amm_config.disable_create_pool == false.- Mints werden nicht durch die Token-2022-Extension-Allowlist abgelehnt.
pool_state.sqrt_price_x64 = sqrt_price_x64,tick_current = floor(log_{1.0001}(price)).pool_state.liquidity = 0(noch keine Positionen).pool_state.fee_on = FromInput(Legacy-Standard).pool_state.dynamic_fee_infoist auf null gesetzt (Dynamic Fee deaktiviert).
CreateCustomizablePool
Empfohlen für neue Pools. Gleiche Wirkung wie CreatePool, zusätzlich mit pool-spezifischem Fee-Erhebungsmodus und optionalem Dynamic-Fee-Opt-in.
Argumente
CreatePool, zusätzlich bei enable_dynamic_fee = true:
| # | Name | W | S | Hinweise |
|---|---|---|---|---|
| N | dynamic_fee_config | Die gemeinsam genutzte Konfiguration, von der ein Snapshot erstellt wird. Muss bereits vorhanden sein. |
CreatePool. Bei enable_dynamic_fee = false wird dynamic_fee_config ignoriert.
Nachbedingungen
pool_state.fee_onwird auf die gewählteCollectFeeOn-Variante gesetzt.- Wenn Dynamic Fee aktiviert wurde:
pool_state.dynamic_fee_infowird aus der übergebenenDynamicFeeConfiginitialisiert (fünf Kalibrierungsparameter werden kopiert; Zustandsfelder auf null gesetzt). - Andernfalls:
pool_state.dynamic_fee_infobleibt null (= Dynamic Fee für diesen Pool dauerhaft inaktiv).
fee_on und das Dynamic-Fee-Aktivierungsbit werden ausschließlich bei der Pool-Erstellung gesetzt. Es gibt keinen nachträglichen Upgrade-Pfad — Pools, die über das Legacy-CreatePool erstellt wurden, können weder Dynamic Fee noch einseitige Gebühren nachträglich erhalten. Neue Deployments sollten standardmäßig diese Instruktion verwenden.
OpenPositionV2 / OpenPositionWithToken22Nft
Neue Position innerhalb eines bestehenden Pools erstellen.
Argumente
| # | Name | W | S | |
|---|---|---|---|---|
| 1 | payer | W | S | |
| 2 | position_nft_owner | |||
| 3 | position_nft_mint | W | S (keypair) | |
| 4 | position_nft_account | W | ATA des Inhabers für das NFT. | |
| 5 | metadata_account | W | Metaplex (optional, wenn with_metadata). | |
| 6 | pool_state | W | ||
| 7 | protocol_position | |||
| 8 | tick_array_lower | W | Wird erstellt, falls nicht initialisiert. | |
| 9 | tick_array_upper | W | Ebenso. | |
| 10 | personal_position | W | Wird hier erstellt. | |
| 11 | token_account_0, token_account_1 | W | Quell-ATAs des Nutzers. | |
| 12 | token_vault_0, token_vault_1 | W | ||
| 13 | rent, system_program, token_program | |||
| 14 | associated_token_program | |||
| 15 | metadata_program | Optional. | ||
| 16 | token_program_2022 | V2. | ||
| 17 | vault_0_mint, vault_1_mint | V2. | ||
| 18 | tick_array_bitmap_extension | W | V2 (falls berührt). |
products/clmm/math. Abhängig von base_flag berechnet das Programm aus liquidity oder (amount_0_max, amount_1_max) das tatsächliche L sowie die tatsächlich verbrauchten Token-Beträge.
Vorbedingungen
tick_lower < tick_upper, beide Vielfache vonpool.tick_spacing, innerhalb von[MIN_TICK, MAX_TICK].- Erforderliche Tick-Arrays übergeben und initialisiert (oder in der Transaktion über
InitTickArray-CPI erstellt). - Nutzer verfügt über mindestens
amount_0_maxundamount_1_maxin den Quell-ATAs.
personal_positionexistiert,liquidityist gesetzt,fee_growth_inside_lastwurde gespeichert.- Tick-Array-Einträge bei
tick_lowerundtick_upperaktualisiert (liquidity_gross += L,liquidity_net ± L, Fee-Growth-Snapshots gepflegt). pool_state.liquidity += L, sofern die Position im Bereich liegt (tick_lower ≤ tick_current < tick_upper).
InvalidTickIndex, NotApproved, ZeroAmountSpecified, TransactionTooLarge (bei zu vielen Tick-Arrays).
IncreaseLiquidityV2
Liquidität zu einer bereits geöffneten Position hinzufügen.
Argumente
OpenPosition, jedoch ohne den NFT-Mint (die Position existiert bereits; das NFT wird als ATA des Inhabers mit 1 Token übergeben).
Wirkung
- Überträgt
amount_0_actual/amount_1_actualvom Nutzer an die Vaults. - Erhöht
personal_position.liquidityundpool_state.liquidity(wenn im Bereich) sowieliquidity_gross/liquidity_netder Endpunkt-Ticks entsprechend. - Sammelt ausstehende Gebühren und Rewards seit dem letzten Zugriff und schreibt sie in
tokens_fees_owed_{0,1}/reward_amount_owed. Diese werden erst beiDecreaseLiquidityoderCollectRewardausgezahlt, nicht beim Erhöhen.
DecreaseLiquidityV2
Liquidität aus einer Position entfernen.
Argumente
IncreaseLiquidity.
Wirkung
- Berechnet
(amount_0, amount_1)für das entfernteLauf Basis des aktuellensqrt_price_x64. - Rechnet seit dem letzten Zugriff aufgelaufene Gebühren/Rewards ab, genau wie bei
IncreaseLiquidity. - Überträgt
amount_0 + fees_owed_0undamount_1 + fees_owed_1aus den Vaults an den Nutzer. - Vermindert die Liquiditätszähler; wenn
personal_position.liquidity == 0nach der Reduktion, ist die Position fürClosePositionfreigegeben.
amount_0_min und amount_1_min sind die Mindestbeträge, die der Nutzer nach Abzug etwaiger Token-2022-Transfergebühren auf der Ausgabeseite akzeptiert.
ClosePosition
Das Position-NFT verbrennen und PersonalPositionState schließen.
Vorbedingungen
personal_position.liquidity == 0.tokens_fees_owed_{0,1} == 0.- Alle Reward-Zähler
reward_amount_owed == 0.
- Verbrennt das NFT.
- Schließt den NFT-Mint-Account und den
personal_position-Account; die Rent wird an denpayerzurückerstattet.
SwapV2
Durchläuft die Liquiditätskurve; entweder exakter Input oder exakter Output, abhängig von is_base_input.
Argumente
| # | Name | W | S | Hinweise |
|---|---|---|---|---|
| 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 (für bestimmte Token-2022-Pfade erforderlich). | ||
| 12 | input_vault_mint, output_vault_mint | V2. | ||
| 13 | tick_array_bitmap_extension (optional) | W | Wenn der Swap in die Extension hineinläuft. | |
| 14+ | tick_array (remaining) | W | Ausreichend Arrays, um den erwarteten Swap-Bereich abzudecken. |
PoolUtils.computeAmountOutFormat oder den Quote-Endpunkt der API.
Vorbedingungen
pool_state.statuserlaubt Swaps.now >= open_time.sqrt_price_limit_x64liegt für die gewählte Richtung auf der richtigen Seite vonsqrt_price_x64.
ExceededSlippage, SqrtPriceLimitOverflow, TickArrayNotFound, LiquidityInsufficient.
Was SwapV2 intern tut, das Aufrufer wissen sollten (Release nach 2025):
- Dynamic-Fee-Zuschlag — wenn
pool.dynamic_fee_infoungleich null ist, aktualisiert das Programm den Volatilitätsakkumulator anhand der seit dem letzten Swap zurückgelegten Tick-Distanz (mit den Filter-/Decay-Regeln ausproducts/clmm/fees) und addiert einedynamic_fee_componentzurAmmConfig.trade_fee_rate. Die Gesamtgebühr ist auf 10 % begrenzt (MAX_FEE_RATE_NUMERATOR / 1_000_000). - Limit-Order-Matching — wenn der Preispfad einen Tick mit offenen Limit Orders kreuzt, füllt das Programm zuerst die verfügbare Limit-Order-Liquidität an diesem Tick (FIFO nach
order_phase) und fährt dann entlang der LP-Liquiditätskurve fort. Gefüllte Beträge aktualisierentick.unfilled_ratio_x64undtick.part_filled_orders_remainingfür die spätere Abrechnung; die Orders selbst bleiben unverändert, bis der InhaberSettleLimitOrderaufruft. - Einseitiges Fee-Routing — wenn
pool.fee_on = Token0OnlyoderToken1Only, berechnet der Swap-Schritt denselben Input-Output-Handel; die Gebühr wird dann an die konfigurierte Seite weitergeleitet. Bei Richtungen, bei denen die konfigurierte Fee-Seite die Ausgabe ist, wird die Gebühr vom Swap-Output abgezogen (der Nutzer erhältout − fee); bei Richtungen, bei denen sie der Input ist, entspricht das VerhaltenFromInput. Sieheis_fee_on_input(zero_for_one)undis_fee_on_token0(zero_for_one)aufPoolState.
Swap (V1) implementiert dieselbe Dynamic Fee, dasselbe einseitige Fee-Routing und dasselbe Limit-Order-Matching wie SwapV2; der einzige fehlende Aspekt ist die Token-2022-Unterstützung — beide Vaults müssen klassische SPL-Token sein. Pools mit einem Token-2022-Mint müssen über SwapV2 geswappt werden. Der Aggregator und das SDK bevorzugen für jedes CLMM-Leg bereits V2, sodass Aufrufer nicht nach Mint-Typ unterscheiden müssen.
OpenLimitOrder
Verkaufsorder an einem bestimmten Tick platzieren. Die Order sitzt in einer per-Tick-FIFO-Kohorte und wird gefüllt, wenn der Preis diesen Tick passiert.
Argumente
| # | Name | W | S | Hinweise |
|---|---|---|---|---|
| 1 | payer | W | S | Order-Inhaber; zahlt Rent. |
| 2 | pool_state | W | ||
| 3 | tick_array | W | Das Tick-Array, das tick_index enthält. | |
| 4 | limit_order_nonce | W | PDA. init_if_needed — wird bei der ersten Order des Nutzers unter diesem nonce_index erstellt. | |
| 5 | limit_order | W | PDA. Wird hier initialisiert. | |
| 6 | input_token_account | W | Input-ATA des Nutzers. | |
| 7 | input_vault | W | Pool-Input-Vault. | |
| 8 | input_vault_mint | Token-2022-Gebührenbehandlung. | ||
| 9 | input_token_program | SPL oder Token-2022. | ||
| 10 | system_program, rent |
tick_index % pool.tick_spacing == 0und innerhalb von[MIN_TICK, MAX_TICK].tick_indexliegt auf der richtigen Seite vonpool.tick_currentfür die gewählte Richtung (token0 verkaufen → Tick muss oberhalb des aktuellen liegen, und umgekehrt). Eine Order an einem bereits überquerten Tick würde sofort gematcht und wird abgelehnt.pool_state.statuserlaubt Limit-Order-Operationen (Bit 5).
limit_orderexistiert und hattick.order_phasesowietick.unfilled_ratio_x64zum Öffnungszeitpunkt gespeichert.tick.orders_amount += amount(in der aktuellen Kohorte).limit_order_nonce.order_nonce += 1.OpenLimitOrderEventwird ausgelöst.
InvalidLimitOrderAmount (null oder unterhalb des Pool-Minimums), InvalidTickIndex (außerhalb von [MIN_TICK, MAX_TICK] oder auf der falschen Seite von tick_current für die gewählte Richtung), TickAndSpacingNotMatch (tick_index % pool.tick_spacing != 0), OrderPhaseSaturated.
IncreaseLimitOrder
Bestehende offene Order aufstocken. Nur durch den owner der Order aufrufbar.
Argumente
OpenLimitOrder, jedoch ohne den Nonce-Account; die limit_order-PDA wird direkt übergeben.
Vorbedingungen
limit_order.owner == signer.- Die Order befindet sich noch in derselben Kohorte (
tick.order_phase == limit_order.order_phase). Hat die Kohorte bereits begonnen sich zu füllen, ist die Order teilweise abgerechnet — der Aufrufer sollte zunächstDecreaseLimitOrderoderSettleLimitOrderaufrufen, um den Status voranzubringen.
- Überträgt
amountvom Inhaber-ATA aninput_vault. limit_order.total_amount += amount;tick.orders_amount += amount.
DecreaseLimitOrder
Offene Order reduzieren oder vollständig stornieren. Zahlt den ungefüllten Rest an den Inhaber zurück, zuzüglich bereits durch frühere Teilfüllungen abgerechneter Ausgaben.
Argumente
| # | Name | 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 |
- Berechnet den gefüllten Betrag der Order aus dem
unfilled_ratio_x64der Kohorte seit der Öffnung neu. - Sendet gefüllten Output an
output_token_account. - Sendet
amountdes ungefüllten Inputs zurück aninput_token_account. - Aktualisiert
limit_orderentsprechend. Ist der verbleibende ungefüllte Rest null, schließt das Programm den Account und erstattet die Rent anownerzurück.
SettleLimitOrder
Gefüllte Output-Token an den Inhaber übermitteln, ohne den ungefüllten Rest der Order zu ändern. Nützlich, wenn auto_withdraw-Keeper lang laufende Teilfüllungen schrittweise auszahlen möchten.
Aufrufer — entweder der owner der Order oder der limit_order_admin des Programms (ein Off-Chain-operativer Hot Wallet, der eine automatisierte Keeper-Schleife betreibt). Der Keeper hat keine weitere Autorität — er kann Nutzergelder ausschließlich als gefüllten Output an die owner-ATA der Order weiterleiten.
Accounts
| # | Name | W | S | |
|---|---|---|---|---|
| 1 | signer | S | owner oder limit_order_admin | |
| 2 | pool_state | |||
| 3 | tick_array | |||
| 4 | limit_order | W | ||
| 5 | output_token_account | W | Output-ATA des Inhabers. | |
| 6 | output_vault | W | Pool-Output-Vault. | |
| 7 | output_vault_mint | |||
| 8 | output_token_program |
- Berechnet den kumulativen geschuldeten Output anhand von
(limit_order.unfilled_ratio_x64, tick.unfilled_ratio_x64). - Überträgt die Differenz an
output_token_account. - Aktualisiert
limit_order.settled_output. - Schließt die Order nicht; sie bleibt für verbleibenden Input offen.
CloseLimitOrder
Vollständig ausgeführten Order-Account schließen. Die Rent wird stets an limit_order.owner zurückgegeben, unabhängig davon, wer unterschreibt.
Aufrufer — entweder owner oder limit_order_admin.
Vorbedingungen
- Die Order hat einen ungefüllten Rest von null (entweder wurde
amount == total_amountgefüllt und abgerechnet, oder der Inhaber hat die Order zuvor auf null reduziert und vergessen zu schließen).
- Schließt
limit_order; Rent wird anlimit_order.ownergesendet.
CreateDynamicFeeConfig (Admin)
Wiederverwendbaren Parametersatz unter einem u16-Index anlegen.
Argumente
| # | Name | W | S | Hinweise |
|---|---|---|---|---|
| 1 | owner | W | S | Fest programmierter Admin-Pubkey. |
| 2 | dynamic_fee_config | W | PDA, wird hier initialisiert. | |
| 3 | system_program |
InvalidDynamicFeeConfigParams, wenn decay_period <= filter_period oder ein Feld mit Wert 0 außerhalb des gültigen Bereichs liegt.
UpdateDynamicFeeConfig (Admin)
Bestehende DynamicFeeConfig bearbeiten. Pools, die die Konfiguration bereits zum Erstellungszeitpunkt gespeichert haben, werden nicht rückwirkend aktualisiert; nur neu erstellte Pools, die auf diese Konfiguration verweisen, übernehmen die neuen Werte.
Argumente — dieselben fünf Kalibrierungsfelder wie bei CreateDynamicFeeConfig (filter_period, decay_period, reduction_factor, dynamic_fee_control, max_volatility_accumulator); index wird bei der Erstellung festgelegt und hier nicht erneut übergeben.
CollectProtocolFee / CollectFundFee
Identische Struktur wie CPMMs CollectProtocolFee / CollectFundFee. Der Unterzeichner muss AmmConfig.owner / AmmConfig.fund_owner entsprechen. Aufgelaufene Protokoll-/Fondsgebühren werden aus den Pool-Vaults an einen Empfänger übertragen; die entsprechenden Felder PoolState.protocol_fees_* / fund_fees_* werden auf null gesetzt.
InitializeReward
Neuen Reward-Stream an einen Pool anhängen. Maximal 3 Streams können gleichzeitig aktiv sein.
Argumente
| # | Name | W | S | |
|---|---|---|---|---|
| 1 | reward_funder | W | S | |
| 2 | funder_token_account | W | ||
| 3 | amm_config | |||
| 4 | pool_state | W | ||
| 5 | operation_state | CLMM-Operation-State-PDA, der die Reward-Erstellung steuert. | ||
| 6 | reward_token_mint | |||
| 7 | reward_token_vault | W | Wird hier initialisiert. | |
| 8 | reward_token_program | |||
| 9 | system_program, rent |
- Weniger als 3 Streams derzeit am Pool aktiv.
- Der Funder hinterlegt im Rahmen dieser Instruktion
total_emission = emissions_per_second × (end_time − open_time)Reward-Token im Vault. - Reward-Mint gemäß
operation_stateauf der Whitelist.
SetRewardParams
Bestehenden Reward-Stream verlängern, auffüllen oder die Emissionsrate ändern. Wird typischerweise vom Pool-Ersteller oder dem Raydium-Multisig aufgerufen. Die Einschränkungen sind on-chain: end_time kann in der Regel verlängert oder die Emissionen erhöht werden, eine rückwirkende Verringerung ist nicht möglich. Prüfen Sie die Inhaberliste von operation_state.
UpdateRewardInfos
Reine Buchhaltung — rechnet reward_growth_global_x64 durch Multiplikation von emissions_per_second × Δt / liquidity auf den aktuellen Zeitpunkt ab. Wird intern von jeder liquiditätsberührenden Instruktion aufgerufen. Als eigenständige Instruktion verfügbar, da externe Akteure (UIs, Cranks) diese Abrechnung manchmal manuell auslösen möchten.
CollectReward
Position-Inhaber beansprucht ausstehende Reward-Token.
Accounts
| # | Name | W | S | |
|---|---|---|---|---|
| 1 | nft_owner | S | ||
| 2 | nft_account | ATA des Inhabers mit dem Position-NFT. | ||
| 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 |
- Rechnet Reward-Wachstum ab (gleiche Logik wie bei Gebühren).
- Überträgt den geschuldeten Betrag an die Empfänger-ATA;
reward_amount_owed[i]wird auf null gesetzt.
Zustandsänderungsmatrix
| Instruktion | pool.liquidity | pool.fee_growth_global | pool.reward_growth_global | personal_position.liquidity | Tick-Array |
|---|---|---|---|---|---|
CreatePool | 0 | 0 | — | — | — |
OpenPosition | + wenn im Bereich | — | — | neu | liquidity_gross/net hinzufügen |
IncreaseLiquidity | + wenn im Bereich | ausstehend abrechnen | ausstehend abrechnen | + | anpassen |
DecreaseLiquidity | − wenn im Bereich | ausstehend abrechnen | ausstehend abrechnen | − | anpassen |
ClosePosition | — | — | — | aufgelöst | — |
SwapV2 | ± bei Kreuzungen | + | — | — | kreuzen & outside umkehren; Limit-Order-Kohorten matchen |
OpenLimitOrder | — | — | — | — | orders_amount += amount am Ziel-Tick |
IncreaseLimitOrder | — | — | — | — | orders_amount += amount |
DecreaseLimitOrder | — | — | — | — | orders_amount -=, kann Kohorte schließen |
SettleLimitOrder | — | — | — | — | — (Tick nur lesend) |
CloseLimitOrder | — | — | — | — | — |
CreateCustomizablePool | 0 | 0 | — | — | — |
UpdateRewardInfos | — | — | + | — | — |
CollectReward | — | — | ausstehend abrechnen | — | — |
Weiterführende Ressourcen
products/clmm/code-demos— ausführbare TypeScript-Beispiele.products/clmm/fees— Details zur Gebühren- und Reward-Akkumulation.reference/error-codes— vollständige CLMM-Anchor-Fehlertabelle.
raydium-io/raydium-clmm—programs/amm/src/instructions- Raydium SDK v2 —
@raydium-io/raydium-sdk-v2

