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

الثابت الرياضي

يحافظ المجمع على coin_reserve × pc_reserve = k، حيث (بعد إزالة OpenBook في 2026-07):
هناك نقطتان مهمتان:
  1. الاحتياطيات الآن من الخزائن فقط. تم حذف المصطلح التاريخي لأوامر مفتوحة (الرموز التي كان المجمع قد احتفظ بها كأوامر محدودة في OpenBook) — كانت قيمتها صفرًا عمليًا قبل وقت طويل من الإزالة. يمكنك حساب k مباشرة من أرصدة الخزائن على السلسلة.
  2. تراكم الربح والخسارة (need_take_pnl_*) يُطرح بحيث يتم الحفاظ على المنحنى عندما يقوم المسؤول بجمع الرسوم. نفس المبدأ المستخدم في استبعاد protocol_fees_* في CPMM.
يحسب البرنامج هذا عبر calc_total_without_take_pnl_no_orderbook (النسخة القديمة التي تدرك دفتر الأوامر قد اختفت). كل عملية Swap* تفرض k' ≥ k بعد إضافة حصة الرسوم الخاصة بـ LP مرة أخرى إلى الاحتياطيات.

اتفاقية الرسوم

يستخدم AMM v4 رسوم النسبة (أزواج البسط/المقام) بدلاً من اتفاقية 1/1_000_000 في CPMM / CLMM. هيكل Fees على السلسلة (انظر Fees::initialize في مصدر البرنامج) يفترض بشكل افتراضي:
التفسير (الإعدادات الافتراضية المنشورة على الشبكة الرئيسية):
  • إجمالي رسم المبادلة: swap_fee = amount_in × 25 / 10_000 = 0.25% من المدخل الإجمالي.
  • حصة البروتوكول: pnl_numerator / pnl_denominator = 12 / 100 = 12% من رسم المبادلة، وهو ما يعادل 0.25% × 12% = 0.03% من الحجم. تتراكم هذه الحصة في عدادات الربح والخسارة ويتم جمعها بواسطة WithdrawPnl.
  • حصة LP: الـ 88% المتبقية من رسم المبادلة، وهو ما يعادل 0.25% × 88% = 0.22% من الحجم. تبقى في المجمع وتزيد من k.
  • لا توجد حصة صندوق. AMM v4 لا يحتوي على تقسيم رسوم الصندوق في CPMM/CLMM.
لاحظ أن pnl_numerator / pnl_denominator هي كسر من الرسم، وليس من حجم التداول — وهي قراءة خاطئة شائعة لأسماء هذه الحقول. تم استخدام trade_fee_numerator / trade_fee_denominator (أيضًا 25 / 10_000) تاريخيًا من قبل تكامل OpenBook عند حساب الأسعار الشاملة للرسوم لشبكة الأوامر المحدودة للـ AMM. مع إزالة كود OpenBook، هذا الحقل أصبح قديمًا؛ رسم المبادلة النشط هو swap_fee_*. الانحرافات عن هذه الإعدادات الافتراضية نادرة لكنها موجودة على عدد قليل من المجمعات القديمة؛ اقرأ دائمًا الرسوم من AmmInfo.fees قبل الاقتباس.

رياضيات المبادلة المباشرة (مسار AMM)

الحالة الأبسط: يقوم المستخدم بالمبادلة مقابل خزائن المجمع دون التفاعل مع OpenBook. الاحتياطيات الداخلية للمجمع (بما في ذلك التخصيصات على الكتاب) هي المقام. SwapBaseIn (مدخل دقيق):
الاحتياطيات المستخدمة هنا هي أرصدة الخزائن (ناقص الربح والخسارة المتراكمة). تاريخيًا، كانت الصيغة تضيف أيضًا الرموز التي كان لدى AMM مقفلة في أوامر OpenBook؛ تم حذف هذا المصطلح — الاحتياطيات الفعلية الآن تساوي أرصدة الخزائن الخام ناقص الربح والخسارة المعلقة. تم حذف مسار MonitorStep / التسوية الضمنية الذي اعتاد تحديث جانب OpenBook. SwapBaseOut (مخرج دقيق):

تفاعل دفتر الأوامر (تاريخي)

