هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
solana-program =2.1.0 منذ ترقية 2.1، وكان هذا التثبيت يعيق التقدم. انتقلت مساعدات نظام البرنامج إلى صندوق solana-system-interface الخاص بها في Solana 3.0، وبلغت spl-token الإصدار 9.0، وspl-associated-token-account بلغت 8.0. يأخذ هذا الإصدار جميع الثلاثة.
الثاني هو أموال يستحقها البروتوكول. SIMD-0437 يقلل الحد الأدنى المعفي من الإيجار بنسبة 90% في خمس خطوات، والخطوة 1 وصلت إلى mainnet في 3 سبتمبر 2026. كل حساب أنشأه AMM v4 قبل ذلك — مئات خزائن المجموعات، وسكات LP، وحسابات AmmInfo وTargetOrders — الآن ممول بشكل زائد، و lamports في حساب مملوك للبرنامج يمكن نقله فقط من قبل هذا البرنامج. ومن هنا تأتي تعليمة جديدة.
ملخص سريع للمدمجين
- لم يتغير شيء يستدعيه المتداول أو LP.
Initialize2،Deposit،Withdraw،SwapBaseIn،SwapBaseOut،SwapBaseInV2،SwapBaseOutV2،WithdrawPnlوSetParamsتحتفظ بقوائم حساباتها وتخطيطات الحجج والرياضيات. لم يتغير تخطيط الحساب. لم ينتقل رمز خطأ موجود. - تُضاف تعليمة واحدة:
WithdrawExcessLamports، الوسم18. مخصصة للمسؤول فقط، بدون حجج، قائمة حسابات متغيرة الطول. تُرجع lamports فوق الحد الأدنى المعفي من الإيجار من الحسابات المتحكم بها بواسطة AMM v4 ولا تلمس أي شيء آخر. انظرproducts/amm-v4/instructions. - يُضاف رمز خطأ واحد:
60LamportsCalculateError.AmmErrorليس مرقماً بطريقة Anchor — يبدأ من0— لذا هذا هوcustom program error: 0x3c. الأكواد0–59لم تتغير. - توقفت
CreateConfigAccount(الوسم 14) عن قراءة sysvar الإيجار وهي الآن موثقة كتعليمة بـ 4 حسابات. لا شيء في هذا الإصدار ينكسر، وهذا يشمل: كان الحساب الأخير في القائمة والمعالج يقرأ بشكل موضعي بدون فحص الطول، لذا أدوات المسؤول التي لا تزال تمررها تستمر في العمل. - يلزم تحديث IDL إذا كنت تُنشئ عملاء من واحد. تعليمة جديدة واحدة، متغير خطأ جديد واحد، قائمة حسابات متغيرة واحدة.
WithdrawExcessLamports
تأخذ التعليمة محفظة جمع lamports كالموقّع الوحيد والوجهة، PDA سلطة AMM v4، برنامج SPL Token، ثم أي عدد من الحسابات المصدر. تُرسل على مالك كل حساب مصدر:
فرع wSOL هو الفرع المثير للاهتمام. رصيد lamport لحساب wrapped-SOL هو رصيد token الخاص به، لذا يرفض برنامج token
WithdrawExcessLamports عليه تماماً. الرحلة ذهاباً وإياباً عبر SyncNative وUnwrapLamports بحجم الفرق تستخرج فقط الفائض المُتبرّع به وتترك الرصيد المُغلّف بالضبط حيث بدأ — وهذا مؤكد بعد ذلك، مع LamportsCalculateError إذا اختلفت الحسابات. لذا فإن خزانة مجموعة SOL تحتفظ بسيولتها الكاملة من خلال مسح، ولا يرى أي LP تغييراً في السعر عبر واحد.
الموقّع هو مفتاح مخصص لكل مجموعة، مشفّر بشكل ثابت تحت نفس وحدة config_feature مثل عناوين مالك AMM الموجودة وعناوين رسوم إنشاء المجموعة. بخلاف CPMM و LaunchLab، يقبل AMM v4 فقط تلك المحفظة — لا توجد نسخة احتياطية للمسؤول. العناوين موجودة في reference/program-addresses.
توقفت CreateConfigAccount عن قراءة sysvar الإيجار
Solana 3.0 هو ما يجعل Rent::get() الطريقة الطبيعية لقراءة معاملات الإيجار، لذا استبدل الإصدار جميع استدعاءات Rent::from_account_info(...) الأربعة في البرنامج. في ثلاثة منها — المساعدات التي تنشئ حسابات token المجموعة وسك LP وحسابات PDA أثناء Initialize2 — لا يزال حساب sysvar يُمرّر ولا يزال يُعاد توجيهه إلى CPIs برنامج token، لذا لا شيء عن قائمة الحساب تلك يتغير. في CreateConfigAccount لم يكن لـ sysvar أي غرض آخر وكان الحساب الأخير في القائمة، لذا خرج من القائمة الموثقة:
إرسال قائمة الخمسة حسابات القديمة لا يزال يعمل. الحساب المحذوف كان الأخير، و
process_create_config يقرأ حساباته الأربعة بشكل موضعي عبر next_account_info بدون أي شيء يفحص العدد الإجمالي، لذا لا يُنظر أبداً إلى حساب rent زائد. يجب تحديث أدوات المسؤول للوضوح، وليس الاستعجالية. لا يُنشئ أي بناء موجه للمستخدم هذه التعليمة على الإطلاق.
Initialize2 هي الحالة التي لا يجب الإفراط في القراءة: توقفت أيضاً عن استدعاء Rent::from_account_info، لكن حساب الإيجار الخاص بها يبقى في الموضع 3 ولا يزال يُستخدم بشكل حقيقي — يُعيد البرنامج توجيهه إلى CPIs spl_token::initialize_account وinitialize_mint التي تنشئ خزائن المجموعة وسك LP. حذفه من قائمة الحساب تلك سيكسر إنشاء المجموعة.
تغييرات التبعيات
أجزاء برنامج النظام التي يستخدمها البرنامج —
system_instruction::create_account، transfer، allocate، assign، ومعرّف البرنامج نفسه — تأتي الآن من solana-system-interface بدلاً من solana_program::system_program وsolana_program::system_instruction. معرّف البرنامج متطابق بالبايت، لذا هذا نقل وقت الترجمة بدون عواقب على السلسلة، بما في ذلك فحوصات InvalidSysProgramAddress التي تقارن ضده.
تم حذف وحدتان ميتتان أيضاً: srm_token وmsrm_token، إعلانات سك Serum/MSRM المتبقية من إزالة OpenBook. لم يُرجع إليها أي شيء.
ما لم يتغير
- كل تخطيط حساب.
AmmInfo،StateData،TargetOrders،AmmConfig— نفس الأحجام، نفس إزاحات الحقول. لا تغيير في indexer أو decoder. - أكواد الخطأ
0–59. يُضافLamportsCalculateErrorفي60، لذا لا شيء ينزاح. - PDA سلطة AMM. لا تزال PDA واحدة للبرنامج كله، البذرة
["amm authority"]، nonce254. - الرسوم والمحاسبة PnL والمنحنى. لم تُلمس.
WithdrawExcessLamportsتنقل lamports التي لم تكن أبداً جزءاً من احتياطيات أي مجموعة. - Token-2022. لا تزال غير مدعومة. التعليمة الجديدة تتحدث فقط إلى برنامج SPL Token الموروث.
- معرّف البرنامج. لم يتغير — انظر
reference/program-addresses.
الصفحات المحدثة
products/amm-v4/instructions— تُضافWithdrawExcessLamportsمع قائمة حساباتها وجدول الإرسال لكل مالك؛ قسم جديدCreateConfigAccount/UpdateConfigAccountيغطي إزالة rent-sysvar؛ صفوف جدول الجرد ومصفوفة تغيير الحالة مضافة.products/amm-v4/overview— لافتة الإصدار.reference/error-codes— قسم جديد “AMM v4:AmmErrorليس مرقماً بطريقة Anchor” يوثق الكود60والترقيم القائم على0.reference/program-addresses— قسم جديد “محافظ جمع الـ lamports الزائدة”.solana-fundamentals/rent-and-reclaimable-rent— قسم جديد “ما تمسحه برامج Raydium على جانبها الخاص”؛ ملاحظة wrapped-SOL صُححت لتقول أن كلا برنامجي token يعرضانUnwrapLamports.solana-fundamentals/toolchain— Agave 3.1.10،release.anza.xyz، Rust 1.91.0.

