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

رسمان مستقلان، أربع وجهات

يفرض CPMM رسمين بمعدلات منفصلة على كل مبادلة:
  1. رسم التجارة — يُفرض بمعدل AmmConfig.trade_fee_rate ويُقسّم بين ثلاث وجهات:
    • حصة مزودي السيولة — تبقى في الخزينة وتزيد k. يتم المطالبة بها ضمنيًا بحرق رموز LP.
    • حصة البروتوكول — تُجمّع في PoolState.protocol_fees_token*؛ يتم جمعها بواسطة protocol_owner عبر CollectProtocolFee.
    • حصة الصندوق — تُجمّع في PoolState.fund_fees_token*؛ يتم جمعها بواسطة fund_owner عبر CollectFundFee.
  2. رسم المنشئ (اختياري، لكل مجموعة) — يُفرض بمعدل AmmConfig.creator_fee_rate بشكل مستقل عن رسم التجارة ويُجمّع في PoolState.creator_fees_token*. يمكن للمنشئ جمعه عبر CollectCreatorFee، أو يمكن لأي دافع تفعيل مسار CollectCreatorFeePermissionless المقيّد بالوجهة. نشط فقط عندما تم إنشاء المجموعة مع enable_creator_fee = true.
رسم المنشئ ليس جزءًا من رسم التجارة. يتم إضافة المعدلين معًا عند أخذ الرسم على مدخل المبادلة، لكن كل منهما يبقى دلوه الخاص — حصص البروتوكول والصندوق مشتقة دائمًا من trade_fee فقط، وليس من creator_fee. مجموعة بـ creator_fee_rate = 1000 (0.10%) و trade_fee_rate = 2500 (0.25%) تفرض 0.35% مجتمعة من المدخل على مبادلة برسم منشئ على المدخل، يحتفظ المنشئ بـ 0.10% وتحصل دلو رسم التجارة على 0.25%. معدلات رسم التجارة (trade_fee_rate، protocol_fee_rate، fund_fee_rate) ورسم المنشئ (creator_fee_rate) تعيش جميعها على AmmConfig. علم enable_creator_fee لكل مجموعة وطريقة creator_fee_on (أي جانب من التجارة يتم أخذ رسم المنشئ منه) تعيش على PoolState. انظر products/cpmm/accounts.

المعدلات والوحدات

جميع المعدلات هي u64 مقسومة بوحدات 1 / FEE_RATE_DENOMINATOR حيث FEE_RATE_DENOMINATOR = 1_000_000.
  • trade_fee_rate هو جزء من حجم المبادلة. 2500 ⇒ 0.25% من الجانب ذي الصلة (مدخل أو مخرج، حسب creator_fee_on — انظر “أي جانب من التجارة يتم أخذ الرسوم منه” أدناه).
  • creator_fee_rate هو جزء من حجم المبادلة، يُؤخذ بشكل منفصل عن رسم التجارة. 1000 ⇒ 0.10% من الجانب ذي الصلة.
  • protocol_fee_rate و fund_fee_rate هما جزء من رسم التجارة، وليس من الحجم. 120_000 ⇒ 12% من رسم التجارة.
المعاملات الافتراضية لـ AmmConfig[index=0] (مجموعة “القياسية” 0.25%) على mainnet، للمرجعية: إذن على مبادلة بقيمة $1,000 مقابل AmmConfig[0] مع enable_creator_fee = false: $2.50 إجمالي رسم تجارة، منها $2.10 تبقى مع مزودي السيولة، $0.30 تذهب للبروتوكول، $0.10 للصندوق. دلو المنشئ هو 0 لأن رسم المنشئ معطّل. إذا كانت نفس المجموعة تحتوي على enable_creator_fee = true و creator_fee_rate = 1000 (0.10%)، يدفع المستخدم $1.00 إضافية لدلو المنشئ — يُؤخذ من نفس جانب التجارة المُعدّ بواسطة creator_fee_on — لـ $3.50 من إجمالي الرسوم. دلو رسم التجارة وتقسيماته بين البروتوكول والصندوق لم تتغيّر. تأكد من قيم mainnet الحالية مقابل GET https://api-v3.raydium.io/main/cpmm-config — المعدلات قابلة للتغيير من قبل المسؤول ويجب قراءتها بشكل جديد بدلاً من ترميزها بشكل ثابت.

التقسيم، في الكود

ملاحظات:
  • إجمالي الرسم على المدخل يُقرّب لأعلى بحيث لا تفرض المجموعة رسومًا ناقصة.
  • التقسيمات الفرعية لـ trade_fee (البروتوكول، الصندوق) تُقرّب لأسفل بحيث لا يتجاوز مجموعها trade_fee؛ الباقي هو حصة LP.
  • lp_share = trade_fee − protocol_fee − fund_fee (لا يتم طرح creator_fee هنا لأنه دلوه الخاص).
  • يتم أخذ رسم المنشئ من المدخل أو المخرج حسب PoolState.creator_fee_on (انظر القسم التالي). المعدل لا يتغيّر بأي حال.

أي جانب من التجارة يتم أخذ الرسوم منه

لـ CPMM إعداد creator_fee_on لكل مجموعة (BothToken / OnlyToken0 / OnlyToken1) يحدد ما إذا كان رسم المنشئ يُؤخذ من جانب المدخل أو جانب المخرج لمبادلة معينة. مساعد وقت التشغيل is_creator_fee_on_input(direction) يختزل ذلك إلى قيمة منطقية لكل مبادلة: عندما يكون رسم المنشئ على جانب المدخل، يتم خصم كل من رسم التجارة ورسم المنشئ من amount_in قبل تشغيل المنحنى. رياضيات الاقتباس: خذ المعدل المجمع trade_rate + creator_rate من المدخل. عندما يكون رسم المنشئ على جانب المخرج، يتم خصم رسم التجارة فقط من amount_in؛ ينتج المنحنى مخرجًا بدون رسوم، ثم يتم خصم رسم المنشئ من ذلك المخرج. رياضيات الاقتباس: خذ trade_rate من المدخل؛ خذ creator_rate من المخرج. يتم أخذ رسم التجارة نفسه دائمًا من جانب المدخل (نمط Uniswap-V2 القياسي). فقط رسم المنشئ يمكن أن ينتهي به الحال على المخرج.

كيفية تفاعل الرسوم “المجمّعة” مع المنحنى

دقة مهمة: رسوم البروتوكول والصندوق والمنشئ تبقى فعليًا في الخزينة حتى يتم استدعاء تعليمة Collect* الخاصة بها. لكن يتم استبعادها من رؤية المنحنى لرصيد الخزينة. صورة ملموسة بعد مبادلة واحدة:
يستخدم البرنامج curve_x (والمماثل curve_y) عند فرض k' ≥ k. هذه هي الطريقة التي تصل بها رسوم non-LP إلى وجهاتها بدون تضخيم حصة LP من المجموعة. النتائج التي يجب أن تصمم حولها:
  • الاقتباس من الأرصدة الخام خاطئ. إذا قمت ببناء quoter من getTokenAccountBalance، ستبالغ باستمرار في تقدير السعر الذي ستحترمه المجموعة. اطرح دائمًا الرسوم المجمّعة، أو محاكاة عبر SwapBaseInput / API.
  • CollectProtocolFee لا يحرك السعر. ينقل الرموز خارج الخزينة و يصفّر عدادات protocol_fees_token*، لذا curve_x و curve_y لم تتغيّر.
  • رسوم LP لا تجمّع في عداد. إنها ضمنية في رصيد الخزينة. استحقاق LP للرسوم المجمّعة يتم ممارسته بحرق رموز LP (أي عبر Withdraw) — لا يوجد CollectLpFee.

التفاعل مع رسوم نقل Token-2022

يتم تطبيق رسوم نقل Token-2022 بواسطة الـ mint، وليس بواسطة CPMM. تعمل على كل نقل رموز — مبادلة، إيداع، سحب، وعمليات جمع Collect*. يتم حساب رياضيات رسم التجارة في CPMM مقابل المبلغ الذي وصل فعلاً إلى الخزينة، أي بعد خصم رسم نقل mint المدخل (إن وجد). إذن في أسوأ الحالات يدفع المستخدم ثلاث ضرائب مختلفة على مبادلة input-exact:
  1. رسم نقل mint المدخل على amount_in (لسلطة رسم mint).
  2. رسم trade_fee للمجموعة على الباقي (مقسّم كما هو أعلاه).
  3. رسم نقل mint المخرج على amount_out (لسلطة رسم mint).
يأخذ quoter SDK في الاعتبار جميع الثلاثة بحيث يتم تسمية minimum_amount_out بما يتلقاه المستخدم فعلاً. إذا كنت تكتب quoter خاصًا بك، عكّس هذا السلوك، أو ستكون فحوصات الانزلاق الخاصة بك متساهلة بشكل منهجي. انظر algorithms/token-2022-transfer-fees للاشتقاق التفصيلي.

رسم المنشئ

رسم المنشئ اختياري ولكل مجموعة. المعدل يعيش على AmmConfig.creator_fee_rate؛ علم التفعيل و الجانب (creator_fee_on) يعيشان على PoolState:
  • مفعّل عند إنشاء المجموعة. Initialize يعيّن enable_creator_fee = false افتراضيًا؛ المجموعات المُنشأة عبر InitializeWithPermission (المستخدمة من قبل تخرجات LaunchLab والمسارات المحمية الأخرى) يمكنها تمرير enable_creator_fee = true واختيار creator_fee_on.
  • المعدل مشترك مع مستوى الرسم. المعدل نفسه هو AmmConfig.creator_fee_rate، نفس القيمة عبر كل مجموعة مرتبطة بهذا الإعداد. تقرر كل مجموعة بعد ذلك ما إذا كانت ستفرضه (enable_creator_fee) وأي جانب من المبادلة ستفرضه عليه (creator_fee_on). عندما enable_creator_fee = false، معدل رسم المنشئ الفعلي للمجموعة هو صفر بغض النظر عن قيمة الإعداد (انظر PoolState::adjust_creator_fee_rate في المصدر).
  • مستقل عن رسم التجارة. رسم المنشئ لا يقلل أبدًا من حصص LP / البروتوكول / الصندوق — إنه معدله الخاص، يُطبّق بشكل منفصل، يُجمّع في عدادات خاصة به.
  • يتم جمعه عبر CollectCreatorFee أو CollectCreatorFeePermissionless. المسار الأصلي يتطلب توقيع PoolState.pool_creator. المسار بدون إذن يسمح لأي دافع بتفعيل الجمع لكن يثبّت كلا الوجهتين على ATAs المنشئ الكنسية.
  • لا يمكن إعادة تفعيله أو إعادة توجيهه بعد الإنشاء. مجموعة مُهيأة مع enable_creator_fee = false لن تفرض أبدًا رسم منشئ؛ واحدة مُهيأة مع creator_fee_on معين لا يمكنها تبديل الجوانب.
رسوم المنشئ هي الآلية وراء نمط Raydium “Burn & Earn”: يتم قفل رموز LP تحت برنامج LP Lock بحيث لا يمكن للمنشئ سحب السيولة، لكن يمكن جمع الرسوم المتراكمة للمنشئ بلا حدود.

تدفق العملية الجمع

مالكو البروتوكول والصندوق هم multisig Raydium على mainnet؛ انظر security/admin-and-multisig. على المسار الأصلي الخاص بالمنشئ فقط، موقّع المنشئ هو الحساب المسجّل في PoolState. على المسار بدون إذن، يدفع المتصل لإنشاء ATA المنشئ المفقود. يقيّد البرنامج creator إلى pool_state.pool_creator ويشتق كل وجهة من ذلك المنشئ بالإضافة إلى mint الخزينة المقابلة وبرنامج الرموز، بحيث لا يمكن للمتصل إعادة توجيه الأموال.

تغيير مستوى رسم

يمكن تغيير معدلات الرسم من قبل المسؤول عبر UpdateAmmConfig (انظر products/cpmm/instructions). التغييرات تدخل حيز التنفيذ على المبادلة التالية لكل مجموعة مرتبطة بـ AmmConfig — لا توجد هجرة، لأن المجموعات تحمّل الإعداد في كل مبادلة. ما لا يمكن للمسؤول فعله:
  • نقل مجموعة من AmmConfig إلى آخر.
  • إعادة تسعير الرسوم المتراكمة بأثر رجعي.
  • جمع الرسوم بدون موقّع protocol_owner / fund_owner.

قراءة الرسوم من مجموعة قيد التشغيل

المقارنة مع CLMM و AMM v4

انظر reference/fee-comparison لمصفوفة جنبًا إلى جنب. الملخص:
  • AMM v4 يستخدم رسم تجارة ثابت 0.25% مع تقسيم LP/بروتوكول مختلف وبدون رسم صندوق.
  • رسوم CLMM لكل مستوى spacing-tick، مجمّعة لكل موضع (وليس لكل مجموعة)، ويتم المطالبة بها عبر DecreaseLiquidity أو CollectFees.

أين تذهب بعد ذلك

المصادر: