> ## 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 — LaunchLab: Anchor 1.0, excess-lamports recovery, and the end of the transition gates

> LaunchLab, 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. Üç geçiş mekanizması kaldırılıyor: kullanımdan kaldırılan Initialize artık her zaman başarısız oluyor, MigrateToAmm üç argüman ve dokuz OpenBook hesabını kaybediyor ve saat tabanlı get_upgrade_timestamp kapısı siliniyor. Hata 6031 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-launchlab-anchor-1-and-excess-lamports)
</Info>

<Info>
  Bu giriş, yaklaşan bir LaunchLab 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ş `MigrateToAmm` düzenini kullanmadan önce dağıtılan programı doğrulayın.
</Info>

Bu, LaunchLab'ın geçiş iskeletini taşımayı bıraktığı yayındır.

Önceki yükseltmelerin yumuşak bir şekilde iniş yapmasını sağlamak için üç ayrı mekanizma vardı: `get_upgrade_timestamp`, birkaç kontrolün saati karşılaştırdığı sabit kodlanmış bir kesme tarihi; bu tarihten üç gün sonra çalışmaya devam eden kullanımdan kaldırılan bir `Initialize`; ve `MigrateToAmm`'nin OpenBook tesisatı, AMM v4 [kendi OpenBook bağımlılığını kaldırdıktan](/tr/reference/changelog/2026-07-22-amm-v4-openbook-removal) sonra Temmuz ayında konuşacak hiçbir şeyi yoktu. Üçü de gitti. Mainnet'te kesme tarihi aylar geçmiş durumda, bu nedenle davranışsal etki sıfırdır — ancak *hata modları* değişti ve bir hesap listesi sert bir şekilde değişti.

Çerçeve aynı zamanda hareket etti: Anchor `0.32.1`'den `=1.0.2`'ye, Agave 2.3.0'dan 3.1.10'a. Ve AMM v4 ve CPMM'de olduğu gibi, kira geri almak için yeni bir admin talimatı vardır.

İşlem, ücretler, vesting, eğri kuralları ve platform yapılandırması değişmemiştir.

## Entegratörler için TL;DR

