هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
ملخص التعليمات
| اسم الممیز | من یوقع | ما تفعله |
|---|---|---|
Initialize | منشئ التجمع | إنشاء تجمع CPMM جديد من عملتين وAmmConfig. بدون إذن؛ يمكن لأي شخص استدعاؤها. يحدد بثبات enable_creator_fee = false على التجمع الجديد. يمكن أن يكون حساب pool_state إما PDA القانونية أو زوج مفاتيح عشوائي جديد (انظر حسابات Initialize). |
InitializeWithPermission | الدافع + صاحب PDA Permission | نسخة مرخصة من Initialize. يجب على المتصل (payer) أن يمتلك PDA Permission مشتقة من مفتاحه العام. يستخدمه المنصات التي تحتاج إلى إنشاء تجمع محدود (مثل تخرجات LaunchLab). يسمح للمتصل بتحديد creator_fee_on (BothToken / OnlyToken0 / OnlyToken1) ويفرض enable_creator_fee = true على التجمع الجديد. يتم تعيين حقل creator على pool_state إلى حساب creator منفصل تم تمريره، وليس الدافع. نفس المرونة PDA-القانونية-أو-عشوائية-المفاتيح لـ pool_state كما في Initialize. |
Deposit | مزود السيولة | إضافة السيولة بكلا الرموز؛ استقبال رموز LP. |
Withdraw | مزود السيولة | حرق رموز LP؛ استقبال كلا الرموز الأساسيين بنسبة. |
SwapBaseInput | المتبادل | مبادلة دقيقة المدخلات (amount_in داخلاً، ≥ minimum_amount_out خارجاً). |
SwapBaseOutput | المتبادل | مبادلة دقيقة المخرجات (≤ maximum_amount_in داخلاً، amount_out خارجاً). |
CollectProtocolFee | protocol_owner (من AmmConfig) | تجميع الرسوم البروتوكول المتراكمة من الخزانات. |
CollectFundFee | fund_owner (من AmmConfig) | تجميع رسوم الصندوق المتراكمة من الخزانات. |
CollectCreatorFee | pool_creator | تجميع رسوم المنشئ المتراكمة (إن كانت رسوم المنشئ مفعلة). |
UpdatePoolStatus | admin | إيقاف / استئناف عمليات محددة على التجمع عبر قناع البت. |
UpdateAmmConfig | admin | تغيير معدلات الرسوم أو مالك البروتوكول/الصندوق على AmmConfig. |
CreateAmmConfig | admin | إنشاء طبقة رسوم جديدة (حساب AmmConfig جديد). |
CreatePermissionPda | admin | إنشاء PDA Permission يسمح لسلطة محددة باستدعاء InitializeWithPermission. |
ClosePermissionPda | admin | إلغاء PDA Permission صادرة مسبقاً. |
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 | ملاحظات |
|---|---|---|---|---|
| 1 | creator | W | S | يدفع الإيجار؛ يُسجل باسم pool_state.pool_creator. |
| 2 | amm_config | طبقة الرسوم المختارة. | ||
| 3 | authority | PDA سلطة CPMM العالمية. | ||
| 4 | pool_state | W | S* | تُهيأ هنا. إما PDA القانونية ["pool", amm_config, token_0_mint, token_1_mint] أو زوج مفاتيح عشوائي جديد — عندما لا تكون PDA القانونية، يتطلب البرنامج توقيع pool_state (require_eq!(pool_account_info.is_signer, true)). يسمح المسار العشوائي للمفاتيح للمنشئ بتجنب محاولات البيع المسبق على PDA القانونية. تُشتق الـ PDAs اللاحقة (lp_mint، vaults، observation_state) من pool_state.key() على أي حال. |
| 5 | token_0_mint | مرتب: token_0_mint < token_1_mint. | ||
| 6 | token_1_mint | |||
| 7 | lp_mint | W | تُهيأ هنا. السلطة معيّنة إلى authority. | |
| 8 | creator_token_0 | W | ATA المصدر لـ init_amount_0. | |
| 9 | creator_token_1 | W | ATA المصدر لـ init_amount_1. | |
| 10 | creator_lp_token | W | الوجهة لـ LP (تُنشأ إذا فقدت). | |
| 11 | token_0_vault | W | تُهيأ هنا. مملوكة بواسطة authority. | |
| 12 | token_1_vault | W | ||
| 13 | create_pool_fee | W | ATA الوجهة لـ create_pool_fee المدفوعة من قبل المنشئ. | |
| 14 | observation_state | W | تُهيأ هنا. | |
| 15 | token_program | SPL Token (لـ LP mint). | ||
| 16 | token_0_program | SPL Token أو Token-2022. | ||
| 17 | token_1_program | SPL Token أو Token-2022. | ||
| 18 | associated_token_program | |||
| 19 | system_program | |||
| 20 | rent |
* يوقّع 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
إضافة السيولة بكلا الرموز بما يتناسب مع التجمع.
المعاملات
| # | الاسم | W | S |
|---|---|---|---|
| 1 | owner | S | |
| 2 | authority | ||
| 3 | pool_state | W | |
| 4 | owner_lp_token | W | |
| 5 | token_0_account | W | |
| 6 | token_1_account | W | |
| 7 | token_0_vault | W | |
| 8 | token_1_vault | W | |
| 9 | token_program | ||
| 10 | token_program_2022 | ||
| 11 | vault_0_mint | ||
| 12 | vault_1_mint | ||
| 13 | lp_mint | W |
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 واستقبال كلا الرموز الأساسيين بنسبة.
المعاملات
| # | الاسم | W | S |
|---|---|---|---|
| 1 | owner | S | |
| 2 | authority | ||
| 3 | pool_state | W | |
| 4 | owner_lp_token | W | |
| 5 | token_0_account | W | |
| 6 | token_1_account | W | |
| 7 | token_0_vault | W | |
| 8 | token_1_vault | W | |
| 9 | token_program | ||
| 10 | token_program_2022 | ||
| 11 | vault_0_mint | ||
| 12 | vault_1_mint | ||
| 13 | lp_mint | W |
Deposit؛ lp_mint قابلة للكتابة لأن رموز LP تُحرق.)
الرياضيات
lp_supply -= lp_token_amount.- تُرسل الخزانات
out_token_0/out_token_1(إجمالياً؛ يستقبل المستخدم صافي أي رسم نقل Token-2022).
SwapBaseInput
مبادلة دقيقة المدخلات.
المعاملات
| # | الاسم | W | S |
|---|---|---|---|
| 1 | payer | S | |
| 2 | authority | ||
| 3 | amm_config | ||
| 4 | pool_state | W | |
| 5 | input_token_account | W | |
| 6 | output_token_account | W | |
| 7 | input_vault | W | |
| 8 | output_vault | W | |
| 9 | input_token_program | ||
| 10 | output_token_program | ||
| 11 | input_token_mint | ||
| 12 | output_token_mint | ||
| 13 | observation_state | W |
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
تجميع رسوم البروتوكول المتراكمة من الخزانات إلى وجهة البروتوكول.
المعاملات — لا توجد.
الحسابات
| # | الاسم | W | S | |
|---|---|---|---|---|
| 1 | owner | S | يجب أن يطابق amm_config.protocol_owner. | |
| 2 | authority | |||
| 3 | pool_state | W | ||
| 4 | amm_config | |||
| 5 | token_0_vault | W | ||
| 6 | token_1_vault | W | ||
| 7 | vault_0_mint | |||
| 8 | vault_1_mint | |||
| 9 | recipient_token_0_account | W | ||
| 10 | recipient_token_1_account | W | ||
| 11 | token_program | |||
| 12 | token_program_2022 |
NotApproved إذا لم يكن الموقّع protocol_owner.
CollectFundFee
نفس الشكل كـ CollectProtocolFee لكن يوقّع بواسطة fund_owner ويصفر عدادات fund_fees_*.
CollectCreatorFee
نفس الشكل مرة أخرى، موقّع بواسطة pool_state.pool_creator. يُصدر النقل فقط إذا تم تهيئة التجمع بمعدل رسوم منشئ غير صفري.
UpdatePoolStatus
إيقاف أو استئناف عمليات فردية على التجمع. حقل status هو قناع بت:
| البت | العلم | التأثير عند التعيين |
|---|---|---|
| 0 | DEPOSIT_DISABLED | Deposit ترفضها بـ NotApproved. |
| 1 | WITHDRAW_DISABLED | Withdraw ترفضها. |
| 2 | SWAP_DISABLED | SwapBaseInput / SwapBaseOutput ترفضها. |
| # | الاسم | W | S | |
|---|---|---|---|---|
| 1 | authority | S | يجب أن يطابق مفتاح الإدارة على برنامج CPMM. | |
| 2 | pool_state | W |
security/admin-and-multisig.
CreateAmmConfig
إنشاء طبقة رسوم جديدة.
المعاملات
| # | الاسم | W | S | |
|---|---|---|---|---|
| 1 | owner | W | S | إدارة. |
| 2 | amm_config | W | تُهيأ هنا. | |
| 3 | system_program |
- لا توجد
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 عند المبادلة التالية. لا توجد هجرة؛ التجمعات تقرأ ببساطة القيم الجديدة.
مصفوفة تغيير الحالة
| التعليمة | lp_supply | أرصدة الخزانات | حقول الرسوم المتراكمة | observation |
|---|---|---|---|---|
Initialize | + init LP | + init_amount_{0,1} | 0 | init |
InitializeWithPermission | + init LP | + init_amount_{0,1} | 0 | init |
Deposit | + | + كلاهما | — | — |
Withdraw | − | − كلاهما | — | — |
SwapBaseInput | — | + في، − خارج | + trade_fee منقسمة إلى بروتوكول/صندوق؛ + creator_fee إذا كانت مفعلة | + (إذا انقضت الفترة الزمنية) |
SwapBaseOutput | — | + في، − خارج | + trade_fee منقسمة إلى بروتوكول/صندوق؛ + creator_fee إذا كانت مفعلة | + (إذا انقضت الفترة الزمنية) |
CollectProtocolFee | — | − (بواسطة سلات البروتوكول) | protocol_* → 0 | — |
CollectFundFee | — | − (بواسطة سلات الصندوق) | fund_* → 0 | — |
CollectCreatorFee | — | − (بواسطة سلات المنشئ) | creator_* → 0 | — |
UpdatePoolStatus | — | — | — | — |
إلى أين تذهب بعد ذلك
products/cpmm/code-demos— عينات TypeScript قابلة للتشغيل للعناصر أعلاه.reference/error-codes— جدول خطأ Anchor الكامل.products/cpmm/fees— نموذج تراكم الرسوم الذي تصفيهCollectProtocolFee/CollectFundFee/CollectCreatorFee.