تم الحذف. يعكس بناء الشبكة الموصوف في هذا القسم كيفية انعكاس AMM v4 في الأصل للمنحنى على سوق OpenBook. تم حذف تكامل OpenBook — بما في ذلك crank MonitorStep ومنطق شبكة build_ordersمن البرنامج (ترقية 2026-07). يتم الحفاظ على الرياضيات أدناه بحتة كسياق تاريخي لما كانت حسابات target_orders / amm_open_orders على السلسلة مخصصة له ذات مرة.
بشكل منفصل عن مبادلات المستخدم، وضع AMM v4 تاريخيًا شبكة من الأوامر المحدودة على سوق OpenBook. تم حساب الشبكة من معاملات AmmInfo:
  • depth — عدد مستويات الأسعار لكل جانب.
  • amount_wave — وحدة الحجم الأساسية لكل مستوى.
  • min_size, coin_lot_size, pc_lot_size — قيود سوق OpenBook.
  • state_data.swap_acc_coin_fee, swap_acc_pc_fee — عدادات الرسوم التراكمية منذ آخر TakePnl.
يشتق البرنامج أسعار كل مستوى بالسير من سعر المنحنى الحالي في خطوات نسبة ثابتة:
يتم تحديد الأسعار والأحجام الدقيقة بواسطة target_orders المحسوبة في build_orders والمقارنة مع amm_open_orders في كل MonitorStep. أي اختلاف ينتج عنه إلغاءات + منشورات جديدة. تستقر الأوامر المملوءة حديثًا على OpenBook في خزائن المجمع في العملية التالية التي تحدث جانب OpenBook. نادرًا ما يحتاج المدمجون إلى حساب الشبكة — يحافظ عليها حارس Raydium — لكن من المفيد معرفة أن:
  • المجمع الذي يحتوي على سيولة على الكتاب كبيرة له تلك السيولة تساهم في k، وليس خاملة.
  • سوق OpenBook القديم (قائمة الأحداث ممتلئة، cranks محجوبة) يمنع تحديثات الشبكة؛ يمكن لـ AMM بعد ذلك أن يقتبس أسعارًا تختلف عن دفتر الأوامر المرئي حتى crank التالي.

خطوة التسوية (الربح والخسارة)

تتراكم حصة البروتوكول بنسبة 0.03% في state_data.need_take_pnl_coin و state_data.need_take_pnl_pc. TakePnl ينقل هذه المبالغ خارج الخزائن إلى الوجهة المحددة من قبل المسؤول، ثم يصفر العدادات. خاصية حاسمة: يتم حساب الاحتياطيات في الثابت ناقص الربح والخسارة المتراكمة، لذا TakePnl لا ينقل المنحنى. هذا يطابق اتفاقية CPMM.

مثال عملي

حالة المجمع:
  • coin_reserve = 1_000_000_000_000 (1,000,000 جانب العملة؛ 6 منازل عشرية)
  • pc_reserve = 2_000_000_000_000 (2,000,000 جانب الكمبيوتر؛ 6 منازل عشرية)
  • الرسوم: افتراضي swap = 25/10_000, pnl = 3/10_000.
المستخدم: SwapBaseIn مدخل دقيق 1_000_000_000 عملة (1,000 عملة).
حصة LP (2_200_000) لا تُفصل في أي مكان — إنها ببساطة الباقي الذي يرفع k'.

قواعد الدقة

  • عمليات ضرب الاحتياطيات تستخدم u128؛ القسمات النهائية تقرب نحو الصفر.
  • swap_fee يقرب لأعلى (بحيث لا يقلل المجمع الرسوم).
  • amount_in لـ SwapBaseOut يقرب لأعلى (بحيث لا يقلل المستخدم الدفع).
  • المجمعات ذات نسب الاحتياطي القصوى يمكن أن تصل إلى ZeroTradingTokens على مدخلات صغيرة جدًا؛ نفس الاتفاقية مثل CPMM.

القيود مقابل CPMM

  • احتياطيات AMM v4 الآن من الخزائن فقط، لذا يمكنك الاقتباس مباشرة من أرصدة الخزائن (ناقص need_take_pnl_*) — المتطلب السابق لإضافة مبالغ open_orders.free / open_orders.locked لم يعد ينطبق. بقية SDK / API تبقى الخيار الأبسط.
  • AMM v4 لا يعرض TWAP منظم على السلسلة. المستهلكون الخارجيون الذين يريدون سعرًا مدعومًا بـ AMM-v4 يجب أن يحسبوه بأنفسهم من سجلات التداول.
  • Token-2022 غير مدعوم.

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

المصادر: