هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
منحنى جدول البحث
يستبدل Stable AMM الصيغة x·y=k بـ جدول بحث متفرق يحتوي على صفوف (x, y, price). عند تسعير مبادلة، يقوم البرنامج بـ:- حساب النسبة الحالية للمجموعة من الاحتياطيات.
- البحث الثنائي في الجدول للعثور على الإدخالين اللذين يحيطان بتلك النسبة.
- الاستيفاء الخطي بينهما للحصول على سعر وسيط.
- تطبيق الرسوم وإرجاع السعر.
تخطيط الجدول والبحث الثنائي
يحتفظModelDataInfo بما يصل إلى 50,000 إدخال DataElement، مفهرسة من قبل المسؤول. فقط أول valid_data_count نشطة. كل إدخال:
- احسب النسبة:
target_ratio = (x_real * multiplier) / y_real. - ابحث ثنائياً عن إدخالات حيث
(element.x * multiplier) / element.yيحيط بـtarget_ratio. - عند العثور على قوس
[min_idx, max_idx]، قم بالاستيفاء.
state.rs::ModelDataInfo::get_mininum_range_by_xy_real. الثابت الرئيسي: يجب أن تكون الإدخالات مرتبة (x تصاعدي، y تنازلي، السعر تصاعدي) لكي يعمل البحث.
الاستيفاء الخطي
بمجرد أن تحيط نقطتا جدول بالنسبة، يحسب الاستيفاء سعراً وسيطاً وزوج احتياطيات:المقياس: المضروب
يتم تخزين احتياطيات المجموعة والأسعار بمقاييس مختلفة. حقلmultiplier على ModelDataInfo يأخذ هذا في الاعتبار. نمط شائع:
- العملة لها 6 منازل عشرية، PC لها 18 منزلة عشرية.
- المضروب = 10^6 (أو ما شابه).
- يتم تخزين إدخالات الجدول بمقياس مخفض ليناسب حدود u64.
تسعير المبادلة: SwapBaseIn و SwapBaseOut
SwapBaseIn (إدخال دقيق)
بالنظر إلى مبلغ الإدخالamount_in:
- احصل على النسبة الحالية من
(coin_vault, pc_vault). - ابحث عن إدخالات الجدول المحيطة واستيفاء للحصول على نسبة مساحة الجدول.
- تحويل الإدخال إلى مساحة الجدول:
dx_table = amount_in * multiplier / ratio. - استعلم الجدول عند إحداثي X الجديد للعثور على Y الجديد.
dy_table = y_old - y_new.- تحويل للخلف:
dy_real = dy_table * ratio / multiplier. - تطبيق رسم التجارة:
dy_output = dy_real - (dy_real * trade_fee_numerator / trade_fee_denominator). - إرجاع
dy_output.
SwapBaseOut (إخراج دقيق)
متماثل: بالنظر إلىamount_out المطلوب، حل للحصول على amount_in المطلوب.
كلا المسارين يقرآن الاحتياطيات الفعلية مباشرة من خزائن المجموعة. لم تحتفظ المجموعة بأوامر OpenBook المفتوحة لسنوات، لذا لا يوجد شيء لتسويته أولاً — أرصدة الخزينة هي القصة كاملة. (ترقية 2026-06-22 أزالت كود السوق المتبقي.)
تطبيق الرسوم
مطابق لـ AMM v4: انظرproducts/amm-v4/math للاشتقاق الكامل.
pnl_portion إلى need_take_pnl_* ويتم مسحه بواسطة المسؤول عبر WithdrawPnl. يبقى lp_portion في الخزينة، مما يزيد من k ويفيد حاملي رموز LP.
محاسبة أصول المجموعة
أضافت الصيغة تاريخياً الأموال التي احتفظت بها المجموعة كأوامر مفتوحة في حسابها OpenOrders في OpenBook. كان هذا الحد صفراً عملياً منذ توقفت المجموعة عن نشر الأوامر، وأزالته ترقية 2026-06-22 من الصيغة بالكامل، تاركة حساب الخزينة فقط:need_take_pnl المتراكم لكن غير المكتسح يجلس فعلياً في الخزينة لكن يتم استبعاده من التسعير). يجب على كود الاقتباس والفهارس التي قرأت سابقاً أرصدة OpenOrders أن تسقط هذا الحد.
MonitorStep (تم حذفه)
كانMonitorStep هو تعليمات الكرنك التي سوت عمليات OpenBook المعلقة، أعادت حساب AmmInfo.target_orders، وأعادت نشر شبكة الأوامر المحدودة المشتقة من جدول البحث. توقفت المجموعة عن نشر الأوامر إلى OpenBook منذ سنوات، لذا لم يكن لدى الكرنك شيء يفعله؛ تم حذفه في ترقية 2026-06-22. لا يحتاج المدمجون إلى كرنك مجموعات Stable.
الملخص: لماذا يعمل هذا
تصميم جدول البحث + الاستيفاء فعال ومرن:- الكفاءة: البحث الثنائي هو O(log 50,000) ≈ 16 تكرار، كل واحد ~ 300–500 CU. الاستيفاء هو بضع عمليات ضرب/قسمة. إجمالي تكلفة الاقتباس حوالي 5k–15k CU، أرخص بكثير من إعادة حساب صيغة على كل مبادلة.
- المرونة: يمكن للمسؤول ترميز أي منحنى خطي متعدد الأجزاء. أزواج العملات المستقرة تحصل على كثافة عالية حول 1:1؛ الأزواج المضمونة تحصل على منحنيات مخصصة.
- السيولة المكتفية ذاتياً: تعيش جميع الأموال في خزائن المجموعة والتسعير يقرأها مباشرة — لا كرنك، لا كتاب أوامر خارجي، حسابات أقل لكل معاملة.
raydium-stable/program/src/state.rs، الطرق get_data_by_x، get_data_by_y، get_dy_by_dx_base_in، إلخ.
أين تذهب بعد ذلك
- الحسابات — مرجع حقول
ModelDataInfoوDataElement. - التعليمات — المجموعة القابلة للاستدعاء (swap, deposit, withdraw,
WithdrawPnl) والتعليمات المحذوفة. - الرسوم — تطبيق الرسوم و
WithdrawPnl. products/amm-v4/math— لمنطق تسعير الأوامر الشامل للرسوم في OpenBook.
raydium-stable/program/src/state.rs(تطبيقات الاستيفاء والبحث الثنائي)raydium-stable/program/src/math.rs(أدوات الحاسبة)

