هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
ملخص التعليمات
قناع الحالة: حقل
status في كل تجمع هو u8 حيث البت 0 = الإيداع معطل، البت 1 = السحب معطل، البت 2 = المبادلة معطلة (PoolStatusBitIndex { Deposit, Withdraw, Swap } في البرنامج). البت الصافي يعني السماح بالعملية؛ البت المضبوط يعني إيقافها. UpdatePoolStatus يأخذ u8 خام ويستبدل القيمة الموجودة.
تمر الأقسام التالية عبر كل واحدة بالتفصيل. ترتيب الحسابات يتبع IDL الخاص بـ CPMM؛ الـ SDK وعميل Rust في raydium-cp-swap/programs/cp-swap/src/instructions يطابقان هذا الترتيب.
Initialize
إنشاء تجمع CPMM جديد.
المعاملات
* يوقّع pool_state فقط على مسار زوج المفاتيح العشوائي؛ مسار PDA القانونية يعمل بدون توقيع pool_state.
الشروط المسبقة
- الرموز مرتبة (
token_0_mint < token_1_mintبترتيب البايت). - لا تستخدم أي من الرموز ملحقاً خارج قائمة السماح بـ CPMM (
TransferFeeConfig،MetadataPointer،TokenMetadata،InterestBearingConfig،ScaledUiAmount) — انظرproducts/cpmm/accounts. قائمة سماح صغيرة لكل رمز داخل البرنامج تتجاوز الفحص للاستخدام حالة بحالة. - يمتلك
creatorعلى الأقلinit_amount_0وinit_amount_1في الـ ATAs الخاصة بهما. amm_config.disable_create_pool == false.
- يوجد
pool_stateمعlp_supply = sqrt(init_amount_0 * init_amount_1) − LOCKED_LP. - يتم قفل بادئ LP البالغ
LOCKED_LP(100لامبورت من رمز LP) بشكل دائم في التجمع —pool_state.lp_supplyيسجلliquidity − 100بينما يبقى100وحدة LP خارج التداول، مما يمنع التجمع من الاستنزاف الكامل والقسمة على صفر. - تُهيأ
observation_state؛observation_index = 0وpool_id = pool_state.key(). - يتم نقل
create_pool_feeلامبورت من المنشئ إلى المستلم ومزامنتها بـ SOL أصلية (إنها ATA wSOL). - قناع حالة التجمع هو
0(الإيداع / السحب / المبادلة كلها مفعلة). enable_creator_fee = falseوcreator_fee_on = BothToken.Initializeلا تدعم تفعيل رسوم المنشئ — هذا المسار هوInitializeWithPermission.- يتم زيادة
open_timeإلىblock_timestamp + 1إذا مرر المتصل قيمة<= block_timestamp. يتم رفض المبادلات قبلopen_time؛ الإيداعات والسحوبات تعمل على الفور.
reference/error-codes)
InvalidInput— رموز غير مرتبة، أو رموز متطابقة.NotSupportMint— ملحق Token-2022 محجوب.ExceededSlippage— نادراً؛ إذا أسفرinit_amount_0/1عن صفر LP بسبب عدم تطابق الكسور العشرية.
Deposit
إضافة السيولة بكلا الرموز بما يتناسب مع التجمع.
المعاملات
الرياضيات
k — تتوسع كلا الخزانات وlp_supply بنفس العامل.
الشروط اللاحقة
lp_supply += lp_token_amount.vault_0 += needed_token_0(صافي أي رسم نقل Token-2022 على الإدخال).vault_1 += needed_token_1(صافي أي رسم نقل Token-2022 على الإدخال).
ExceededSlippage، ZeroTradingTokens، InvalidStatus إذا تم إيقاف الإيداع.
Withdraw
حرق رموز LP واستقبال كلا الرموز الأساسيين بنسبة.
المعاملات
(مطابقة لـ
Deposit؛ lp_mint قابلة للكتابة لأن رموز LP تُحرق.)
الرياضيات
lp_supply -= lp_token_amount.- تُرسل الخزانات
out_token_0/out_token_1(إجمالياً؛ يستقبل المستخدم صافي أي رسم نقل Token-2022).
SwapBaseInput
مبادلة دقيقة المدخلات.
المعاملات
الترتيب الإدخال → الإخراج هو باتجاه المستخدم، وليس بـ
token_0 / token_1 القانونية للتجمع. يحدد البرنامج أي خزان هو أي عن طريق مطابقة الرموز.
الرياضيات — انظر products/cpmm/math.
الشروط المسبقة
open_time <= now.- تسمح
pool_statusبالمبادلة. - لم تتم إيقاف أي من الرموز أو تجميدها لهذه السلطة.
amount_in > 0.
ExceededSlippage—amount_out < minimum_amount_out.ZeroTradingTokens— تُقرب التجارة إلى صفر.NotApproved— يتم إيقاف التجمع للمبادلات عبرUpdatePoolStatus.InvalidInput— الرموز لا تطابق إما من خزانات التجمع.
SwapBaseOutput
مبادلة دقيقة المخرجات.
المعاملات
SwapBaseInput.
الرياضيات — منحنى عكسي مع سقف، انظر products/cpmm/math.
الأخطاء الشائعة — ExceededSlippage (gross_in > max_amount_in)، ZeroTradingTokens، InvalidInput، NotApproved.
CollectProtocolFee
تجميع رسوم البروتوكول المتراكمة من الخزانات إلى وجهة البروتوكول.
المعاملات — لا توجد.
الحسابات
التأثير
NotApproved إذا لم يكن الموقّع protocol_owner.
CollectFundFee
نفس الشكل كـ CollectProtocolFee لكن يوقّع بواسطة fund_owner ويصفر عدادات fund_fees_*.
CollectCreatorFee
نفس الشكل مرة أخرى، موقّع بواسطة pool_state.pool_creator. يُصدر النقل فقط إذا تم تهيئة التجمع بمعدل رسوم منشئ غير صفري.
UpdatePoolStatus
إيقاف أو استئناف عمليات فردية على التجمع. حقل status هو قناع بت:
المعاملات
مفتاح الإدارة هو سلطة الترقية على برنامج CPMM — في الممارسة العملية، مجموعة Raydium متعددة التوقيع. انظر
security/admin-and-multisig.
CreateAmmConfig
إنشاء طبقة رسوم جديدة.
المعاملات
الشروط المسبقة
- لا توجد
AmmConfigموجودة بنفسindex. protocol_fee_rate + fund_fee_rate <= FEE_RATE_DENOMINATOR_VALUE.
UpdateAmmConfig
تغيير معدلات الرسوم أو الملكية على AmmConfig موجودة. يأخذ param: u8 (ممیز للحقل المراد تحديثه) وvalue: u64. دلالات القيمة لكل معامل موجودة في المصدر؛ عادة ما تكون:
param = 0→trade_fee_rateparam = 1→protocol_fee_rateparam = 2→fund_fee_rateparam = 3→new_protocol_owner(مرر بايتاتPubkeyكإعادة تفسير)param = 4→new_fund_ownerparam = 5→create_pool_feeparam = 6→disable_create_pool
AmmConfig عند المبادلة التالية. لا توجد هجرة؛ التجمعات تقرأ ببساطة القيم الجديدة.
مصفوفة تغيير الحالة
إلى أين تذهب بعد ذلك
products/cpmm/code-demos— عينات TypeScript قابلة للتشغيل للعناصر أعلاه.reference/error-codes— جدول خطأ Anchor الكامل.products/cpmm/fees— نموذج تراكم الرسوم الذي تصفيهCollectProtocolFee/CollectFundFee/CollectCreatorFee.

