هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
رسمان مستقلان، أربع وجهات
يفرض CPMM رسمين بمعدلات منفصلة على كل مبادلة:- رسم التجارة — يُفرض بمعدل
AmmConfig.trade_fee_rateويُقسّم بين ثلاث وجهات:- حصة مزودي السيولة — تبقى في الخزينة وتزيد
k. يتم المطالبة بها ضمنيًا بحرق رموز LP. - حصة البروتوكول — تُجمّع في
PoolState.protocol_fees_token*؛ يتم جمعها بواسطةprotocol_ownerعبرCollectProtocolFee. - حصة الصندوق — تُجمّع في
PoolState.fund_fees_token*؛ يتم جمعها بواسطةfund_ownerعبرCollectFundFee.
- حصة مزودي السيولة — تبقى في الخزينة وتزيد
- رسم المنشئ (اختياري، لكل مجموعة) — يُفرض بمعدل
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:
- رسم نقل mint المدخل على
amount_in(لسلطة رسم mint). - رسم
trade_feeللمجموعة على الباقي (مقسّم كما هو أعلاه). - رسم نقل mint المخرج على
amount_out(لسلطة رسم mint).
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معين لا يمكنها تبديل الجوانب.
تدفق العملية الجمع
مالكو البروتوكول والصندوق هم 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.
أين تذهب بعد ذلك
products/cpmm/math— حيث يتصل خصم رسم التجارة بالمنحنى.products/cpmm/instructions— قوائم حسابات تعليمةCollect*.algorithms/token-2022-transfer-fees— كيفية دمج رسم تجارة مجموعة مع رسم نقل mint بشكل صحيح.

