هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
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. - تمت إضافة رمز خطأ واحد:
6031LamportsCalculateError. الأكواد6000–6030لم تتغير. - ثلاثة قيود عنوان
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 يتبع نفس تسلسل SyncNative → UnwrapLamports بحجم دلتا → 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، سجلات الاستحقاق — نفس الأحجام، نفس الإزاحات. - أكواد الخطأ
6000–6030، بما في ذلك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-codes—6031موثقة.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.

