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.
هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
تصف هذه الصفحة تخطيط ودور كل حساب. البذور (Seeds) موثّقة بشكل قانوني في
reference/program-addresses. يحتوي مجمع CLMM على حسابات أكثر من مجمع CPMM، إذ يُخزَّن السيولة بشكل متفرق عبر نطاق التدرجات (tick range)؛ وفهم هذا التفرق هو جوهر هذه الصفحة.فهرس الحسابات
يتكون مجمع CLMM النشط من عائلات الحسابات التالية. جميعها مملوكة لبرنامج CLMM ما عدا الـ mint الخاصتين بالعملتين ومخازنهما.| الحساب | الغرض | العدد لكل مجمع |
|---|---|---|
AmmConfig | طبقة الرسوم: معدل رسوم التداول، حصة البروتوكول، حصة الصندوق، التباعد الافتراضي للتدرجات. مشترك بين جميع المجمعات في هذه الطبقة. | 1 (مشترك) |
PoolState | sqrt_price_x64 الحالي، التدرج الحالي، إجمالي السيولة، إجماليات نمو الرسوم، معلومات المكافآت، مؤشر الملاحظات. | 1 |
TickArrayState | كتلة من TICK_ARRAY_SIZE تدرجات متجاورة. لا تُهيَّأ إلا عند الحاجة. | 0 ≤ N ≤ range |
TickArrayBitmapExtension | خريطة بت (bitmap) للتدفق الزائد تتتبع مصفوفات التدرجات الموجودة خارج خريطة البت المضمّنة في PoolState. | 0 أو 1 |
PersonalPositionState | حساب واحد لكل مركز LP. يخزّن النطاق والسيولة وآخر نمو للرسوم/المكافآت مُشاهَد. المفوَّض = مالك NFT. | 1 لكل مركز |
| Position NFT mint | Mint بإمداد 1، مرتبط بـ PersonalPositionState. نقل NFT يعني نقل المركز. | 1 لكل مركز |
ObservationState | مخزن دائري لملاحظات الأسعار خاص بـ TWAP. | 1 |
token_0_vault، token_1_vault | حسابات توكن تحتفظ بأرصدة المجمع. مملوكة لسلطة المجمع. | 2 |
DynamicFeeConfig | مجموعة معاملات قابلة لإعادة الاستخدام لآلية الرسوم الديناميكية. يمكن للمجمعات المنشأة عبر create_customizable_pool الاشتراك فيها. تدار من قبل المشرف. | مشترك (لكل index) |
LimitOrderState | حساب واحد لكل أمر حد مفتوح. يسجّل المالك والتدرج والاتجاه والكمية الإجمالية ولقطة المخرجات المسوّاة. | 1 لكل أمر |
LimitOrderNonce | عداد لكل (wallet, nonce_index) يُشتق منه PDAs فريدة للأوامر. | 1 لكل (wallet, index) |
PoolState
الحالة الحية للمجمع، تُقرأ عند كل عملية swap وكل تغيير في المراكز.
sqrt_price_x64و**tick_current** هما حالة سعر المجمع. يُحدَّثان معاً عند كل عملية swap.tick_currentهو الجزء الصحيح الأدنى لـlog_{1.0001}(price).liquidityهي السيولة النشطة — مجموع قيمLلجميع المراكز التي تحتويtick_currentضمن نطاقها. تتغير في كل مرة يعبر فيها swap تدرجاً، وفي كل مرة يُفتح أو يُغلق أو يُعاد تحديد حجم مركز.fee_growth_global_{0,1}_x64هي الرسوم التراكمية المكتسبة لكل وحدة سيولة عبر تاريخ المجمع بأكمله. تقرأ المراكز هذه القيم لحساب ما يستحقانه.tick_spacingمقيّد بـAmmConfigعند التهيئة ولا يتغير أبداً. يحدد أي مؤشرات تدرجات مسموح بها كنقاط نهاية للمراكز.tick_array_bitmapهي خريطة بت مضمّنة تغطي نطاق التدرجات الأكثر استخداماً حول السعر الفوري. بالنسبة للمجمعات التي تمتد مراكزها بعيداً، يقع تتبع الفائض في حسابTickArrayBitmapExtensionالمنفصل.fee_onثابت عند إنشاء المجمع. القيمة0(FromInput) تعيد إنتاج سلوك Uniswap-V3 الكلاسيكي. القيمتان1و2توجّهان رسوم الـ swap إلى جانب واحد من الدفتر — راجعproducts/clmm/feesللاطلاع على المقايضات.dynamic_fee_infoيحمل حالة التقلب لرسوم الرسوم الديناميكية الإضافية. عند التفعيل، تُعيد كل عملية swap حسابdynamic_fee_componentفوقAmmConfig.trade_fee_rate. التخطيط موثّق ضمنDynamicFeeInfoأدناه؛ المجمعات بدون رسوم ديناميكية تترك البنية كلها بقيمة صفر.
AmmConfig
GET https://api-v3.raydium.io/main/clmm-config):
| Index | trade_fee_rate | تباعد التدرجات | الاستخدام الشائع |
|---|---|---|---|
| 0 | 100 (0.01%) | 1 | أزواج مستقرة، USDC/USDT |
| 1 | 500 (0.05%) | 10 | العملات الرئيسية المترابطة |
| 2 | 2_500 (0.25%) | 60 | الأزواج القياسية |
| 3 | 10_000 (1.00%) | 120 | أزواج متقلبة أو ذات رأس مال صغير |
protocol_fee_rate وfund_fee_rate هما كسور من رسوم التداول؛ بنفس الاتفاقية المستخدمة في CPMM. راجع products/clmm/fees.
TickArrayState
لا يُخزّن CLMM سجلاً واحداً لكل تدرج، إذ سيعني ذلك مليارات الحسابات. بدلاً من ذلك، يجمع TICK_ARRAY_SIZE تدرجات متجاورة مُهيَّأة أو غير مُهيَّأة (عادةً 60 أو 88 حسب إصدار البرنامج) في TickArrayState يُنشأ عند أول استخدام.
order_phaseهو معرّف الدُفعة. يزداد في كل مرة تنتقل دُفعة من “غير مملوءة كلياً” إلى “ممتلئة جزئياً”.orders_amountهو إجمالي رمز الإدخال للدُفعة الحالية (الأحدث).part_filled_orders_remainingيتتبع الدُفعة السابقة التي تملؤها عمليات الـ swap الجارية حالياً.unfilled_ratio_x64هو مضاعف Q64.64 يُحمل على الدُفعة: عندما تملأ عملية swap نسبة X% من الدُفعة، يُضرب المعامل في(1 − X). يُخزّن كل أمر مفتوح لقطته الخاصة(order_phase, unfilled_ratio_x64)عند وقت الفتح، مما يختزل حساب التسوية في مقارنة اللقطات.
- تدرج نقطة نهاية المركز t يجب أن يحقق
t % tick_spacing == 0. يرفض البرنامج المراكز غير المتوافقة مع التباعد. - مصفوفة التدرج تقع عند
floor(t / (TICK_ARRAY_SIZE * tick_spacing)) * (TICK_ARRAY_SIZE * tick_spacing). - تُهيَّأ مصفوفة التدرجات بشكل كسول: أول مركز أو swap يلمس مصفوفة غير مُهيَّأة يُنشئها، مدفوعاً تكلفة الإيجار.
- لا يُغلق البرنامج مصفوفة التدرجات أبداً. بمجرد تخصيصها تظل موجودة طوال عمر المجمع، حتى بعد أن تعود كل التدرجات فيها إلى
liquidity_gross == 0. تُعاد استخدام المراكز والـ swaps اللاحقة للحساب الموجود بدون إيجار إضافي. لا توجد مسار تنظيف لمصفوفات التدرجات مرتبط بـClosePosition.
TickArrayBitmapExtension
يغطي PoolState.tick_array_bitmap (المضمّن) النطاق “القريب من السعر الفوري” — ±1,024 مصفوفة تدرجات. خارج هذا النطاق (لقيم التدرجات الشديدة)، يحتفظ البرنامج بحساب امتداد:
(MIN_TICK, MAX_TICK)) تستلزمه؛ يحله SDK تلقائياً.
المراكز
مركز CLMM هو حزمة من ثلاثة حسابات بالإضافة إلى mint:Position NFT mint
Mint لتوكن SPL بإمداد 1. عنوان الـ mint هو PDA محدد؛ الـ NFT الخاص بالمركز في محفظة المالك ليس سوى ATA يحتفظ بذلك التوكن الواحد. نقل الـ NFT هو طريقة تغيير ملكية المركز — يربط البرنامج التفويض بـحامل رصيد ATA الخاص بـ NFT في الوقت الحالي، وليس بـ Pubkey مخزّن في الحالة.PersonalPositionState
حساب واحد لكل مركز مفتوح. مفتاحه مشتق من NFT mint.
ProtocolPositionState (مهجور)
كانت الإصدارات القديمة من CLMM تخزّن حسابات
(pool, tick_lower, tick_upper) التجميعية في PDA من نوع ProtocolPositionState. الإصدارات الأحدث لا تنشئ هذا الحساب ولا تقرأه بعد الآن. لا يزال الفتحة تظهر في قوائم حسابات OpenPosition / IncreaseLiquidity / DecreaseLiquidity بوصفها UncheckedAccount للتوافق مع ABI، لكن البرنامج لا يكتب فيه. الحسابات الموجودة على السلسلة متبقية؛ يمكن للمشرف استدعاء CloseProtocolPosition لاسترداد الإيجار منها.يُشتق الآن حساب النطاق التجميعي مباشرةً من تدرجي نقطة النهاية (liquidity_gross، liquidity_net، وfee_growth_outside_* / reward_growths_outside_x64 لكل تدرج) في TickArrayState. تستمر صيغة نمو الرسوم الداخلية fee_growth_inside = global − outside_lower − outside_upper في العمل بدون حساب مركز تجميعي.الملاحظات (Observation)
(tick_cumulative[t1] − tick_cumulative[t0]) / (t1 − t0) ثم price = 1.0001 ** tick. راجع algorithms/clmm-math.
DynamicFeeConfig وDynamicFeeInfo
تقع معاملات الرسوم الديناميكية في مكانين. القالب القابل لإعادة الاستخدام — DynamicFeeConfig — يديره المشرف ويُشارَك بين المجمعات المشتركة. حالة التشغيل لكل مجمع — DynamicFeeInfo — مضمّنة في PoolState وتُحدَّث عند كل عملية swap.
DynamicFeeConfig
["dynamic_fee_config", index.to_be_bytes()]. يُنشأ عبر create_dynamic_fee_config (مقيّد بصلاحيات المشرف) ويُعدَّل عبر update_dynamic_fee_config. تُنشئ المجمعات التي تُنشأ بـ enable_dynamic_fee = true لقطة من المعاملات الخمسة للضبط (filter_period، decay_period، reduction_factor، dynamic_fee_control، max_volatility_accumulator) في DynamicFeeInfo الخاص بها عند الإنشاء؛ التعديلات اللاحقة على DynamicFeeConfig لا تؤثر بأثر رجعي على المجمعات الموجودة.
DynamicFeeInfo (مضمّن في PoolState)
DynamicFeeConfig. رياضيات الرسوم وقواعد الاضمحلال موثّقة في products/clmm/math وproducts/clmm/fees.
الثوابت المستخدمة في الصيغة:
| الثابت | القيمة | المعنى |
|---|---|---|
VOLATILITY_ACCUMULATOR_SCALE | 10_000 | دقة متراكم التقلب |
REDUCTION_FACTOR_DENOMINATOR | 10_000 | مقام reduction_factor |
DYNAMIC_FEE_CONTROL_DENOMINATOR | 100_000 | مقام dynamic_fee_control |
MAX_FEE_RATE_NUMERATOR | 100_000 | حد أقصى صارم بنسبة 10% على معدل الرسوم الناتج |
LimitOrderState
حساب واحد لكل أمر حد مفتوح.
- الفتح — يستدعي المستخدم
open_limit_order، يودعtotal_amountمن رمز الإدخال، ويُربط الأمر بدُفعةTickState. - (اختياري) الزيادة / التخفيض — يضيف
increase_limit_orderإلىtotal_amount؛ يُعيدdecrease_limit_orderالرموز غير المملوءة (وأي مخرجات مسوّاة حتى تلك النقطة). - التسوية — عند ملء الدُفعة كلياً أو جزئياً، يستدعي المالك أو حارس العمليات
settle_limit_orderلدفع رموز المخرجات إلى ATA المالك. - الإغلاق — بمجرد أن يصبح
unfilled_amount == 0، يمكن إغلاق الحساب. يعود الإيجار دائماً إلىowner.
[owner.as_ref(), limit_order_nonce.key().as_ref(), limit_order_nonce.order_nonce.to_be_bytes().as_ref()]. وبذلك يكون PDA الأمر فريداً لكل (owner, nonce_index, order_nonce).
LimitOrderNonce
عداد لكل (wallet, nonce_index) يتيح لمستخدم واحد تشغيل خطوط متوازية متعددة من أوامر الحد دون تعارض في PDAs.
[user_wallet.as_ref(), &[nonce_index]]. معظم العملاء يستخدمون nonce_index = 0 ويتركون order_nonce يحمل العدد الكلي.
اشتقاق الحسابات الرئيسية
reference/program-addresses.
مرجع سريع لدورة الحياة
| الحدث | الحسابات المنشأة | الحسابات المحذوفة |
|---|---|---|
CreatePool | poolState، observation، token_0_vault، token_1_vault | — |
OpenPosition[WithToken22Nft] | NFT mint + ATA، personalPosition، ربما tickArrayState جديدة، tickArrayBitmapExtension إن لم تكن موجودة | — |
IncreaseLiquidity | ربما tickArrayState جديدة | — |
DecreaseLiquidity | — | ربما يُخلّي إدخالات التدرجات (لكن tickArrayState نفسها لا تُغلق) |
ClosePosition | — | NFT mint، personalPosition |
SwapV2 | ربما tickArrayState جديدة | — |
OpenLimitOrder | limitOrderState، ربما limitOrderNonce (init-if-needed)، ربما tickArrayState جديدة | — |
IncreaseLimitOrder | — | — |
DecreaseLimitOrder | — | يُغلق limitOrderState إن استُهلك الأمر بالكامل |
SettleLimitOrder | — | — |
CloseLimitOrder | — | limitOrderState (الإيجار إلى owner) |
CreateDynamicFeeConfig | dynamicFeeConfig | — |
CreateCustomizablePool | poolState، observation، المخازن — بنفس طريقة CreatePool. يلتقط dynamicFeeConfig إن كان enable_dynamic_fee = true. | — |
CollectRewards | — | — |
UpdateRewardInfos | — | — |
CloseProtocolPosition (مشرف) | — | protocolPositionState المتبقية (الإيجار إلى المشرف) |
TickArrayState لا يُغلقها البرنامج أبداً — تظل موجودة طوال عمر المجمع. بمجرد تهيئة مصفوفة تدرجات تبقى على السلسلة حتى عندما تعود كل التدرجات فيها إلى liquidity_gross == 0. إعادة استخدام مصفوفة موجودة مجانية؛ فقط أول مركز يلمس مصفوفة لم تُهيَّأ من قبل يدفع إيجارها.
ما تجده في كل صفحة
- رياضيات التدرجات وآليات النطاق:
products/clmm/ticks-and-positions. - مسار الـ swap ورياضيات نمو الرسوم:
products/clmm/math. - قوائم حسابات التعليمات:
products/clmm/instructions. - الرسوم وتراكم المكافآت:
products/clmm/fees. - معرّفات البرامج القانونية والبذور:
reference/program-addresses.


