Ana içeriğe atla

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.

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 →
PlatformConfig, GlobalConfig ü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.

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:
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

// 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:
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).
  • 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. 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.
#[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:
// 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

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

TalimatKim imzalarNe değişir
CreatePlatformConfigplatform admin (tek seferlik)Hesabı PlatformParams ile başlatır.
UpdatePlatformConfigplatform adminparam: 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.
UpdatePlatformCurveParamplatform adminBir PlatformCurveParam girişini (global_config, index) ile ekleyin veya değiştirin.
RemovePlatformCurveParamplatform adminBir girişi temizleyin (tüm-sentinel = joker olarak ayarlayın).
ClaimPlatformFeeplatform_fee_walletPoolState.quote_vault’dan pool başına platform ücretini temizleyin.
ClaimPlatformFeeFromVaultplatform_fee_walletPlatform 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

Kaynaklar:
  • raydium-launch/programs/launchpad/src/states/platform_config.rsPlatformConfig, PlatformParams, MigrateNftInfo, PlatformCurveParam, BondingCurveParam, is_valid_curve_param.
  • raydium-launch/programs/launchpad/src/states/platform_global_access.rsPlatformGlobalAccess.
  • raydium-launch/programs/launchpad/src/lib.rscreate_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.