هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
الثابت
يحافظ CPMM على ثابت الناتج الثابت الكلاسيكي على خزانتيه: حيثx هو رصيد vault0 بعد أي رسوم نقل Token-2022 عند الاستقبال، وبالمثل لـ y. يجب أن يترك كل مبادلة k' ≥ k بعد احتساب رسوم التداول المرصودة للـ LP (لا تُحسب دلاء البروتوكول والصندوق والمنشئ نحو k — فهي موجودة في الخزان لكن مستثناة من عرض المنحنى، انظر الرسوم على المنحنى أدناه). لذلك ينمو k بشكل رتيب بمرور الوقت مع تراكم الرسوم لدى LPs.
يتم تسعير حصص LP من خلال احتياطيات المجموعة، وليس من خلال k:
حرق ΔLP من رموز LP يعيد بالضبط ΔLP × x / lpSupply من token0 و ΔLP × y / lpSupply من token1. لا المنحنى ولا k يتحركان عند الإيداع أو السحب — فقط المبادلات تغير السعر.
نموذج الرسوم على مسار المبادلة
يطبق CPMM رسومين مستقلين على كل مبادلة:- رسم التداول يُؤخذ من جانب الإدخال، بسعر
AmmConfig.trade_fee_rate. يتم بعد ذلك تقسيمه إلى حصص LP والبروتوكول والصندوق (تبقى حصة LP في الخزان وتنموk؛ حصص البروتوكول والصندوق يتم استخراجها من محاسبة الخزان). - رسم المنشئ (نشط فقط عندما
enable_creator_fee == true) يُفرض بسعرAmmConfig.creator_fee_rate. يُؤخذ من جانب الإدخال أو جانب الإخراج حسبPoolState.creator_fee_onواتجاه المبادلة (انظرproducts/cpmm/fees). إنه دلو خاص به — لا يكون أبدًا جزءًا من رسم التداول.
حصة البروتوكول من رسم المنشئ لا تظهر في أي مكان على هذه الصفحة، وهذا مقصود. يتم تطبيقها عندما يقوم
CollectCreatorFee بنقل الرسوم المتراكمة بين عدادين يستثنيهما المنحنى بالفعل — وليس أثناء المبادلة. رياضيات المبادلة والاقتباسات و k متطابقة مع وبدون ذلك. انظر products/cpmm/fees.FEE_RATE_DENOMINATOR = 1_000_000trade_fee_rate— منAmmConfig، على سبيل المثال،2500= 0.25% من جانب الحجم ذي الصلةcreator_fee_rate— منAmmConfig، على سبيل المثال،1000= 0.10% من جانب الحجم ذي الصلةprotocol_fee_rate,fund_fee_rate— معبّر عنها بوحدات1/FEE_RATE_DENOMINATORمن رسم التداول، وليس من الحجم
protocol_fee + fund_fee + creator_fee في الخزانات لكن يتم تتبعه بشكل منفصل على حالة المجموعة (protocol_fees_token*, fund_fees_token*, creator_fees_token*). عند فحص ثابت الناتج الثابت k' ≥ k، يستخدم أرصدة الخزان ناقص جميع الرسوم الثلاثة المتراكمة غير المجمعة — لذا يلتقط LPs فقط lp_fee.
انظر products/cpmm/fees للحصول على تعليمات الجمع والأمثلة الرقمية المعملة.
SwapBaseInput (إدخال دقيق)
“يعطينا المستخدم بالضبطamount_in من رمز الإدخال ويتلقى على الأقل minimum_amount_out من رمز الإخراج.”
تجاهل Token-2022 للحظة:
Δx_net = amount_in_after_trade_fee.
يقوم البرنامج بعد ذلك بتحديث محاسبة الخزان بحيث يجلس جزء trade_fee المستحق للبروتوكول/الصندوق/المنشئ في دلاء “مراكمة” (غير مضمنة في x التالي للمنحنى)، بينما تنضم حصة LP إلى x للمبادلة التالية.
Token-2022 على جانب الإدخال
إذا كان رمز الإدخال يحتوي على امتداد رسم النقل، فإن الرمز يخصم رسومه على النقل من المستخدم → الخزان. لذا يتلقى الخزان فعليًاamount_in − transfer_fee_in(amount_in). يحسب برنامج CPMM لذلك:
amount_in_after_trade_fee. هذا مهم لأن سعر المنحنى يُحسب من المبلغ الصافي الذي وصل إلى الخزان، وليس من المبلغ الإجمالي للمستخدم.
Token-2022 على جانب الإخراج
إذا كان رمز الإخراج يحتوي على رسم نقل، فإن المجموعة ترسلamount_out من خزانها إلى المستخدم. سيقوم الرمز بعد ذلك بحذف رسومه في الطريق، لذا يتلقى المستخدم amount_out − transfer_fee_out(amount_out). يحسب البرنامج amount_out من المنحنى كالمعتاد، لكن من مسؤولية المدمج تحويل رقم “إرسال الخزان” للمجموعة إلى رقم “استقبال المستخدم” عند عرض الاقتباسات.
فحص الانزلاق
بعد حسابamount_out:
minimum_amount_out بحيث يتم تسعير ثابت الانزلاق بما سيتلقاه المستخدم فعليًا، وليس بما يرسله الخزان.
SwapBaseOutput (إخراج دقيق)
“سيتلقى المستخدم بالضبطamount_out من رمز الإخراج وهو على استعداد لدفع ما يصل إلى maximum_amount_in من رمز الإدخال.”
عكس المنحنى لـ Δx_net:
السقف مهم — فهو يضمن k' ≥ k بعد الاختزال الصحيح. ثم:
gross_needed.
فحص الانزلاق
مثال معمول
حالة المجموعة، تجاهل Token-2022:x = 1_000_000_000_000(1,000,000.000000 من token0، 6 منازل عشرية)y = 2_000_000_000_000(2,000,000.000000 من token1، 6 منازل عشرية)AmmConfig:trade_fee_rate = 2500,protocol_fee_rate = 120_000,fund_fee_rate = 40_000,creator_fee_rate = 0
SwapBaseInput مع amount_in = 1_000_000_000 (1,000.000000 من token0). رسم المنشئ معطّل (enable_creator_fee = false).
enable_creator_fee = true مع creator_fee_rate = 1000 (0.10%) على جانب الإدخال، فسيفرض البرنامج total_input_fee = ceil(1_000_000_000 * 3500 / 1_000_000) = 3_500_000، ثم يقسمها كـ creator_fee = 1_000_000 و trade_fee = 2_500_000. حساب البروتوكول/الصندوق/LP على trade_fee لم يتغير عن المثال أعلاه — رسم المنشئ هو دلو خاص به، مراكم إلى creator_fees_token0 ومستثنى من curve_x جنبًا إلى جنب مع دلاء البروتوكول والصندوق.
إذا كان رمز الإدخال يحتوي على رسم نقل Token-2022 بنسبة 1%، فإن الخزان يتلقى 990_000_000 رمز بدلاً من 1_000_000_000، وكل حساب لاحق يستخدم هذا المبلغ الصافي.
قاعدة تحديث الملاحظة
في كل مبادلة، يقيّم البرنامج ما إذا كان يجب دفع ملاحظة جديدة إلى مخزن مؤقت حلقي:- السعر التراكمي، وليس السعر الفوري. ملاحظة واحدة ليست سعرًا. للحصول على TWAP من الوقت
t0إلىt1، اقرأ الملاحظات الأقرب إلى كل طرف واحسب(cumulative(t1) − cumulative(t0)) / (t1 − t0). - العينات محدودة بالمعدل. قد تشارك المبادلات المتتالية في نفس الفتحة ملاحظة واحدة. قراءة ملاحظة مباشرة بعد مبادلة قد تبدو قديمة بفتحة واحدة — هذا طبيعي.
products/clmm/accounts.
الرسوم على المنحنى
هذا هو الجزء الدقيق ويستحق الإشارة إليه. تعمل حسابات المنحنى مقابل أرصدة الخزان الصافية — أي رصيد SPL الخام ناقص رسوم البروتوكول والصندوق والمنشئ المراكمة (جميعها ثلاثة دلاء مستقلة — انظرproducts/cpmm/fees). صورة ملموسة:
- لا تقتبس من الأرصدة الخام. اطرح حقول الرسوم المراكمة أولاً، أو استدعِ
SwapBaseInputكمحاكاة وخذ عودتها. CollectProtocolFeeينقل الرموز خارج الخزان. بعد الجمع، ينخفضraw_vault_balanceلكنcurve_balanceلم يتغير؛ سعر المجموعة لا يتحرك. هذا مقصود.
الدقة والفيض
- تستخدم جميع حسابات المنحنى وسيطات
u128لمنع الفيض علىx * y. - القسمة تقرب نحو الصفر باستثناء
Δx_netفيSwapBaseOutput، الذي يقرب لأعلى، وحساب الرسوم، الذي يقرب لأعلى علىtrade_feeولأسفل على الأقسام الفرعية. يتم اختيار اتجاهات التقريب هذه بحيث لا ينخفض الثابت أبدًا بسبب الاختزال الصحيح. - قد تصل المجموعات ذات نسب الخزان القصوى (مليارات: 1) إلى أرضيات الدقة على الصفقات الصغيرة؛ يعيد البرنامج
ZeroTradingTokensفي هذه الحالة. انظرreference/error-codes.
أين تذهب بعد ذلك
products/cpmm/fees— دلالات مستوى الرسوم الكاملة والجمع.products/cpmm/instructions— التعليمات التي تستدعي هذه الرياضيات.algorithms/constant-product— الاشتقاق وحالات الحافة لـx · y = kالمشتركة عبر AMM v4 و CPMM.
raydium-io/raydium-cp-swap— رياضيات المبادلة فيstates/curve.rs- تقارير تدقيق Raydium المرتبطة في
security/audits

