الانتقال إلى المحتوى الرئيسي

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.

هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
PlatformConfig هو تراكب على مستوى المنصة يستقر فوق GlobalConfig. حيث يحدد GlobalConfig القواعد على نطاق البروتوكول (“رسم التجارة 1%، يجب أن يكون الإمداد على الأقل 10 مليون، فقط هذا المحفظة يمكنها التخرج”)، PlatformConfig هو ما تستخدمه كل منصة إطلاق — pump.fun، واجهة Raydium الخاصة، منصات الطرف الثالث — لإضافة رسومها، والمطالبة بحصتها من LP بعد التخرج، وتقييد أشكال المنحنيات التي يمكن لإطلاقاتها أن تختار، وعرض علامتها التجارية (الاسم، الموقع الإلكتروني، الصورة) على السلسلة.

ما هو عليه

حساب PlatformConfig يمتلك أربع مخاوف عابرة للقطاع لمنصة:
  1. العلامة التجارية — الاسم، الموقع الإلكتروني، رابط الصورة، كل شيء مخزّن مضمنًا حتى يمكن لأي مستكشف أو معالج بيانات عرض المنصة التي أطلقت الرمز.
  2. رسم المنصة — رسم تجارة إضافي (fee_rate) فوق trade_fee_rate البروتوكول. يتراكم في محفظة رسوم المنصة (platform_fee_wallet). مغطى بـ 100 نقطة أساس بواسطة GlobalConfig.max_share_fee_rate.
  3. تقسيم هجرة NFT — ثلاثة أعداد صحيحة (platform_scale, creator_scale, burn_scale) تجمع إلى RATE_DENOMINATOR_VALUE = 1_000_000 وتقسم LP بعد التخرج إلى قطعة مسكوكة لمحفظة NFT المنصة، وقطعة لمحفظة NFT المنشئ، وقطعة محروقة (Burn & Earn). ذات مغزى فقط عندما يستهدف التخرج CPMM (migrate_type = 1).
  4. قائمة معاملات المنحنى البيضاءVec<PlatformCurveParam> تدرج بالضبط أي (supply, total_base_sell, total_quote_fund_raising, migrate_type, migrate_cpmm_fee_on, vesting_params...) المجموعات المسموحة على هذه المنصة. إذا كان المتجه فارغًا أو جميع الإدخالات غير صالحة، أي مجموعة مسموحة؛ وإلا يجب أن تطابق الإطلاقات أحد الإدخالات بالضبط.
اشتقاق PDA:
const [platformConfigPda] = PublicKey.findProgramAddressSync(
  [
    Buffer.from("platform_config"),
    platformAdmin.toBuffer(),       // platform's owning pubkey
  ],
  LAUNCHLAB_PROGRAM_ID,
);
(انظر create_platform_config في المصدر لقائمة البذور القانونية.)

التخطيط

// 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 (denominator 1_000_000)
pub const MAX_TRANSFER_FEE_RATE: u16 = 500;       // 5%   (denominator 10_000)
pub const MAX_CURVE_PARAMS: usize = 10;

#[account]
pub struct PlatformConfig {
    pub epoch:                       u64,
    pub platform_fee_wallet:         Pubkey,            // signs ClaimPlatformFee
    pub platform_nft_wallet:         Pubkey,            // receives the platform NFT slice at CPMM graduation
    pub platform_scale:              u64,               // share of LP minted to platform NFT
    pub creator_scale:               u64,               // share of LP minted to creator NFT
    pub burn_scale:                  u64,               // share of LP burned via Burn & Earn
    pub fee_rate:                    u64,               // platform's trade fee (1/1_000_000)
    pub name:                        [u8; 64],          // utf-8 padded with zeros
    pub web:                         [u8; 256],
    pub img:                         [u8; 256],
    pub cpswap_config:               Pubkey,            // CPMM AmmConfig that the post-grad pool will bind to
    pub creator_fee_rate:            u64,               // creator-side fee taken pre-graduation
    pub transfer_fee_extension_auth: Pubkey,            // for Token-2022 launches: who inherits transfer-fee authorities post-graduation
    pub platform_vesting_wallet:     Pubkey,
    pub platform_vesting_scale:      u64,               // platform's slice of total_locked_amount
    pub platform_cp_creator:         Pubkey,            // optional creator-of-record on the post-graduation CPMM pool
    pub padding:                     [u8; 108],
    pub curve_params:                Vec<PlatformCurveParam>, // whitelist of permitted curve shapes
}
يجب أن يساوي platform_scale + creator_scale + burn_scale قيمة 1_000_000 (تحقق بواسطة MigrateNftInfo::check). التقسيمات الشائعة الموجودة في الإنتاج:
  • (0, 100_000, 900_000) — 90% LP محروق، 10% للمنشئ. إطلاق عادل على نمط pump القياسي.
  • (50_000, 100_000, 850_000) — حصة منصة صغيرة (5%)، 10% منشئ، 85% حرق.
  • (0, 0, 1_000_000) — حرق كامل، لا توجد سكات NFT. إطلاقات صارمة “بدون مطلعين”.

حقول العلامة التجارية

name وweb وimg عبارة عن صفائف بايت مضمنة مبطنة بأصفار حتى ثابتها. لقراءتها كنصوص، قم بالتقطيع حتى أول \0:
function readString(bytes: Uint8Array): string {
  const end = bytes.indexOf(0);
  return Buffer.from(end === -1 ? bytes : bytes.subarray(0, end)).toString("utf-8");
}
الثوابت متعمدة السخاء (name: 64، web: 256، img: 256) بحيث يمكن للمنصات تضمين بيانات وصفية كافية للمستكشفات والمعالجات دون اللجوء إلى تخزين غير متسلسل. أي شيء يتجاوز هذه الأحجام يعود عند CreatePlatformConfig مع InvalidInput.

ميكانيكا الرسوم

يفرض swap على منحنى مرتبط بـ PlatformConfig ثلاث رسوم متعددة الطبقات:
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 في protocol_fee_owner البروتوكول (تم المطالبة به عبر CollectFee).
  • يتراكم platform_fee في خزينة لكل منصة (تم المطالبة به عبر ClaimPlatformFee أو ClaimPlatformFeeFromVault؛ انظر instructions).
  • يتراكم creator_fee في خزينة لكل منشئ مفتاح بواسطة المفتاح العام للمنشئ + ضرب الاقتباس (تم المطالبة به عبر ClaimCreatorFee).
يقتصر creator_fee_rate على MAX_CREATOR_FEE_RATE = 5000 (50 نقطة أساس). يقتصر fee_rate (رسم المنصة) على 10000 (100 نقطة أساس) بواسطة GlobalConfig.max_share_fee_rate.

تقسيم هجرة NFT (فقط CPMM)

عندما يتخرج الإطلاق إلى CPMM (migrate_type = 1، موقعة بواسطة migrate_to_cpswap_wallet)، تقسم تعليمات الهجرة رموز LP المسكوكة بواسطة CPMM::InitializeWithPermission بثلاث طرق:
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
يتم تجميع شرائح المنصة والمنشئ كـ NFTs بواسطة برنامج LP-Lock (LockrWmn6K5twhz3y9w1dQERbmgSaRkfnTeTKbpofwE) — يحق لصاحب NFT المطالبة برسوم CPMM المتراكمة بلا حد دون القدرة على سحب السيولة الأساسية. انظر products/launchlab/creator-fees لتدفق Fee Key بعد التخرج. يتم إرسال شريحة الحرق إلى برنامج القفل باستخدام is_burn = true بحيث تصبح رموز LP بشكل دائم غير قابلة للوصول — فهي تؤمن أرضية سعر المجمع دون أن تدفع أبدًا الرسوم لأي شخص. عندما migrate_type = 0 (التخرج إلى AMM v4)، يتم تجاهل حقول تقسيم NFT وكامل LP مقفول / محروق وفقًا لتدفق جانب AMM v4 منفصل.

قائمة معاملات المنحنى البيضاء

curve_params: Vec<PlatformCurveParam> هي آلية المنصة لتقييد أشكال المنحنيات التي يمكن لإطلاقاتها أن تختار. إذا كان المتجه غير فارغ وكان هناك إدخال واحد على الأقل صالحًا، يفرض البرنامج عند Initialize أن معاملات الإطلاق تطابق إدخالًا واحدًا على الأقل بالضبط.
#[derive(AnchorSerialize, AnchorDeserialize, Clone)]
pub struct PlatformCurveParam {
    pub epoch:                u64,
    pub index:                u8,           // ordinal within this platform's whitelist
    pub global_config:        Pubkey,       // which GlobalConfig this entry applies to
    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 = wildcard
    pub migrate_cpmm_fee_on:        u8,    // 0 = quote-only, 1 = both. u8::MAX = wildcard
    pub supply:                     u64,   // 0 = wildcard
    pub total_base_sell:            u64,   // 0 = wildcard
    pub total_quote_fund_raising:   u64,   // 0 = wildcard
    pub total_locked_amount:        u64,   // u64::MAX = wildcard
    pub cliff_period:               u64,   // u64::MAX = wildcard
    pub unlock_period:              u64,   // u64::MAX = wildcard
}
كل حقل له قيمة حارس تعني wildcard (أي قيمة تطابق): u64::MAX لحقول u64، u8::MAX لحقول u8، 0 لحقول الإمداد / البيع / جمع التمويل. BondingCurveParam مع جميع الحراس هو “السماح بأي شيء” — معادل لسلوك القائمة البيضاء الفارغة. خوارزمية المطابقة عند Initialize:
  1. تصفية curve_params لإدخالات التي global_config تطابق GlobalConfig المختار للإطلاق.
  2. إذا كانت القائمة المفلترة فارغة، السماح بأي معاملات (لم تقيّد المنصة أي شيء لهذا GlobalConfig).
  3. إذا كان كل إدخال في القائمة المفلترة له all_is_invalid() (كل حقل هو البديل)، السماح بأي معاملات.
  4. بخلاف ذلك، كرّر الإدخالات؛ لكل إدخال، تحقق من معاملات الإطلاق ضد كل حقل غير wildcard. إذا طابقت جميع الحقول غير wildcard، قبول وعودة.
  5. إذا لم يطابق أي إدخال، عودة مع InvalidInput.
