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

# LaunchLab eğri kuralları

> Bir platformun yaratıcılarının seçebileceği başlatma parametrelerini nasıl kısıtladığı: kontrol grupları, (alan, operatör, değer) kısıtlama modeli ve dokuz oyun kitabı — tam katmanlar, değer bantları, mezuniyet-değerleme kapakları, göç tabanları, token-tipi kapıları ve zaman sınırlı promolar.

<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 →](/products/launchlab/curve-rules)
</Info>

<Info>
  Bir **eğri kuralı**, platformun "hangi başlatmaları barındırmaya istekliyim?" sorusunun cevabıdır. [`GlobalConfig`](/tr/products/launchlab/global-config) protokol tabanını belirler — en az 10M arz, arzın en az %20'si eğride satılır, vb. — ve bu tabanlar kasıtlı olarak geniştir, böylece her tür platform bunların altına sığar. Eğri kuralı, platformunuzun bunları ürününüzün gerçekten desteklediği şekle daraltmasıdır.

  Kurallar kendi `PlatformCurveRule` hesabında yaşar, her (platform, [`GlobalConfig`](/tr/products/launchlab/global-config)) çifti için bir tane. Yapılandırmanın zaten izin verdiği şeyi yalnızca daraltabilirler; bir kural asla bir protokol limitini genişletemez.
</Info>

## Zihinsel model

Dışarıdan içeriye doğru üç seviye:

```
GlobalConfig       protokol tabanı      "arz >= 10M, satış oranı >= %20, ..."
  └─ PlatformCurveRule   sizin kuralınız     "ve benim platformumda: bunlardan biri"
       └─ kontrol grubu    bir şekil     "arz = 1B VE fon toplama [80, 90] SOL'da"
            └─ kısıtlama bir kontrol    "(Supply, Eq, 1_000_000_000)"
```

İç içe geçen iki seviye bunu ifade edici kılar:

* **Bir grup içindeki kısıtlamalar VE'lenmiştir.** Hepsi geçerli olmalıdır.
* **Bir kural içindeki gruplar VEYA'lanmıştır.** Bir başlatma herhangi bir grup karşılandığı anda izin verilir.

Yani bir grup izin verilen bir *şekil*, ve kural sunduğunuz şekillerin menüsüdür. Bir kural en fazla 10 grup tutabilir ve bir grup en fazla 25 kısıtlama tutabilir.

İki sınır durumu hatırlamaya değer:

| Durum                                        | Anlamı                                                                       |
| -------------------------------------------- | ---------------------------------------------------------------------------- |
| Kural hesabı yok veya sıfır gruplu bir kural | Platform bu yapılandırma için başlatma parametrelerini kısıtlamaz.           |
| Sıfır kısıtlamalı bir grup                   | Bu grup her başlatmayı eşleştirir, bu nedenle tüm kural her şeye izin verir. |

Bir kural yalnızca `PlatformConfig.restrict_curve_param` `1` iken yürürlüğe girer. `0` olduğunda program kuralları hiç okumaz; bu aynı zamanda bir kuralı kullanıma sunmak ve geri almak için kullandığınız anahtardır.

## Kısıtlamalar

Bir kısıtlama bir `(alan, operatör, değer)` üçlüsüdür. Başka hiçbir şey — ifade yok, iç içe geçme yok.

```rust theme={null}
pub struct ParamConstraint {
    pub field: u8,    // hangi başlatma parametresi, aşağıdaki tabloya bakın
    pub op:    u8,    // 0 Eq, 1 Gte (min), 2 Lte (max), 3 Neq
    pub value: u128,
}
```

Bir **aralık, bir grup içinde aynı alan üzerinde iki kısıtlamadır**: taban için bir `Gte` ve tavan için bir `Lte`. Aynı `(alan, operatör)` çifti bir grup içinde iki kez görünemez; bu, çelişkili iki minimum yazmanızı engeller.

### Alanlar

<Info>
  Alan kimlikleri kalıcıdır. Yeni alanlar yalnızca eklenir, bu nedenle bir kimlik bir kural hesabı tuttuğu andan itibaren anlamı asla değişmez.
</Info>

| id | Alan                     | Birim            | Notlar                                                                                                          |
| -- | ------------------------ | ---------------- | --------------------------------------------------------------------------------------------------------------- |
| 0  | `CurveType`              | enum             | 0 sabit ürün, 1 sabit fiyat, 2 doğrusal fiyat                                                                   |
| 1  | `MigrateType`            | enum             | Yeni başlatmalar zaten `1` (CPMM) olmalıdır                                                                     |
| 2  | `MigrateCpmmFeeOn`       | enum             | 0 yalnızca alıntı, 1 her iki token                                                                              |
| 3  | `Supply`                 | temel birimler   | Tam token arzı                                                                                                  |
| 4  | `TotalSellA`             | temel birimler   | Eğride satılan. Yalnızca sabit-ürün yapılandırmaları — bkz. [Eğri-tipi kısıtlamaları](#eğri-tipi-kısıtlamaları) |
| 5  | `TotalFundRaisingB`      | alıntı birimleri | Mezuniyet hedefi                                                                                                |
| 6  | `TotalLockedAmount`      | temel birimler   | Hak kazanma bütçesi                                                                                             |
| 7  | `CliffPeriod`            | saniye           | Kilidi açma başlamadan önce bekle                                                                               |
| 8  | `UnlockPeriod`           | saniye           | Kilidi açma süresi                                                                                              |
| 9  | `BaseTokenProgram`       | enum             | 0 SPL Token, 1 Token-2022                                                                                       |
| 10 | `TransferFeeEnabled`     | bool             | Temel mint `TransferFeeConfig` taşıdığında 1                                                                    |
| 11 | `TransferFeeBasisPoints` | 1/10 000         | Uzantı olmadan 0                                                                                                |
| 12 | `TransferFeeMaximumFee`  | temel birimler   | Uzantı olmadan 0                                                                                                |
| 13 | `SellRateA`              | 1/1 000 000      | Türetilmiş: `TotalSellA / Supply`. Yalnızca sabit-ürün                                                          |
| 14 | `LockRate`               | 1/1 000 000      | Türetilmiş: `TotalLockedAmount / Supply`                                                                        |
| 15 | `MigrateAmountA`         | temel birimler   | Türetilmiş: `Supply − TotalSellA − TotalLockedAmount`. Yalnızca sabit-ürün                                      |
| 16 | `MigrateRateA`           | 1/1 000 000      | Türetilmiş: `MigrateAmountA / Supply`. Yalnızca sabit-ürün                                                      |
| 17 | `FundRaisingRateB`       | 1/1 000 000      | Türetilmiş: `TotalFundRaisingB / Supply`                                                                        |
| 18 | `UnixTimestamp`          | saniye           | Başlatmanın blok zamanı                                                                                         |

Türetilmiş alanlar kuralları taşınabilir kılan alanlardır. `Supply` ve `TotalFundRaisingB`'yi tam sayılara sabitleme bir başlatma şeklini düzeltir; `FundRaisingRateB`'yi kısıtlama aralarındaki *ilişkiyi* düzeltir ve yaratıcının bunu koruyan herhangi bir arz seçmesine izin verir.

<Warning>
  Oran alanları yalnızca bir `GlobalConfig` içinde karşılaştırılabilir, çünkü paydaları bu yapılandırmanın alıntı mintine ve onun ondalıklarına bağlıdır. Bu pratikte bir sınırlama değildir: bir kural yapı gereği bir yapılandırmaya kapsamlıdır.
</Warning>

## Dokuz oyun kitabı

Aşağıdaki her oyun kitabı bir kuraldır. Kısıtlamalar `(alan, operatör, değer)` olarak yazılır.

### 1. Bir standart katman

En basit kural ve emekli eğri-parametre beyaz listesinin sunduğu tam davranış: bir şekil, sabitlenmiş.

| Grup | Kısıtlamalar                                                                                        |
| ---- | --------------------------------------------------------------------------------------------------- |
| 0    | `(Supply, Eq, 1_000_000_000e6)`, `(TotalSellA, Eq, 800_000_000e6)`, `(TotalFundRaisingB, Eq, 85e9)` |

Üçünden herhangi birinde sapan herhangi bir başlatma `CurveParamNotMatchPlatformRule` ile reddedilir.

### 2. Bir sayı yerine bir bant

Bantların var olmasının nedeni: bir yaratıcı sizin rahat olduğunuz bir fon toplama hedefi seçer, siz her değeri numaralandırmadan.

| Grup | Kısıtlamalar                                                                                         |
| ---- | ---------------------------------------------------------------------------------------------------- |
| 0    | `(Supply, Eq, 1_000_000_000e6)`, `(TotalFundRaisingB, Gte, 50e9)`, `(TotalFundRaisingB, Lte, 200e9)` |

Bir grup, dört kısıtlama ve yaratıcının 50–200 SOL koridoru vardır. Eski beyaz liste altında bu izin verilen her değer için bir giriş gerektiriyordu ve on girişin sınırı bunu imkânsız kılıyordu.

### 3. Katmanlar yan yana

Gruplar VEYA'lanır, bu nedenle her katman bir gruptur.

| Grup | Kısıtlamalar                                                        | Katman   |
| ---- | ------------------------------------------------------------------- | -------- |
| 0    | `(Supply, Eq, 1_000_000_000e6)`, `(TotalFundRaisingB, Eq, 85e9)`    | Standart |
| 1    | `(Supply, Eq, 100_000_000e6)`, `(TotalFundRaisingB, Eq, 30e9)`      | Küçük    |
| 2    | `(Supply, Eq, 10_000_000_000e6)`, `(TotalFundRaisingB, Gte, 500e9)` | Balina   |

Sıra semantik için değil, hesaplama için önemlidir: değerlendirme eşleşen ilk grupta durur, bu nedenle en çok kullanılan katmanınızı ilk koyun.

### 4. Bir mezuniyet-değerleme bandı

`FundRaisingRateB` milyonluk cinsinden `TotalFundRaisingB / Supply`'dir. Bunu kısıtlama, yaratıcının seçtiği arzdan bağımsız olarak bir tokenin ne kadar zenginlikle mezun olabileceğini kapaklar.

| Grup | Kısıtlamalar                                                          |
| ---- | --------------------------------------------------------------------- |
| 0    | `(FundRaisingRateB, Gte, 60_000)`, `(FundRaisingRateB, Lte, 120_000)` |

1e12 arzı ve 9 ondalak alıntı mintine sahip, `85e9 / 1e12 × 1e6 = 85_000` bu bant içinde oturur. Arzı iki katına çıkaran bir yaratıcı içinde kalmak için hedefi kabaca iki katına çıkarmalıdır — bu noktadır. İki kısıtlama, aksi takdirde `(arz, hedef)` çiftlerinin bir tablosu olacak şeyi değiştirir.

### 5. Bir göç tabanı

`MigrateRateA` mezuniyette CPMM havuzuna gerçekten inen arzın payıdır: `Supply − TotalSellA − TotalLockedAmount`, arz üzerinden. Mezun havuzun derinliğidir ve kurallardan önce platform tarafında eşdeğeri olmayan tek protokol düğümüdür.

| Grup | Kısıtlamalar                   |
| ---- | ------------------------------ |
| 0    | `(MigrateRateA, Gte, 150_000)` |

En az arzın %15'i havuza ulaşır. Bir yaratıcı eğride %95 satamaz ve arkasında sığ bir kitap bırakamaz.

<Note>
  Parametreler toplanmazsa — eğri satışından sonra kalan şeyden daha büyük kilitli bir miktar — türetilmiş değer hesaplanamaz ve kısıtlama kapalı başarısız olur, bu nedenle başlatma sessizce izin verilmek yerine reddedilir.
</Note>

### 6. Gerçekten uyguladığınız hak kazanma

`GlobalConfig.max_lock_rate` hak kazmayı yukarıdan kapaklar. Bir kural altına bir taban koyabilir ve gerçek bir uçurum gerektirebilir.

| Grup | Kısıtlamalar                                                                           |
| ---- | -------------------------------------------------------------------------------------- |
| 0    | `(LockRate, Gte, 50_000)`, `(LockRate, Lte, 200_000)`, `(CliffPeriod, Gte, 2_592_000)` |

Arzın %5 ile %20'si arasında hak kazanmış, en az 30 günlük bir uçurumla. "Anında kilit açma başlatması yok" konusu olan bir platform için yararlıdır.

### 7. Token-tipi kapıları

`BaseTokenProgram` ve `TransferFeeEnabled` bağımsızdır, bu önemlidir: `TransferFeeConfig` olmayan bir Token-2022 mint, SPL Token mint gibi `TransferFeeEnabled = 0` bildirir.

| Amaç                                 | Grup | Kısıtlamalar                                               |
| ------------------------------------ | ---- | ---------------------------------------------------------- |
| Yalnızca SPL Token                   | 0    | `(BaseTokenProgram, Eq, 0)`                                |
| Yalnızca Token-2022                  | 0    | `(BaseTokenProgram, Eq, 1)`                                |
| Token-2022, transfer ücreti yok      | 0    | `(BaseTokenProgram, Eq, 1)`, `(TransferFeeEnabled, Eq, 0)` |
| Transfer ücreti yok, her iki program | 0    | `(TransferFeeEnabled, Eq, 0)`                              |

### 8. Koşullu bir transfer-ücreti kapağı

"Eğer" operatörü yoktur ve hiçbiri gerekli değildir — iki grup koşulu ifade eder.

| Grup | Kısıtlamalar                                                                                               | Şöyle okunur                                                      |
| ---- | ---------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------- |
| 0    | `(TransferFeeEnabled, Eq, 0)`                                                                              | Transfer ücreti yok: tamam                                        |
| 1    | `(TransferFeeEnabled, Eq, 1)`, `(TransferFeeBasisPoints, Lte, 100)`, `(TransferFeeMaximumFee, Gte, 1_000)` | Ücret ile: en fazla %1 ve gerçekten ayarlanmış bir maksimum ücret |

Sıfır oranı `TransferFeeConfig` grup 0'dan kaymaz: uzantı mevcut, bu nedenle `TransferFeeEnabled` `1` ve yalnızca grup 1 bunu kabul edebilir.

### 9. Zaman sınırlı bir promo, önceden planlanmış

`UnixTimestamp` başlatmanın blok zamanıdır, bu nedenle bir grup kendi geçerlilik penceresini taşıyabilir. Her iki grubu bugün yazarsınız ve geçiş kendi başına gerçekleşir.

| Grup | Kısıtlamalar                                                            | Pencere                      |
| ---- | ----------------------------------------------------------------------- | ---------------------------- |
| 0    | `(UnixTimestamp, Lte, 1_767_225_600)`, `(TotalFundRaisingB, Gte, 30e9)` | Promo dönemi: 30 SOL minimum |
| 1    | `(UnixTimestamp, Gte, 1_767_225_601)`, `(TotalFundRaisingB, Gte, 80e9)` | Sonrasında: 80 SOL minimum   |

Sınırda işlem gerekmez. Maliyet bir yerine iki grup yuvası.

## Eğri-tipi kısıtlamaları

Dört alan `TotalSellA`'yı okur: `TotalSellA`, `SellRateA`, `MigrateAmountA` ve `MigrateRateA`. Sabit-ürün yapılandırmasında yaratıcı bu sayıyı sağlar. Sabit-fiyat veya doğrusal-fiyat yapılandırmasında eğri bunun yerine türetir ve program karşılaştırdığı değer `0`'dır; bu her başlatmayı reddeder.

Kendi yapılandırmanızı sessizce engelleyen bir kural yazmanıza izin vermek yerine, program yazma zamanında sabit olmayan bir yapılandırmada bu dört alanı reddeder, `CurveRuleFieldNotSupportedByCurve` ile. Bugün yalnızca sabit-ürün yapılandırmaları vardır, bu nedenle pratikte bu hatayı karşılaşmayacaksınız.

## Göndermeden önce kontrol edin

Zincir üstü kontrolün her iki yönü de zincir dışında mevcuttur, bu nedenle ne bir yaratıcı ne de bir platform işlemleri geri almayı izleyerek bir kuralı öğrenmek zorunda değildir.

<Info>
  **Sürüm başlığı.**

  * SDK: `@raydium-io/raydium-sdk-v2@0.2.42-alpha` bu sitenin diğer her kod demosunun sabitlendiği sürümdür. Aşağıdaki iki yardımcı eğri-kural desteğini gönderen SDK sürümüyle gelir; o zamana kadar, bunları programın `platform_curve_rule.rs`'den taşıyın veya programı çağırın ve hata kodunu okuyun.
  * Küme: önce Solana `devnet`'te test edin — bkz. [Devnet'te ilk test edin](#devnette-ilk-test-edin).
  * Program Kimliği: bkz. [`reference/program-addresses`](/tr/reference/program-addresses)

  Her iki yardımcı da saf işlevlerdir. Hiçbir RPC'ye dokunmazlar, bu nedenle bir formda her tuş vuruşunda çalıştırmak güvenlidir.
</Info>

### Bir başlatmadan önce: bu parametreler geçer mi?

`checkLaunchAgainstCurveRule` programın başlatma zamanı kontrolünü tam olarak yansıtır, kapalı başarısız davranışı da dahil. Bunu başlatma formunuzda çalıştırın ve yaratıcının geri alınan bir işlem için ödeme yapmasına izin vermek yerine gönder düğmesini bir nedenle devre dışı bırakabilirsiniz.

```ts theme={null}
import {
  checkLaunchAgainstCurveRule,
  getPdaPlatformCurveRule,
  LaunchpadCurveRuleBaseTokenProgram,
  LaunchpadCurveRuleField,
  PlatformCurveRule,
} from "@raydium-io/raydium-sdk-v2";
import BN from "bn.js";

const platformConfig = await raydium.launchpad.getPlatformConfig(platformConfigId);

// 0'da program kuralları hiç okumaz, bu nedenle kontrol edilecek bir şey yoktur
if (platformConfig.restrictCurveParam !== 0) {
  const ruleId = getPdaPlatformCurveRule(programId, platformConfigId, configId).publicKey;
  const ruleAccount = await connection.getAccountInfo(ruleId);

  const result = checkLaunchAgainstCurveRule({
    // hesap mevcut olmadığında tanımsız — platform bu yapılandırma için kural yazmadı
    rule: ruleAccount === null ? undefined : PlatformCurveRule.decode(ruleAccount.data),
    context: {
      curveType: globalConfig.curveType,
      migrateType: 1,
      migrateCpmmFeeOn: 0,
      supply: new BN("1000000000000000"),
      totalSellA: new BN("793100000000000"),
      totalFundRaisingB: new BN("85000000000"),
      totalLockedAmount: new BN(0),
      cliffPeriod: new BN(0),
      unlockPeriod: new BN(0),
      baseTokenProgram: LaunchpadCurveRuleBaseTokenProgram.SplToken,
      // temel mint transfer-ücreti uzantısı taşımadığında transferFee'yi tamamen atlayın
      unixTimestamp: new BN(Math.floor(Date.now() / 1000)),
    },
  });

  if (!result.ok) {
    // her grup başlatmayı reddetti; her giriş o grubun başarısız tüm kısıtlamalarını listeler
    for (const group of result.groupFailures) {
      for (const c of group.unsatisfied) {
        console.log(
          `grup ${group.groupId}: ${LaunchpadCurveRuleField[c.field]} ${c.actual ?? "hesaplanamaz"},`,
          `kural operatör ${c.op} ${c.value.toString()} istiyor`,
        );
      }
    }
  }
}
```

Yardımcının yaklaşık olarak değil, gerçekten yeniden üreten üç şey:

* **Eksik bir kural hesabı ve hiçbir grubu olmayan bir kural her ikisi de geçer.** Hiçbir kısıtlaması olmayan bir grup da öyle. Mevcut olmayan bir hesap için `rule: undefined` geçin; bunu bir reddetme olarak işlemeyin.
* **Hesaplanamayan değerler kapalı başarısız olur.** Sıfır arzın oranları yoktur ve eğri satışından sonra kalan şeyden daha büyük kilitli bir miktar göç miktarı yoktur. `actual` `undefined` geri gelir ve kısıtlama unsatisfied sayılır, tam olarak zincir üstü gibi.
* **Tüm başarısız kısıtlamalar raporlanır, yalnızca ilki değil.** Program yalnızca bir karar gerektiği için kısa devre yapar; yardımcı her şeyi toplar, böylece formunuz bir kerede her sorunu listeleyebilir.

Bilmediği tek şey işleminizin gerçekten ne zaman ineceği blok zamanıdır. Bir kural `UnixTimestamp`'i bir sınırın yakınında kullanırsa, bir geçişi geçici olarak değerlendirin.

### Bir kural yazmadan önce: bu grup yazılabilir mi?

`checkCurveRuleGroupWritable` `UpdatePlatformCurveRule`'nin yazma zamanı doğrulamasını yansıtır — kısıtlama kimlikleri, yinelenen `(alan, operatör)` kuralı, her iki sayı sınırı ve eğri-tipi kısıtlaması. Bunu imzalamadan önce platform yönetici aracınızda çalıştırın.

```ts theme={null}
import {
  checkCurveRuleGroupWritable,
  LaunchpadCurveRuleField,
  LaunchpadCurveRuleOp,
} from "@raydium-io/raydium-sdk-v2";

const constraints = [
  { field: LaunchpadCurveRuleField.Supply, op: LaunchpadCurveRuleOp.Eq, value: new BN("1000000000000000") },
  { field: LaunchpadCurveRuleField.TotalFundRaisingB, op: LaunchpadCurveRuleOp.Gte, value: new BN("50000000000") },
  { field: LaunchpadCurveRuleField.TotalFundRaisingB, op: LaunchpadCurveRuleOp.Lte, value: new BN("200000000000") },
];

const writable = checkCurveRuleGroupWritable({
  groupId: 0,
  constraints,
  curveType: globalConfig.curveType,
  // kuralın zaten tuttuğu kimlikler, böylece bir grubu değiştirmek bir ekleme olarak yanlış anlaşılmaz
  existingGroupIds: existingRule?.groups.map((g) => g.groupId) ?? [],
});

// her hata işlemin başarısız olacağı program hata kodunu taşır
if (!writable.ok) console.log(writable.errors);
```

<Note>
  Bu kontrolü geçmek, işlemin hatalı biçimlendirilmesi nedeniyle reddedilmeyeceği anlamına gelir. Kuralın ne demek istediğiniz olup olmadığı hakkında hiçbir şey söylemez — bir grup mükemmel şekilde geçerli olabilir ve yine de UI'nizin üretebileceği her başlatmayı reddedebilir. Yukarıdaki başlatma tarafı kontrolü bunun için: bir grup yazdıktan sonra, ürününüzün sunabileceği her şekli `checkLaunchAgainstCurveRule` aracılığıyla çalıştırın ve her birinin hala bir grup bulduğunu doğrulayın.
</Note>

### Devnet'te ilk test edin

Mainnet'te `restrict_curve_param`'ı etkinleştirmek yaratıcılarınızın yapabileceklerini hemen, her başlatma için değiştirir. Mainnet'e dokunmadan önce tüm diziyi devnet'te prova yapın:

1. Devnet'te bir platform yapılandırması ve kuralı oluşturun ve göndermek istediğiniz aynı grupları yazın.
2. UI'nizin üretebileceği her başlatma şeklini `checkLaunchAgainstCurveRule` aracılığıyla çalıştırın ve kararların beklediğiniz olanlar olduğunu doğrulayın — hem geçmesi gereken şekiller hem de reddedilmesi gereken şekiller.
3. `restrict_curve_param`'ı etkinleştirin, sonra geçmesi gereken bir token ve reddedilmesi gereken bir token gerçekten başlatın. İkincisi `CurveParamNotMatchPlatformRule` (`6025`) ile başarısız olmalıdır, `NotEnoughRemainingAccounts` (`6018`) ile değil — ikincisi oluşturucunuzun kural PDA'sını eklemediği ve kontrolün gerçekten uygulanmadığı anlamına gelir.
4. Yalnızca o zaman mainnet'te aynı sırayla tekrarlayın.

Adım 3, ısrar etmeye değer. Zincir dışı yardımcı ve zincir üstü program aynı kuralların iki uygulamasıdır ve devnet başlatması kuralınız için bunların anlaştığını kanıtlar — oluşturucunuzun hesabı hiç geçip geçmediği de dahil.

## Bir kuralı işletme

### Devredilen yönetici

Kuralları düzenlemek rutin iştir; bir platform yönetici anahtarı genellikle bir multisig'dir. `PlatformConfig.curve_rule_manager` tam olarak bunun için vardır: bunu bir kez `UpdatePlatformConfig::CurveRuleManager` aracılığıyla ayarlayın ve bu sıcak cüzdan kendi başına kural hesaplarını oluşturabilir, güncelleyebilir, kaldırabilir ve kapatabilir. Platform yöneticisi paralel olarak aynı gücü tutar, bu nedenle kayıp bir yönetici anahtarı kurtarılabilir — başka bir yönetici çağrısıyla döndürün.

Tehlikeye atılan yönetici anahtarının kapsamı: parametre kurallarınızı gevşetebilir veya silebilir ve bir kural hesabının kirasını geri talep edebilir. Ücret cüzdanlarına, hak kazmaya, CPMM yapılandırmasına dokunmaz, `restrict_curve_param`'ı çeviremez ve `GlobalConfig` limitini kıramaz. Bunu bir hazine anahtarı değil, bir yapılandırma anahtarı olarak değerlendirin.

### Kira içeriği takip eder

Bir kural hesabı hiçbir grup tutmadan oluşturulur ve her değişiklikte yeniden boyutlandırılır, bu nedenle gerçekten yazdığınız kurallar için ödeme yaparsınız. Bir grubu kaldırmak farkı imzalayan kişiye geri verir.

| Kural içeriği                  | Hesap boyutu | Kira         |
| ------------------------------ | ------------ | ------------ |
| Boş (yeni oluşturulmuş)        | 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  |

### Kullanıma sunma sırası

1. Tüm diziyi devnet'te prova yapın — bkz. [Devnet'te ilk test edin](#devnette-ilk-test-edin).
2. Kural hesabını oluşturun ve gruplarını yazın. Henüz hiçbir şey değişmez — `restrict_curve_param` hala `0` iken program bunları okumaz.
3. Kuralı zincir dışında [`checkLaunchAgainstCurveRule`](#bir-başlatmadan-önce-bu-parametreler-geçer-mi) ile kontrol edin: UI'nizin üretebileceği her başlatma şekli için, bir grubun bunu kabul ettiğini doğrulayın.
4. `restrict_curve_param`'ı `1` olarak ayarlayın. O andan itibaren yaratıcılarınızın başlatmaları kontrol edilir.
5. Geri almak için bunu `0` olarak ayarlayın. Kural hesabı bozulmadan bırakılır.

<Warning>
  Başlatma oluşturucunuz `restrict_curve_param` `1` iken kural PDA'sını `remaining_accounts`'a eklemelidir. Program hesap mevcut olmadığında bile hesabın mevcut olmasını gerektirir, böylece bir yaratıcı bunu atlayarak kontrolü atlayamaz — eksik bir hesap `NotEnoughRemainingAccounts`, geçiş değildir. Türetme `[b"platform_curve_rule", platform_config, global_config]`'dir.
</Warning>

## Başlatma zamanında maliyet

Kontrol etkinken her başlatmada çalışır, bu nedenle hesaplama maliyeti başına başlatma vergisidir. Uçtan uca ölçülen — PDA türetme, `remaining_accounts` taraması, seri durumdan çıkarma ve değerlendirme:

| Kural içeriği                      | Ucuz alanlar | Türetilmiş alanlar |
| ---------------------------------- | ------------ | ------------------ |
| Etkinleştirilmiş, 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             |

"Ucuz" `Supply` gibi doğrudan bir alan okumasıdır; "türetilmiş" `MigrateRateA` gibi hesaplanan birdir; bu, kısıtlama başına yaklaşık 223 CU'ya karşı yaklaşık 48 CU'ya mal olur. Türetilmiş kısıtlamaların tamamen yüklü bir kuralı bile varsayılan 200 000 CU başına talimat bütçesinin üçte birinin altında kalır ve gerçekçi bir üç grup kuralı 6 000'in altındadır. Gruplar eşleşen birine kadar değerlendirilir, bu nedenle yaygın katmanınızı ilk sırada koymak ücretsiz tasarrufdur.

## Sonra nereye gidilir

* [`products/launchlab/platform-config`](/tr/products/launchlab/platform-config) — kuralları kapı ve devreden `PlatformConfig` alanları.
* [`products/launchlab/global-config`](/tr/products/launchlab/global-config) — bir kuralın daraltması gereken protokol tabanları.
* [`products/launchlab/instructions`](/tr/products/launchlab/instructions) — dört kural talimatı ve hesapları.
* [`products/launchlab/accounts`](/tr/products/launchlab/accounts) — hesap envanterinde `PlatformCurveRule`.
* [`sdk-api/typescript-sdk`](/tr/sdk-api/typescript-sdk) — iki kontrol yardımcısının yaşadığı SDK yüzeyi.
* [`reference/changelog/2026-08-31-launchlab-platform-curve-rules`](/tr/reference/changelog/2026-08-31-launchlab-platform-curve-rules) — eğri-parametre beyaz listesini değiştiren ve dekoderler değiştirmesi gereken şey.

Kaynaklar:

* `raydium-launch/programs/launchpad/src/states/platform_curve_rule.rs` — `PlatformCurveRule`, `CurveRuleGroup`, `ParamConstraint`, alan ve operatör kimlik alanları ve `CurveRuleContext::value_of`.
* `raydium-launch/programs/launchpad/src/utils/platform_curve_rule.rs` — başlatma zamanı kontrolü.
* `raydium-launch/programs/launchpad/src/instructions/platform/` — `create`, `update`, `remove` ve `close_platform_curve_rule`.
