Stable AMM هو برنامج مستقل بمعرّف برنامج خاص به. إنه ليس وضعًا من أوضاع برنامج AMM v4، وليس يتم التداول به “عبر” AMM v4 — بل يتم نشره وترقيته واستدعاؤه بشكل منفصل. يشبه AMM v4 فقط في اتفاقيات الرسوم وتخطيط الحسابات.
ترقية 2026-06-22 — حذف كود OpenBook (السوق) الميت. توقف Stable AMM عن نشر الأوامر إلى OpenBook منذ وقت طويل؛ مسار صنع السوق في دفتر الطلبات كان خاملاً لسنوات. تحذف هذه الترقية الحسابات والكود المتبقية المتعلقة بالسوق — إنها لا تغير سلوك التداول المباشر.نتيجتان للمدمجين:
- تخطيطات حسابات أصغر.
SwapBaseIn / SwapBaseOut (18 → 9)، Deposit (14 → 12)، و Withdraw (21/22 → 12) تحذف حسابات Serum/السوق الميتة. التخطيطات القديمة لا تزال تُحلل للتوافقية العكسية. WithdrawPnl (16 → 10) هو تغيير كسر صعب بدون مسار توافقية (مسؤول فقط).
- معظم التعليمات محذوفة. فقط
SwapBaseIn و SwapBaseOut و Deposit و Withdraw و WithdrawPnl تبقى قابلة للاستدعاء. لا يمكن استدعاء جميع التعليمات الأخرى.
سجل التغييرات: reference/changelog.
جرد التعليمات
قابلة للاستدعاء
| التعليمة | الفئة | ملاحظات |
|---|
Deposit | السيولة | إضافة السيولة، استقبال LP. تخطيط جديد بـ 12 حساب؛ التخطيط القديم بـ 14 حساب لا يزال متوافقًا. |
Withdraw | السيولة | حرق LP، استقبال الطرفين. تخطيط جديد بـ 12 حساب؛ التخطيط القديم بـ 21/22 حساب لا يزال متوافقًا. |
SwapBaseIn | مبادلة | مبادلة بمدخل دقيق. تخطيط جديد بـ 9 حسابات؛ التخطيط القديم بـ 18 حساب لا يزال متوافقًا. |
SwapBaseOut | مبادلة | مبادلة بمخرج دقيق. تخطيط جديد بـ 9 حسابات؛ التخطيط القديم بـ 18 حساب لا يزال متوافقًا. |
WithdrawPnl | مسؤول | مسح رسوم البروتوكول المتراكمة. تخطيط جديد بـ 10 حسابات (كسر صعب — بدون توافقية التخطيط القديم). |
محذوفة (لا يمكن استدعاؤها)
تم حذفها في ترقية 2026-06-22 ولا يمكن استدعاؤها بعد الآن. انظر التعليمات المحذوفة.
| التعليمة | الفئة السابقة | الغرض السابق |
|---|
Initialize | دورة الحياة | إنشاء مجموعة. |
PreInitialize | دورة الحياة | مساعد تخصيص مسبق قديم. |
InitModelData | إعداد النموذج | إنشاء وتهيئة جدول البحث. |
UpdateModelData | إعداد النموذج | ملء ما يصل إلى 5 عناصر جدول لكل استدعاء. |
MonitorStep | كرنك | تسوية ملء OpenBook، إعادة نشر الأوامر. |
SetParams | مسؤول | تغيير معاملات المجموعة. |
WithdrawSrm | قديم | مسح استرجاع خصم رسوم SRM. |
SimulateInfo | تشخيصي | مساعد اقتباس للقراءة فقط. |
Deposit
إضافة السيولة، استقبال رموز LP.
الحجج
max_coin_amount: u64
max_pc_amount: u64
base_side: u64 // 0 = base on coin, 1 = base on pc
الحسابات — التخطيط الجديد، 12 حساب (قابل للكتابة W، موقّع S)
| # | الاسم | W | S | ملاحظات |
|---|
| 0 | token_program | | | SPL Token. |
| 1 | amm | W | | AmmInfo المجموعة. |
| 2 | amm_authority | | | PDA على مستوى البرنامج. |
| 3 | amm_target_orders | W | | |
| 4 | amm_lp_mint | W | | عملة LP. |
| 5 | amm_coin_vault | W | | خزينة عملة المجموعة. |
| 6 | amm_pc_vault | W | | خزينة pc المجموعة. |
| 7 | model_data_account | | | جدول بحث للقراءة فقط. |
| 8 | user_source_coin | W | | مدخل عملة المستخدم. |
| 9 | user_source_pc | W | | مدخل pc المستخدم. |
| 10 | user_dest_lp | W | | ATA LP المستخدم. |
| 11 | user_source_owner | | S | موقّع المعاملة. |
التوافقية: تم حذف amm_open_orders (القديم #3) و serum_market (القديم #9). عند تمرير 14 حساب، يتم تحليل التعليمة بالتخطيط القديم بـ 14 حساب؛ يتم تجاهل حسابات Serum.
الرياضيات — نسبة قياسية باستخدام جدول البحث لحساب النسبة. يحسب SDK زوج عملة/pc للمبلغ المطلوب من LP ويتحقق من الحدود القصوى.
Withdraw
حرق LP، استقبال الطرفين بنسبة.
الحجج
amount: u64 // رموز LP للحرق
الحسابات — التخطيط الجديد، 12 حساب (قابل للكتابة W، موقّع S)
| # | الاسم | W | S | ملاحظات |
|---|
| 0 | token_program | | | SPL Token. |
| 1 | amm | W | | AmmInfo المجموعة. |
| 2 | amm_authority | | | PDA على مستوى البرنامج. |
| 3 | amm_target_orders | W | | |
| 4 | amm_lp_mint | W | | عملة LP. |
| 5 | amm_coin_vault | W | | خزينة عملة المجموعة. |
| 6 | amm_pc_vault | W | | خزينة pc المجموعة. |
| 7 | model_data_account | | | جدول بحث للقراءة فقط. |
| 8 | user_source_lp | W | | مصدر LP المستخدم. |
| 9 | user_dest_coin | W | | مخرج عملة المستخدم. |
| 10 | user_dest_pc | W | | مخرج pc المستخدم. |
| 11 | user_lp_owner | | S | موقّع المعاملة. |
التوافقية: تم حذف تسعة حسابات Serum (amm_open_orders، serum_program، serum_market، serum_coin_vault، serum_pc_vault، serum_vault_signer، serum_event_q، serum_bids، serum_asks). التخطيطات القديمة بـ 21 أو 22 حساب لا تزال مقبولة. لاحظ، مع ذلك، أن منطق رسوم الإحالة لحساب referrer_pc_wallet الاختياري الـ 22 تم حذفه — يمكن تمريره لكن لا يعود له تأثير.
الشروط المسبقة
user_source_lp يحتفظ بـ amount على الأقل.
الشروط اللاحقة
- يتم حرق
amount رموز LP.
- يستقبل المستخدم مبالغ عملة و pc وفقًا للنسبة الحالية، معدلة للرسوم المتراكمة.
SwapBaseIn
مبادلة بمدخل دقيق باستخدام جدول البحث للتسعير.
الحجج
amount_in: u64
minimum_amount_out: u64
الحسابات — التخطيط الجديد، 9 حسابات (قابل للكتابة W، موقّع S)
| # | الاسم | W | S | ملاحظات |
|---|
| 0 | spl_token program | | | SPL Token. |
| 1 | amm | W | | AmmInfo المجموعة. |
| 2 | amm_authority | | | PDA على مستوى البرنامج. |
| 3 | amm_coin_vault | W | | خزينة عملة المجموعة. |
| 4 | amm_pc_vault | W | | خزينة pc المجموعة. |
| 5 | model_data_account | | | جدول بحث للقراءة فقط. |
| 6 | user_source_token | W | | حساب رمز المدخل للمستخدم. |
| 7 | user_destination_token | W | | حساب رمز المخرج للمستخدم. |
| 8 | user_source_owner | | S | المستخدم (موقّع المعاملة). |
التوافقية: تم حذف تسعة حسابات OpenBook (amm_open_orders، serum_program، serum_market، serum_bids، serum_asks، serum_event_queue، serum_coin_vault، serum_pc_vault، serum_vault_signer). إذا كان عدد الحسابات المُمررة ليس 9، يتم تحليل التعليمة بالتخطيط القديم بـ 18 حساب؛ يجب أن تحتل حسابات Serum مواضعها، لكن محتوياتها لا تُتحقق أو تُستخدم بعد الآن.
الشروط المسبقة
amm.status يسمح بالمبادلة.
user_source_token يحتفظ بـ ≥ amount_in.
الشروط اللاحقة
- يفقد المستخدم
amount_in، يكسب amount_out ≥ minimum_amount_out.
- رسوم المجموعة تزيد عدادات
need_take_pnl_*.
الرياضيات — استيفاء جدول البحث كما هو موضح في products/stable/math.
SwapBaseOut
مبادلة بمخرج دقيق (معكوس SwapBaseIn). نفس التخطيط بـ 9 حسابات، اتجاه رياضيات مختلف.
الحجج
max_amount_in: u64
amount_out: u64
WithdrawPnl
مسؤول فقط. مسح رسوم البروتوكول المتراكمة من need_take_pnl_* إلى حسابات PnL المعينة.
تغيير كسر صعب — بدون مسار توافقية. هذه التعليمة لا تملك تحليلاً للتخطيط القديم. إرسال التخطيط القديم يفشل مع أخطاء التحقق مثل InvalidTokenCoin بسبب عدم محاذاة الحسابات (القديم #3 كان open_orders). أدوات المسؤول التي تستدعي WithdrawPnl يجب تحديثها إلى التخطيط الجديد بـ 10 حسابات.
الحجج — لا توجد (مدفوعة بالحالة).
الحسابات — التخطيط الجديد، 10 حسابات ثابتة، مسؤول فقط (قابل للكتابة W، موقّع S)
| # | الاسم | W | S | ملاحظات |
|---|
| 0 | spl_token program | | | SPL Token. |
| 1 | amm | W | | AmmInfo المجموعة. |
| 2 | amm_authority | | | PDA على مستوى البرنامج. |
| 3 | amm_coin_vault | W | | خزينة عملة المجموعة. |
| 4 | amm_pc_vault | W | | خزينة pc المجموعة. |
| 5 | amm_target_orders | W | | |
| 6 | model_data | | | جدول البحث. |
| 7 | user_coin | W | | حساب عملة المسؤول (يستقبل الرسم). |
| 8 | user_pc | W | | حساب pc المسؤول (يستقبل الرسم). |
| 9 | amm_admin | | S | مسؤول المجموعة (موقّع). |
تغيير المنطق: عندما تكون الأموال المتاحة للمجموعة غير كافية لسحب PnL المتراكم، المجموعة لا تُوضع في CancelAllOrdersState / Disabled؛ التعليمة تُرجع TakePnlError مباشرة. تم حذف referrer_pc_wallet الاختياري أيضًا.
الشروط المسبقة
amm_admin يجب أن يكون مصرحًا.
الشروط اللاحقة
- يتم نقل
need_take_pnl_coin و need_take_pnl_pc إلى حسابات المسؤول.
- يتم تصفير العدادات.
التعليمات المحذوفة
تم حذف التعليمات التالية في ترقية 2026-06-22 و لا يمكن استدعاؤها بعد الآن. يتم توثيقها هنا فقط حتى يتمكن المدمجون من التعرف عليها في المعاملات والـ SDK التاريخية.
Initialize — كانت تُقلع مجموعة Stable AMM جديدة سابقًا. محذوفة.
PreInitialize — مساعد تخصيص مسبق قديم. محذوفة.
InitModelData — كانت تُنشئ وتُهيّئ جدول البحث ModelDataInfo سابقًا. محذوفة.
UpdateModelData — كانت تملأ ما يصل إلى 5 عناصر جدول بحث لكل استدعاء سابقًا. محذوفة.
MonitorStep — كرنك OpenBook الذي سوّى الملء وأعاد نشر شبكة الأوامر. كانت خاملة بالفعل لفترة طويلة بعد توقف المجموعة عن النشر إلى OpenBook؛ الآن محذوفة.
SetParams — تغييرات معاملات المسؤول (الحالة، الرسوم، المالك، مفتاح بيانات النموذج، إلخ). محذوفة.
WithdrawSrm — مسح استرجاع خصم رسوم SRM من مجموعات حقبة Serum المبكرة. محذوفة.
SimulateInfo — مساعد اقتباس للقراءة فقط. محذوفة؛ استخدم مساعدات منحنى Stable خارج السلسلة في SDK للاقتباس (انظر عروض الكود).
الخطوات التالية
المصادر:
raydium-stable/program/src/instruction.rs (enum و pack/unpack)
raydium-stable/program/src/processor.rs (منطق التنفيذ)