هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
ملخص التعليمات
قناع الحالة:
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(100lamports من رمز LP) مقفلة بشكل دائم في المجموعة —pool_state.lp_supplyيسجلliquidity − 100بينما تبقى100وحدة LP خارج التداول، مما يمنع المجموعة من أن تُستنزف بالكامل وتقسيم على صفر. - تم تهيئة
observation_state؛observation_index = 0وpool_id = pool_state.key(). - يتم نقل
create_pool_feelamports من المنشئ إلى المستقبل ومزامنتها كـ 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
مبادلة بمدخل دقيق.
المعاملات
الترتيب input → output حسب اتجاه المستخدم، وليس حسب
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. ينقل أرصدة creator_fees_token_0 و creator_fees_token_1 الكاملة إلى حسابات الرموز الخاصة بالمنشئ، ثم يصفر كلا العدادين. يُرجع NoFeeCollect عندما يكون كلا العدادين صفرًا.
CollectCreatorFeePermissionless
يمكن لأي شخص تشغيل تجميع رسوم المنشئ. التعليمة دائمًا ترسل الأرصدة المتراكمة الكاملة إلى حسابات الرموز المرتبطة القانونية المملوكة بواسطة pool_state.pool_creator؛ لا يمكن للمستدعي اختيار منشئ أو وجهة أخرى. إذا كان أي ATA مفقودًا، يمول الدافع إنشاءه.
يبقى CollectCreatorFee الأصلي قابلاً للاستدعاء، لذا تبقى العملاء الموجودة متوافقة.
المعاملات — لا توجد.
الحسابات
التأثير
- ينقل كل من
creator_fees_token_0وcreator_fees_token_1من خزائن المجموعة إلى ATAs المنشئ. - يصفر كلا عدادي رسوم المنشئ ويحدّث
pool_state.recent_epoch. - يُرجع
NoFeeCollectعندما يكون كلا العدادين صفرًا.
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 موجودة في المصدر؛ عادة:
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— نموذج تراكم الرسوم الذي تستنزفه تعليماتCollect*Fee.

