> ## 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-09 — CPMM: Anchor 1.0, excess-lamports recovery, and fixed fee owners

> CPMM, Agave 3.1.10 üzerinde Anchor 1.0.2'ye geçiş yapıyor ve SIMD-0437 tarafından serbest bırakılan kira için bir admin CollectExcessLamports talimatı ekliyor. CreateAmmConfig artık imzalayanın yerine sabit kodlanmış protokol ve fon ücret sahiplerini yazıyor, dört adresli Token-2022 mint beyaz listesi kaldırılıyor ve ClosePermissionPda özel hibe yetkilisini kabul ediyor. Hata 6015 ekleniyor.

<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-09-cpmm-anchor-1-and-excess-lamports)
</Info>

<Info>
  Bu giriş, yaklaşan bir CPMM program güncellemesini kapsamaktadır. Dağıtımdan önce yerel yayın dalına karşı doğrulanmıştır. Yeni talimatı veya değiştirilmiş `CreateAmmConfig` davranışına güvenmeden önce dağıtılan programı doğrulayın.
</Info>

CPMM'nin ana değişikliği bir çerçeve taşımasıdır: Anchor `0.32.1` ile `=1.0.2` arasında ve derleme araç zinciri Agave 2.3.0'dan 3.1.10'a. Bununla birlikte dört davranış değişikliği geliyor; bunlardan üçü yalnızca yönetici araçlarını ilgilendiriyor ve biri — mint beyaz listesi kaldırılması — **yeni** bir havuz için hangi Token-2022 mintlerinin kullanılabileceğini değiştiriyor.

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

## Entegratörler için TL;DR

* **Kullanıcıya yönelik hiçbir talimat değişmedi.** `Initialize`, `InitializeWithPermission`, `Deposit`, `Withdraw`, `SwapBaseInput`, `SwapBaseOutput` ve dört `Collect*Fee` yolu bayt-özdeş. Hiçbir hesap düzeni değişmedi.
* **Bir talimat ekleniyor: `CollectExcessLamports`.** Yalnızca yönetici, argüman yok, geçilen hesaplar `remaining_accounts` olarak. CPMM tarafından kontrol edilen kasalardan, LP mintlerinden ve PDA'lardan kira-muaf minimumun üzerindeki lamportları döndürür ve başka hiçbir şeye dokunmaz. Bkz. [`products/cpmm/instructions`](/tr/products/cpmm/instructions#collectexcesslamports).
* **Bir hata kodu ekleniyor: `6015` `LamportsCalculateError`.** Kodlar `6000`–`6014` değişmedi.
* **`CreateAmmConfig` artık imzalayanı ücret-sahip alanlarına kopyalamıyor.** Yeni konfigürasyonlar sabit kodlanmış `protocol_fee_owner` ve `fund_fee_owner` anahtarlarını alıyor. **Mevcut `AmmConfig` hesapları dokunulmamış** — hesaptan `protocol_owner` / `fund_owner` okumaya devam edin, her iki değeri de varsaymayın.
* **Sabit kodlanmış dört adresli Token-2022 `MINT_WHITELIST` gitti.** `SupportMintAssociated` PDA kayıt defteri artık CPMM'nin uzantı izin listesini atlayan tek yolu. Mevcut havuzlar etkilenmedi; kontrol yalnızca havuz oluşturma sırasında çalışır.
* **`ClosePermissionPda` özel izin-PDA oluşturucu yetkilisini kabul ediyor,** yalnızca paylaşılan yöneticiyi değil.
* **Bir IDL yenilemesi gereklidir.** Bir yeni talimat, bir yeni hata varyantı.
* **TypeScript istemci paketi yeniden adlandırılıyor.** `@coral-xyz/anchor` `0.32.1`'de dondurulmuş; Anchor 1.x istemcisi `@anchor-lang/core` olarak yayınlanıyor.

## `CollectExcessLamports`

[SIMD-0437](/tr/solana-fundamentals/rent-and-reclaimable-rent)'nin 1. adımı 3 Eylül 2026'da mainnet'e indi ve kira-muaf minimumu %9 oranında azalttı; daha dört adım geliyor. Bir adımdan önce oluşturulan her CPMM havuz kasası, LP mintı, `PoolState`, `AmmConfig`, `ObservationState`, `Permission` ve `SupportMintAssociated` hesabı artık aşırı finanse edilmiş ve programa ait bir hesaptaki lamportlar yalnızca o program tarafından taşınabilir.

Talimat dört sabit hesap alıyor — imzalayan/hedef cüzdan, `vault_and_lp_mint_auth_seed` yetkilisi PDA ve **her iki** token programı — ardından `remaining_accounts` içinde herhangi sayıda kaynak hesap. Her kaynak hesabın sahibine göre gönderir: bir token hesabı veya mint için token programının `WithdrawExcessLamports` (discriminant `38`) için bir CPI, bir CPMM'ye ait PDA için doğrudan borç ve başka her şeyi sessizce atlar.

Sarılı SOL anlaşılmaya değer bir durumdur. Yerel bir token hesabının lamport bakiyesi *onun* token bakiyesidir, bu nedenle her iki token programı da birinde `WithdrawExcessLamports` reddeder. CPMM bunun yerine `SyncNative` CPI'ı yapar (bağışlanan fazlalığı sarılı `amount` içine katlayarak), miktarın ne kadar büyüdüğünü ölçer, tam o delta için `UnwrapLamports` (discriminant `45`) yapar ve ardından sarılı bakiyenin ön-senkronizasyon değerine eşit olmasını gerektirir — eşit değilse `LamportsCalculateError`. **Bir SOL tarafı havuz kasası bir tarama yoluyla tam likiditeyi korur** ve hiçbir LP bir tarama arasında fiyat değişikliği görmez.

İmzalayan, paylaşılan program yöneticisi veya özel bir lamport-toplama cüzdanı olabilir; adresler [`reference/program-addresses`](/tr/reference/program-addresses#excess-lamports-collection-wallets) içindedir.

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

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

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

Şimdi programın kendi sabitlerini yazıyor:

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

`CreateAmmConfig` `crate::admin::ID` ile kapılandığından, pratik etki, yeni oluşturulan bir ücret katmanının başından itibaren yönetici multisig yerine özel operasyonel cüzdanlar tarafından taranması ve yöneticinin `UpdateAmmConfig` param `3` veya `4` aracılığıyla alanı döndürmeden önce az önce oluşturduğu bir konfigürasyondan toplayamamasıdır.

İki sabit, programın adreslerinin geri kalanı ile aynı devnet/mainnet `cfg` modelini izler ve devnet'te her ikisi de aynı anahtara çözülür. Bkz. [`reference/program-addresses`](/tr/reference/program-addresses#cpmm-fee-owner-wallets).

<Warning>
  **Bu bir geçiş değildir.** Zaten var olan her `AmmConfig`, oluşturulduğu `protocol_owner` ve `fund_owner` ile ne olursa olsun tutar. Yeni sabitleri sabit kodlamaya başlayan bir toplama aracı eski konfigürasyonlarda başarısız olur ve "yönetici anahtarını" varsayan bir araç yeni olanlarda başarısız olur. Alanları okuyun.
</Warning>

## Token-2022 mint beyaz listesi kaldırıldı

`is_supported_mint` daha önce mint'in uzantılarını yinelemeden önce dört adresli sabit kodlanmış bir `MINT_WHITELIST` üzerinde kısa devre yapardı. Bu dizi — ve her çağrıda ondan oluşturulan `HashSet` — silindi. Kalan şey:

1. Eski SPL Token mintleri koşulsuz olarak geçer.
2. `[b"support_mint", mint]` konumunda başlatılmış bir `SupportMintAssociated` PDA'sı olan bir mint koşulsuz olarak geçer.
3. Aksi takdirde mint üzerindeki her uzantı `TransferFeeConfig`, `MetadataPointer`, `TokenMetadata`, `InterestBearingConfig`, `ScaledUiAmount` içinden biri olmalıdır.

Kayıt defteri PDA bir süredir programda, kendi `CreateSupportMintAssociated` / `CloseSupportMintAssociated` çifti ve paylaşılan yönetici ile birlikte kendi özel yetkilisi ile ve hem `Initialize` hem de `InitializeWithPermission` içinden danışılıyor. Statik diziyi kaldırmak, bir mintı eklemenin artık bir program yükseltmesi yerine tamamen zincir üstü bir eylem olması anlamına geliyor — bu da asıl nokta.

**Mevcut havuzlar etkilenmedi**, çünkü mint kontrolü yalnızca havuz oluşturma sırasında çalışır. Değişen şey, dört eski beyaz listeye alınmış mintlerden biri için *yeni* bir CPMM havuzu oluşturmanın, o mintin bir kayıt defteri PDA'sı olmasını gerektirmesidir — önemli olanlar mainnet'te zaten var. Tam resim, kayıt defterinin ne yaptığını ve ne yapmadığını da içeren, [`reference/token-2022-support`](/tr/reference/token-2022-support#bypass-paths) içindedir.

## `ClosePermissionPda` imzalayan genişletme

`CreatePermissionPda` zaten paylaşılan yöneticiyi veya özel bir izin-PDA oluşturucu yetkilisini kabul ederken, `ClosePermissionPda` yönetici ile bir `address =` kısıtlaması ile sabitlenmişti. Kapatma yolu şimdi aynı çifti alıyor:

```rust theme={null}
constraint = (owner.key() == crate::admin::ID
           || owner.key() == crate::create_permission_pda_owner::ID) @ ErrorCode::InvalidOwner
```

Yani bir hibe veren yetki, multisig aracılığıyla yönlendirmeden de iptal edebilir. Yetkisiz bir imzalayan üzerindeki hata her iki şekilde de `InvalidOwner` (`6001`) — eski `address =` kısıtlaması zaten bu özel hatayı taşıyordu — bu nedenle yalnızca kabul edilen imzalayanlar seti genişledi.

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

| Öğe                                                                                     | Önce                              | Sonra                                        |
| --------------------------------------------------------------------------------------- | --------------------------------- | -------------------------------------------- |
| `anchor-lang` / `anchor-spl`                                                            | `0.32.1`                          | `=1.0.2`                                     |
| `Anchor.toml` `solana_version`                                                          | `2.3.0`                           | `3.1.10`                                     |
| `solana-sdk` / `-client` / `-account-decoder` / `-transaction-status` (istemci sandığı) | `2.3.0`                           | `3.0`                                        |
| `anchor-client` / `-lang` / `-spl` (istemci sandığı)                                    | `0.32.1`                          | `=1.0.2`                                     |
| README: `rustup default`                                                                | `1.81.0`                          | `1.91.0`                                     |
| README: Solana yükleyicisi                                                              | `release.anza.xyz/v2.1.0`         | `release.anza.xyz/v3.1.10`                   |
| README: `avm install`                                                                   | `0.31.0`                          | `1.0.2` (artı `avm use 1.0.2`)               |
| README: Anchor deposu                                                                   | `coral-xyz/anchor`                | `solana-foundation/anchor`                   |
| 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 |
| `@solana/spl-token`                                                                     | `^0.4.8`                          | `^0.4.14`                                    |
| `typescript`                                                                            | `^4.3.5`                          | `^5.6.3`                                     |

Anchor 1.0, her CPI çağrı sitesinde iki şeyi değiştirir; bu, kendi programınızdan CPMM'yi entegre ederseniz önemlidir: `CpiContext::new` programın `AccountInfo` yerine `Pubkey` alır ve `Context` dört yaşam parametresi yerine bir taneye sahiptir. İstemci tarafında `RequestBuilder::instructions()` `Result<...>` yerine `Vec<Instruction>` döndürür, `CommitmentConfig` `solana_sdk` yerine `anchor_client` gelir ve `spl-associated-token-account` 8.0 adres yardımcılarını `::address` altına ve program kimliğini `::program::ID` altına taşıdı. Bkz. [`sdk-api/rust-cpi`](/tr/sdk-api/rust-cpi#cargo-dependencies).

İki derleme sistemi detayı, hiçbiri zincir üstü etkisi olmayan: program sandığı, yönetici-kapılı testlerin gerçekten imzalayabilmesi için `CPSWAP_LOCALNET_ADMIN` ortam değişkeninden yerel cüzdanı `admin` olarak derleyen bir `localnet` özelliği bildirir (`yarn test:local-admin` bunu bağlar) ve `programs/cp-swap/Cargo.toml` içindeki yinelenen `[profile.release]` bloğu silindi. Cargo, çalışma alanı kökü dışında `[profile]` yok sayar, bu nedenle kök bloğu zaten yürürlükte olan — program düzeyindeki bloğun `panic = "abort"` hiçbir zaman uygulanmadığı gerçeği de dahil olmak üzere.

## Değişmeyen şey

* **Her hesap düzeni.** `PoolState`, `AmmConfig`, `ObservationState`, `Permission`, `SupportMintAssociated` — aynı boyutlar, aynı ofsetler.
* **Hata kodları `6000`–`6014`.**
* **Uzantı izin listesinin kendisi.** Hala aynı beş uzantı.
* **Ücret oranları, ücret tahakkuku ve eğri.** `CollectExcessLamports` hiçbir havuzun rezervlerinin parçası olmayan lamportları taşır.
* **`spl_memo`.** `Withdraw`'ın memo-program kısıtlaması `spl_memo::id()` ile `anchor_spl::memo::ID` arasında taşındı — yeniden adlandırılan `anchor-spl` dışa aktarması altında aynı adres.
* **Program kimliği.** Değişmedi.

## Güncellenen sayfalar

* `products/cpmm/instructions` — `CollectExcessLamports` hesap listesi ve sahip başına gönderme tablosu ile eklendi; `CreateAmmConfig` `creator_fee_rate` argümanını ve sabit ücret sahipleri hakkında bir notu kazanıyor; `CollectExcessLamports`, `CreateSupportMintAssociated`, `CloseSupportMintAssociated` için talimat özet satırları eklendi; `ClosePermissionPda` imzalayan düzeltildi; `Initialize` ön koşulu kayıt defteri-yalnızca bypass için yeniden yazıldı; durum değişikliği matris satırı eklendi.
* `products/cpmm/accounts` — Token-2022 bölümü kayıt defteri PDA etrafında yeniden yazıldı, beyaz liste kaldırılması çağrıldı; `ClosePermissionPda` imzalayan düzeltildi.
* `products/cpmm/overview` — beyaz liste cümlesi yeniden yazıldı.
* `products/cpmm/code-demos` — Rust CPI iskeleti Anchor 1.0 için güncellendi.
* `reference/token-2022-support` — bypass-yolu bölümü kayıt defteri PDA etrafında yeniden yazıldı, kaldırılan `MINT_WHITELIST` "kaldırılan bypass'lar" bölümüne taşındı.
* `reference/error-codes` — `6015` belgelendi.
* `reference/program-addresses` — yeni "CPMM support-mint kayıt defteri yetkilisi", "CPMM ücret-sahip cüzdanları" ve "Excess-lamports toplama cüzdanları" bölümleri; `ClosePermissionPda` notu düzeltildi.
* `sdk-api/rust-cpi`, `solana-fundamentals/toolchain`, `integration-guides/cpi-integration` — Anchor 1.0 pinleri ve CPI geçiş notları.
* `solana-fundamentals/rent-and-reclaimable-rent` — yeni "Raydium programlarının kendi tarafında ne taradığı" bölümü.
