هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
معرّف البرنامج وبذور PDA لـ CPMM مدرجة بشكل قانوني في
reference/program-addresses. تركز هذه الصفحة على ما يخدمه كل حساب والثوابت التي يحافظ عليها، وليس على العناوين المشفرة.الحسابات الستة لمجمع CPMM
يتم وصف كل مجمع CPMM بالكامل بستة عناوين مشتقة من البرنامج (PDAs) تحت برنامج CPMM، بالإضافة إلى حسابAmmConfig مشترك واحد يشير إليه. بمجرد حصولك على الصكين، يمكنك اشتقاق كل شيء بشكل حتمي دون لمس الشبكة.
والإعدادات المشتركة:
اشتقاق مجمع من لا شيء سوى صكين
معرّف المجمع ليس دائمًا PDA القانوني. تقبل
Initialize زوج مفاتيح موقّع تعسفي كـ pool_state بالإضافة إلى PDA أعلاه. إذا لم يطابق الحساب المُمرّر PDA القانوني، يتطلب البرنامج أن يكون موقّعًا — أي أن المنشئ يمرر زوج مفاتيح جديد يوقّع به. هذا هو دفاع الركض الأمامي: أي طرف ثالث يتسابق للاستيلاء على PDA القانوني يمكن تجنبه من قبل المنشئ الشرعي باستخدام زوج مفاتيح عشوائي بدلاً من ذلك. لا تزال PDAs اللاحقة (lpMint، vault0، vault1، observation) مشتقة من poolState.key()، لذا تبقى فريدة لأي عنوان تم استخدامه. عند فهرسة المجمعات، اكتشف معرّف المجمع دائمًا من الحالة على السلسلة (على سبيل المثال، حسابات PoolState تحت برنامج CPMM)، وليس بواسطة اشتقاق PDA القانوني — الأخير سيفتقد مجمعات زوج المفاتيح العشوائية.تخطيطات الحساب
تعريفات Rust الكاملة موجودة في مصدرraydium-cp-swap. الحقول أدناه هي تلك التي ستقرأها من التكامل.
PoolState
lp_supply— إجمالي LP الداخلي للمجمع. وهو لا يساوي إمداد صك LP: فهو أعلى منه بمقدار 100 وحدة أساس بالضبط، لأن الوحدات الـ 100 المقفلة تُحتسب هنا لكنها لا تُصك أبدًا. جميع رياضيات حصة LP (الإيداع، السحب) تقسم علىlp_supply، لذا استخدم هذا الحقل ولا تستبدله بإمداد الصك على السلسلة.protocol_fees_token{0,1}،fund_fees_token{0,1}— رسوم متراكمة لم يتم كسحها بعد. هذه لا تؤثر على تسعير المبادلة؛ تجلس في الخزائن حتى يتم استدعاءCollectProtocolFee/CollectFundFee.status— قناع بت يتحكم في ما إذا كانتSwap،Deposit،Withdrawمسموحة. يتم تحديثها بواسطة المسؤول عبرUpdatePoolStatus. يتحقق SDK من هذا قبل بناء معاملة؛ إذا كنت تقوم بـ CPI مباشرة، تحقق منها بنفسك.token0_program/token1_program— برنامج الرمز للقيام بـ CPI به لكل خزينة. يمكن أن يكون أحدهما SPL Token الكلاسيكي والآخر Token-2022؛ هما مستقلان.open_time— طابع زمني Unix. تفشل المبادلات قبل هذا الوقت. يُسمح بالودائع قبلopen_timeحتى يمكن بذر المجمع.creator_fee_on/enable_creator_fee— معًا يتحكمان في ما إذا كانت رسوم المنشئ الاختيارية نشطة لهذا المجمع وأي جانب من المبادلة يتم جمعها منه.enable_creator_fee == falseيصفر مسار رسوم المنشئ بالكامل. عند التفعيل، يختارcreator_fee_on:0= خذ الرسوم من أي رمز هو مدخل المبادلة (BothToken)؛1= خذ الرسوم منtoken_0فقط (تخطي على مبادلاتtoken_1 → token_0)؛2= خذ الرسوم منtoken_1فقط. تعيين عند إنشاء المجمع عبرInitializeWithPermission؛ لا يمكن تغييره لاحقًا.creator_fees_token_{0,1}— رسوم المنشئ المتراكمة، يتم كسحها بواسطةCollectCreatorFeeأوCollectCreatorFeePermissionless. كلا المسارين يصفران العدادات الكاملة؛ يصلح المسار بدون إذن المستقبلات إلى ATAs القانونية لـpool_creator.
AmmConfig
trade_fee_rateوcreator_fee_rateهما كسور من الحجم، كلاهما مقوّم بوحدات1/1_000_000.2500يعني 0.25% من حجم التجارة.protocol_fee_rateوfund_fee_rateهما كسور من رسوم التجارة (وليس من الحجم)، بنفس مقام1/1_000_000. رسوم المنشئ ليست كسرًا من رسوم التجارة — إنها معدل مستقل خاص بها. الحسابات الكاملة موجودة فيproducts/cpmm/fees.indexهوu16، لذا تستخدم بذرة التجزئة 2 بايت big-endian. الخطأ بمقدار واحد في ترتيب البايت هو خطأ تكامل شائع.AmmConfigثابت على مستوى المجمع. يشير المجمع إلىAmmConfigواحد عند الإنشاء ولا يتحول أبدًا. تنتشر تغييرات الرسوم لأن المجمع يقرأ الإعدادات في كل مبادلة — لكن لا يمكن نقل المجمع بين فئات الرسوم.
creator_fee_rate) يعيش على AmmConfig ويتم مشاركته عبر فئة الرسوم. ما إذا كان مجمع معين يفرضها فعلاً (enable_creator_fee) وأي جانب من المبادلة يهبط عليه (creator_fee_on) يعيش على PoolState. رسوم المنشئ مستقلة عن رسوم التجارة — إنها معدل خاص بها، متراكمة على عدادات خاصة بها (creator_fees_token_{0,1})، وأبدًا لا تقلل من حصص LP / البروتوكول / الصندوق من رسوم التجارة. الكسح عبر CollectCreatorFee أو CollectCreatorFeePermissionless المقيد بالوجهة. انظر products/cpmm/fees للآليات الكاملة.
Permission
حساب تحكم وصول صغير يستخدمه InitializeWithPermission. يدعم برنامج CPMM مسار إنشاء مجمع مرخص حتى تتمكن البرامج الأخرى (على سبيل المثال LaunchLab عند تخرج رمز إلى CPMM) من إثبات أنها مخولة بإنشاء مجمع ضد AmmConfig معين.
CreatePermissionPda بواسطة إما مسؤول CPMM أو سلطة منشئ PDA إذن مخصصة. منذ ترقية 2026-09، تقبل ClosePermissionPda نفس الموقّعين؛ قبل ذلك كانت حصرية للمسؤول. لا يتفاعل المستخدمون النهائيون مع هذا الحساب مباشرة — إنه أنابيب لتدفقات البرامج المتقاطعة. انظر security/admin-and-multisig لحد الدور و reference/program-addresses للعناوين القانونية.
الخزائن و Token-2022
vault0 و vault1 مملوكة بواسطة PDA سلطة CPMM، ومالك برنامج الرمز (token_program) هو إما SPL Token أو Token-2022، يتم تحديده عند إنشاء المجمع بواسطة برنامج الصك. يتعامل المجمع مع الحالتين بشفافية — تمرر معرّف برنامج الرمز الصحيح لكل جانب في حسابات تعليمات Swap / Deposit / Withdraw.
يفرض CPMM قائمة سماح الامتداد صارمة عند إنشاء المجمع (is_supported_mint في utils/token.rs). يمكن استخدام صك Token-2022 في مجمع CPMM فقط إذا كان كل امتداد يحمله في هذه القائمة:
TransferFeeConfig. تطبقه الصك على كل نقل. المجمع على الجانب المستقبل لودائعSwapBaseInputوالجانب المرسل للسحب. يحسب البرنامج الكمية الصافية الهابطة في الخزينة ويعيّن المنحنى وفقًا لذلك. انظرalgorithms/token-2022-transfer-fees.MetadataPointerوTokenMetadata. البيانات الوصفية القياسية على الصك. لا تأثير على رياضيات المبادلة.InterestBearingConfig. كمية واجهة المستخدم للصك تتراكم الفائدة. تخزن الخزينة الكميات الخام؛ يعمل المنحنى على الكميات الخام فقط. يجب على واجهات المستخدم التي تعرض APR استدعاء مساعدات Token-2022 لتقديم كمية واجهة المستخدم.ScaledUiAmount. امتداد تحجيم عرض واجهة المستخدم. نفس المعاملة مثلInterestBearingConfig— يستخدم المنحنى الكميات الخام.
PermanentDelegate، TransferHook، DefaultAccountState، NonTransferable، ConfidentialTransfer، Group/GroupMember، MintCloseAuthority، إلخ. — يسبب Initialize للرفض مع NotSupportMint. الاستثناء الوحيد هو سجل لكل صك: إذا كان PDA SupportMintAssociated موجودًا في البذرة [b"support_mint", mint]، يتم قبول الصك بغض النظر عن مجموعة الامتداد الخاصة به. يتم إنشاء وإزالة PDA هذا بواسطة المسؤول (أو سلطة دعم صك مخصصة) عبر CreateSupportMintAssociated / CloseSupportMintAssociated، لذا لا يحتاج إدراج صك معين إلى ترقية برنامج.
تم التغيير في 2026-09. كان CPMM يحمل سابقًا
MINT_WHITELIST بأربعة عناوين مشفرة يختصر فحص الامتداد. تم إزالة هذا المصفوفة؛ PDA السجل هو الآن الالتفافة الوحيدة. أي صك كان يعتمد على القائمة المشفرة يحتاج إلى PDA SupportMintAssociated قبل إنشاء مجمع جديد له — المجمعات الموجودة غير متأثرة، لأن الفحص يعمل فقط عند إنشاء المجمع.programs/cp-swap/src/utils/token.rs ويمكن أن تتغير مع ترقيات البرنامج المستقبلية. انظر reference/token-2022-support لمصفوفة البرنامج المتقاطع.
الملاحظة
حساب الملاحظة هو حلقة مخزن مؤقت لإدخالاتObservationState، كل منها يخزن block_timestamp و سعر تراكمي. في كل مبادلة يضيف البرنامج ملاحظة جديدة إذا مرّ وقت كافٍ منذ آخر واحدة. يتم حساب TWAPs بقراءة ملاحظتين وتقسيم Δcumulative / Δtime.
8 + 16 + 16)، لذا المصفوفة وحدها 4,000 بايت؛ وObservationState::LEN هو بالضبط 4,075 بايت (8 + 1 + 2 + 32 + 4,000 + 8 × 4).
قاعدتا المستهلك:
- لا تستخدم ملاحظة واحدة كسعر. إنها تراكمية، وليست سعر فوري. استخدم اثنتين منها لحساب TWAP.
- اختر ملاحظات على الأقل كتلة واحدة بعيدًا. قد لا تنتج المبادلات داخل نفس الكتلة ملاحظة جديدة؛ قراءة متتالية يمكن أن تعيد نفس السجل.
products/clmm/accounts.
دورة حياة الحساب
مجمعات CPMM و PDAs الخاصة بها لا تُغلق أبدًا. حتى عند السيولة الصفرية يبقى
poolState. هذا مقصود: إعادة بذر نفس المجمع لاحقًا تحافظ على مخزن الملاحظات التاريخي الخاص به وبقاء اشتقاق PDA الخاص به مستقرًا.
ما يجب قراءته أين
- قوائم حسابات التعليمات (أي من الأعلى قابل للكتابة/موقّع لكل تعليمة):
products/cpmm/instructions. - دلالات تراكم الرسوم:
products/cpmm/fees. - رياضيات المبادلة / قاعدة تحديث الملاحظة:
products/cpmm/math. - البذور القانونية / معرّفات البرنامج:
reference/program-addresses.

