Skip to main content
هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
يعرّض LaunchLab مجموعة تعليمات محكمة: ستة استدعاءات موجهة للمستخدمين بالإضافة إلى عدد قليل من البدائيات الإدارية. يغلّف SDK جميعها؛ توثّق هذه الصفحة السطح الخام للمجمّعات وأدوات المراقبة والبرامج التي تحتاج إلى CPI.

جرد التعليمات

ينعكس الانقسام “ExactIn/ExactOut” في CPMM SwapBaseInput / SwapBaseOutput — على السلسلة يكونان محددات تعليمات منفصلة برقم تقريبي مختلف قليلاً. اختيار مسار التخرج. يجب أن تعيّن كل استدعاء Initialize و InitializeV2 و InitializeWithToken2022 جديد migrate_type = 1 (CPSWAP). أي محاولة لتهيئة مجموعة مرتبطة بـ AMM v4 جديدة تُرجع MigrateTypeNotMatch. amm_creator_fee_on يختار فقط ما إذا كانت رسوم منشئ CPMM الناتجة تنطبق على رمز الاقتباس أو كلا الرمزين؛ لا يختار برنامج الهدف. يبقى MigrateToAmm قابلاً للاستدعاء لـ PoolState موجود تمت تهيئته باستخدام migrate_type = 0 قبل هذا التقييد. الإصدار لا يعيد كتابة حالة المجموعة الموجودة أو يزيل التعليمة القديمة. برنامج رمز الاقتباس. قد يكون رمز الاقتباس مملوكًا لبرنامج SPL Token أو Token-2022. كل تعليمة تلمسه — CreateConfig و InitializeV2 و InitializeWithToken2022 وجميع التعليمات التجارية الأربع و CollectFee و CollectMigrateFee و ClaimCreatorFee و ClaimPlatformFee و ClaimPlatformFeeFromVault — تأخذ البرنامج المالك في فتحة حسابها. لم تتغير مواضع الحسابات؛ فقط القيمة المقبولة تغيرت. مرّر البرنامج الذي يملك فعلاً GlobalConfig.quote_mint، والذي يمكنك قراءته من بت PoolState.token_program_flag bit1 لإطلاق موجود (انظر accounts) أو من مالك حساب الرمز بخلاف ذلك. Initialize المهجور هو الاستثناء: حسابه برنامج الاقتباس لا يزال مكتوبًا لـ SPL Token، لذا يجب إطلاق إعداد رمز اقتباس Token-2022 من خلال InitializeV2 أو InitializeWithToken2022. MigrateToCpswap هو الاستثناء الآخر، في الاتجاه المعاكس — يأخذ كلا البرنامجين بدون شروط بدلاً من واحد لكل رمز. انظر حسابات الهجرة أدناه.

Initialize

إنشاء إطلاق جديد. الوسائط
الحسابات (مختصرة) الشروط السابقة
  • quote_mint ∈ launch_config.allowed_quote_mints.
  • base_supply_graduation ≤ base_supply_max.
  • معاملات الرسوم تمرّ فحوصات launch_config.max_*_fee_rate.
  • open_time ≥ now − slop (SDK يفرض ≥ now؛ البرنامج يتسامح مع التأخير البسيط).
  • curve_type معروف.
الشروط اللاحقة
  • base_mint له supply = base_supply_max، الكل في base_vault.
  • base_mint.mint_authority = launch_authority، freeze_authority = None.
  • LaunchState مهيأ مع status = Active، base_sold = 0، quote_reserve_real = 0.
  • quote_reserve_target محسوب من معاملات المنحنى + base_supply_graduation + buy_numerator (تقريبًا).
  • لـ InitializeWithToken2022 مع TransferFeeConfig مرفق: transfer_fee_config_authority = launch_authority، و withdraw_withheld_authority = PlatformConfig.transfer_fee_extension_auth عندما يكون هذا الحقل معيّنًا، وإلا launch_authority. يُكتب جانب السحب عند إنشاء الرمز بالضبط حتى تتمكن المنصة من مسح الرسوم المحتفظ بها قبل التخرج. انظر platform-config.
الأخطاء الشائعةInvalidQuoteMint، FeeRateTooHigh، InvalidCurveParams، MathOverflow.

Buy (المتغير الكنسي: BuyExactIn)

يوفر المستخدم quote_in ثابت؛ يحسب المنحنى base_out. الوسائط
الحسابات الشروط السابقة
  • launch_state.status == Active.
  • now ≥ open_time.
  • user_quote_ata.balance ≥ quote_in.
  • quote_in > 0.
التأثير
  1. قسّم quote_in إلى quote_in_after_fee وأجزاء الرسوم.
  2. حل المنحنى بـ Newton للحصول على base_out من الاقتباس بعد الرسوم.
  3. require(base_out ≥ minimum_base_out) وإلا عكّس ExceededSlippage.
  4. انقل quote_in من المستخدم → الخزينة. انقل base_out من الخزينة → المستخدم.
  5. حدّث base_sold += base_out، quote_reserve_real += quote_in_after_fee × (lp_share / total_share).
  6. حدّث عدادات الرسوم (protocol_fees_quote، creator_fees_quote).
  7. state_data.num_buys += 1.
  8. إذا كان quote_reserve_real ≥ quote_reserve_target بعد التحديث، يسلسل SDK عادةً تعليمة Graduate في نفس المعاملة. البرنامج لا يتخرج تلقائيًا داخل Buy — يلزم Graduate لاحق.

BuyExactOut

يحدد المستخدم base_out الدقيق؛ يحسب البرنامج quote_in. الوسائط
نفس الحسابات مثل BuyExactIn. يستخدم التكامل التربيعي الشكل المغلق (أو معكوس CPMM، لـ curve_type 1) بدلاً من تكرار Newton.

Sell / SellExactIn / SellExactOut

مرآة Buy. يعيد المستخدم base_in إلى المنحنى ويستقبل quote_out. يُخصم الرسم من quote_out، لذا يستقبل المستخدم أقل من العائدات المتكاملة الخام. الشروط السابقة
  • user_base_ata.balance ≥ base_in.
  • البيع لا يمكن أن يدفع base_sold تحت 0 (زائد مع المحاسبة المتسقة).
  • الإطلاق هو Active.
التأثير — متماثل مع Buy. base_sold ينخفض، quote_reserve_real ينخفض. الرسوم لا تزال تتراكم.

رسوم نقل جانب الاقتباس

عندما يحمل رمز الاقتباس TransferFeeConfig، المبلغ الذي تنقله الخزينة والمبلغ الذي يُخصم أو يُرصد للدافع يختلفان، والحد الأدنى للانزلاق يُفحص مقابل جانب الدافع. على رمز اقتباس بدون الامتداد كل حالة أدناه متطابقة مع رمز قديم عادي. نتيجتان للاقتباس:
  • حد محسوب كما لو كان الرمز خالي من الرسوم مرفوض. تمرير التكلفة الخالية من الرسوم كـ maximum_amount_in، أو العائدات الخالية من الرسوم كـ minimum_amount_out، يعكّس مع ExceededSlippage.
  • real_quote يتقدم فقط بما وصل إلى الخزينة. BuyExactIn من amount_in على رمز اقتباس 5% يحرك real_quote بـ amount_in × 0.95.
رمز اقتباس برسم 100% (10000 نقطة أساس) لا يمكن عكسه ويعكّس مع CalculateOverflow على مسارات الإخراج الدقيق. كلا رموز جانب التداول مقيدة أيضًا ببرنامج مرّر في فتحتها المطابقة، لذا base_token_program غير متطابق الآن يفشل بدلاً من تجاهله. انظر algorithms/token-2022-transfer-fees لرياضيات الرسوم الأساسية.

MigrateToAmm / MigrateToCpswap

