Skip to main content
هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
هذا هو الإصدار الذي يتوقف فيه LaunchLab عن حمل سقالات الانتقال الخاصة به. كانت هناك ثلاث آليات منفصلة لجعل الترقيات السابقة تهبط بسلاسة: get_upgrade_timestamp، وهي تاريخ قطع مشفر بالكود قارنت عدة فحوصات الساعة به؛ وInitialize المهجورة التي استمرت في العمل لمدة ثلاثة أيام بعد ذلك التاريخ؛ وMigrateToAmm’s OpenBook plumbing، التي لم يكن لديها شيء للتحدث معه بعد أن أزالت AMM v4 تبعيتها الخاصة على OpenBook في يوليو. كل الثلاثة اختفت. على mainnet، القطع يتجاوز عدة أشهر، لذا التأثير السلوكي معدوم — لكن أنماط الفشل تغيرت، وقائمة حساب واحدة تغيرت بشكل كبير. انتقل الإطار في نفس الوقت: Anchor 0.32.1 إلى =1.0.2، Agave 2.3.0 إلى 3.1.10. وكما هو الحال على AMM v4 و CPMM، توجد تعليمة مسؤول جديدة لاسترجاع الإيجار. التداول والرسوم والاستحقاق وقواعد المنحنى وتكوين المنصة لم تتغير.

ملخص سريع للمدمجين

  • لم تغير أي تعليمة تداول حساباتها أو معاملتها أو رياضياتها. BuyExactIn، BuyExactOut، SellExactIn، SellExactOut متطابقة بالبايت. لم يتغير أي تخطيط حساب.
  • Initialize (المهجورة) تفشل الآن دائماً مع NotApproved (6000 قبل قراءة أي حساب. استخدم InitializeV2. الإطلاقات التي تم إنشاؤها بالفعل من خلالها تتداول وتتخرج بشكل طبيعي.
  • MigrateToAmm كسر صعب لمحفظة الهجرة. فقدت جميع المعاملات الثلاثة (base_lot_size، quote_lot_size، market_vault_signer_nonce) وتسعة حسابات. انظر أدناه.
  • الحسابات الثلاثة remaining_accounts للتداول مطلوبة الآن بشكل غير مشروط، وفتحة system_program يتم التحقق منها. المنشئ الذي يحذفها يفشل الآن دائماً مع NotEnoughRemainingAccounts (6018) بدلاً من الفشل فقط بعد القطع.
  • تعليمة واحدة تمت إضافتها: CollectExcessLamports. للمسؤول فقط. انظر products/launchlab/instructions.
  • تمت إضافة رمز خطأ واحد: 6031 LamportsCalculateError. الأكواد 60006030 لم تتغير.
  • ثلاثة قيود عنوان MigrateToCpswap انتقلت إلى جسم التعليمة، مما غيّر خطأها من ConstraintAddress (2012) إلى RequireKeysEqViolated (2502).
  • يلزم تحديث IDL. تعليمة جديدة واحدة، مجموعة معاملات محذوفة واحدة، تسعة حسابات محذوفة، متغير خطأ جديد واحد.

MigrateToAmm فقدت نصفها من OpenBook

هذا هو التغيير الأكثر احتمالاً لكسر شيء ما. بيانات التعليمة القديمة حملت 17 بايت من المعاملات بعد المميز؛ البيانات الجديدة هي المميز العاري. قوائم الحسابات القديمة حملت تسعة حسابات لم تعد موجودة في الهيكل، لذا كل شيء بعد الإزالة الأولى غير محاذي. المعاملات المحذوفة: base_lot_size: u64، quote_lot_size: u64، market_vault_signer_nonce: u8. كانت جميعها موجودة فقط لتكوين سوق OpenBook التي استخدمها البرنامج لتهيئة بواسطة CPI. هذا CPI — initialize_openbook_market — اختفى، جنباً إلى جنب مع فحص gen_vault_signer_key الذي تحقق من الـ nonce. الحسابات المحذوفة: openbook_program، request_queue، event_queue، bids، asks، market_vault_signer، market_base_vault، market_quote_vault، وamm_open_orders. الأخيرة اختفت لأن Initialize2 الخاص بـ AMM v4 لم يعد يأخذها. حساب market يبقى، في موضعه الأصلي. AMM v4 لا يزال يسجل السوق كحقل مرجعي على AmmInfo، لذا LaunchLab لا يزال يعيده. شيئان عنه تغيرا: البرنامج لم يعد يهيئه، وهو الآن غير مدقق تماماً — إعلانه هو #[account(mut)] عاري بدون قيد مالك أو عنوان أو بذور، لأن owner = openbook_program.key() جاء بعيداً مع حساب openbook_program ولم يحل محله شيء. أياً كان ما تمرره محفظة الهجرة هناك يتم إعادته مباشرة إلى CPI Initialize2 الخاص بـ AMM v4 ويتم تسجيله على المجموعة الجديدة. المتصل الذي يريد سوقاً مهيأة حقيقية خلف هذا الحقل يجب أن ينشئها مسبقاً، والبرنامج لن يخبره بخلاف ذلك. قائمة الـ 23 حساب الناتجة موثقة بالكامل على products/launchlab/instructions. MigrateToCpswap لم تتأثر — لم يكن لديها معاملات قط، وقائمة حسابها لم تتغير.

Initialize المهجورة تفشل دائماً

كانت initialize تعمل سابقاً على إيقاف ناعم: عملت حتى get_upgrade_timestamp() + 3 days، ثم أرجعت NotApproved. مع حذف مساعد الطابع الزمني، الفشل غير مشروط — المعالج الآن هو msg! وerr!(NotApproved) وليس شيء آخر. تفصيل واحد إذا كنت تقرأ السجلات: هيكل Accounts لم يتغير ولا يزال يحمل أربعة قيود init، لذا المقدمة المولدة من Anchor للتحقق من الحسابات تعمل — وتنشئ تلك الحسابات — قبل أن يعود المعالج. المعاملة تنعكس على أي حال، لذا لا يتم إنشاء شيء فعلياً، لكن الفشل يظهر بعد التحقق من الحسابات بدلاً من قبله. يتم الاحتفاظ بالتعليمة بدلاً من إزالتها حتى يبقى المميز الخاص بها مشغولاً و IDL يحافظ على شكل مستقر. تعريفات معاملتها وحسابها لا تزال تستحق التوثيق لفك تشفير المعاملات التاريخية، والصفحة تحتفظ بها خلف تحذير.

بوابة get_upgrade_timestamp اختفت

أرجعت المساعدة 0 تحت ميزات local وdevnet والطابع الزمني المشفر بالكود mainnet 1755522000 (2025-08-18 13:00 UTC) بخلاف ذلك. أربع تعليمات قارنت الساعة به، عبر خمس مراجع في المصدر. كل واحدة تصبح فرع ما بعد القطع بشكل غير مشروط: طابع الـ mainnet الزمني يتجاوز سنة واحدة، لذا المنشئ الصحيح والمحدث لا يرى أي تغيير سلوكي. ما تغير هو أن المنشئ القديم يفشل الآن بشكل حتمي بدلاً من الظهور بأنه يعمل ضد بناء devnet. التحقق من system_program الجديد حقيقي جديد: كانت تلك الفتحة تقبل أي حساب سابقاً.

CollectExcessLamports

الخطوة 1 من SIMD-0437 هبطت على mainnet في 3 سبتمبر 2026، مما قلل الحد الأدنى المعفي من الإيجار بنسبة 9٪ مع أربع خطوات أخرى قادمة. كل خزينة مجموعة LaunchLab وخزينة رسوم و PDA مملوكة للبرنامج تم إنشاؤها قبل خطوة الآن ممولة بشكل زائد. تأخذ التعليمة أربعة حسابات ثابتة — محفظة الموقّع/الوجهة، واحد PDA سلطة الخزينة، وكلا برنامجي الرموز — ثم أي عدد من الحسابات المصدر في remaining_accounts. فتحة authority هي الجزء الذي يستحق القراءة بعناية. LaunchLab لديها ثلاثة PDAs سلطة الخزينة (vault_auth_seed، platform_fee_vault_auth_seed، creator_fee_vault_auth_seed)، والتعليمة تحل أيهما مررت بإعادة اشتقاق جميعها والمطابقة؛ مفتاح لا يطابق أي منها يفشل مع InvalidOwner (6001). لأن استدعاء واحد يحمل سلطة واحدة وبرنامج الرموز يتطلب من مالك الحساب الفعلي التوقيع، يجب تجميع الحسابات المصدر حسب السلطة — خزائن المجموعة وخزائن رسوم المنصة وخزائن رسوم المنشئ تكتسح في معاملات منفصلة. PDAs المملوكة للبرنامج يتم خصمها مباشرة ويمكنها الركوب مع أي سلطة. Wrapped SOL يتبع نفس تسلسل SyncNativeUnwrapLamports بحجم دلتا → assert-unchanged الذي يستخدمه CPMM و AMM v4، مع LamportsCalculateError (6031) إذا لم تصل الرحلة ذهاباً وإياباً إلى صفر. الإطلاق المقتبس بـ SOL يحتفظ باحتياطي الاقتباس الكامل. لا يمكن كنس النعناع الأساسي. InitializeV2 وInitializeWithToken2022 تلغي MintTokens في نفس التعليمة التي تسك الإمداد، لذا لا يمكن لأي مفتاح التوقيع على WithdrawExcessLamports لنعناع أساسي. إيجاره عالق بالتصميم. قد يكون الموقّع إما مسؤول البرنامج المشترك أو محفظة جمع lamports مخصصة؛ العناوين موجودة في reference/program-addresses.

نقل قيود MigrateToCpswap

ثلاثة قيود حساب انتقلت من هيكل Accounts إلى جسم التعليمة:
المتطلب متطابق — يجب أن تطابق جميعها الثلاثة القيم المخزنة على PoolState. فقط سطح الخطأ يختلف: RequireKeysEqViolated (2502) العام من Anchor، مُبلّغ عنه بدون اسم حساب، بدلاً من ConstraintAddress (2012) الذي يسمي الحساب المسيء. حدّث أي معالجة خطأ طابقت على 2012 لهذه الحسابات الثلاثة.

تغييرات سلسلة الأدوات والتبعيات

تطبق تغييرات موقع الاستدعاء الاثنان من Anchor 1.0 هنا أيضاً: Context ينهار من أربع معاملات عمر إلى واحد، وCpiContext::new يأخذ Pubkey البرنامج بدلاً من AccountInfo. انظر sdk-api/rust-cpi. تفصيلان لنظام البناء بدون تأثير على السلسلة: تم استبدال ميزة local بـ localnet، التي تجمع محفظة محلية كـ admin من متغير بيئة LAUNCHPAD_LOCALNET_ADMIN (yarn test:local-admin يسلكها)، وتم حذف كتلة [profile.release] المكررة في programs/launchpad/Cargo.toml — Cargo يتجاهل [profile] خارج جذر مساحة العمل، لذا كتلة الجذر كانت بالفعل الواحدة سارية المفعول، بما في ذلك حقيقة أن panic = "abort" الخاص بكتلة مستوى البرنامج لم يتم تطبيقه أبداً.

ما لم يتغير

  • كل تخطيط حساب. PoolState، GlobalConfig، PlatformConfig، PlatformCurveRule، PlatformAllowConfig، سجلات الاستحقاق — نفس الأحجام، نفس الإزاحات.
  • أكواد الخطأ 60006030، بما في ذلك 6020 المحتفظ به عن قصد.
  • رياضيات المنحنى ومعدلات الرسوم وتراكم الرسوم وجداول الاستحقاق وتقسيم LP للتخرج.
  • قواعد منحنى المنصة وقائمة السماح GlobalConfig. نفس التعليمات، نفس الحسابات، نفس الدلالات؛ فقط بوابة الساعة حول فحص قاعدة المنحنى اختفت.
  • قائمة حسابات MigrateToCpswap وفهارس remaining_accounts.
  • تسليم سلطة رسوم Transfer-Fee من Token-2022 عند التخرج.
  • معرف البرنامج. لم يتغير.

الصفحات المحدثة

  • products/launchlab/instructions — تمت إضافة CollectExcessLamports مع قائمة حسابها وجدول حل السلطة وتحذير التجميع؛ إزالات معاملات وحسابات MigrateToAmm موثقة مع القائمة الجديدة الكاملة؛ Initialize مقدمة بتحذير يفشل دائماً؛ قسم جديد “Trade remaining accounts” يغطي الحسابات الثلاثة غير المشروطة الآن وفحص system_program؛ صفوف المخزون ومصفوفة تغيير الحالة.
  • products/launchlab/overview — لافتة الإصدار؛ ثوابت “CPMM-only” والنعناع الأساسي صححت.
  • products/launchlab/accounts — توقيت إلغاء سلطة النعناع صحح لإنشاء الإطلاق (تم توثيقه عند التخرج)؛ صف CollectExcessLamports مضاف.
  • reference/error-codes6031 موثقة.
  • reference/program-addresses — قسم جديد “Excess-lamports collection wallets”.
  • solana-fundamentals/rent-and-reclaimable-rent — قسم جديد “What the Raydium programs sweep on their own side”.
  • sdk-api/rust-cpi، solana-fundamentals/toolchain — دبابيس Anchor 1.0 وملاحظات هجرة CPI.