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

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.

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

المتغير الثابت

صانع السوق ذو المنتج الثابت (CPMM) يحتفظ باحتياطيين x و y ويفرض:
x · y ≥ k       (بعد كل عملية تداول)
حيث k هو ناتج الاحتياطيات قبل التداول. لسوق خالية من الرسوم، x · y = k بالضبط. مع الرسوم، k ينمو بشكل صارم (حصة LP من الرسوم تبقى في الاحتياطيات). المتغير هندسي بقصد: فهو يضمن أنه بغض النظر عن صغر احتياطي واحد، سينمو الآخر بلا حدود للمطابقة — أي أن البركة لا يمكن أبداً تجفيفها إلى الصفر على أي جانب.

التسعير

سعر النقطة

السعر الحدي لـ y بدلالة x في أي لحظة هو ظل المنحنى:
p = y / x
(الاشتقاق: التفاضل الضمني لـ x · y = k يعطي dy/dx = −y/x؛ بتجاهل الإشارة، |dy/dx| = y/x). هذا هو السعر الذي تعرضه البركة لعملية تداول صغيرة جداً. لأي عملية تداول محدودة، السعر المحقق أسوأ بسبب الانزلاق على طول المنحنى.

المبادلة ذات الإدخال المحدد (أعط Δx، استقبل Δy)

مع الرسوم، دع f تكون معدل الرسوم (مثلاً f = 0.0025 لـ 25 نقطة أساس). طبّق الرسوم على الإدخال، ثم استخدم المتغير لحل الإخراج:
Δx_after_fee = Δx · (1 − f)
Δy           = y · Δx_after_fee / (x + Δx_after_fee)
الاحتياطيات بعد التداول:
x' = x + Δx
y' = y − Δy
كل Δx يدخل الاحتياطيات. حصة LP من الرسوم تبقى في x'؛ حصة البروتوكول مستثناة من المنحنى عبر خطوة محاسبة منفصلة (انظر أشكال معالجة الرسوم أدناه).

المبادلة ذات الإخراج المحدد (استقبل Δy، ادفع الحد الأدنى Δx)

Δx_after_fee = x · Δy / (y − Δy)
Δx           = Δx_after_fee / (1 − f)
Δx يتم تقريبه لأعلى لضمان عدم قيام البركة بتحصيل رسوم أقل.

الانزلاق وتأثير السعر

تأثير السعر يقيس كم تتحرك سعر النقطة للبركة نتيجة للتداول:
p_before = y / x
p_after  = y' / x' = (y − Δy) / (x + Δx)
impact   = (p_before − p_after) / p_before
لـ Δx / x صغير، التوسع من الدرجة الأولى يعطي:
impact ≈ 2 · Δx / x      (بتجاهل الرسوم)
البديهة: تبادل بنسبة 1% يسبب تأثير سعر بحوالي 2%. هذا العامل 2 هو السبب في أن بركات CPMM المعروضة للتداولات متوسطة الحجم تبدو “رقيقة” مقارنة بأسواق دفتر الطلبات — أنت لا تشتري فقط مقابل أفضل عرض حالي، بل تصعد سعرك الحدي الخاص. السعر الفعلي الذي يدفعه المتداول:
effective = Δx / Δy
الفارق بين p_before و effective هو الانزلاق. واجهة انزلاق على السلسلة عادة ما يتم التعبير عنها كـ (effective − p_before) / p_before؛ طريقة SDK computeAmountOut تُرجع كلاً من amountOut و priceImpact لهذا السبب.

فحص المتغير في الكود

بعد مبادلة، البروتوكولات تعيد التحقق:
k' = x' · y'  ≥  k  =  x · y
أي انتهاك هو خطأ في البرنامج أو تجاوز حسابي. تعليمات المبادلة في Raydium تجعل هذا الفحص صريحاً كشرط لاحق:
let k_before = coin_reserve_before as u128 * pc_reserve_before as u128;
let k_after  = coin_reserve_after  as u128 * pc_reserve_after  as u128;
require!(k_after >= k_before, ErrorCode::InvariantViolation);

أشكال معالجة الرسوم

فحص المتغير يفترض بقاء رسوم LP في الاحتياطيات. منتجات Raydium المختلفة تتعامل مع مكونات البروتوكول / الصندوق / المنشئ بطرق مختلفة:

اتفاقية CPMM

الرسوم هي معدلات نقطة أساس تشبه u64 على مقام 1_000_000. رسوم التداول مقسومة إلى trade_fee_rate (الإجمالي) ثم مقسمة فرعياً عبر protocol_fee_rate و fund_fee_rate و creator_fee_rate. على كل مبادلة:
trade_fee     = ceil(Δx · trade_fee_rate / 1_000_000)
protocol_fee  = trade_fee · protocol_fee_rate / 1_000_000
fund_fee      = trade_fee · fund_fee_rate     / 1_000_000
creator_fee   = trade_fee · creator_fee_rate  / 1_000_000
lp_fee        = trade_fee − protocol_fee − fund_fee − creator_fee
الحصص الثلاث غير LP تتراكم في عدادات منفصلة (protocol_fees_* و fund_fees_* و creator_fees_*) وهي مستثناة من الاحتياطيات المستخدمة في المتغير. هذا هو كيفية أخذ الرسوم دون تحريك المنحنى. انظر products/cpmm/fees.

اتفاقية AMM v4

الرسوم هي نسب numerator / denominator على مقام 10_000. الانقسام ثابت عند إنشاء البركة ومخزن على AmmInfo.fees:
swap_fee  = ceil(Δx · swap_fee_numerator / swap_fee_denominator)    // مثلاً 0.25%
pnl_share = swap_fee · pnl_numerator / swap_fee_numerator            // مثلاً 0.03 / 0.25 = 12%
lp_share  = swap_fee − pnl_share                                     // 0.22% من الحجم
pnl_share يتراكم في state_data.need_take_pnl_* ومستثنى من الاحتياطيات؛ lp_share يبقى في القبو. انظر products/amm-v4/fees. كلا الاتفاقيتين تحافظان على المتغير بنفس الطريقة — الفارق مجرد زخرفة (مقام + عدد الفئات الفرعية).

قواعد التقريب

  • حساب الرسوم يقرب لأعلى. يضمن عدم قيام البركة بتحصيل رسوم أقل من اللازم.
  • مبلغ الإخراج يقرب لأسفل. يضمن أن المتغير يتحقق بصرامة (k' > k حتى قبل إضافة الرسوم).
  • مبلغ الإدخال ذو الإخراج المحدد يقرب لأعلى. يضمن أن المستخدم لا يدفع أقل من اللازم.
كل الحسابات تستخدم u128 للمنتجات الوسيطة x · Δx لتجنب التجاوز على الاحتياطيات الكبيرة. النتائج النهائية يتم تحويلها إلى u64 مع فحص التشبع.

الحالات الحدية

بركة فارغة

قبل أول Deposit، x = y = 0. تعليمات المبادلة ترفض ما قبل الإيداع.

إخراج صفر

إذا كان Δx صغيراً بما يكفي لأن Δy المقرب لأسفل يكون 0، التعليمة ترجع مع ZeroTradingTokens. هذا يمنع استخراج القيمة دون دفع؛ يعني أيضاً أن التبادلات الصغيرة على البرك غير المتوازنة بشدة تفشل.

غبار LP

أول Deposit له معالجة خاصة: يحسب إمداد LP الأولي كـ sqrt(x · y) ويحرق مبلغاً صغيراً من “init burn” (عادة 100 وحدة LP) لمنع “هجوم تضخيم المودع الأول” (حيث يتبرع المهاجم للقبو ويضخم قيمة رمز LP). الإيداعات اللاحقة تستخدم رياضيات متناسبة.

العلاقة بالمراجحة

سعر بركة CPMM يتغير فقط عبر:
  1. التداولات من خلال البركة نفسها (المستخدمون يسيرون المنحنى).
  2. التبرعات (إرسال الرموز للقبو دون مبادلة).
نظراً لأن التداولات تحريك السعر بشكل حتمي مع المنحنى، أي بركة يختلف سعرها عن سعر السوق الأوسع تخلق فرصة مراجحة. المراجحون يعيدون سعر البركة نحو سعر السوق في التوقع. هذا هو السبب في القول بأن بركات CPMM “تعرض سعراً بدون أوراكل”: السوق يجد السعر من خلال المراجحة بدلاً من قراءة البركة له خارجياً. الجانب المقابل: البركة نفسها هي نظير المراجح، لذا أي ربح مراجحة هو خسارة LP دائمة (ناقص الرسوم التي تحصلها LPs).

أمثلة عملية

مثال 1 — تداول صغير، انزلاق قابل للإهمال

البركة: x = 1_000_000, y = 2_000_000, k = 2·10^12. رسوم f = 0.0025. التداول Δx = 1_000:
Δx_after_fee = 1000 · 0.9975  = 997.5
Δy           = 2_000_000 · 997.5 / (1_000_000 + 997.5)
             = 1_995_000_000 / 1_000_997.5
             ≈ 1_993.01
السعر الفعلي: 1000 / 1993.01 ≈ 0.5018. النقطة قبل: 0.5. التأثير: ~0.36%.

مثال 2 — تداول متوسط، انزلاق واضح

نفس البركة، Δx = 100_000 (10% من x):
Δx_after_fee = 100_000 · 0.9975 = 99_750
Δy           = 2_000_000 · 99_750 / (1_000_000 + 99_750)
             = 199_500_000_000 / 1_099_750
             ≈ 181_405
الفعلي: 100_000 / 181_405 ≈ 0.5513. التأثير: ~10.3% — تقريباً نصف قاعدة 2 · 10% = 20% التقريبية (القاعدة هي سقف أسوأ الحالات لمنحنى منتج ثابت خالي من الرسوم؛ رسوم التداول بالإضافة إلى الانعكاس في الصيغة تقللها).

المؤشرات

المصادر:
  • ورقة Uniswap v2 — البيان الأساسي لـ x · y = k.
  • مصدر برنامج Raydium CPMM.
  • مصدر برنامج Raydium AMM v4.