Skip to main content
هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →

ملخص التعليمات

قناع الحالة: 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 جديدة. المعاملات
الحسابات (W = قابل للكتابة، S = موقّع) * 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 lamports من رمز LP) مقفلة بشكل دائم في المجموعة — pool_state.lp_supply يسجل liquidity − 100 بينما تبقى 100 وحدة LP خارج التداول، مما يمنع المجموعة من أن تُستنزف بالكامل وتقسيم على صفر.
  • تم تهيئة observation_state؛ observation_index = 0 و pool_id = pool_state.key().
  • يتم نقل create_pool_fee lamports من المنشئ إلى المستقبل ومزامنتها كـ 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.
الأخطاء الشائعة
  • ExceededSlippageamount_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 = 0trade_fee_rate
  • param = 1protocol_fee_rate
  • param = 2fund_fee_rate
  • param = 3new_protocol_owner (مرر بايتات Pubkey كإعادة تفسير)
  • param = 4new_fund_owner
  • param = 5create_pool_fee
  • param = 6disable_create_pool
التغييرات موقّعة من قبل الإدارة وتؤثر على كل مجموعة مرتبطة بهذا AmmConfig عند المبادلة التالية. لا توجد هجرة؛ المجموعات ببساطة تقرأ القيم الجديدة.

مصفوفة تغيير الحالة

الخطوات التالية

المصادر: