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

> Platform başına konfigürasyon; marka, ücret paylaştırması, NFT göç payları, vesting tahsisi ve bu platform üzerinden yönlendirilen herhangi bir lansman için izin verilen eğri şekillerinin beyaz listesini özelleştirir.

<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/platform-config)
</Info>

<Info>
  `PlatformConfig`, [`GlobalConfig`](/tr/products/launchlab/global-config) üzerine oturan **platform düzeyindeki** ayardır. `GlobalConfig` protokol genelindeki kuralları tanımlarken ("işlem ücreti %1, arz en az 10M, sadece bu cüzdan graduate edilebilir"), `PlatformConfig` her lansman platformunun — pump.fun, Raydium'un kendi arayüzü, üçüncü taraf launchpad'leri — ücretini eklemesi, mezuniyet sonrası LP'sinden payını talep etmesi, lansmanlarının hangi eğri şekillerini seçebileceğini kısıtlaması ve markalamalarını (ad, web sayfası, görüntü) zincir üzerinde göstermesi için kullandığı araçtır.
</Info>

## Nedir

Bir `PlatformConfig` hesabı, bir platform için dört bölüm kaygısını yönetir:

1. **Marka** — ad, web sayfası, görüntü linki; tümü satır içi depolanır, böylece herhangi bir explorer veya toplayıcı, bir token'i lansmanı yapan platformu gösterebilir.
2. **Platform ücreti** — protokolün `trade_fee_rate`'ine ek olarak `fee_rate` olan ekstra işlem ücreti. Platform'un `platform_fee_wallet`'ine tahakkuk eder. `GlobalConfig.max_share_fee_rate` tarafından 100 bps ile sınırlandırılır.
3. **NFT göç payı** — `RATE_DENOMINATOR_VALUE = 1_000_000`'a toplam olan ve mezuniyet sonrası LP'sini platform NFT cüzdanına minted edilen parçaya, creator NFT cüzdanına ve yakılmış parçaya (Burn & Earn) bölen üç tamsayı (`platform_scale`, `creator_scale`, `burn_scale`). Yalnızca graduation CPMM'yi hedefliyorsa (`migrate_type = 1`) anlamlıdır.
4. **Eğri parametresi beyaz listesi** — bu platformda hangi `(supply, total_base_sell, total_quote_fund_raising, migrate_type, migrate_cpmm_fee_on, vesting_params...)` kombinasyonlarına izin verildiğini listeleyen bir `Vec<PlatformCurveParam>`. Vektör boşsa veya tüm girdiler geçersizse, **herhangi bir** kombinasyon izinlidir; aksi takdirde lansmanlar girişlerden birini tam olarak eşleştirebilmelidir.

PDA türetimi:

```ts theme={null}
const [platformConfigPda] = PublicKey.findProgramAddressSync(
  [
    Buffer.from("platform_config"),
    platformAdmin.toBuffer(),       // platform'un sahip pubkey'i
  ],
  LAUNCHLAB_PROGRAM_ID,
);
```

(Kanonik seed listesi için kaynak koddaki `create_platform_config`'e bakınız.)

## Düzen

```rust theme={null}
// states/platform_config.rs
pub const PLATFORM_CONFIG_SEED: &str = "platform_config";
pub const NAME_SIZE: usize = 64;
pub const WEB_SIZE:  usize = 256;
pub const IMG_SIZE:  usize = 256;
pub const MAX_CREATOR_FEE_RATE: u64 = 5000;       // 50 bps (payda 1_000_000)
pub const MAX_TRANSFER_FEE_RATE: u16 = 500;       // 5%   (payda 10_000)
pub const MAX_CURVE_PARAMS: usize = 10;

#[account]
pub struct PlatformConfig {
    pub epoch:                       u64,
    pub platform_fee_wallet:         Pubkey,            // ClaimPlatformFee'yi imzalar
    pub platform_nft_wallet:         Pubkey,            // CPMM mezuniyetinde platform NFT payını alır
    pub platform_scale:              u64,               // platform NFT'sine minted LP'nin payı
    pub creator_scale:               u64,               // creator NFT'sine minted LP'nin payı
    pub burn_scale:                  u64,               // Burn & Earn aracılığıyla yakılan LP'nin payı
    pub fee_rate:                    u64,               // platform'un işlem ücreti (1/1_000_000)
    pub name:                        [u8; 64],          // sıfırlarla doldurulmuş utf-8
    pub web:                         [u8; 256],
    pub img:                         [u8; 256],
    pub cpswap_config:               Pubkey,            // grad sonrası pool'un bağlanacağı CPMM AmmConfig
    pub creator_fee_rate:            u64,               // mezuniyet öncesi alınan creator-taraflı ücret
    pub transfer_fee_extension_auth: Pubkey,            // Token-2022 lansmanları için: mezuniyet sonrası transfer-fee yetkileri kim alır
    pub platform_vesting_wallet:     Pubkey,
    pub platform_vesting_scale:      u64,               // total_locked_amount'ın platform payı
    pub platform_cp_creator:         Pubkey,            // grad sonrası CPMM pool'unda isteğe bağlı yaratıcı-kaydı
    pub padding:                     [u8; 108],
    pub curve_params:                Vec<PlatformCurveParam>, // izin verilen eğri şekillerinin beyaz listesi
}
```

`platform_scale + creator_scale + burn_scale` mutlaka `1_000_000` eşit olmalıdır (`MigrateNftInfo::check` tarafından doğrulanır). Üretimde görülen yaygın paylaştırmalar:

* `(0, 100_000, 900_000)` — %90 LP yakılır, %10 creator'e. Standart pump-stili fair lansman.
* `(50_000, 100_000, 850_000)` — küçük platform payı (%5), %10 creator, %85 burn.
* `(0, 0, 1_000_000)` — tam burn, NFT mint yok. Katı "iç taraflar yok" lansmanları.

## Marka alanları

`name`, `web` ve `img` sıfırlarla boyut sabitine kadar doldurulmuş satır içi bayt dizileridir. Onları dizge olarak okumak için ilk `\0`'a kadar dilimleyin:

```ts theme={null}
function readString(bytes: Uint8Array): string {
  const end = bytes.indexOf(0);
  return Buffer.from(end === -1 ? bytes : bytes.subarray(0, end)).toString("utf-8");
}
```

Sabitler bilerek cömert tasarlanmıştır (`name: 64`, `web: 256`, `img: 256`), böylece platformlar explorers ve toplayıcılar için zincir dışı depolamaya dokunmadan yeterli meta veri içerebilirler. Bu boyutları aşan herhangi bir şey `CreatePlatformConfig`'de `InvalidInput` ile geri döner.

## Ücret mekanikleri

Bir `PlatformConfig`'e bağlı bir eğri üzerindeki swap üç katmanlı ücret alır:

```
trade_fee     = amount_in × global_config.trade_fee_rate    / 1_000_000
platform_fee  = amount_in × platform_config.fee_rate        / 1_000_000
creator_fee   = amount_in × platform_config.creator_fee_rate / 1_000_000

amount_after_fee = amount_in − trade_fee − platform_fee − creator_fee
```

* `trade_fee` protokolün `protocol_fee_owner`'ına tahakkuk eder (`CollectFee` aracılığıyla talep edilir).
* `platform_fee` platform başına vault'a tahakkuk eder (`ClaimPlatformFee` veya `ClaimPlatformFeeFromVault` aracılığıyla talep edilir; bkz. [`instructions`](/tr/products/launchlab/instructions)).
* `creator_fee` creator'ün pubkey'i + quote mint'i tarafından anahtarlanan creator başına vault'a tahakkuk eder (`ClaimCreatorFee` aracılığıyla talep edilir).

`creator_fee_rate` `MAX_CREATOR_FEE_RATE = 5000` ile sınırlandırılır (50 bps). `fee_rate` (platform ücreti) `GlobalConfig.max_share_fee_rate` tarafından `10000` (100 bps) ile sınırlandırılır.

## NFT göç payı (yalnızca CPMM)

Bir lansman CPMM'ye mezun olduğunda (`migrate_type = 1`, `migrate_to_cpswap_wallet` tarafından imzalanır), göç talimatı `CPMM::InitializeWithPermission` tarafından minted edilen LP token'lerini üç yola ayırır:

```
lp_to_platform = lp_total × platform_scale / 1_000_000   → platform_nft_wallet
lp_to_creator  = lp_total × creator_scale  / 1_000_000   → creator NFT (Fee Key)
lp_to_burn     = lp_total × burn_scale     / 1_000_000   → Burn & Earn lock programı
```

Platform ve creator payları, LP-Lock programı (`LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE`) tarafından **NFT** olarak sarmalanır — NFT'nin sahibi, temel likiditeyi geri çekmeden indefinitely olarak tahakkuk eden CPMM ücretlerini talep etmeye hak sahibidir. Mezuniyet sonrası Fee Key akışı için bkz. [`products/launchlab/creator-fees`](/tr/products/launchlab/creator-fees).

Burn payı Lock programına `is_burn = true` ile gönderilir, böylece LP token'leri permanent olarak erişilemez hale gelir — pool'un fiyat tabanını herhangi birinin ücret geri alması olmadan güvence altına alırlar.

`migrate_type = 0` (AMM v4'e graduate) olduğunda, NFT split alanları yoksayılır ve tüm LP, ayrı bir AMM v4-taraflı akış tarafından kilitlenir / yakılır.

## Eğri parametresi beyaz listesi

`curve_params: Vec<PlatformCurveParam>`, platformun lansmanlarının hangi eğri şekillerini seçebileceğini kısıtlamak için mekanizması. Vektör boş değil ve en az bir girdi geçerliyse, program `Initialize`'da lansmanın parametrelerinin en az bir girdi ile tam olarak eşleşmesini uygular.

```rust theme={null}
#[derive(AnchorSerialize, AnchorDeserialize, Clone)]
pub struct PlatformCurveParam {
    pub epoch:                u64,
    pub index:                u8,           // bu platformun beyaz listesi içinde sıra
    pub global_config:        Pubkey,       // bu girdi hangi GlobalConfig'e uygulanır
    pub bonding_curve_param:  BondingCurveParam,
    pub padding:              [u64; 50],
}

#[derive(AnchorSerialize, AnchorDeserialize, Clone)]
pub struct BondingCurveParam {
    pub migrate_type:               u8,    // 0 = AMM v4, 1 = CPMM. u8::MAX = joker
    pub migrate_cpmm_fee_on:        u8,    // 0 = quote-only, 1 = her ikisi. u8::MAX = joker
    pub supply:                     u64,   // 0 = joker
    pub total_base_sell:            u64,   // 0 = joker
    pub total_quote_fund_raising:   u64,   // 0 = joker
    pub total_locked_amount:        u64,   // u64::MAX = joker
    pub cliff_period:               u64,   // u64::MAX = joker
    pub unlock_period:              u64,   // u64::MAX = joker
}
```

Her alan, **joker** anlamına gelen (herhangi bir değer eşleşir) bir sentinel değerine sahiptir: `u64` alanları için `u64::MAX`, `u8` alanları için `u8::MAX`, supply / sell / fund-raising alanları için `0`. Tüm sentinel'leri olan bir `BondingCurveParam` "her şeye izin ver" demektir — boş-beyaz liste davranışına eşdeğer.

`Initialize`'daki eşleştirme algoritması:

1. `curve_params`'ı, `global_config`'i lansmanın seçtiği `GlobalConfig`'le eşleşen girdilere filtreleyin.
2. Filtrelenen liste boşsa, herhangi bir parametreye izin verin (platform bu `GlobalConfig` için hiçbir şey beyaz listeye almamıştır).
3. Filtrelenen listedeki her girdi `all_is_invalid()` (her alan joker) ise, herhangi bir parametreye izin verin.
4. Aksi takdirde girdileri yineleyin; her girdi için, lansmanın parametrelerini her non-joker alanla kontrol edin. Tüm non-joker alanlar eşleşirse, kabul edin ve dönün.
5. Hiçbir girdi eşleşmezse, `InvalidInput` ile geri dönersiniz.

Bu, bir platformun "sadece standart 1B-supply / 800M-sold / 30k-USDC-raise / no-vesting şekline izin veremeyiz" diyebilmesini sağlar; bu dört alan için somut değerleri ve başka yerlerde joker'leri olan tek bir girdi yazarak. Veya daha sıkı bir platform, desteklenen lansman katmanı başına üç veya dört ayrık şekli numaralandırabilir.

`MAX_CURVE_PARAMS = 10` beyaz liste boyutunu sınırlandırır.

## `PlatformGlobalAccess` — bir platformu yetkilendirme

Bir `GlobalConfig`'in `requires_platform_auth = 1` olması durumunda, buna karşı her `Initialize` platform'un önceden yetkili olduğunu kanıtlayan bir `PlatformGlobalAccess` PDA'sı içermelidir:

```rust theme={null}
// states/platform_global_access.rs
pub const PLATFORM_GLOBAL_ACCESS_SEED: &str = "platform_global_access";

#[account]
pub struct PlatformGlobalAccess {
    pub bump:            u8,
    pub global_config:   Pubkey,
    pub platform_config: Pubkey,
    pub padding:         [u64; 8],
}
```

PDA seed'leri: `[b"platform_global_access", global_config, platform_config]`.

Protokol admin, `CreatePlatformGlobalAccess` aracılığıyla her `(GlobalConfig, PlatformConfig)` çifti için birini oluşturur ve `ClosePlatformGlobalAccess` aracılığıyla iptal eder. Bu hesap olmaksızın, bir lansman o `GlobalConfig`'e kapalı platform'dan bağlanamaz.

## Okuma yolu

```ts theme={null}
const platformConfig = await raydium.launchpad.getPlatformConfig(platformConfigPda);

console.log("Platform:", readString(platformConfig.name));
console.log("Fee rate:", platformConfig.feeRate, "(/1M)");
console.log("NFT split:",
  platformConfig.platformScale,
  platformConfig.creatorScale,
  platformConfig.burnScale,
);
console.log("Curve whitelist size:", platformConfig.curveParams.length);
```

"Bu token nereden lansmanı yapıldı" gösteren bir UI için, `PoolState.platform_config` kaynak `PlatformConfig`'i doğrudan işaret eder — bir kez getirin ve markalamayı önbelleğe alın.

## Güncelleme yolu

| Talimat                     | Kim imzalar                   | Ne değişir                                                                                                                                                                                   |
| --------------------------- | ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `CreatePlatformConfig`      | platform admin (tek seferlik) | Hesabı `PlatformParams` ile başlatır.                                                                                                                                                        |
| `UpdatePlatformConfig`      | platform admin                | `param: u8` ile anahtarlanan genel dispatch; çağrı başına bir alanı değiştirir. Marka alanları, ücret oranları, vesting cüzdanı ve çeşitli cüzdanlar hepsi bunun aracılığıyla ayarlanabilir. |
| `UpdatePlatformCurveParam`  | platform admin                | Bir `PlatformCurveParam` girişini `(global_config, index)` ile ekleyin veya değiştirin.                                                                                                      |
| `RemovePlatformCurveParam`  | platform admin                | Bir girişi temizleyin (tüm-sentinel = joker olarak ayarlayın).                                                                                                                               |
| `ClaimPlatformFee`          | `platform_fee_wallet`         | `PoolState.quote_vault`'dan pool başına platform ücretini temizleyin.                                                                                                                        |
| `ClaimPlatformFeeFromVault` | `platform_fee_wallet`         | Platform başına ücret vault'ını temizleyin (PDA at `[platform_config, quote_mint]`).                                                                                                         |

Cüzdan rotasyonları (`platform_fee_wallet`, `platform_nft_wallet`, `platform_vesting_wallet`, `platform_cp_creator`, `transfer_fee_extension_auth`, `cpswap_config`) hepsi `UpdatePlatformConfig` aracılığıyla gider. Kesin `param` kodları için kaynak kodunun `update_platform_config` dispatch tablosunu okuyun.

## Yaygın tuzaklar

* **Beyaz liste sentinel'leri yanlış ayarlanmış.** `total_locked_amount = 0` olan bir `BondingCurveParam` joker *değildir* — vesting'i açıkça devre dışı bırakan lansmanları eşleştirir. O alan için joker `u64::MAX`'dir. Aynı tuzak `cliff_period` ve `unlock_period` için de mevcuttur. Sentinel'leri doğru ayarlamak için `clear()`'ı (programın ortaya koyduğu) kullanın.
* **NFT-split yuvarlama.** Üç ölçek tam olarak `1_000_000` olmalıdır. `CreatePlatformConfig`'de birer hata geri döner; runtime'da birer hata fazladan bir LP birimi mint veya yakabilirdi, bu da sıkı eşitlik kontrolünün orada olmasının nedenidir.
* **Platform vesting çift-tahsisi.** Eğer `platform_vesting_scale > 0` ise, platform lansmanın fundraising'i bittikten sonra bir kere `CreatePlatformVestingAccount`'ı çağırmalıdır; unutursa, o pay unallocated ve dormant kalır forever (lansmanın `total_locked_amount` bütçesi tüketilir ama platform asla talep etmez).
* **`platform_cp_creator` belirsizliği.** `Pubkey::default()` olarak ayarlandığında, lansman creator'ü grad sonrası CPMM pool'unun `pool_creator`'ü olarak kaydedilir; gerçek bir anahtar olarak ayarlandığında, o anahtar kaydedilir. Bu, daha sonra `CPMM::CollectCreatorFee` çağırabilecek kişiyi etkiler. Platform-config oluşturma zamanında hangi modeli istediğinize karar verin.

## İşaretçiler

* [`products/launchlab/global-config`](/tr/products/launchlab/global-config) — bir lansmanın karşılaması gereken protokol-taraflı kurallar.
* [`products/launchlab/vesting`](/tr/products/launchlab/vesting) — `platform_vesting_scale` mekanikleri.
* [`products/launchlab/creator-fees`](/tr/products/launchlab/creator-fees) — Fee Key NFT, Burn & Earn.
* [`products/launchlab/platforms`](/tr/products/launchlab/platforms) — platform entegratör'ün nasıl yapılır kılavuzu.

Kaynaklar:

* `raydium-launch/programs/launchpad/src/states/platform_config.rs` — `PlatformConfig`, `PlatformParams`, `MigrateNftInfo`, `PlatformCurveParam`, `BondingCurveParam`, `is_valid_curve_param`.
* `raydium-launch/programs/launchpad/src/states/platform_global_access.rs` — `PlatformGlobalAccess`.
* `raydium-launch/programs/launchpad/src/lib.rs` — `create_platform_config`, `update_platform_config`, `update_platform_curve_param`, `remove_platform_curve_param`, `create_platform_global_access`, `close_platform_global_access`, `claim_platform_fee`, `claim_platform_fee_from_vault`.
