> ## 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.

# 2026-09-30 — CLMM: Anchor 1.0, excess-lamports recovery, and fixed fee owners

> CLMM, Anchor 1.0.2'ye Agave 3.1.10 üzerinde geçiş yapıyor ve SIMD-0437 tarafından serbest bırakılan kirayı geri almak için admin CollectExcessLamports talimatını ekliyor; havuz PDA'sı imzalayan olarak bir seferde bir havuz taranıyor. CreateAmmConfig artık imzalayan yerine sabit kodlanmış protokol ve fon ücret sahiplerini yazıyor. Hata 6052 ekleniyor. Hiçbir kullanıcı tarafından kullanılan talimat veya hesap düzeni değişmedi.

<Info>
  **Bu sayfa yapay zekâ tarafından otomatik olarak çevrilmiştir. İngilizce sürüm esas alınır.**

  [İngilizce sürümü görüntüle →](/reference/changelog/2026-09-30-clmm-anchor-1-and-excess-lamports)
</Info>

<Info>
  Bu giriş, yaklaşan bir CLMM program güncellemesini kapsamaktadır. Dağıtımdan önce `raydium-clmm`'nin `chore/upgrade-anchor` dalında (head `a72f9e1`) doğrulanmıştır. Yeni talimatı veya değişen `CreateAmmConfig` davranışını kullanmadan önce dağıtılan programı doğrulayın.
</Info>

CLMM artık CPMM ve LaunchLab'ın [2026-09-09](/tr/reference/changelog/2026-09-09-cpmm-anchor-1-and-excess-lamports) tarihinde sevk ettiği aynı framework güncellemesini alıyor. Anchor `0.32.1`'den `=1.0.2`'ye geçiyor ve derleme araç zinciri Agave 2.3.0'dan 3.1.10'a geçiyor. İki yönetici tarafı değişikliği bununla birlikte geliyor: yeni bir `CollectExcessLamports` talimatı ve `CreateAmmConfig`'de sabit ücret sahipleri.

Bir tüccar, bir LP, bir limit-order kullanıcısı veya bir havuz oluşturucu tarafından çağrılan her talimat, hesap listesini, argümanlarını ve matematiksel işlemlerini korur.

## Entegratörler için TL;DR

* **Hiçbir kullanıcı tarafından kullanılan talimat değişmedi.** `CreatePool`, `CreateCustomizablePool`, `CreatePermissionedPool`, her `OpenPosition*` / `IncreaseLiquidity*` / `DecreaseLiquidity*` yolu, `ClosePosition`, `Swap` / `SwapV2` / `SwapRouterBaseIn`, beş limit-order talimatı ve ödül talimatları tel üzerinde bayt-özdeştir. Hiçbir hesap düzeni değişmedi.
* **Bir talimat ekleniyor: `CollectExcessLamports`.** Bu yalnızca yönetici tarafından kullanılabilir ve hiçbir argüman almaz. **Çağrı başına bir havuzu tarar**: havuzun kendi `PoolState`'i her zaman taranır ve havuz PDA'sı `remaining_accounts`'ta geçirdiğiniz kasalarını imzalar. `remaining_accounts`'taki diğer herhangi bir CLMM'ye ait hesap da taranır. Bkz. [`products/clmm/instructions`](/tr/products/clmm/instructions#collectexcesslamports).
* **Bir hata kodu ekleniyor: `6052` `LamportsCalculateError`.** Kodlar `6000`–`6051` değişmemiştir.
* **`CreateAmmConfig` artık imzalayanı `owner` / `fund_owner`'a kopyalamıyor.** Yeni konfigürasyonlar sabit kodlanmış `protocol_fee_owner` ve `fund_fee_owner` anahtarlarını alıyor. Mainnet'te bunlar zaten tüm 21 mevcut konfigürasyonda depolanan aynı iki anahtardır. **Mevcut `AmmConfig` hesapları dokunulmamış kalıyor**, bu nedenle alanları hesaptan okumaya devam edin.
* **IDL'nizi yenileyin.** Bir talimat ve bir hata varyantı ekler; 39 talimat ve 53 hata için.
* **Artık CPMM ve CLMM'yi bir crate'e koyabilirsiniz.** Her iki depo da `chore/upgrade-anchor` dallarında `anchor-lang` / `anchor-spl` `=1.0.2`'yi sabitlediğinden, tek bir program her ikisine de CPI yapabilir. Bkz. [`sdk-api/rust-cpi`](/tr/sdk-api/rust-cpi#cargo-dependencies).
* **TypeScript istemci paketi yeniden adlandırılıyor.** Test paketi `@coral-xyz/anchor` `0.32.1`'den `@anchor-lang/core` `1.0.2`'ye geçiyor.

