Skip to main content
هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
يكشف LaunchLab عن مجموعة تعليمات محكمة: ستة استدعاءات موجهة للمستخدمين بالإضافة إلى عدد قليل من البدائيات الإدارية. يغلف SDK جميعها؛ توثق هذه الصفحة السطح الخام للمجمعات وأدوات المراقبة والبرامج التي تحتاج إلى CPI.أعاد ترقية البرنامج 2026-09 بناء LaunchLab على Anchor 1.0.2 / Solana 3.1.10 وأزالت ثلاث آليات انتقالية: Initialize المهجورة الآن تفشل دائمًا، فقدت MigrateToAmm وسائطها الثلاثة وكل حسابات OpenBook، وذهبت بوابة get_upgrade_timestamp التي جعلت عدة فحوصات مشروطة بالساعة. كما تضيف تعليمة إدارية واحدة، CollectExcessLamports. انظر إلى إدخال السجل 2026-09-09.

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

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

Initialize

تم حذفها فعليًا اعتبارًا من ترقية 2026-09 — هذه التعليمة تفشل دائمًا. معالج initialize الآن مجرد سجل يقول Not supported. Please use initialize_v2 instruction و NotApproved (6000). يتم الاحتفاظ بها فقط لكي يبقى المميز الخاص بها محتلاً والـ IDL يحافظ على شكل مستقر. (هيكل Accounts لم يتغير، لذا التحقق المُنشأ من Anchor يعمل أولاً؛ المعاملة تنعكس على أي حال.)في السابق، كانت مقيدة بالساعة: كانت تعمل حتى ثلاثة أيام بعد قطع get_upgrade_timestamp وفشلت بعد ذلك. مساعد الطابع الزمني هذا اختفى، لذا الفشل الآن غير مشروط. الإطلاقات الموجودة التي تم إنشاؤها من خلالها لم تتأثر — فهي تتداول وتتخرج بشكل طبيعي عبر MigrateToAmm أو MigrateToCpswap حسب migrate_type المخزن لديهم.الحجج وقائمة الحسابات أدناه خاصة بـ InitializeV2. الـ Initialize المهجور يأخذ نفس 18 حسابًا بنفس الترتيب والحجج الثلاث الأولى فقط — ليس لديه amm_fee_on — وفتحة quote_token_program الخاصة به مكتوبة بـ SPL Token بدلاً من Interface<TokenInterface>.
إنشاء إطلاق جديد. InitializeV2 يضيف فقط حجة amm_fee_on على Initialize المهجور؛ عدد الحسابات والترتيب متطابقان تمامًا، والفرق الوحيد على مستوى الحسابات هو أن quote_token_program مكتوب Interface<TokenInterface> بحيث يتم قبول mint اقتباس Token-2022. الحجج أربع حجج موضعية، وليست هيكلاً واحدًا. (InitializeWithToken2022 يضيف خامسة، transfer_fee_extension_param: Option<TransferFeeExtensionParams>؛ الـ Initialize المهجور يحذف amm_fee_on.)
يجب أن يطابق المتغير global_config.curve_type أو ستنعكس التعليمة مع InputNotMatchCurveConfig (6003). لا يوجد open_time، لا حجة quote_mint (تأتي من global_config)، لا هيكل fees ولا post_graduation_lp_policy — يتم تعيين التخلص من LP على PlatformConfig، وليس لكل إطلاق. الحسابات — 18 في المجموع (16 معلنة بالإضافة إلى إضافات #[event_cpi] الاثنتان) الشروط المسبقة
  • 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 = curve_param.supply، كل شيء في base_vault.
  • سلطة الـ mint تكون ملغاة في نفس التعليمة (set_authority(MintTokens, None)) مباشرة بعد سك الإمداد — وليس عند التخرج. mint الأساسي بالتالي ذو إمداد ثابت دائمًا، ولا يمكن لأي تعليمة لاحقة أن تسك المزيد.
  • PoolState مهيأ مع status = Fund (0)، real_a = 0، real_b = 0.
  • total_fund_raising_b يأتي مباشرة من curve_param.total_quote_fund_raising.
  • لـ InitializeWithToken2022 مع TransferFeeConfig مرفق: transfer_fee_config_authority = launch_authority، و withdraw_withheld_authority = PlatformConfig.transfer_fee_extension_auth عندما يتم تعيين هذا الحقل، وإلا launch_authority. يتم كتابة جانب السحب عند إنشاء mint بالضبط حتى تتمكن المنصة من مسح الرسوم المحتفظ بها قبل التخرج. انظر platform-config.
الأخطاء الشائعة — NotApproved (6000، بدون شروط، لـ Initialize المهجور)، InvalidInput (6002، انتهاك إمداد / معدل / حد أدنى لجمع الأموال من GlobalConfig)، InputNotMatchCurveConfig (6003، متغير curve_param لا يطابق global_config.curve_type)، MigrateTypeNotMatch (6007، migrate_type != 1)، MathOverflow (6008)، VestingRatioTooHigh (6010)، NoSupportExtension (6017)، NotEnoughRemainingAccounts (6018)، InvalidPlatformAllowConfig (6022)، CurveParamNotMatchPlatformRule (6025). فشل فحص Anchor address = / constraint = يظهر كرمز 2xxx، وليس أحد هذه — لا يوجد InvalidQuoteMint أو FeeRateTooHigh أو InvalidCurveParams في تعداد الأخطاء في البرنامج.

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

يوفر المستخدم مبلغ إدخال ثابت؛ المنحنى يحسب الإخراج. الحجج
جميع تعليمات التداول الأربع تأخذ ثلاث حجج، وليس اثنتين. تعليمة مبنية بحجتين فقط تكون 8 بايتات قصيرة وتفشل في فك التسلسل.
الحسابات الحسابات المتبقية — أنابيب الرسوم، تُقرأ بهذا الترتيب الدقيق:
  1. share_fee_receiver — فقط عندما share_fee_rate > 0.
  2. system_program — دائمًا؛ يتم التحقق من == System::id()، وإلا InvalidInput.
  3. platform_fee_vault — PDA [platform_config, quote_token_mint]؛ تُنشأ عند الاستخدام الأول.
  4. creator_fee_vault — PDA [creator, quote_token_mint]؛ تُنشأ عند الاستخدام الأول.
النقص يُرجع NotEnoughRemainingAccounts (6018). لا توجد فتحة associated_token_program، و system_program حساب متبقي وليس معلن. الشروط المسبقة
  • 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 (زائد مع ما سبق نظراً لأن المحاسبة متسقة).
  • Launch في حالة Active.
التأثير — متماثل مع Buy. ينخفض base_sold، ينخفض quote_reserve_real. تستمر الرسوم في التراكم.

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

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

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

تأخذ جميع التعليمات التجارية الأربع أنابيب الرسوم الخاصة بها من خلال remaining_accounts، بهذا الترتيب:
تم التغيير في 2026-09: الثلاثة الأخيرة الآن غير مشروطة، وsystem_program يتم التحقق منه. قبل هذا الإصدار، كان البرنامج يقرأها فقط عندما unix_timestamp >= get_upgrade_timestamp()، وتخطى تقسيم رسم platform/creator بالكامل قبل تلك اللحظة. الطابع الزمني قد مضى، لذا السلوك على mainnet لم يتغير عملياً — لكن الفرع اختفى من الكود، والمُنشئ الذي لا يزال يحذف الحسابات الثلاثة الآن يفشل دائماً مع NotEnoughRemainingAccounts (6018) بدلاً من فقط بعد القطع. يتم فحص فتحة system_program بشكل إضافي مقابل System::id() وتعود InvalidInput (6002) إذا كانت تحتوي على أي شيء آخر، حيث تم قبول أي حساب في هذا الموضع سابقاً.

MigrateToAmm / MigrateToCpswap

تخريج إطلاق إلى مجموعة قابلة للتداول بمجرد وصول المنحنى إلى total_quote_fund_raising. الإطلاقات الجديدة تكون CPMM فقط. يتم الاحتفاظ بـ MigrateToAmm للمجموعات الموجودة التي يكون migrate_type المخزن فيها هو 0. من يوقّع
  • MigrateToAmm — محفظة migrate_to_amm_wallet المسجلة على GlobalConfig المرتبط.
  • MigrateToCpswap — محفظة migrate_to_cpswap_wallet المسجلة على GlobalConfig المرتبط.
عادة ما تكون هذه المحافظ مملوكة لآلية التخريج التي تديرها Raydium؛ في الممارسة العملية، يحدث التخريج بعد ثوانٍ من تجاوز الحد الأدنى، بغض النظر عمن أطلق عملية الشراء الأخيرة. المعاملات لا يأخذ أي منهما أي معاملات.
تغيير جذري (محفظة الهجرة فقط، 2026-09). أسقط MigrateToAmm جميع المعاملات الثلاثة — base_lot_size، quote_lot_size، market_vault_signer_nonce — وتسعة حسابات. بيانات التعليمات الخاصة به الآن هي المميز الفارغ فقط، لذا فإن المُنشئ القديم يرسل 17 بايت معاملات غير متوقعة ويوفر قائمة حسابات لا تتوافق بعد الآن.يتبع هذا إزالة OpenBook الخاصة بـ AMM v4: لا يأخذ Initialize2 الخاص بـ AMM v4 market_program أو amm_open_orders بعد الآن، لذا لم يكن لدى LaunchLab شيء متبقٍ للإرسال. توقف البرنامج أيضًا عن CPI-ing initialize_openbook_market، وهو ما كانت المعاملات الثلاثة تُعدّه.الحسابات المحذوفة: openbook_program، request_queue، event_queue، bids، asks، market_vault_signer، market_base_vault، market_quote_vault، و amm_open_orders. حساب market يبقى في موضعه — AMM v4 لا يزال يسجله كحقل مرجعي — لكنه الآن معلن كـ #[account(mut)] فارغ: بدون قيد مالك أو عنوان أو بذور. إنه غير مُتحقق منه تماماً، يتم إرساله مباشرة إلى CPI الخاص بـ Initialize2 في AMM v4، والبرنامج لم يعد يهيئه. يجب على المتصل الذي يريد أن يكون حساب السوق سوقاً حقيقياً مهيأً أن ينشئه بنفسه مسبقاً.قائمة الـ 23 حساب المتبقية، بالترتيب: payer، base_mint، quote_mint، market، amm_program، amm_pool، amm_authority، amm_lp_mint، amm_base_vault، amm_quote_vault، amm_target_orders، amm_config، amm_create_fee_destination، authority، pool_state، global_config، base_vault، quote_vault، pool_lp_token، spl_token_program، associated_token_program، system_program، rent_program.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 — عندما يكون base mint عبارة عن Token-2022 mint يحمل TransferFeeConfig و PlatformConfig.transfer_fee_extension_auth غير افتراضي، تقوم الهجرة أيضاً بإعادة تعيين سلطات هذا الامتداد إلى مفتاح المنصة:
  • يتم إعادة تعيين transfer_fee_config_authority دائماً. يحتفظ بها PDA authority الخاص بالإطلاق طوال مرحلة ما قبل التخريج، لذا هناك دائماً شيء يجب نقله.
  • يتم إعادة تعيين WithheldWithdraw فقط عندما يحتفظ بها PDA authority لا تزال. الإطلاقات المنشأة من 2026-08-27 فما بعده تحمل بالفعل transfer_fee_extension_auth على تلك السلطة من إنشاء الرمز، لذا يتم تخطي الخطوة. الحراسة هي ما يمنع الهجرة من الرجوع على تلك الرموز — لا يمكن لـ PDA أن توقع سلطة لم تعد تحتفظ بها.
إذا كان transfer_fee_extension_auth هو Pubkey::default() في وقت الهجرة، فلا تتحرك أي سلطة وكلاهما يبقى مع authority PDA بشكل دائم. انظر platform-config.
عرض base mint ثابت من الإنشاء، وليس من التخريج. InitializeV2 و InitializeWithToken2022 يصكان العرض الكامل في base vault ثم يلغيان فوراً MintTokens في نفس التعليمات، لذا base_mint.mint_authority هو None طوال حياة الإطلاق. الهجرة لا تلمسه. (الإصدارات السابقة من هذه الصفحة وضعت الإلغاء عند التخريج؛ كان ذلك خطأ.) السلطات الوحيدة التي يمكن للهجرة نقلها هي سلطات Token-2022 transfer-fee الموصوفة أدناه.
الشروط اللاحقة — BuyExactIn، BuyExactOut، SellExactIn، SellExactOut سترفض من هذه النقطة فصاعداً مع PoolMigrated. مجموعة AMM الناتجة قانونية وتتداول مثل أي مجموعة AMM v4 / CPMM أخرى. الأخطاء الشائعة — PoolFunding، PoolMigrated، MigrateTypeNotMatch، InvalidCpSwapConfig، MathOverflow.

حسابات CPMM migration المتبقية

يجب على العملاء الذين ينشئون MigrateToCpswap استخدام مؤشرات remaining_accounts الثابتة هذه: تتطلب التعليمات على الأقل عشرة حسابات متبقية. حسابات support-mint هي مدخلات CPI للقراءة فقط. اشتق كلا العنوانين حتى عندما لا يكون للرمز سجل دعم مهيأ. يجب تحديث المُنشئين الأقدم الذين لا يزالون يضيفون حسابات creator-lock أو يحذفون المؤشرات 8–9.
تم التغيير في 2026-09. تنظيفان، لا أحدهما يغير المُنشئ الصحيح:
  • مسار CPMM المرخص هو الآن المسار الوحيد. اعتاد MigrateToCpswap على الاختيار بين InitializeCpSwap و InitializeCpSwapWithPermission بناءً على unix_timestamp >= get_upgrade_timestamp(). مساعد الطابع الزمني والـ CPI القديم كلاهما اختفى، لذا ينطبق المسار المرخص — وبالتالي الحد الأدنى من عشرة حسابات — بدون شروط.
  • تم نقل ثلاثة قيود عنوان من هيكل الحساب إلى جسم التعليمات. platform_config، base_vault، و quote_vault لا تزال مطلوبة لمطابقة القيم المخزنة على PoolState، لكن عدم التطابق الآن يتم رفعه بواسطة require_keys_eq! بدلاً من قيد Anchor address =. الفحص معادل؛ فقط السطح الخطأ يختلف — تحصل على RequireKeysEqViolated (2502) العام من Anchor بدلاً من ConstraintAddress (2012)، ويتم الإبلاغ عنه بدون اسم حساب. حدّث أي معالجة خطأ طابقت على 2012 لهذه الحسابات الثلاثة.

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

يأخذ MigrateToCpswap كلا برنامج الرموز بدون شروط ويعرف أي برنامج يمتلك كل رمز بنفسه. تمت إعادة تسمية حسابات برنامج الرموز الخاصة به وفقاً لذلك: يحلان محل base_token_program السابق (أي برنامج امتلك base mint) و quote_token_program (دائماً قديم). المواضع لم تتغير، لذا هذا تغيير قيمة وليس تغيير تخطيط — لكن القيمتين قريبتان من الانعكاس، والمُنشئ الذي يستمر في تمرير زوجه القديم سيوفر Token-2022 حيث يكون البرنامج القديم مطلوباً بمجرد أن يكون أي رمز Token-2022 mint. البرنامج القديم مطلوب حتى عندما لا يستخدمه أي رمز، لأن CPMM LP mint و Fee Key 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 يسقط مجموعة واحدة حسب المعرّف، ينكمش الحساب ويسترجع الفرق. معرّف غير معروف يعيد 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

عملية مسح إداري للرسوم التجارية المتراكمة في البروتوكول على إطلاق واحد. المعاملات — لا توجد. الحسابات
quote_mint يأتي قبل recipient_token_account هنا — عكس ClaimCreatorFee و ClaimPlatformFee و ClaimPlatformFeeFromVault، التي تضع المستقبِل أولاً. الفتحتان لهما أنواع Anchor مختلفة (Mint مقابل TokenAccount)، لذا تبديلهما يفشل في فك التسلسل في وقت التشغيل ويبدو وكأنه خطأ حساب خاطئ. CollectMigrateFee له نفس الترتيب مثل 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. يتراجع إذا كانت الخزينة فارغة.

CollectExcessLamports

عملية مسح إداري لـ lamports الموجودة فوق الحد الأدنى المعفي من الإيجار على الحسابات التي يتحكم فيها LaunchLab. تمت إضافتها في ترقية 2026-09 بحيث يمكن للبروتوكول استرجاع التمويل الزائد الذي يتركه SIMD-0437 rent reduction على الحسابات المُنشأة قبل كل خطوة. فقط الزيادة تتحرك. أرصدة الرموز وبيانات الحساب والمالكون وحالة المنحنى والاستحقاق لا تتأثر، والتعليمات هي عملية بدون تأثير على حساب بالفعل عند الحد الأدنى — لذا من الآمن إعادة التشغيل بعد كل خطوة نشر. المعاملات — لا توجد. الحسابات اختيار authority يتم تمرير الحساب بدون فحص ويتم حله بواسطة البرنامج، الذي يعيد اشتقاق جميع ثلاث PDAs سلطة LaunchLab ومطابقة: مفتاح لا يطابق أيًا من الثلاثة يفشل التعليمات بالكامل مع InvalidOwner (6001).
جمّع حسابات المصدر حسب السلطة. استدعاء واحد يحمل authority واحد، وبرنامج الرموز يتطلب من المالك الفعلي للحساب التوقيع. حساب رموز مملوك لـ PDA مختلف من الثلاثة عن authority الذي مررته يجعل CPI يفشل ويأخذ المعاملة بأكملها معه. قم بمسح خزائن المجموعة وخزائن رسوم المنصة وخزائن رسوم المنشئ في معاملات منفصلة.PDAs المملوكة للبرنامج هي الاستثناء — يتم خصمها مباشرة، لذا يمكنها الركوب مع أي سلطة.
كيفية التعامل مع كل حساب مصدر لا يمكن مسح العملات الأساسية. InitializeV2 و InitializeWithToken2022 يلغيان MintTokens على العملة الأساسية في نفس التعليمات التي تصك الإمداد، لذا لا يمكن لأي مفتاح توقيع WithdrawExcessLamports لها — يبقى إيجار العملة حيث هو بشكل دائم. الأخطاء الشائعة — InvalidOwner (6001، موقّع خاطئ أو authority ليس أحد ثلاث PDAs)، LamportsCalculateError (6031، رحلة wSOL ذهاباً وإياباً لم تصل إلى صفر)، و InsufficientFunds من مسار البرنامج المملوك عندما يحتفظ حساب برصيد أقل من حد الإيجار الخاص به. لا منشئ SDK. @raydium-io/raydium-sdk-v2 لا يشحن منشئ لهذه التعليمات، وكذلك مستودع raydium-sdk-V2-demo — إنها مسار إداري. قم بترميزها يدويًا، بالطريقة التي يفعلها مسح جانب المحفظة في solana-fundamentals/rent-and-reclaimable-rent لتعليمات برنامج الرموز.

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

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

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

الخطوات التالية

المصادر: