هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
رسمان مستقلان، أربع وجهات
يفرض 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. منذ ترقية 2026-09-19 يتم تقسيم رسم المنشئ المجمّع مرة أخرى عند وقت التحصيل: يتم نقل حصة قابلة للتكوين إلى دلو البروتوكول للمجموعة وفقط الباقي يصل إلى المنشئ — انظر حصة البروتوكول من رسم المنشئ.
trade_fee فقط، وليس من creator_fee. مجموعة بـ creator_fee_rate = 1000 (0.10%) و trade_fee_rate = 2500 (0.25%) تفرض 0.35% مجتمعة من المدخل على مبادلة برسم منشئ على المدخل، منها يحصل دلو المنشئ على 0.10% ودلو رسم التجارة يحصل على 0.25%.
حصة البروتوكول من رسم المنشئ تسير بالطريقة المعاكسة وسهل الخلط بينها وبين ما سبق: يتم نحتها من دلو المنشئ، وليس من رسم التجارة، وليس على المبادلة — يتم تطبيقها عندما يستقر CollectCreatorFee أو CollectCreatorFeePermissionless الرصيد المجمّع. رياضيات المبادلة لم تتغير بسببها.
معدلات رسم التجارة (trade_fee_rate، protocol_fee_rate، fund_fee_rate)، و creator_fee_rate والقيمة الافتراضية creator_fee_share_rate تعيش جميعها على AmmConfig. علم enable_creator_fee لكل مجموعة وطريقة creator_fee_on (أي جانب من المبادلة يتم أخذ رسم المنشئ منه) تعيش على PoolState. تجاوز لكل منشئ لمعدل الحصة يعيش على PDA CreatorFeeShare الخاص به. انظر 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% من رسم التجارة.creator_fee_share_rateهو جزء من رسم المنشئ المجمّع، وليس من الحجم وليس من رسم التجارة.200_000⇒ 20% من أي شيء يجلس فيcreator_fees_token*في اللحظة التي يتم تحصيله.0(الافتراضي) يترك رسم المنشئ كاملاً مع المنشئ.
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. هذه هي الطريقة التي تصل بها رسوم غير LP إلى وجهاتها بدون تضخيم حصة LP من المجموعة.
النتائج التي يجب أن تصمم حولها:
- الاقتباس من الأرصدة الخام خاطئ. إذا قمت ببناء مقتبس من
getTokenAccountBalance، ستبالغ باستمرار في السعر الذي ستحترمه المجموعة. اطرح دائمًا الرسوم المجمّعة، أو محاكاة عبرSwapBaseInput/ الواجهة البرمجية. CollectProtocolFeeلا يحرك السعر. ينقل الرموز خارج الخزينة و يصفر عداداتprotocol_fees_token*، لذاcurve_xوcurve_yلم تتغير.- رسوم LP لا تتراكم في عداد. هي ضمنية في رصيد الخزينة. استحقاق LP للرسوم المتراكمة يتم ممارسته بحرق رموز LP (أي عبر
Withdraw) — لا يوجدCollectLpFee.
التفاعل مع رسوم تحويل Token-2022
يتم تطبيق رسوم تحويل Token-2022 بواسطة الإصدار، وليس بواسطة CPMM. تعمل على كل تحويل رموز — مبادلة، إيداع، سحب، وعملياتCollect*. يتم حساب رياضيات رسم التجارة في CPMM مقابل المبلغ الذي هبط فعلاً في الخزينة، أي بعد خصم رسم التحويل لإصدار المدخل (إن وجد).
إذن في أسوأ الحالات يدفع المستخدم ثلاث ضرائب مختلفة على مبادلة مدخل دقيق:
- رسم التحويل لإصدار المدخل على
amount_in(لسلطة رسم الإصدار). - رسم
trade_feeللمجموعة على الباقي (مقسم كما هو موضح أعلاه). - رسم التحويل لإصدار المخرج على
amount_out(لسلطة رسم الإصدار).
minimum_amount_out بما يحصل عليه المستخدم فعلاً. إذا كنت تكتب مقتبسك الخاص، عكس هذا السلوك، أو ستكون فحوصات الانزلاق الخاصة بك متحررة بشكل منهجي.
انظر algorithms/token-2022-transfer-fees للاشتقاق التفصيلي.
رسم المنشئ
رسم المنشئ اختياري ولكل مجموعة. المعدل يعيش علىAmmConfig.creator_fee_rate؛ علم التفعيل و الجانب (creator_fee_on) يعيشان على PoolState:
- مفعل عند إنشاء المجموعة. يعيّن
Initializeenable_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معين لا يمكنها تبديل الجوانب.
حصة البروتوكول من رسم المنشئ
منذ ترقية 2026-09-19 يمكن للبروتوكول الاحتفاظ بحصة قابلة للتكوين من رسم المنشئ. لا شيء عن المبادلة يتغير: رسم المنشئ لا يزال يُفرض بـcreator_fee_rate ولا يزال يتراكم بالكامل في creator_fees_token{0,1}. التقسيم يحدث مرة واحدة، عند وقت التحصيل، داخل CollectCreatorFee و CollectCreatorFeePermissionless.
من أين يأتي المعدل
مصدران، بترتيب الأولوية:- PDA
CreatorFeeShare— بذور["creator_fee_share", creator, amm_config]. عندما يكون هذا الحساب موجودًا ومملوكًا بواسطة CPMM، يفوزshare_rateالخاص به. يسمح للبروتوكول بالتفاوض على معدل لكل منشئ على مستوى رسم معين دون لمس المستوى نفسه. AmmConfig.creator_fee_share_rate— الافتراضي لكل منشئ على مستوى الرسم هذا. يُستخدم كلما لم يكن PDA موجودًا.
u64 على نفس FEE_RATE_DENOMINATOR = 1_000_000، وكلاهما مقيد بالمقسوم عليه. تعليمات التحصيل تأخذ دائمًا حساب creator_fee_share، حتى عندما لم يتم إنشاؤه أبدًا — يتحقق البرنامج ما إذا كان فارغًا ويعود إلى التكوين. تمرير العنوان الخاطئ يفشل قيد PDA، وليس الرجوع.
ما الذي يفعله التقسيم
creator_fees_token_0 و creator_fees_token_1، ثم:
- يتم نقل
creator_amount_{0,1}خارج الخزائن إلى حسابات الرموز للمنشئ. - يتم إضافة
shared_amount_{0,1}إلىprotocol_fees_token_{0,1}وتبقى في الخزينة حتى يقوم مالك البروتوكول بتجميعها باستخدامCollectProtocolFee. لا توجد تعليمة منفصلة ولا عداد منفصل لها. - يتم تصفير
creator_fees_token_{0,1}، تمامًا كما هو الحال من قبل.
- التقريب يفضل المنشئ. حصة البروتوكول تقرب لأسفل، لذا الغبار يبقى مع المنشئ — نفس الاتجاه مثل
protocol_feeوfund_fee، اللذان يقطعان أيضًا حصة من رسم مجمّع بالفعل. - القيمة محفوظة.
creator_amount + shared_amount == creator_feeلكل معدل وكل رسم، بما في ذلكu64::MAX. share_rate = 0هو عدم تشغيل. كل من قيمة التكوين الافتراضية وغياب PDACreatorFeeShareيترك رسم المنشئ كاملاً مع المنشئ، وهو السلوك السابق للترقية.
ما يعنيه للمدمجين
- مزودي السيولة والاقتباس لم يتأثروا. المبلغ المشترك ينتقل بين عدادين كلاهما مستبعد بالفعل من رؤية المنحنى للخزينة (
vault_amount_without_fee)، لذاcurve_xوcurve_yلا يتحركان عبر تحصيل.kلم يتغير. - مقدّر رسم المنشئ الذي يقرأ
creator_fees_token*يبالغ الآن في الدفع. اضرب بـ(1 − share_rate / 1_000_000)باستخدام المعدل الذي ينطبق فعلاً على زوج(creator, amm_config)هذا، وليس افتراضي التكوين. protocol_fees_token*ينمو خارج المبادلات. سيرى مراقب يوفق الاستحقاق البروتوكول مقابل حجم المبادلة قفزات عند كل تحصيل رسم منشئ. استحقاق البروتوكول لم يعدtrade_fee × protocol_fee_rateوحده.- المعدل يمكن أن يتغير بين الاستحقاق والتحصيل. يتم قراءته عند وقت التحصيل، لذا الرسوم التي تراكمت تحت معدل واحد تستقر بأي معدل يكون ساريًا عندما يستدعي شخص ما
Collect*.
CreatorFeeShare بواسطة المسؤول أو سلطة مخصصة لحصة رسم المنشئ عبر CreateCreatorFeeShare / CloseCreatorFeeShare؛ إغلاقه يعيد الزوج إلى AmmConfig.creator_fee_share_rate. تخطيط الحساب في products/cpmm/accounts، العناوين في reference/program-addresses.
تدفق العمليات للتحصيل
مالكو البروتوكول والصندوق هم multisig Raydium على mainnet؛ انظر
security/admin-and-multisig. على المسار الأصلي الخاص بالمنشئ فقط، الموقّع للمنشئ هو الحساب المسجل في PoolState. على المسار بدون إذن، يدفع المتصل لإنشاء ATA منشئ مفقود. يقيد البرنامج creator إلى pool_state.pool_creator ويشتق كل وجهة من هذا المنشئ بالإضافة إلى إصدار الخزينة المقابل وبرنامج الرموز، لذا لا يمكن للمتصل إعادة توجيه الأموال.
تغيير مستوى الرسم
يمكن تغيير معدلات الرسم بواسطة المسؤول عبرUpdateAmmConfig (انظر products/cpmm/instructions). التغييرات تدخل حيز التنفيذ على المبادلة التالية لكل مجموعة مرتبطة بـ AmmConfig هذا — لا توجد هجرة، لأن المجموعات تحمل التكوين في كل مبادلة.
ما لا يمكن للمسؤول فعله:
- نقل مجموعة من
AmmConfigواحد إلى آخر. - إعادة تسعير الرسوم المتراكمة بأثر رجعي.
- تجميع الرسوم بدون موقّع
protocol_owner/fund_owner.
قراءة الرسوم من مجموعة قيد التشغيل
حل معدل الحصة على السلسلة، وليس من تكوين مخزن مؤقتًا.
creator_fee_share_rate هو حقل AmmConfig مضاف حديثًا، لذا اقرأه من الحساب بدلاً من افتراض أن حمولة REST للتكوين تحمله، وتحقق ما إذا كان PDA CreatorFeeShare موجودًا في ["creator_fee_share", creator, ammConfig] قبل اقتباس المنشئ لدفعه. PDA المفقود هو الحالة الشائعة ويعني أن افتراضي التكوين ينطبق.المقارنة مع CLMM و AMM v4
انظرreference/fee-comparison لمصفوفة جنبًا إلى جنب. الملخص:
- AMM v4 يستخدم رسم تجارة ثابت 0.25% مع تقسيم LP/بروتوكول مختلف وبدون رسم صندوق.
- CLMM الرسوم لكل مستوى تباعد القراد، مجمّعة لكل موضع (وليس لكل مجموعة)، ومطالب بها عبر
DecreaseLiquidityأوCollectFees.
إلى أين تذهب بعد ذلك
products/cpmm/math— حيث يتصل خصم رسم التجارة بالمنحنى.products/cpmm/instructions— قوائم حسابات تعليمةCollect*، بما في ذلك حسابcreator_fee_shareالذي يتطلبه كلا مسارات المنشئ الآن.algorithms/token-2022-transfer-fees— كيفية دمج رسم تجارة مجموعة مع رسم تحويل إصدار بشكل صحيح.