هذا يتيح لمنصة أن تقول “نسمح فقط بشكل الإطلاق القياسي 1B-supply / 800M-sold / 30k-USDC-raise / no-vesting” بكتابة إدخال واحد مع قيم ملموسة لتلك الحقول الأربعة و wildcards في كل مكان آخر. أو منصة أكثر صرامة قد تعدد ثلاثة أو أربعة أشكال منفصلة، واحد لكل درجة إطلاق مدعومة. MAX_CURVE_PARAMS = 10 يحد من حجم القائمة البيضاء.

PlatformGlobalAccess — ترخيص منصة

عندما يكون لدى GlobalConfig قيمة requires_platform_auth = 1، يجب أن يتضمن كل Initialize ضده PlatformGlobalAccess PDA يثبت أن المنصة قد تم ترخيصها مسبقًا:
// 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: [b"platform_global_access", global_config, platform_config]. يقوم مسؤول البروتوكول بإنشاء واحدة من هذه لكل زوج (GlobalConfig, PlatformConfig) عبر CreatePlatformGlobalAccess ويلغيها عبر ClosePlatformGlobalAccess. بدون هذا الحساب، لا يمكن للإطلاق الربط بـ GlobalConfig من المنصة المحاطة.

مسار القراءة

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);
لواجهة مستخدم تظهر “من أين تم إطلاق هذا الرمز”، يشير PoolState.platform_config مباشرة إلى PlatformConfig الأصلي — أحضره مرة واحدة وخزّن مؤقتًا العلامة التجارية.

مسار التحديث

التعليماتمن يوقّعما الذي يتغير
CreatePlatformConfigمسؤول المنصة (مرة واحدة)تهيئة الحساب باستخدام PlatformParams.
UpdatePlatformConfigمسؤول المنصةتوزيع عام مفتاح بـ param: u8؛ يتغير حقل واحد لكل استدعاء. حقول العلامة التجارية، معدلات الرسوم، محفظة التوزيع، والمحافظ المختلفة قابلة للتعيين جميعها من خلال هذا.
UpdatePlatformCurveParamمسؤول المنصةإضافة أو استبدال إدخال PlatformCurveParam واحد بـ (global_config, index).
RemovePlatformCurveParamمسؤول المنصةمسح إدخال واحد (ضبطه على جميع الحراس = wildcard).
ClaimPlatformFeeplatform_fee_walletكسح رسم المنصة لكل مجمع من PoolState.quote_vault.
ClaimPlatformFeeFromVaultplatform_fee_walletكسح خزينة رسم المنصة لكل منصة (PDA في [platform_config, quote_mint]).
جميع دورات المحافظ (platform_fee_wallet, platform_nft_wallet, platform_vesting_wallet, platform_cp_creator, transfer_fee_extension_auth, cpswap_config) تمر عبر UpdatePlatformConfig. اقرأ جدول توزيع update_platform_config في المصدر لأكواد param الدقيقة.

المزالق الشائعة

  • حراس القائمة البيضاء خاطئة. BondingCurveParam مع total_locked_amount = 0 ليس wildcard — فهو يطابق الإطلاقات التي تختار بوضوح عدم التوزيع. البديل لذلك الحقل هو u64::MAX. الفخ نفسه موجود لـ cliff_period وunlock_period. استخدم clear() (الذي يكشفه البرنامج) لتعيين الحراس بشكل صحيح.
  • تقريب تقسيم NFT. يجب أن تجمع الموازين الثلاثة إلى بالضبط 1_000_000. أخطاء قريبة من الواحد عند CreatePlatformConfig تعود؛ قريبة من الواحد في وقت التشغيل قد تسك أو تحرق وحدة LP واحدة إضافية، وهذا ما يوجد فحص المساواة الصارم لمنعه.
  • مضاعفة تخصيص التوزيع للمنصة. إذا كان platform_vesting_scale > 0، يجب على المنصة استدعاء CreatePlatformVestingAccount مرة واحدة بعد انتهاء جمع تمويل الإطلاق؛ إذا نسيت، تلك الحصة تبقى غير مخصصة وخامدة إلى الأبد (ميزانية total_locked_amount الإطلاق يتم استهلاكها لكن المنصة لا تطالب أبدًا).
  • غموض platform_cp_creator. عند تعيينها إلى Pubkey::default()، يتم تسجيل مُنشئ الإطلاق كـ pool_creator لمجمع CPMM بعد التخرج؛ عند تعيينها لمفتاح حقيقي، يتم تسجيل ذلك المفتاح بدلاً من ذلك. هذا يؤثر على من يمكنه استدعاء CPMM::CollectCreatorFee لاحقًا. قرر في وقت إنشاء تكوين المنصة أي نموذج تريده.

مؤشرات

المصادر:
  • 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.