> ## 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.

# صانع السوق ذو المنتج الثابت

> متغير x·y=k والتسعير المبني على الاحتياطيات واشتقاق الانزلاق وأشكال معالجة الرسوم المستخدمة بواسطة Raydium CPMM و AMM v4. هذه صفحة الرياضيات المرجعية التي يرجع إليها كل منتج x·y=k في Raydium.

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

  [عرض النسخة الإنجليزية →](/algorithms/constant-product)
</Info>

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

صانع السوق ذو المنتج الثابت (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'`؛ حصة البروتوكول مستثناة من المنحنى عبر خطوة محاسبة منفصلة (انظر [أشكال معالجة الرسوم](#fee-accounting-variants) أدناه).

### المبادلة ذات الإخراج المحدد (استقبل `Δ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 تجعل هذا الفحص صريحاً كشرط لاحق:

```rust theme={null}
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`](/ar/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`](/ar/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%` التقريبية (القاعدة هي سقف أسوأ الحالات لمنحنى منتج ثابت خالي من الرسوم؛ رسوم التداول بالإضافة إلى الانعكاس في الصيغة تقللها).

## المؤشرات

* [`products/cpmm/math`](/ar/products/cpmm/math) — اختيارات التقريب والمقام المحددة لـ CPMM.
* [`products/amm-v4/math`](/ar/products/amm-v4/math) — كيف تمديد احتياطيات OpenBook المدمجة في AMM v4 يوسع هذا النموذج.
* [`algorithms/slippage-and-price-impact`](/ar/algorithms/slippage-and-price-impact) — صفحة مخصصة عن تحجيم تسامح الانزلاق لواجهات المستخدم.

المصادر:

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