تخرج إطلاق إلى مجموعة قابلة للتداول بمجرد أن يصل المنحنى إلى total_quote_fund_raising. الإطلاقات الجديدة هي CPMM فقط. يُحتفظ بـ MigrateToAmm للمجموعات الموجودة التي يكون migrate_type المخزن فيها 0. من يوقّع
  • MigrateToAmmmigrate_to_amm_wallet المسجل على GlobalConfig الملزم.
  • MigrateToCpswapmigrate_to_cpswap_wallet المسجل على GlobalConfig الملزم.
تُحتفظ بهذه المحافظ عادةً بواسطة كرنك التخرج الذي تشغله Raydium؛ عمليًا يهبط التخرج ثوانٍ بعد تجاوز الحد الأدنى، بغض النظر عمن أطلق الشراء النهائي. الوسائط يأخذ MigrateToAmm ثلاثة (بشكل أساسي معاملات سوق OpenBook التي يمرّرها البرنامج إلى AMM v4):
MigrateToCpswap لا يأخذ أي شيء. التأثير (مشترك بين الاثنين)
  1. تحقق من pool_state.status == Migrate (أي تم الوصول إلى quote_reserve_target). وإلا عكّس مع PoolMigrated (كانت الحالة بالفعل Migrated) أو PoolFunding (لا تزال في التمويل).
  2. تحقق من أن pool_state.migrate_type يطابق التعليمة (0 لـ AMM، 1 لـ CPMM). وإلا عكّس مع MigrateTypeNotMatch.
  3. احسب الاحتياطيات بعد التخرج:
    • base_amount_out = base_vault.amount − vesting_schedule.total_locked_amount
    • quote_amount_out = quote_vault.amount − quote_protocol_fee − migrate_fee − platform_fee
  4. CPI إلى برنامج الهدف (AMM v4 Initialize2 أو CPMM InitializeWithPermission) مع تلك الاحتياطيات لإنشاء مجموعة ما بعد التخرج.
  5. لهجرات CPMM المنفذة بعد ترقية 2026-08-17، دمج platform_scale + creator_scale في حصة LP مقفلة مملوكة للمنصة واحدة وأصدر على الأكثر مفتاح رسوم NFT واحد إلى platform_nft_wallet. احرق بقية burn_scale. قبل الترقية، كانت creator_scale مقفلة بشكل منفصل وذهب مفتاح الرسوم الخاص بها إلى منشئ الرمز. الهجرات التاريخية المكتملة لم تُعدّل. لتخرج AMM v4 القديم، يتبع توزيع LP تدفق التعليمة الموجود.
  6. اسحب base_mint.mint_authority (عيّن إلى None).
  7. اقلب pool_state.status = Migrated، عيّن vesting_schedule.start_time = block_time + cliff_period.
سلطة نقل رسوم Token-2022 — عندما تكون قاعدة الرمز رمز Token-2022 يحمل TransferFeeConfig و PlatformConfig.transfer_fee_extension_auth غير افتراضي، الهجرة تعيد أيضًا سلطات هذا الامتداد إلى مفتاح المنصة:
  • transfer_fee_config_authority يُعاد تعيينه دائمًا. PDA سلطة الإطلاق يحتفظ به لمرحلة ما قبل التخرج بأكملها، لذا هناك دائمًا شيء للنقل.
  • WithheldWithdraw يُعاد تعيينه فقط عندما يحتفظ به PDA السلطة. الإطلاقات المنشأة من 2026-08-27 فما بعده تحمل بالفعل transfer_fee_extension_auth على تلك السلطة من إنشاء الرمز، لذا يُتخطى الخطوة. الحراسة هي ما يمنع الهجرة من الانعكاس على تلك الرموز — لا يمكن لـ PDA التوقيع على سلطة لم تعد تحتفظ بها.
إذا كان transfer_fee_extension_auth هو Pubkey::default() في وقت الهجرة، لا تتحرك السلطات ولا تبقى كلاهما مع authority PDA بشكل دائم. انظر platform-config. الشروط اللاحقةBuyExactIn، BuyExactOut، SellExactIn، SellExactOut سترفض من هذه النقطة فصاعدًا مع PoolMigrated. مجموعة AMM الناتجة كنسية وتتداول مثل أي مجموعة AMM v4 / CPMM أخرى. الأخطاء الشائعةPoolFunding، PoolMigrated، MigrateTypeNotMatch، InvalidCpSwapConfig، MathOverflow.

حسابات هجرة CPMM المتبقية

يجب على العملاء الذين يبنون MigrateToCpswap استخدام فهارس remaining_accounts الثابتة هذه: تتطلب التعليمة على الأقل عشرة حسابات متبقية على المسار المحدّث. حسابات دعم الرمز هي مدخلات CPI للقراءة فقط. اشتق كلا العنوانين حتى عندما لا يكون للرمز سجل دعم مهيأ. يجب تحديث المنشئين الأقدم الذين لا يزالون يضيفون حسابات قفل المنشئ أو يحذفون الفهارس 8–9.

برامج هجرة رموز CPMM

يأخذ MigrateToCpswap كلا برنامجي الرموز بدون شروط ويعرّف أي برنامج يملك كل رمز بنفسه. أُعيدت تسمية حسابات برنامجي الرموز الخاصة به وفقًا لذلك: يحلان محل base_token_program السابق (أي برنامج يملك قاعدة الرمز) و quote_token_program (دائمًا قديم). المواضع لم تتغير، لذا هذا تغيير قيمة وليس تغيير تخطيط — لكن القيمتين قريبتان من الانعكاس، والمنشئ الذي يستمر في تمرير زوجه القديم سيوفر Token-2022 حيث يُطلب البرنامج القديم بمجرد أن يكون أي رمز رمز Token-2022. البرنامج القديم مطلوب حتى عندما لا يستخدم أي رمز، لأن رمز LP من CPMM ومفتاح الرسوم NFT للسيولة المقفلة يعيشان دائمًا عليه.

قائمة السماح GlobalConfig للمنصة

PlatformConfig.restrict_global_config يتحكم في الفحص:
  • 0: تقبل المنصة أي GlobalConfig صحيح بخلاف ذلك؛ لا يُطلب حساب سماح.
  • 1: يجب أن تتضمن Initialize و InitializeV2 و InitializeWithToken2022 PlatformAllowConfig المطابق في أي مكان في remaining_accounts.
ينشئ مسؤول المنصة أو يغلق PDA باستخدام CreatePlatformAllowConfig و ClosePlatformAllowConfig. بذوره هي [b"platform_allow_config", platform_config, global_config]. تعليمات PlatformGlobalAccess المدارة من قبل المسؤول السابقة و PDA متقاعدة.

قواعد معاملات الإطلاق للمنصة

أربع تعليمات تدير حساب PlatformCurveRule واحد. جميعها موقعة بواسطة PlatformConfig.curve_rule_manager أو مسؤول المنصة — يقبل البرنامج المسؤول بإعادة اشتقاق PDA PlatformConfig من الموقّع، لذا لا حساب منفصل يثبته. الموقّع الذي ليس أحدهما يُرجع InvalidCurveRuleAuthority. platform_curve_rule هو PDA في [b"platform_curve_rule", platform_config, global_config].
  • Create يخصص الحساب الذي لا يحتفظ بأي مجموعة. تلك الحالة لا تقيد أي شيء.
  • Update يدرج المجموعة مع group_id ذلك، يستبدلها بالكامل إذا كانت موجودة. يعيد حجم الحساب ليناسب، لذا يضيف الموقّع الإيجار الذي ينمو به ويستقبل الإيجار الذي ينكمش به. مجموعة جديدة تتجاوز العاشرة تُرجع CurveRuleGroupsExceeded؛ أكثر من 25 قيد، حقل غير معروف أو عامل، أو نفس زوج (field, op) مرتين في مجموعة واحدة تُرجع InvalidCurveRuleConstraint؛ الحقول الأربعة المشتقة من TotalSellA على إعداد غير ثابت الناتج تُرجع CurveRuleFieldNotSupportedByCurve.
  • Remove يسقط مجموعة واحدة بـ id، ينكمش الحساب ويسترد الفرق. معرّف غير معروف يُرجع CurveRuleGroupNotExist.
  • Close يعيد الإيجار بأكمله إلى الموقّع. الإعداد غير مقيد بعد ذلك حتى عندما يبقى restrict_curve_param 1.
لا يغيّر أي من الأربعة ما إذا كانت القواعد مفروضة. هذا هو UpdatePlatformConfig::RestrictCurveParam(0 | 1)، الذي يمكن فقط لمسؤول المنصة استدعاؤه. على مسار الإطلاق. بينما restrict_curve_param هو 1، تتطلب InitializeV2 و InitializeWithToken2022 PDA القاعدة في remaining_accounts — بما في ذلك عندما لا توجد، حتى لا يمكن حذفها لتخطي الفحص. حساب مفقود هو NotEnoughRemainingAccounts؛ إطلاق لا يرضي أي مجموعة هو CurveParamNotMatchPlatformRule. يعمل الفحص قبل حدود GlobalConfig الخاصة به ويمكن فقط تضييقها. نموذج وكتيبات: products/launchlab/curve-rules. كلا الخطأين قابلان للتجنب من جانب العميل — يعكس SDK هذا الفحص كدالة نقية، انظر تحقق قبل الإرسال.

CollectFee

مسح إداري لرسوم التداول المتراكمة للبروتوكول على إطلاق واحد. الوسائط — لا شيء. الحسابات التأثير — نقل pool_state.quote_protocol_fee من quote_vault إلى recipient_token_account، ثم صفّر العداد. قابل للاستدعاء في أي وقت بعد الشراء الأول.

CollectMigrateFee

مسح إداري لرسم الهجرة المتراكم عند التخرج. نفس شكل الحساب مثل CollectFee مع migrate_fee_owner كموقّع (بدلاً من protocol_fee_owner) و pool_state.migrate_fee كعداد مستنزف.

ClaimCreatorFee

مسح لكل منشئ للرسوم المتراكمة للمنشئ عبر كل إطلاق يملكه المنشئ الذي يستخدم نفس رمز الاقتباس. يستنزف خزينة رسوم لكل منشئ، وليس خزينة لكل مجموعة. الوسائط — لا شيء. الحسابات التأثير — نقل الرصيد الكامل لـ creator_fee_vault إلى recipient_token_account. ينعكس مع فحص require-greater-than-zero إذا كانت الخزينة فارغة.

ClaimPlatformFee

مسح لكل منصة يستنزف خزينة الاقتباس للإطلاق مباشرة. استخدم هذا عندما تريد منصة المطالبة بحصتها لإطلاق محدد واحد دون المرور عبر خزينة المنصة المجمّعة. الوسائط — لا شيء. الحسابات التأثير — نقل pool_state.platform_fee من quote_vault إلى recipient_token_account، صفّر العداد.

ClaimPlatformFeeFromVault

مسح مجمّع لكل منصة. يستنزف خزينة رسوم لكل رمز اقتباس للمنصة التي تتراكم رسوم من كل إطلاق موجّه عبر المنصة. الوسائط — لا شيء. الحسابات التأثير — نقل الرصيد الكامل لـ platform_fee_vault إلى recipient_token_account. ينعكس إذا كانت الخزينة فارغة.

تعليمات الاستحقاق وإعدادات المنصة

توثّق هذه على صفحات مخصصة لأن لكل منها نموذج حالة خاص بها:

مصفوفة تغيير الحالة

أين تذهب بعد ذلك

المصادر: