Documentation Index
Fetch the complete documentation index at: https://docs.raydium.io/llms.txt
Use this file to discover all available pages before exploring further.
ملخص التعليمات
| اسم الممیز | من یوقع | ما تفعله |
|---|
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 جديد.
المعاملات
init_amount_0: u64
init_amount_1: u64
open_time: u64 // Unix timestamp; swaps rejected before this
الحسابات (W = قابل للكتابة، S = موقّع)
| # | الاسم | 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
إضافة السيولة بكلا الرموز بما يتناسب مع التجمع.
المعاملات
lp_token_amount: u64 // how many LP tokens to mint to the LP
maximum_token_0: u64
maximum_token_1: u64
الحسابات
| # | الاسم | 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 | |
الرياضيات
needed_token_0 = ceil(lp_token_amount * vault_0 / lp_supply)
needed_token_1 = ceil(lp_token_amount * vault_1 / lp_supply)
require(needed_token_0 <= maximum_token_0, "ExceededSlippage")
require(needed_token_1 <= maximum_token_1, "ExceededSlippage")
لا توجد تغييرات في تناسب 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 واستقبال كلا الرموز الأساسيين بنسبة.
المعاملات
lp_token_amount: u64
minimum_token_0: u64
minimum_token_1: u64
الحسابات
| # | الاسم | 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 تُحرق.)
الرياضيات
out_token_0 = floor(lp_token_amount * vault_0 / lp_supply)
out_token_1 = floor(lp_token_amount * vault_1 / lp_supply)
require(out_token_0 >= minimum_token_0, "ExceededSlippage")
require(out_token_1 >= minimum_token_1, "ExceededSlippage")
الشروط اللاحقة
lp_supply -= lp_token_amount.
- تُرسل الخزانات
out_token_0 / out_token_1 (إجمالياً؛ يستقبل المستخدم صافي أي رسم نقل Token-2022).
مبادلة دقيقة المدخلات.
المعاملات
amount_in: u64
minimum_amount_out: u64
الحسابات
| # | الاسم | 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
مبادلة دقيقة المخرجات.
المعاملات
max_amount_in: u64
amount_out: u64
الحسابات — نفسها كـ 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 | | | |
التأثير
transfer pool_state.protocol_fees_token0 from vault_0 to recipient_0
transfer pool_state.protocol_fees_token1 from vault_1 to recipient_1
pool_state.protocol_fees_token0 = 0
pool_state.protocol_fees_token1 = 0
لا توجد تغييرات في أرصدة المنحنى الفعلية (تم استبعاد الرسوم المتراكمة بالفعل).
الخطأ الشائع — 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 ترفضها. |
المعاملات
status: u8 // new bitmask
الحسابات
| # | الاسم | W | S | |
|---|
| 1 | authority | | S | يجب أن يطابق مفتاح الإدارة على برنامج CPMM. |
| 2 | pool_state | W | | |
مفتاح الإدارة هو سلطة الترقية على برنامج CPMM — في الممارسة العملية، مجموعة Raydium متعددة التوقيع. انظر security/admin-and-multisig.
CreateAmmConfig
إنشاء طبقة رسوم جديدة.
المعاملات
index: u16
trade_fee_rate: u64
protocol_fee_rate: u64
fund_fee_rate: u64
create_pool_fee: u64
الحسابات
| # | الاسم | 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_rate
param = 1 → protocol_fee_rate
param = 2 → fund_fee_rate
param = 3 → new_protocol_owner (مرر بايتات Pubkey كإعادة تفسير)
param = 4 → new_fund_owner
param = 5 → create_pool_fee
param = 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 | — | — | — | — |
إلى أين تذهب بعد ذلك
المصادر: