> ## 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-08-31 — LaunchLab: platform curve rules, curve-parameter whitelist'in yerini alır

> Launch-parameter kısıtlamaları PlatformConfig.curve_params'ten (field, op, value) kısıtlamaları, değer bantları, ORed kontrol grupları ve delegeli yönetici cüzdanı içeren per-config PlatformCurveRule hesaplarına taşınır. PlatformConfig boyutunu 944 bayt olarak korur; eski alan ve iki talimatı kaldırılır, yedi hata kodu eklenir.

<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-08-31-launchlab-platform-curve-rules)
</Info>

<Info>
  Bu giriş, yaklaşan bir LaunchLab program güncellemesini kapsamaktadır. Dağıtımdan önce yerel sürüm dalına karşı doğrulanmıştır. Yeni hesapları veya talimatları kullanmadan önce dağıtılan programı doğrulayın.
</Info>

Bir platform, `PlatformConfig.curve_params` aracılığıyla yaratıcılarının seçebileceği launch şekillerini zaten kısıtlayabiliyordu. Bu mekanizma **yalnızca tam eşitliği** test etti: bir giriş bir alanı bir değere sabitledi veya bir sentinel ile joker karakteri kullandı. Ayrıca bir platformun desteklediği her `GlobalConfig` genelinde en fazla 10 giriş tuttu ve `PlatformConfig` hesabının kendisinde yaşadı, her giriş için 491 bayt büyüttü.

Bu üç özellik protokol konfigürasyonlar eklediğinde çatıştı. "50 ile 200 SOL arasında bir fon toplama hedefi" ifade etmek, izin verilen her değer için bir giriş gerektiriyordu ve bu nedenle imkânsızdı. `GlobalConfig`'in kendi tabanları bu arada açılmıştı — 1 bps oranları, 99999 arz sınırları — tam olarak her platform bunların altına sığsın diye, bu da platformları bunları daraltmak için hiçbir yolla bıraktı.

Bu sürüm whitelist'i **curve rules** ile değiştirir: (platform, config) çifti başına bir `PlatformCurveRule` hesabı, 10 adede kadar kontrol grubu tutarak, her biri 19 launch parametresi üzerinde 25 adede kadar `(field, op, value)` kısıtlaması tutarak, `Eq`, `Gte`, `Lte` ve `Neq` ile. Bir grup içindeki kısıtlamalar AND'lenmiş, gruplar OR'lanmıştır. Bir aralık, aynı alan üzerinde bir `Gte` artı bir `Lte`'dir.

Tam model ve dokuz çalışan oyun kitabı yeni sayfada yer almaktadır: [`products/launchlab/curve-rules`](/tr/products/launchlab/curve-rules).

## Entegratörler için TL;DR

* **`PlatformConfig` boyutunu ve her mevcut alan ofsetini korur.** Sabit 944 bayttır. `curve_params` gitti; `restrict_curve_param` (`u8`), `curve_rule_manager` (`Pubkey`) ve vec'in uzunluk önekinin işgal ettiği 4 bayt hepsi padding'den çıkar, bu da 107'den 78'e küçülür.
* **Dekoderler sondaki vec'i bırakmalıdır.** Padding'den sonra hala `Vec<PlatformCurveParam>` bekleyen bir dekoder, iki yeni alanı vec baytları olarak okuyacaktır. Padding'den önceki her şey etkilenmez, bu nedenle yalnızca ücret cüzdanlarını ve oranları okuyan bir dekoder değişmeden çalışmaya devam eder.
* **Launch oluşturucuları bayrak açıkken bir hesap daha gerektirir.** `restrict_curve_param` `1` iken, `InitializeV2` ve `InitializeWithToken2022` kural PDA'sını `remaining_accounts`'ta gerektirir — *hesap mevcut olmadığında bile*, böylece onu atlamak kontrolü atlayamaz. Türetme: `[b"platform_curve_rule", platform_config, global_config]`.
* **Hiçbir platform varsayılan olarak kısıtlanmaz.** `restrict_curve_param` her mevcut hesapta `0`'dır ve `0` program kuralları hiç okumaz anlamına gelir.
* **İki talimat kaldırılır:** `UpdatePlatformCurveParam` ve `RemovePlatformCurveParam`. Dört eklenir: `CreatePlatformCurveRule`, `UpdatePlatformCurveRule`, `RemovePlatformCurveRule`, `ClosePlatformCurveRule`.
* **`UpdatePlatformConfig` iki varyant kazanır:** dispatch indeksi 13'te `RestrictCurveParam(u64)` ve 14'te `CurveRuleManager(Pubkey)`. Mevcut indeksler 0–12 değişmez.
* **Yedi hata kodu eklenir,** `6024`–`6030`. `6020` `CurveParamIsNotExist` son çağıranı gitti olsa da yer tutucu olarak tutulur, bu nedenle ondan sonra hiçbir şey kaymaz. Bkz. [`reference/error-codes`](/tr/reference/error-codes).
* **Bir IDL yenilemesi gereklidir.** Yeni hesap türü, dört yeni talimat, iki kaldırılan, iki yeni dispatch varyantı, yedi yeni hata kodu.
* **Herhangi bir şey göndermeden kuralları zincir dışında kontrol edin.** SDK, `checkLaunchAgainstCurveRule` (launch-time kontrolünü yansıtır, fail-closed davranışı dahil) ve `checkCurveRuleGroupWritable` (yazma-time doğrulamasını yansıtır) ortaya çıkarır. Her ikisi de saf fonksiyondur. Bkz. [Göndermeden önce kontrol edin](/tr/products/launchlab/curve-rules#check-before-you-send).
* **Mainnet'te etkinleştirmeden önce devnet'te prova yapın.** `restrict_curve_param`'ı açmak, yaratıcılarınızın hemen yapabileceklerini değiştirir. Önerilen sıra — reddedilmesi gereken bir token başlatmayı da içerir, oluşturucunuzun gerçekten kural hesabını geçtiğini kanıtlamak için — [Önce devnet'te test edin](/tr/products/launchlab/curve-rules#test-on-devnet-first) bölümündedir.

## Bir kuralın whitelist'in yapamadığını ifade edebilecekleri

| Amaç                                                | Whitelist              | Curve rule                                           |
| --------------------------------------------------- | ---------------------- | ---------------------------------------------------- |
| Bir tam launch şekli                                | Bir giriş              | `Eq` kısıtlamaları olan bir grup                     |
| Bir aralıkta fon toplama hedefi                     | İfade edilemez         | İki kısıtlama: `Gte` + `Lte`                         |
| Üç launch katmanı                                   | Üç giriş, yalnızca tam | Üç grup                                              |
| Arzdan bağımsız bir mezuniyet-valüasyon bandı       | İfade edilemez         | Türetilmiş `FundRaisingRateB` üzerinde iki kısıtlama |
| Mezun havuzuna ulaşan şeyde bir taban               | İfade edilemez         | Türetilmiş `MigrateRateA` üzerinde bir kısıtlama     |
| Yalnızca SPL Token veya yalnızca Token-2022         | İfade edilemez         | `BaseTokenProgram` üzerinde bir kısıtlama            |
| "Transfer ücreti ayarlanmışsa, %1'de sınırlandırın" | İfade edilemez         | İki grup, `TransferFeeEnabled` üzerinde kapılı       |
| Bir tarihte açılan, gözetimsiz bir kural            | İfade edilemez         | İki grup, `UnixTimestamp` üzerinde kapılı            |

19 alan, dört türetilmiş oranı içerir — `SellRateA`, `LockRate`, `MigrateRateA`, `FundRaisingRateB` — bu da bir kuralı bir arz yerine taşınabilir kılar.

## Delegeli yönetim

`PlatformConfig.curve_rule_manager`, bu platformun kural hesaplarını oluşturabilen, güncelleyebilen, kaldırabilen ve kapatabilecek sıcak bir cüzdandır. Kuralları düzenlemek rutin bir işlemdir ve bir platform yöneticisi anahtarı genellikle bir multisig'dir; bu, multisig'i döngüden çıkaran alandır. `UpdatePlatformConfig::CurveRuleManager` aracılığıyla bir kez ayarlayın.

Platform yöneticisi paralel olarak aynı gücü korur — program signer'dan `PlatformConfig` PDA'sını yeniden türeterek bunu kabul eder — bu nedenle kayıp bir yönetici anahtarı alanı döndürerek kurtarılabilir. `Pubkey::default()` yalnızca yönetici anlamına gelir.

Tehlikeye atılmış bir yönetici anahtarı, parametre kurallarını gevşetebilir veya silebilir ve bir kural hesabının kirasını geri talep edebilir. `restrict_curve_param`'ı çeviremez, herhangi bir ücret cüzdanına, vesting alanına veya CPMM konfigürasyonuna dokunmaz veya bir `GlobalConfig` sınırını kıramaz.

## Kira ve boyut

Bir kural hesabı hiçbir grup tutmadan oluşturulur ve her değişiklikte yeniden boyutlandırılır, bu nedenle bir platform gerçekten yazdığı kurallar için ödeme yapar ve bir grubu kaldırmak farkı signer'a geri öder.

| Kural içeriği                  | Boyut      | Kira         |
| ------------------------------ | ---------- | ------------ |
| Boş                            | 150 bayt   | \~0.0019 SOL |
| 1 grup, 2 kısıtlama            | 200 bayt   | \~0.0023 SOL |
| 3 grup, her biri 4 kısıtlama   | 408 bayt   | \~0.0037 SOL |
| 10 grup, her biri 25 kısıtlama | 4 790 bayt | \~0.034 SOL  |

Boyut dinamik olduğundan, dekoderler bir sabiti varsaymak yerine hesabın gerçek uzunluğunu okumalıdır.

## Launch'ta hesaplama maliyeti

Kontrol, etkinken her launch'ta çalışır. Uçtan uca ölçüldü — PDA türetme, `remaining_accounts` taraması, deserialization, değerlendirme:

| Kural içeriği                     | Doğrudan alanlar | Türetilmiş alanlar |
| --------------------------------- | ---------------- | ------------------ |
| Etkinleştirildi, kural hesabı yok | 1 936            | —                  |
| 1 grup, 2 kısıtlama               | 2 576            | 2 926              |
| 3 grup, her biri 4 kısıtlama      | 3 624            | 5 724              |
| 10 grup, her biri 25 kısıtlama    | 24 344           | 68 094             |

Türetilmiş bir kısıtlama, doğrudan alan okuması için yaklaşık 48'e karşı yaklaşık 223 CU'ya mal olur. Tam yüklü bir kural bile varsayılan 200 000 CU per-instruction bütçesinin üçte birinin içinde kalır. Gruplar bir eşleşene kadar değerlendirilir, bu nedenle en çok kullanılan katman ilk gelir.

## Tek seferlik geçiş

Whitelist'i kullanan platformlar, bayrak kullanılabilir olmadan önce protokol tarafından tek bir geçişte geçirildi. Adanmış bir otorite, adlandırdığı konfigürasyonun kural hesabının kontrol gruplarına her eski girişi çeviren, girdileri `PlatformConfig`'ten temizleyen ve bu hesabı 944 bayta geri küçülten platform başına bir işlem çalıştırdı.

Çeviri eski semantiği tam olarak korudu: her giriş bir grup oldu, her non-sentinel alan bir `Eq` kısıtlaması oldu ve bir all-sentinel girişi — her launch'u eşleştiren — hiçbir kısıtlaması olmayan bir grup oldu, bu da her launch'u eşleştirir.

Geçiş kurallar yazdı ancak bunları etkinleştirmedi. Geçirilen bir platform, `restrict_curve_param`'ı kendisi `1`'e ayarlayana kadar kısıtlanmamış kaldı. Geçiş talimatı, geçiş tamamlandığından beri programdan kaldırıldı, okuduğu eski alan ile birlikte.

## Değişmeyen şeyler

* **`GlobalConfig`.** Aynı düzen, aynı sınırlar, aynı talimatlar. Kurallar bu sınırları daraltır ve onlarla birlikte kontrol edilir; hiçbir zaman birini genişletemezler.
* **Launch talimatlarının hesap listeleri ve argümanları.** `InitializeV2` ve `InitializeWithToken2022` aynı sabit hesapları ve aynı argümanları alır. Yalnızca `remaining_accounts` bir giriş kazanır ve yalnızca bayrak açıkken.
* **Trade, graduation, ücret ve vesting yolları.** Dokunulmamış.
* **`PlatformAllowConfig`.** Değişmemiş ve ilgisiz: bir platformun launch'larının *hangi konfigürasyonları* kullanabileceğine karar verirken, bir kural bir konfigürasyon içinde *hangi parametreleri* karar verir. İki bayrak bağımsızdır.
* **Hata kodları `6000`–`6023`.** Değişmemiş, `6020` dahil.
* **`PlatformConfig`'in boyutu ve padding öncesi ofsetleri.** Değişmemiş, bu nedenle mevcut hesaplar kendi geçişlerine ihtiyaç duymaz.

## Güncellenen sayfalar

* `products/launchlab/curve-rules` — **yeni sayfa.** Üç seviyeli model, 19-alan ve 4-operatör tabloları, dokuz oyun kitabı, curve-type kısıtlaması, iki zincir dışı kontrol yardımcısı, devnet prova sırası, delegeli yönetim, kira, dağıtım sırası ve hesaplama maliyeti.
* `products/launchlab/platform-config` — "Curve-parameter whitelist" "Launch-parameter rules" ile değiştirildi; `restrict_curve_param`, `curve_rule_manager` ve 78-bayt padding için düzen güncellendi; güncelleme-yolu tablosu, okuma-yolu snippet'i ve tuzaklar yeniden yazıldı.
* `products/launchlab/instructions` — dört talimatı, hesaplarını, argümanlarını ve hatalarını kapsayan yeni "Platform launch-parameter rules" bölümü; envanter satırı değiştirildi.
* `products/launchlab/accounts` — `PlatformCurveRule` envantere eklendi ve tam düzen ve değişken-boyut uyarısı ile kendi bölümü verildi.
* `reference/error-codes` — `6024`–`6030` belgelendi; `6018` ve `6020` açıklandı.
