الانتقال إلى المحتوى الرئيسي

Documentation Index

Fetch the complete documentation index at: https://docs.raydium.io/llms.txt

Use this file to discover all available pages before exploring further.

هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →

منحنى جدول البحث

يستبدل Stable AMM الصيغة x·y=k بـ جدول بحث متفرق من مجموعات (x, y, price). عند تسعير المبادلة، يقوم البرنامج بـ:
  1. حساب النسبة الحالية للمستودع من الاحتياطيات.
  2. البحث الثنائي في الجدول للعثور على المدخلين اللذين يحيطان بتلك النسبة.
  3. الاستيفاء الخطي بينهما للحصول على سعر وسيط.
  4. تطبيق الرسوم وإرجاع السعر المقترح.
يوفر هذا النهج المرونة في تشكيل الأسعار على حساب حتمية الصيغة، وهو فعال بما يكفي للاندراج ضمن ميزانية الحساب في Solana.

تخطيط الجدول والبحث الثنائي

يحتفظ ModelDataInfo بما يصل إلى 50,000 مدخل DataElement، مفهرسة من قبل المسؤول. يكون فعالاً فقط أول valid_data_count منها. كل مدخل:
DataElement {
  x: u64,      // إحداثي X (مبلغ جانب العملة، مقيّس)
  y: u64,      // إحداثي Y (مبلغ جانب PC، مقيّس)
  price: u64,  // price = x/y، مقيّس بالمضروب
}
للعثور على سعر عند احتياطيات المستودع الحالية (x_real, y_real):
  1. احسب النسبة: target_ratio = (x_real * multiplier) / y_real.
  2. ابحث ثنائياً عن مدخلات حيث (element.x * multiplier) / element.y يحيط target_ratio.
  3. عندما يتم العثور على قوس [min_idx, max_idx]، قم بالاستيفاء.
يمتد كود البحث الثنائي للبرنامج عبر حوالي 150 سطراً في state.rs::ModelDataInfo::get_mininum_range_by_xy_real. الثابت الأساسي: يجب أن تكون المدخلات مرتبة (x تصاعدي، y تنازلي، price تصاعدي) لكي يعمل البحث.

الاستيفاء الخطي

بمجرد حصول نقطتي جدول على قوس النسبة، يحسب الاستيفاء سعراً وسيطاً وزوج احتياطيات:
target = (x_real * multiplier) / y_real

[x1, y1, p1] = table[min_idx]
[x2, y2, p2] = table[max_idx]

// Interpolate price
p = p1 + (p2 - p1) * (target - ratio1) / (ratio2 - ratio1)

// Interpolate reserve
x = x1 + (x2 - x1) * (target - ratio1) / (ratio2 - ratio1)
y = y1 + (y2 - y1) * (target - ratio1) / (ratio2 - ratio1)
النتيجة منحنى خطي متعدد التقسيم يربط نقاط الجدول بسلاسة.

التحجيم: المضروب

يتم تخزين احتياطيات المستودع والأسعار بمقاييس مختلفة. حقل multiplier على ModelDataInfo يأخذ ذلك في الحسبان. النمط الشائع:
  • العملة لها 6 منازل عشرية، PC لها 18 منزلة عشرية.
  • المضروب = 10^6 (أو ما شابه).
  • يتم تخزين مدخلات الجدول بمقياس مخفَّض للاندراج ضمن حدود u64.
يقوم البرنامج بإعادة التحجيم عند القراءة/الكتابة عبر:
real_value = table_value * ratio / multiplier
table_value = real_value * multiplier / ratio

تسعير المبادلة: SwapBaseIn و SwapBaseOut

SwapBaseIn (إدخال دقيق)

بمعطى مبلغ الإدخال amount_in:
  1. احصل على النسبة الحالية من (coin_vault, pc_vault).
  2. ابحث عن مدخلات جدول الأقواس واستيفِ للحصول على نسبة مساحة الجدول.
  3. حوِّل الإدخال إلى مساحة الجدول: dx_table = amount_in * multiplier / ratio.
  4. استعلم الجدول عند إحداثي X الجديد للعثور على Y الجديد.
  5. dy_table = y_old - y_new.
  6. حوِّل مرة أخرى: dy_real = dy_table * ratio / multiplier.
  7. تطبيق رسم التداول: dy_output = dy_real - (dy_real * trade_fee_numerator / trade_fee_denominator).
  8. أرجع dy_output.

SwapBaseOut (إخراج دقيق)

متناظرة: بمعطى المخرجات المطلوبة amount_out، حل لإيجاد amount_in المطلوب. يستقر كلا المساران على أوامر OpenBook المملوءة أولاً (عبر منطق داخلي يشبه MonitorStep)، لذا تعكس الاحتياطيات الفعالة أي ملئات من الكتلة السابقة.

تطبيق الرسوم

متطابق مع AMM v4: انظر products/amm-v4/math للاشتقاق الكامل.
gross_fee = amount_in * (swap_fee_numerator / swap_fee_denominator)    // e.g., 0.25%
lp_portion = gross_fee - (gross_fee * pnl_numerator / pnl_denominator) // e.g., 0.22%
pnl_portion = gross_fee * (pnl_numerator / pnl_denominator)            // e.g., 0.03%
يذهب pnl_portion إلى need_take_pnl_* ويتم مسحه من قبل المسؤول عبر WithdrawPnl. يبقى lp_portion في المستودع، مضخماً k ومنفعاً لحاملي رموز LP.

MonitorStep و OpenBook

مثل AMM v4، MonitorStep هو تعليمة طلب تقوم بـ:
  1. تسوية ملئات أوامر OpenBook المعلقة (نقل الرموز من المستودعات إلى المستودع).
  2. تحديث AmmInfo.target_orders بشبكة جديدة من فتحات الأوامر المحدودة.
  3. نشر الشبكة الجديدة إلى OpenBook.
يتم حساب الشبكة من الجدول: يستخدم البرنامج جدول البحث للعثور على نقاط السعر وترجمتها إلى أوامر OpenBook. تكلفة الحساب من MonitorStep: ~150k–180k CU (مشابهة لـ AMM v4).

الملخص: لماذا يعمل هذا

تصميم جدول البحث + الاستيفاء فعال ومرن:
  • الكفاءة: البحث الثنائي هو O(log 50,000) ≈ 16 تكرار، كل واحد ~ 300–500 CU. الاستيفاء هو عدة مضاعفات/قسمات. إجمالي تكلفة الاستعلام حوالي 5k–15k CU، أرخص بكثير من إعادة حساب صيغة على كل مبادلة.
  • المرونة: يمكن للمسؤول ترميز أي منحنى خطي متعدد التقسيم. تحصل أزواج العملات المستقرة على كثافة عالية حول 1:1؛ الأزواج المضمونة تحصل على منحنيات مخصصة.
  • التوافق مع OpenBook: تنطبق نفس منطق MonitorStep / TargetOrders من AMM v4. اكتشاف الأسعار عبر الجدول يغذي توليد شبكة الأوامر.
للتعمق في منطق الاستيفاء، انظر raydium-stable/program/src/state.rs، والدوال get_data_by_x، get_data_by_y، get_dy_by_dx_base_in، إلخ.

الخطوات التالية

المصادر:
  • raydium-stable/program/src/state.rs (تطبيقات الاستيفاء والبحث الثنائي)
  • raydium-stable/program/src/math.rs (مرافق الحاسبة)