## `CollectExcessLamports`

[SIMD-0437](/tr/solana-fundamentals/rent-and-reclaimable-rent)'nin 1. adımı mainnet'te 3 Eylül 2026'da etkinleştirildi. Bir adımdan önce oluşturulan her CLMM hesabı artık aşırı finanse edilmiş ve yalnızca CLMM programı sahip olduğu bir hesaptan lamport'ları çıkarabiliyor. Bu havuz kasalarını, ödül kasalarını, `PoolState`, `AmmConfig`, `ObservationState`, `TickArrayBitmapExtension` ve geri kalanını kapsar.

Talimat dört sabit hesap alır, ardından `remaining_accounts`'ta herhangi bir sayıda kaynak hesap:

| # | Hesap                            | Rol                                                                                                                                                                 |
| - | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 1 | `collect_lamports_wallet` (W, S) | İmzalayan ve hedef. Paylaşılan program yöneticisi veya özel CLMM collect-lamports cüzdanı olmalıdır, aksi takdirde çağrı `NotApproved` (`6000`) ile başarısız olur. |
| 2 | `pool_state` (W)                 | Token-program CPI'larını PDA tohumları aracılığıyla imzalar ve her zaman kendisi taranır.                                                                           |
| 3 | `token_program`                  | SPL Token.                                                                                                                                                          |
| 4 | `token_program_2022`             | Token-2022. Her ikisi de gereklidir; program kaynak hesaba göre birini seçer.                                                                                       |

**Havuz imzalayan otorite, program genelinde bir PDA değildir.** CPMM bir global `vault_and_lp_mint_auth_seed` otoritesiyle imzalar. CLMM token kasaları `PoolState`'e aittir, bu nedenle tek bir çağrı yalnızca slot 2'de geçirilen havuzu imzalayabilir. Her token-program kaynağının o havuzu otoritesi olarak olması gerekir: `token_vault_0`, `token_vault_1` veya havuzun ödül kasalarından biri. Başka bir havuzdan bir token hesabı veya bir kullanıcının token hesabı, token programının sahip kontrolünü başarısız kılar ve tüm talimatı geri alır. Program bunu atlamaz. Position NFT mintleri de taranabilir değildir, çünkü mint otoritesi pozisyon açıldığında iptal edilir. Havuzu havuz tarafından tarayın.

Talimat iki geçiş yapar ve bu sıra sabittir:

1. **Token-program CPI'ları önce.** SPL Token veya Token-2022'ye ait her kaynak için, yerel olmayan bir hesap `WithdrawExcessLamports` (discriminant `38`) alır. Yerel bir wSOL kasası `SyncNative` → `UnwrapLamports` (discriminant `45`) tur-dönüşünü alır; bu, sarılı bakiyenin eşitleme öncesi değerine eşit olduğunu kontrol etmekle sona erer. Eşit değilse, çağrı `LamportsCalculateError` ile başarısız olur. **SOL tarafı kasası tam likiditeyi korur** ve tarama genelinde hiçbir swap teklifi değişmez.
2. **Doğrudan borçlandırmalar ikinci.** Geçiş 2, `pool_state`'i ilk olarak borçlandırır, ardından CLMM programına ait her kaynağı `rent.minimum_balance(data_len)`'e kadar borçlandırır.

Başka bir programa ait kaynaklar sessizce atlanır. Bu iki geçiş sırası, CPMM'nin [2026-09-19](/tr/reference/changelog/2026-09-19-cpmm-creator-fee-protocol-share) tarihinde benimsediği sıradır. CLMM bunu ilk sürümünden itibaren kullanıyor. Bir PDA bir CPI'dan önce borçlandırılırsa, çalışma zamanı `UnbalancedInstruction` ile iptal eder, bu nedenle arayanlar kaynakları herhangi bir sırada geçirebilir.

<Warning>
  **Program'a ait geçiş, bir hesabın hangi havuza veya kullanıcıya ait olduğunu kontrol etmez.** CLMM programına ait herhangi bir hesap uygun olur; bunlar arasında bazıları bir kullanıcının kirayı ödediği hesaplar da vardır: `PersonalPositionState`, `LimitOrderState` ve `TickArrayState`. Yalnızca kirayı muaf minimum tutarın üzerindeki fazlalık hareket eder. Hesap verilerini korur ve kirayı muaf kalır. Bir pozisyon veya sipariş daha sonra kapatıldığında, program o noktada hesabın tuttuğu bakiyeyi geri öder. Bir taramadan sonra, bu bakiye geçerli kirayı minimumudur.
</Warning>

Cüzdan adresleri [`reference/program-addresses`](/tr/reference/program-addresses#excess-lamports-collection-wallets) içinde listelenmiştir.

## `CreateAmmConfig` sabit ücret sahiplerini yazıyor

Bu sürümden önce, `create_amm_config` her iki ücret-sahip alanını çağıran imzalayandan ayarladı:

```rust theme={null}
amm_config.owner      = ctx.accounts.owner.key();
amm_config.fund_owner = ctx.accounts.owner.key();
```

Artık programın kendi sabitlerini yazıyor:

```rust theme={null}
amm_config.owner      = crate::protocol_fee_owner::ID;
amm_config.fund_owner = crate::fund_fee_owner::ID;
```

`CreateAmmConfig` hala `crate::admin::ID`'ye kilitlidir. Bu sürümden önce, her yeni ücret katmanı yöneticiye her iki alanda başladı ve `UpdateAmmConfig` param `3` / `4` ile döndürülmesi gerekiyordu. Artık operasyonel cüzdanlarla başlıyor. Mainnet'te sabitler zaten tüm 21 mevcut konfigürasyonda `owner` / `fund_owner` olarak depolanan aynı anahtarlardır. Program artık operasyonların elle ayarlamak için kullandığı bir değeri yazıyor.

Koleksiyon imzalayanları değişmez. `CollectProtocolFee`, `amm_config.owner` **veya** `crate::admin::ID`'yi kabul eder ve `CollectFundFee`, `amm_config.fund_owner` **veya** `crate::admin::ID`'yi kabul eder; bu sürümden önce ve sonra.

Devnet'te her iki sabit aynı anahtara çözülür. Bkz. [`reference/program-addresses`](/tr/reference/program-addresses#clmm-fee-owner-wallets).

<Warning>
  **Bu bir göç değildir.** Her mevcut `AmmConfig`, zaten sahip olduğu `owner` ve `fund_owner`'ı korur. Alanları okuyun; sabitlerden veya yönetici anahtarından herhangi birini sabit kodlamayın.
</Warning>

## Araç zinciri ve bağımlılık değişiklikleri

| Öğe                                                                                   | Önce                                       | Sonra                                                                                                  |
| ------------------------------------------------------------------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------ |
| `anchor-lang` / `anchor-spl` (program)                                                | `=0.32.1`                                  | `=1.0.2`                                                                                               |
| `Anchor.toml` araç zinciri                                                            | `[tool-chain]`, `solana-version = "2.3.0"` | `[toolchain]`, `solana_version = "3.1.10"`                                                             |
| Çalışma alanı `Cargo.toml`                                                            | —                                          | `[workspace.metadata.cli] solana = "3.1.10"`                                                           |
| `anchor-client` / `anchor-lang` (istemci crate)                                       | `0.32.1`                                   | `1.0.2`                                                                                                |
| `solana-sdk` / `-client` / `-account-decoder` / `-transaction-status` (istemci crate) | `2.3.0`                                    | `3`                                                                                                    |
| `spl-token` / `spl-token-2022` (istemci crate)                                        | `7.0.0` / `7.0.0`                          | `9.0` / `11.0`                                                                                         |
| `spl-associated-token-account` / `spl-memo` / `spl-token-client` (istemci crate)      | `6.0.0` / `6.0.0` / `0.14.0`               | `8.0` / `7.0` / `0.19`                                                                                 |
| `mpl-token-metadata` (istemci crate)                                                  | `5.1.0`                                    | `=5.1.2-alpha.2`                                                                                       |
| Yeni istemci crate'leri                                                               | —                                          | `solana-system-interface` `3.2`, `solana-commitment-config` `3`, `solana-compute-budget-interface` `3` |
| Docker görüntüsü                                                                      | `solanafoundation/anchor:v0.32.1`          | `solanafoundation/anchor:v1.0.2`                                                                       |
| `@coral-xyz/anchor`                                                                   | `0.32.1`                                   | `@anchor-lang/core` `1.0.2` ile değiştirildi                                                           |
| `typescript`                                                                          | `^4.3.5`                                   | `^5.6.3`                                                                                               |

Anchor 1.0 değişiklikleri CPI çağrı sitelerinde, CPMM entegratörlerinin zaten işlediği değişikliklerle aynıdır. `CpiContext::new` programın `AccountInfo`'su yerine `Pubkey`'ini alır ve `Context`'in dört yaşam parametresi yerine bir tane vardır. İstemci crate'inde, `RequestBuilder::instructions()` artık `Result` olmadan `Vec<Instruction>` döndürür ve `system_program` `solana-system-interface`'e taşındı. Bkz. [`sdk-api/rust-cpi`](/tr/sdk-api/rust-cpi#cargo-dependencies).

Zincir üzerinde hiçbir etkisi olmayan derleme sistemi ayrıntıları:

* **Localnet yöneticisi.** `localnet` özelliği artık taahhüt edilen bir fixture tarafından desteklenen sabit bir test anahtarını derlemez. Bunun yerine, `yarn test:local-admin`'in yerel cüzdanınızdan ayarladığı `CLMM_LOCALNET_ADMIN` ortam değişkeninden derleme zamanında yöneticiyi okur. Fixture'ın `.gitignore` istisnası gitti.
* **Sürüm profili.** `programs/amm/Cargo.toml`'deki yinelenen `[profile.release]` bloğu silindi. Cargo, çalışma alanı kökü dışında `[profile]`'ı yok sayar, bu nedenle kök bloğu zaten etkili olan bloktu ve program düzeyindeki `panic = "abort"` hiçbir zaman uygulanmadı.
* **Anchor.toml.** `seeds = false`, `resolution = true` artı `skip-lint = false` olur ve eski `[registry]` URL'si kaldırılır.
* **Lints.** `programs/amm/Cargo.toml`, Anchor ve Solana makroları tarafından yayılan özellik cfg'leri için bir `[lints.rust] unexpected_cfgs` izin listesi ekler.
* **README.** Bu dalda README hala size `rustup default 1.86.0` ve `avm install 0.32.1`'i `coral-xyz/anchor`'dan çalıştırmanızı söyler. Bunun yerine `Anchor.toml` ve [`solana-fundamentals/toolchain`](/tr/solana-fundamentals/toolchain) izleyin.

## Değişmeyen şeyler

* **Her hesap düzeni.** `PoolState`, `AmmConfig`, `TickArrayState`, `TickArrayBitmapExtension`, `PersonalPositionState`, `ObservationState`, `LimitOrderState`, `DynamicFeeConfig`, `Permission` ve `SupportMintAssociated` aynı boyutları ve ofsetleri korur.
* **Hata kodları `6000`–`6051`.**
* **Swap, likidite, ücret, dinamik ücret ve limit-order matematiği.** `CollectExcessLamports`, hiçbir havuzun rezervlerinin parçası olmayan lamport'ları hareket ettirir.
* **Position NFT dondurma** [2026-08-17](/tr/reference/changelog/2026-08-17-clmm-restricted-position-nft-freeze) tarihinden, havuz-olarak-dondurma-otoritesi kuralı ve `ClosePosition` çözme yolu dahil.
* **`spl_memo`.** `DecreaseLiquidityV2`'nin memo-program kısıtlaması `spl_memo::id()`'den `anchor_spl::memo::ID`'ye taşındı. Her ikisi de aynı adresi adlandırır; `anchor-spl` sadece dışa aktarımı yeniden adlandırdı.
* **Program ID'si.**

## Güncellenen sayfalar

* `products/clmm/instructions`: yükseltme başlığı; `CollectExcessLamports` bölümü hesap listesi, iki geçiş gönderme tablosu ve havuz başına kapsamı ile; envanter, yönetici-kapılı ve durum-değişim-matris satırları; `CollectProtocolFee` / `CollectFundFee` üzerinde ücret-sahip notu.
* `products/clmm/accounts`: `AmmConfig` sahip yorumları ve `CreateAmmConfig`'in ne yazacağı hakkında bir not.
* `products/clmm/code-demos`: sürüm başlığı ve Rust CPI iskeletinin Anchor 1.0'a taşınması.
* `products/cpmm/code-demos`: "CLMM ile bir crate paylaşamaz" notu kaldırıldı.
* `reference/error-codes`: `6052` belgelendi.
* `reference/program-addresses`: yeni "CLMM ücret-sahip cüzdanları" bölümü; CLMM "Excess-lamports koleksiyonu cüzdanları"'na eklendi.
* `sdk-api/rust-cpi`, `sdk-api/anchor-idl`, `solana-fundamentals/toolchain`: `raydium-clmm` için Anchor 1.0 sabitlemeleri ve crate-split uyarısı emekli oldu.
* `solana-fundamentals/rent-and-reclaimable-rent`: CLMM "Raydium programlarının kendi tarafında taradığı şeyler"'e eklendi.
* `security/admin-and-multisig`: CLMM excess-lamports toplayıcı rolü.
* `protocol-overview/versions-and-migration`: CLMM yükseltme geçmişi madde işareti.