* **Hiçbir işlem talimatı hesaplarını, argümanlarını veya matematiklerini değiştirmedi.** `BuyExactIn`, `BuyExactOut`, `SellExactIn`, `SellExactOut` bayt-özdeştir. Hiçbir hesap düzeni değişmedi.
* **`Initialize` (kullanımdan kaldırılan) artık her zaman `NotApproved` (`6000`) ile başarısız oluyor,** herhangi bir hesabı okumadan önce. `InitializeV2` kullanın. Bunun aracılığıyla oluşturulan başlatmalar normal şekilde işlem yapar ve mezun olur.
* **`MigrateToAmm`, geçiş cüzdanı için sert bir kırılmadır.** Üç argümanı (`base_lot_size`, `quote_lot_size`, `market_vault_signer_nonce`) ve dokuz hesabı kaybetti. Aşağıya bakın.
* **Üç işlem `remaining_accounts` artık koşulsuz olarak gereklidir,** ve `system_program` yuvası doğrulanır. Bunları atlayan bir oluşturucu artık her zaman `NotEnoughRemainingAccounts` (`6018`) ile başarısız olur, sadece kesme sonrasında değil.
* **Bir talimat eklendi: `CollectExcessLamports`.** Yalnızca admin. Bkz. [`products/launchlab/instructions`](/tr/products/launchlab/instructions#collectexcesslamports).
* **Bir hata kodu eklendi: `6031` `LamportsCalculateError`.** Kodlar `6000`–`6030` değişmemiştir.
* **Üç `MigrateToCpswap` adres kısıtlaması talimat gövdesine taşındı,** hatasını `ConstraintAddress` (`2012`) yerine `RequireKeysEqViolated` (`2502`) olarak değiştirdi.
* **Bir IDL yenilemesi gereklidir.** Bir yeni talimat, bir kaldırılan argüman seti, dokuz kaldırılan hesap, bir yeni hata varyantı.

## `MigrateToAmm` OpenBook yarısını kaybetti

Bu, bir şeyi kırma olasılığı en yüksek olan değişikliktir. Eski talimat verileri ayırıcıdan sonra 17 bayt argüman taşıyordu; yeni veriler çıplak ayırıcıdır. Eski hesap listeleri artık yapıda bulunmayan dokuz hesabı taşıyordu, bu nedenle ilk kaldırımdan sonraki her şey yanlış hizalanmıştır.

**Kaldırılan argümanlar:** `base_lot_size: u64`, `quote_lot_size: u64`, `market_vault_signer_nonce: u8`. Üçü de program tarafından CPI aracılığıyla başlatılan OpenBook pazarını yapılandırmak için vardı. Bu CPI — `initialize_openbook_market` — nonce'u doğrulayan `gen_vault_signer_key` kontrolü ile birlikte gitti.

**Kaldırılan hesaplar:** `openbook_program`, `request_queue`, `event_queue`, `bids`, `asks`, `market_vault_signer`, `market_base_vault`, `market_quote_vault` ve `amm_open_orders`. Son biri AMM v4'ün `Initialize2` artık almadığı için gitti.

**`market` hesabı kalır**, orijinal konumunda. AMM v4 hala pazarı `AmmInfo` üzerinde bir referans alanı olarak kaydeder, bu nedenle LaunchLab hala onu iletir. Bunun hakkında iki şey değişti: program artık onu başlatmıyor ve artık **tamamen doğrulanmamış** — bildirimi, `openbook_program` hesabı ile birlikte gelen `owner = openbook_program.key()` olmayan çıplak bir `#[account(mut)]` ve onu değiştiren hiçbir şey yoktur. Geçiş cüzdanının oraya geçirdiği her şey doğrudan AMM v4'ün `Initialize2` CPI'sine iletilir ve yeni havuzda kaydedilir. Bu alanın arkasında gerçek bir başlatılmış pazarı isteyenin bunu önceden oluşturması gerekir ve program bunu söylemeyecektir.

Ortaya çıkan 23 hesaplı liste [`products/launchlab/instructions`](/tr/products/launchlab/instructions#migratetoamm-/-migratetocpswap) üzerinde tam olarak belgelenmiştir.

`MigrateToCpswap` etkilenmez — hiçbir zaman argümanı yoktu ve hesap listesi değişmemiştir.

## Kullanımdan kaldırılan `Initialize` her zaman başarısız olur

`initialize` daha önce yumuşak bir kullanımdan kaldırma çalıştırıyordu: `get_upgrade_timestamp() + 3 days` kadar çalışıyordu, sonra `NotApproved` döndürüyordu. Zaman damgası yardımcısı silindiğinde, hata koşulsuz — işleyici artık bir `msg!` ve `err!(NotApproved)` ve başka hiçbir şey değildir.

Günlükleri okuyorsanız bir ayrıntı: `Accounts` yapısı değişmemiş ve hala dört `init` kısıtlaması taşıyor, bu nedenle Anchor'ın oluşturulan hesap doğrulama prologu çalışıyor — ve işleyici dönmeden önce bu hesapları oluşturuyor. İşlem her iki şekilde de geri alınır, bu nedenle hiçbir şey gerçekten oluşturulmaz, ancak hata hesap doğrulamasından sonra ortaya çıkar.

Talimat kaldırılmak yerine tutulur, böylece ayırıcısı işgal edilmiş kalır ve IDL istikrarlı bir şekil tutar. Argüman ve hesap tanımları hala tarihsel işlemleri çözmek için belgelenmeye değerdir ve sayfa bunları bir uyarının arkasında tutar.

## `get_upgrade_timestamp` kapısı gitti

Yardımcı `local` ve `devnet` özellikleri altında `0` döndürdü ve aksi takdirde sabit kodlanmış mainnet zaman damgası `1755522000` (2025-08-18 13:00 UTC). Dört talimat saati buna karşı karşılaştırdı, kaynakta beş referans arasında. Her biri koşulsuz olarak kesme sonrası dalı haline gelir:

| Çağrı yeri                               | Önce                                                                                                                                                                                       | Sonra                                                                                                                                       |
| ---------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------- |
| `distribute_trade_fee` (dört işlem yolu) | `remaining_accounts` öğesinden `system_program`, `platform_fee_vault`, `creator_fee_vault` öğesini yalnızca kesme sonrasında oku; kesme öncesinde platform/yaratıcı ücret bölünmesini atla | Her zaman üçünü de oku, **ve** `system_program` yuvasının `System::id()` öğesine eşit olmasını gerektir veya `InvalidInput` (`6002`) döndür |
| `migrate_to_cpswap`                      | Öncesinde `InitializeCpSwap`, sonrasında `InitializeCpSwapWithPermission` seç                                                                                                              | Her zaman izinli CPI; eski `initialize_cpswap` yardımcısı silinir ve on kalan hesap minimumu koşulsuz                                       |
| `initialize_with_token_2022`             | Kesme öncesinde `amm_fee_on == BothToken` gerektir; eğri kuralı kontrolünü yalnızca sonrasında çalıştır                                                                                    | `amm_fee_on` kısıtlaması yok; eğri kuralı kontrolü `restrict_curve_param` ayarlandığında çalışır                                            |
| `initialize` (kullanımdan kaldırılan)    | Yalnızca kesme artı üç gün sonrasında başarısız ol                                                                                                                                         | Her zaman başarısız ol                                                                                                                      |

Mainnet zaman damgası bir yıldan fazla geçmiş durumda, bu nedenle doğru, güncel bir oluşturucu hiçbir davranış değişikliği görmez. Değişen şey, **eski** bir oluşturucunun artık devnet derlemesine karşı çalışıyor gibi görünmek yerine belirleyici bir şekilde başarısız olmasıdır. Yeni `system_program` doğrulaması gerçekten yenidir: bu yuva daha önce herhangi bir hesabı kabul ediyordu.

## `CollectExcessLamports`

[SIMD-0437](/tr/solana-fundamentals/rent-and-reclaimable-rent) Adım 1, 3 Eylül 2026'da mainnet'e indi ve kira-muaf minimumu %9 oranında kesiyor ve dört adım daha geliyor. Bir adımdan önce oluşturulan her LaunchLab havuz kasası, ücret kasası ve programa ait PDA artık aşırı finanse edilmiştir.

Talimat dört sabit hesabı alır — imzalayan/hedef cüzdan, **bir** kasa yetkilisi PDA ve her iki token programı — sonra `remaining_accounts` içinde herhangi sayıda kaynak hesabı.

`authority` yuvası dikkatle okumaya değer kısımdır. LaunchLab'ın üç kasa yetkilisi PDA'sı vardır (`vault_auth_seed`, `platform_fee_vault_auth_seed`, `creator_fee_vault_auth_seed`) ve talimat geçirdiğiniz olanı üçünü de yeniden türeterek ve eşleştirerek çözer; hiçbiriyle eşleşmeyen bir anahtar `InvalidOwner` (`6001`) ile başarısız olur. Bir çağrı bir yetkilisi taşıdığından ve token programı her hesabın gerçek sahibinin imzalamasını gerektirdiğinden, **kaynak hesaplar yetkiliye göre gruplandırılmalıdır** — havuz kasaları, platform ücret kasaları ve yaratıcı ücret kasaları ayrı işlemlerde temizlenir. Programa ait PDA'lar doğrudan borçlandırılır ve herhangi bir yetkiliye eşlik edebilir.

Sarılı SOL, CPMM ve AMM v4'ün kullandığı aynı `SyncNative` → delta boyutlu `UnwrapLamports` → değişmemiş olduğunu doğrula dizisini izler, gidiş-dönüş sıfıra net değilse `LamportsCalculateError` (`6031`) ile. SOL-alıntılı bir başlatma tam alıntı rezervini tutar.

**Temel mintler temizlenemez.** `InitializeV2` ve `InitializeWithToken2022`, temel bir mint için `WithdrawExcessLamports` imzalayabilen hiçbir anahtarın olmadığı aynı talimatında `MintTokens` öğesini iptal eder. Kira tasarım gereği mahsur kalır.

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

## `MigrateToCpswap` kısıtlama yeniden konumlandırması

Üç hesap kısıtlaması `Accounts` yapısından çıkıp talimat gövdesine taşındı:

```rust theme={null}
require_keys_eq!(ctx.accounts.platform_config.key(), ctx.accounts.pool_state.platform_config);
require_keys_eq!(ctx.accounts.base_vault.key(),      ctx.accounts.pool_state.base_vault);
require_keys_eq!(ctx.accounts.quote_vault.key(),     ctx.accounts.pool_state.quote_vault);
```

Gereksinim aynıdır — üçü de `PoolState` üzerinde depolanan değerlerle eşleşmelidir. Yalnızca hata yüzeyi farklıdır: Anchor'ın genel `RequireKeysEqViolated` (`2502`), bir hesap adı olmadan raporlanan, `ConstraintAddress` (`2012`) yerine suçlu hesabı adlandırır. Bu üç hesap için `2012` ile eşleşen herhangi bir hata işlemesini güncelleyin.

## 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`                                     |
| README: `rustup default`       | `1.81.0`                  | `1.91.0`                                     |
| README: Solana yükleyici       | `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`                   |
| `@coral-xyz/anchor`            | `^0.32.1`                 | `@anchor-lang/core` `1.0.2` ile değiştirildi |
| `@solana/spl-token`            | `^0.4.0`                  | `^0.4.14`                                    |
| `typescript`                   | `^4.3.5`                  | `^5.6.3`                                     |
| `tsconfig` hedef / lib         | `es6` / `es2015`          | `ES2020` / `es2020`, `skipLibCheck`          |

Anchor 1.0'ın iki çağrı yeri değişikliği burada da geçerlidir: `Context` dört yaşam süresi parametresinden bire çöker ve `CpiContext::new` programın `AccountInfo` yerine `Pubkey` öğesini alır. Bkz. [`sdk-api/rust-cpi`](/tr/sdk-api/rust-cpi#cargo-dependencies).

Zincir üzerinde hiçbir etkisi olmayan iki derleme sistemi ayrıntısı: `local` özelliği `localnet` ile değiştirildi, bu da yerel cüzdanı `LAUNCHPAD_LOCALNET_ADMIN` ortam değişkeninden `admin` olarak derler (`yarn test:local-admin` bunu bağlar) ve `programs/launchpad/Cargo.toml` içindeki yinelenen `[profile.release]` bloğu silindi — Cargo, çalışma alanı kökü dışında `[profile]` öğesini yok sayar, bu nedenle kök bloğu zaten yürürlükteydi, program düzeyindeki bloğun `panic = "abort"` öğesinin hiçbir zaman uygulanmadığı gerçeği de dahil olmak üzere.

## Değişmeyen şeyler

* **Her hesap düzeni.** `PoolState`, `GlobalConfig`, `PlatformConfig`, `PlatformCurveRule`, `PlatformAllowConfig`, vesting kayıtları — aynı boyutlar, aynı ofsetler.
* **Hata kodları `6000`–`6030`,** kasıtlı olarak tutulan `6020` dahil.
* **Eğri matematik, ücret oranları, ücret tahakkuku, vesting zamanlamaları ve mezuniyet LP bölünmesi.**
* **Platform eğri kuralları ve `GlobalConfig` izin listesi.** Aynı talimatlar, aynı hesaplar, aynı anlambilim; yalnızca eğri kuralı kontrolü etrafındaki saat kapısı gitti.
* **`MigrateToCpswap`'ın hesap listesi ve `remaining_accounts` endeksleri.**
* **Token-2022 transfer-fee yetkilisi mezuniyet sırasında devri.**
* **Program ID'si.** Değişmemiş.

## Güncellenen sayfalar

* `products/launchlab/instructions` — `CollectExcessLamports` hesap listesi, yetkilisi çözümleme tablosu ve gruplandırma uyarısı ile eklendi; `MigrateToAmm`'nin argüman ve hesap kaldırmaları tam yeni liste ile belgelenmiştir; `Initialize` her zaman başarısız uyarısı ile ön yüzlenmiştir; yeni "İşlem kalan hesapları" bölümü artık koşulsuz üç hesabı ve `system_program` kontrolünü kapsamaktadır; `MigrateToCpswap` izin-yalnızca yolu ve yeniden konumlandırılan kısıtlamalar hakkında not; envanter ve durum değişikliği matris satırları.
* `products/launchlab/overview` — yayın başlığı; "Yalnızca CPMM" ve temel mint değişmezleri düzeltilmiştir.
* `products/launchlab/accounts` — mint-yetkilisi iptal etme zamanlaması başlatma oluşturmaya düzeltilmiştir (mezuniyet sırasında belgelenmiştir); `CollectExcessLamports` satırı eklendi.
* `reference/error-codes` — `6031` belgelenmiştir.
* `reference/program-addresses` — yeni "Excess-lamports toplama cüzdanları" bölümü.
* `solana-fundamentals/rent-and-reclaimable-rent` — yeni "Raydium programlarının kendi tarafında temizledikleri şeyler" bölümü.
* `sdk-api/rust-cpi`, `solana-fundamentals/toolchain` — Anchor 1.0 pinleri ve CPI geçiş notları.
