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

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

قناع الحالة: حقل 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 لامبورت من رمز 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.
الأخطاء الشائعة
  • ExceededSlippageamount_out < minimum_amount_out.
  • ZeroTradingTokens — تُقرب التجارة إلى صفر.
  • NotApproved — يتم إيقاف التجمع للمبادلات عبر UpdatePoolStatus.
  • InvalidInput — الرموز لا تطابق إما من خزانات التجمع.

SwapBaseOutput

مبادلة دقيقة المخرجات. المعاملات
الحسابات — نفسها كـ SwapBaseInput. الرياضيات — منحنى عكسي مع سقف، انظر products/cpmm/math. الأخطاء الشائعةExceededSlippage (gross_in > max_amount_inZeroTradingTokens، 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 = 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 عند المبادلة التالية. لا توجد هجرة؛ التجمعات تقرأ ببساطة القيم الجديدة.

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

إلى أين تذهب بعد ذلك

المصادر: