الانتقال إلى المحتوى الرئيسي

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.

هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
ترتبط هذه الصفحة بـ products/clmm/accounts (تعريف الحسابات) وproducts/clmm/math (الرياضيات المستخدمة). وهي المرجع المعتمد للوسائط وترتيب الحسابات؛ أما التخطيطات البايتية التفصيلية فتُستقى من IDL.

فهرس التعليمات

المجموعةالتعليمةملاحظات
المشرفCreateAmmConfigتعريف مستوى رسوم جديد.
المشرفUpdateAmmConfigتعديل المعدلات على مستوى رسوم قائم.
المشرفUpdatePoolStatusإيقاف/استئناف العمليات على بول.
المشرفCreateSupportMintAssociatedإضافة إضافة mint من نوع Token-2022 إلى القائمة البيضاء للاستخدام في بولات CLMM.
المشرفCreateOperationAccountتهيئة حساب العمليات على مستوى البرنامج (مرة واحدة).
المشرفUpdateOperationAccountتعديل القائمة البيضاء لحساب العمليات.
المشرفCreateDynamicFeeConfigإنشاء مجموعة معاملات رسوم ديناميكية قابلة لإعادة الاستخدام تحت فهرس u16.
المشرفUpdateDynamicFeeConfigتعديل DynamicFeeConfig قائمة. البولات التي أخذت لقطة منها عند الإنشاء لا تتأثر بالتغيير.
البولCreatePoolتهيئة بول CLMM مرتبط بـ AmmConfig. مسار الرسوم القياسي FromInput. يتعايش مع CreateCustomizablePool.
البولCreateCustomizablePoolموصى به للبولات الجديدة. نفس شكل CreatePool مع إضافة collect_fee_on وعلامة اشتراك اختيارية enable_dynamic_fee.
المركزOpenPosition / OpenPositionV2 / OpenPositionWithToken22Nftسك NFT للمركز. OpenPositionV2 يحل محل V1 (تخطيط حساب أحدث مع فتحة امتداد الخريطة النقطية)؛ OpenPositionWithToken22Nft يُصدر NFT المركز بصيغة Token-2022 بدلاً من SPL Token. يُوصى باستخدام V2 أو نظيره من Token-2022 في الكود الجديد.
المركزIncreaseLiquidity / IncreaseLiquidityV2إضافة سيولة إلى مركز قائم.
المركزDecreaseLiquidity / DecreaseLiquidityV2سحب السيولة مع جمع الرسوم المستحقة.
المركزClosePositionحرق NFT وإغلاق PersonalPositionState.
المركزCloseProtocolPositionتعليمة حصرية للمشرف لاسترداد حسابات ProtocolPositionState القديمة. البرنامج الحالي لا ينشئ هذه الحسابات ولا يقرأها — التعليمة موجودة فقط لاسترداد الإيجار على الحسابات التي أنشأتها إصدارات قديمة من البرنامج.
المبادلةSwap / SwapV2مبادلة بسيولة ثابتة. كلا الإصدارين يدعمان الرسوم الديناميكية وتوجيه الرسوم أحادية الجانب ومطابقة أوامر الحد؛ الفارق الوحيد أن SwapV2 يقبل mints من نوع Token-2022 (بينما يتطلب V1 خزينتَي SPL Token الكلاسيكيتين).
المبادلةSwapRouterBaseInمبادلة متعددة القفزات، يستخدمها الموجّه.
أمر الحدOpenLimitOrderوضع أمر بيع عند نقطة tick. تبقى الرموز غير المنفذة على الـ tick؛ يملأها محرك المطابقة عند تجاوز السعر لها.
أمر الحدIncreaseLimitOrderإضافة مبلغ إلى أمر مفتوح قائم.
أمر الحدDecreaseLimitOrderتقليل أو إلغاء أمر مفتوح؛ يُرجع الجزء غير المنفذ إضافةً إلى أي مخرجات مُسوّاة.
أمر الحدSettleLimitOrderدفع رموز المخرجات المنفذة إلى صاحب الأمر. قابل للاستدعاء من المالك أو من الحارس التشغيلي.
أمر الحدCloseLimitOrderإغلاق حساب أمر مُستهلك كليًا. يعود الإيجار دائمًا إلى owner الأمر. قابل للاستدعاء من المالك أو الحارس.
الرسومCollectProtocolFeeاسترداد رسوم البروتوكول من قِبل المشرف.
الرسومCollectFundFeeاسترداد رسوم الصندوق من قِبل المشرف.
المكافآتInitializeRewardإرفاق تدفق مكافأة جديد ببول.
المكافآتSetRewardParamsتغيير معدل إصدار المكافأة أو وقت انتهائها.
المكافآتUpdateRewardInfosتسوية نمو المكافأة حتى اللحظة الحالية (يُستدعى تلقائيًا عند كل مبادلة أو تغيير في المركز).
المكافآتTransferRewardOwnerنقل الصلاحية المخوّلة بضبط تدفق المكافأة أو تعبئته.
المكافآتCollectRemainingRewardsبعد انتهاء end_time لتدفق المكافأة، استرداد الرموز غير المخصصة إلى الممول.
المرافقInitTickArrayتهيئة حساب tick array (يُجمَّع في الغالب مع OpenPosition).
معظم التعليمات الحصرية للمشرف (CreateAmmConfig، UpdateAmmConfig، UpdatePoolStatus، CreateSupportMintAssociated، CreateOperationAccount، UpdateOperationAccount، CloseProtocolPosition) محمية بالمفتاح العام admin المُشفَّر في البرنامج. أما تعليمات مشرف تدفق المكافأة (TransferRewardOwner، CollectRemainingRewards) فمحميّة بالممول وليس بمشرف البرنامج. اللاحقة V2 تعني “يدعم Token-2022 على الخزائن/NFT، ويتطلب فتحة امتداد الخريطة النقطية”. يختار SDK الإصدار V2 افتراضيًا للبولات الجديدة.

CreatePool

الوسائط
sqrt_price_x64: u128           // السعر الابتدائي
open_time:      u64            // تُرفض المبادلات قبل هذا الوقت
الحسابات (مختصرة)
#الاسمWSملاحظات
1pool_creatorWS
2amm_configمستوى الرسوم المختار.
3pool_stateWيُهيَّأ هنا.
4token_mint_0مُرتَّب.
5token_mint_1
6token_vault_0Wيُهيَّأ هنا، مملوك لـ PDA سلطة البول.
7token_vault_1W
8observation_stateWيُهيَّأ هنا.
9tick_array_bitmap_extensionWيُهيَّأ هنا (V2).
10token_program
11token_program_2022
12system_program، rent
الشروط المسبقة
  • token_mint_0 < token_mint_1 وفق الترتيب البايتي.
  • amm_config.disable_create_pool == false.
  • لا تكون الـ mints مرفوضة بواسطة قائمة السماح لإضافات Token-2022.
النتائج المضمونة
  • pool_state.sqrt_price_x64 = sqrt_price_x64، وtick_current = floor(log_{1.0001}(price)).
  • pool_state.liquidity = 0 (لا مراكز بعد).
  • pool_state.fee_on = FromInput (الإعداد الافتراضي القديم).
  • pool_state.dynamic_fee_info مُصفَّر (الرسوم الديناميكية معطلة).

CreateCustomizablePool

موصى به للبولات الجديدة. له نفس تأثير CreatePool مع إضافة وضع جمع الرسوم لكل بول على حدة وخيار اشتراك اختياري في الرسوم الديناميكية. الوسائط
pub struct CreateCustomizableParams {
    pub sqrt_price_x64:    u128,
    pub collect_fee_on:    CollectFeeOn,   // FromInput | Token0Only | Token1Only
    pub enable_dynamic_fee: bool,
}
الحسابات (مختصرة) — نفس CreatePool مع إضافة ما يلي عند enable_dynamic_fee = true:
#الاسمWSملاحظات
Ndynamic_fee_configالإعداد المشترك المراد أخذ لقطة منه. يجب أن يكون موجودًا مسبقًا.
الشروط المسبقة — نفس CreatePool. إذا كان enable_dynamic_fee = false، يُتجاهل dynamic_fee_config. النتائج المضمونة
  • يُضبَط pool_state.fee_on على متغير CollectFeeOn المختار.
  • إذا كانت الرسوم الديناميكية مفعّلة: يُهيَّأ pool_state.dynamic_fee_info من DynamicFeeConfig المُزوَّد (تُنسَخ معاملات الضبط الخمسة؛ حقول الحالة تُصفَّر).
  • وإلا: يُصفَّر pool_state.dynamic_fee_info (= الرسوم الديناميكية معطلة نهائيًا لهذا البول).
يُضبَط fee_on وبت تفعيل الرسوم الديناميكية عند إنشاء البول فقط. لا توجد ترقية في الموضع — البولات المنشأة عبر CreatePool القديمة لا يمكنها اكتساب الرسوم الديناميكية أو الرسوم أحادية الجانب لاحقًا. ينبغي أن تكون هذه التعليمة الافتراضية في النشرات الجديدة.

OpenPositionV2 / OpenPositionWithToken22Nft

إنشاء مركز جديد داخل بول قائم. الوسائط
tick_lower_index: i32
tick_upper_index: i32
tick_array_lower_start_index: i32
tick_array_upper_start_index: i32
liquidity:  u128              // قيمة L المطلوبة (أو 0 لاستخدام المبالغ أدناه)
amount_0_max: u64
amount_1_max: u64
with_metadata: bool           // كتابة بيانات NFT الوصفية (Metaplex)
base_flag: Option<bool>       // true = ملاءمة للمبلغ 0؛ false = ملاءمة للمبلغ 1
الحسابات (مختصرة)
#الاسمWS
1payerWS
2position_nft_owner
3position_nft_mintWS (keypair)
4position_nft_accountWATA المالك لـ NFT.
5metadata_accountWMetaplex (اختياري، عند with_metadata).
6pool_stateW
7protocol_position
8tick_array_lowerWيُنشأ إن لم يكن مُهيَّأً.
9tick_array_upperWكذلك.
10personal_positionWيُنشأ هنا.
11token_account_0، token_account_1WATAs المصدر للمستخدم.
12token_vault_0، token_vault_1W
13rent، system_program، token_program
14associated_token_program
15metadata_programاختياري.
16token_program_2022V2.
17vault_0_mint، vault_1_mintV2.
18tick_array_bitmap_extensionWV2 (عند اللمس).
الرياضيات — راجع products/clmm/math. بناءً على base_flag، يُحوّل البرنامج إما liquidity أو (amount_0_max, amount_1_max) إلى القيمة الفعلية لـ L والمبالغ الفعلية للرموز المُستهلَكة. الشروط المسبقة
  • tick_lower < tick_upper، وكلاهما من مضاعفات pool.tick_spacing، وضمن النطاق [MIN_TICK, MAX_TICK].
  • tick arrays المطلوبة ممرَّرة ومُهيَّأة (أو مُنشأة هنا عبر CPI لـ InitTickArray في المعاملة).
  • لدى المستخدم ما لا يقل عن amount_0_max وamount_1_max في ATAs المصدر.
النتائج المضمونة
  • يوجد personal_position، ومضبوط liquidity، وملتقطة fee_growth_inside_last.
  • تُحدَّث مدخلات tick array عند tick_lower وtick_upper (liquidity_gross += L، liquidity_net ± L، ولقطات نمو الرسوم مُصانة).
  • pool_state.liquidity += L إذا كان المركز في النطاق (tick_lower ≤ tick_current < tick_upper).
الأخطاء الشائعةInvalidTickIndex، NotApproved، ZeroAmountSpecified، TransactionTooLarge (عند وجود عدد كبير جدًا من tick arrays).

IncreaseLiquidityV2

إضافة سيولة إلى مركز مفتوح. الوسائط
liquidity: u128
amount_0_max: u64
amount_1_max: u64
base_flag: Option<bool>
الحسابات — مشابهة لـ OpenPosition دون mint النفت (المركز موجود بالفعل؛ يُمرَّر NFT كـ ATA المالك الحامل لرمز واحد). التأثير
  • تحويل amount_0_actual / amount_1_actual من المستخدم إلى الخزائن.
  • زيادة personal_position.liquidity وpool_state.liquidity (إذا كان في النطاق)، وكذلك liquidity_gross / liquidity_net لنقاط الطرف.
  • جمع الرسوم والمكافآت المستحقة منذ آخر لمسة وإضافتها إلى tokens_fees_owed_{0,1} / reward_amount_owed. تُصرف هذه فقط عند DecreaseLiquidity أو CollectReward، لا عند الزيادة.

DecreaseLiquidityV2

سحب السيولة من مركز. الوسائط
liquidity: u128
amount_0_min: u64
amount_1_min: u64
الحسابات — نفس شكل IncreaseLiquidity. التأثير
  • حساب (amount_0, amount_1) للقيمة L المسحوبة بناءً على sqrt_price_x64 الحالية.
  • تسوية الرسوم/المكافآت المتراكمة منذ آخر لمسة، بنفس آلية IncreaseLiquidity.
  • تحويل amount_0 + fees_owed_0 وamount_1 + fees_owed_1 من الخزائن إلى المستخدم.
  • تقليل عدادات السيولة؛ إذا أصبح personal_position.liquidity == 0، يصبح المركز مؤهلاً لـ ClosePosition.
الانزلاقamount_0_min وamount_1_min هما الحدان الأدنى اللذان يقبلهما المستخدم صافيًا من رسوم تحويل Token-2022 على جانب المخرجات.

ClosePosition

حرق NFT المركز وإغلاق PersonalPositionState. الشروط المسبقة
  • personal_position.liquidity == 0.
  • tokens_fees_owed_{0,1} == 0.
  • جميع عدادات المكافآت reward_amount_owed == 0.
(أي: اجمع كل شيء وقلّل إلى الصفر أولاً.) التأثير
  • حرق NFT.
  • إغلاق حساب NFT mint وحساب personal_position، مع استرداد الإيجار إلى payer.

SwapV2

التنقل عبر منحنى السيولة؛ إدخال دقيق أو إخراج دقيق بحسب is_base_input. الوسائط
amount: u64                  // الإدخال إذا كان is_base_input=true، وإلا فالإخراج
other_amount_threshold: u64  // أدنى إخراج أو أقصى إدخال
sqrt_price_limit_x64: u128   // حد صارم؛ 0 ⇒ غير محدود
is_base_input: bool
الحسابات (مختصرة)
#الاسمWSملاحظات
1payerS
2amm_config
3pool_stateW
4input_token_accountW
5output_token_accountW
6input_vaultW
7output_vaultW
8observation_stateW
9token_program
10token_program_2022V2.
11memo_programV2 (مطلوب لبعض مسارات Token-2022).
12input_vault_mint، output_vault_mintV2.
13tick_array_bitmap_extension (اختياري)Wإذا دخلت المبادلة منطقة الامتداد.
14+tick_array (المتبقية)Wمصفوفات كافية لتغطية النطاق المتوقع.
يمرّر المُستدعي قائمة مُرتَّبة من tick arrays تغطي مسار المبادلة المتوقع؛ يستخدم البرنامج منها ما يحتاجه. يحسب SDK هذه القائمة عبر PoolUtils.computeAmountOutFormat أو نقطة نهاية الاقتباس في الـ API. الشروط المسبقة
  • pool_state.status يسمح بالمبادلة.
  • now >= open_time.
  • sqrt_price_limit_x64 على الجانب الصحيح من sqrt_price_x64 للاتجاه المحدد.
الأخطاء الشائعةExceededSlippage، SqrtPriceLimitOverflow، TickArrayNotFound، LiquidityInsufficient. ما يفعله SwapV2 داخليًا مما ينبغي للمُستدعين معرفته (إصدار ما بعد 2025):
  1. رسوم ديناميكية إضافية — إذا كان pool.dynamic_fee_info غير صفري، يُحدّث البرنامج مُجمِّع التذبذب باستخدام المسافة بالنقاط المقطوعة منذ آخر مبادلة (مع قواعد التصفية/الاضمحلال من products/clmm/fees) ويُضيف dynamic_fee_component فوق AmmConfig.trade_fee_rate. إجمالي الرسوم محدود بنسبة 10% (MAX_FEE_RATE_NUMERATOR / 1_000_000).
  2. مطابقة أوامر الحد — عندما يتجاوز مسار السعر نقطة tick تحتوي على أوامر حد مفتوحة، يملأ البرنامج أولاً سيولة أوامر الحد المتاحة عند تلك النقطة (FIFO حسب order_phase)، ثم يتابع على طول منحنى سيولة LP. تُحدِّث المبالغ المنفذة tick.unfilled_ratio_x64 وtick.part_filled_orders_remaining للتسوية اللاحقة؛ تبقى الأوامر نفسها معلقة حتى يستدعي مالكها SettleLimitOrder.
  3. توجيه الرسوم أحادية الجانب — عندما يكون pool.fee_on = Token0Only أو Token1Only، تحسب خطوة المبادلة نفس المعاملة بين الإدخال والإخراج؛ ثم يُوجَّه الرسم إلى الجانب المُكوَّن. في الاتجاهات التي يكون فيها جانب الرسم المُكوَّن هو الإخراج، تُخصم الرسوم من مخرج المبادلة (يحصل المستخدم على out − fee)؛ أما في الاتجاهات التي يكون فيها على جانب الإدخال، فيُطابق السلوك FromInput. راجع is_fee_on_input(zero_for_one) وis_fee_on_token0(zero_for_one) على PoolState.
تُطبّق Swap (V1) نفس الرسوم الديناميكية وتوجيه الرسوم أحادية الجانب ومطابقة أوامر الحد كـ SwapV2؛ الميزة الوحيدة الغائبة هي دعم Token-2022 — يجب أن تكون كلتا الخزينتين من SPL Token الكلاسيكي. البولات التي تحتوي على أي mint من Token-2022 يجب مبادلتها عبر SwapV2. يُفضّل المُجمِّع والـ SDK بالفعل V2 لكل قطعة CLMM، فلا يحتاج المُستدعون إلى التفريع بحسب نوع الـ mint.

OpenLimitOrder

وضع أمر بيع عند نقطة tick محددة. يجلس الأمر في طابور FIFO خاص بكل نقطة ويُنفَّذ عند تجاوز السعر لها. الوسائط
nonce_index:    u8       // فهرس حساب nonce المختار من المستخدم (0..255 لكل محفظة)
zero_for_one:   bool     // true: بيع token0 مقابل token1؛ false: بيع token1 مقابل token0
tick_index:     i32      // يجب أن يكون من مضاعفات pool.tick_spacing
amount:         u64      // مبلغ رمز الإدخال
الحسابات (مختصرة)
#الاسمWSملاحظات
1payerWSمالك الأمر؛ يدفع الإيجار.
2pool_stateW
3tick_arrayWمصفوفة tick التي تحتوي على tick_index.
4limit_order_nonceWPDA. init_if_needed — يُنشأ عند أول أمر للمستخدم تحت هذا nonce_index.
5limit_orderWPDA. يُنشأ هنا.
6input_token_accountWATA الإدخال للمستخدم.
7input_vaultWخزينة الإدخال للبول.
8input_vault_mintمعالجة رسوم Token-2022.
9input_token_programSPL أو Token-2022.
10system_program، rent
الشروط المسبقة
  • tick_index % pool.tick_spacing == 0 وضمن [MIN_TICK, MAX_TICK].
  • يقع tick_index على الجانب الصحيح من pool.tick_current للاتجاه المختار (بيع token0 → يجب أن تكون النقطة أعلى من الحالية، والعكس). يُرفض البيع عند نقطة متجاوزة بالفعل لأنه سيُطابَق فوريًا.
  • pool_state.status يسمح بعمليات أمر الحد (البت 5).
النتائج المضمونة
  • يوجد limit_order، ملتقطًا tick.order_phase وtick.unfilled_ratio_x64 عند وقت الفتح.
  • tick.orders_amount += amount (في الفوج الحالي).
  • limit_order_nonce.order_nonce += 1.
  • إصدار حدث OpenLimitOrderEvent.
الأخطاء الشائعةInvalidLimitOrderAmount (صفر أو أدنى من الحد الأدنى للبول)، InvalidTickIndex (خارج [MIN_TICK, MAX_TICK]، أو على الجانب الخاطئ من tick_current للاتجاه المختار)، TickAndSpacingNotMatch (tick_index % pool.tick_spacing != 0OrderPhaseSaturated.

IncreaseLimitOrder

إضافة مبلغ إلى أمر مفتوح قائم. قابل للاستدعاء من owner الأمر فقط. الوسائط
amount: u64    // مبلغ إضافي من رمز الإدخال
الحسابات — مشابهة لـ OpenLimitOrder دون حساب nonce؛ يُمرَّر limit_order PDA مباشرةً. الشروط المسبقة
  • limit_order.owner == signer.
  • لا يزال الأمر في نفس الفوج (tick.order_phase == limit_order.order_phase). إذا بدأ الفوج في التنفيذ بالفعل، يكون الأمر مُسوَّى جزئيًا — ينبغي للمُستدعي استدعاء DecreaseLimitOrder أو SettleLimitOrder أولاً للمضي قدمًا.
التأثير
  • تحويل amount من ATA المالك إلى input_vault.
  • limit_order.total_amount += amount؛ tick.orders_amount += amount.

DecreaseLimitOrder

تقليل أو إلغاء أمر مفتوح كليًا. يُعيد الجزء غير المنفذ إلى المالك، إضافةً إلى أي مخرجات مُسوَّاة من تعبئات جزئية سابقة. الوسائط
amount:     u64    // مبلغ رمز الإدخال المراد سحبه (الحد الأقصى = الجزء غير المنفذ)
amount_min: u64    // حد أدنى للانزلاق على جانب سحب الإدخال
الحسابات — كلا جانبَي الإدخال والإخراج:
#الاسمWS
1ownerS
2pool_stateW
3tick_arrayW
4limit_orderW
5input_token_accountW
6output_token_accountW
7input_vaultW
8output_vaultW
9input_vault_mint، output_vault_mint
10token_program، token_program_2022
التأثير
  • إعادة حساب المبلغ المنفذ للأمر من unfilled_ratio_x64 للفوج منذ الفتح.
  • إرسال المخرجات المنفذة إلى output_token_account.
  • إرسال amount من الإدخال غير المنفذ إلى input_token_account.
  • تحديث limit_order وفقًا لذلك. إذا أصبح الجزء غير المنفذ المتبقي صفرًا، يُغلق البرنامج الحساب ويُعيد الإيجار إلى owner.

SettleLimitOrder

دفع رموز المخرجات المنفذة إلى المالك دون تغيير الجزء غير المنفذ للأمر. مفيد عندما يرغب حارس auto_withdraw في صرف التعبئات الجزئية طويلة الأمد تباعًا. المُستدعي — إما owner الأمر، أو limit_order_admin للبرنامج (محفظة ساخنة تشغيلية خارج السلسلة تُشغّل حلقة حارس آلية). لا تمتلك هذه المحفظة أي صلاحية أخرى — لا تستطيع تحريك أموال المستخدمين إلا بدفع المخرجات المنفذة إلى ATA المخرجات الخاص بـ owner الأمر. الحسابات
#الاسمWS
1signerSالمالك أو limit_order_admin
2pool_state
3tick_array
4limit_orderW
5output_token_accountWATA مخرجات المالك.
6output_vaultWخزينة مخرجات البول.
7output_vault_mint
8output_token_program
التأثير
  • حساب إجمالي المخرجات المستحقة باستخدام (limit_order.unfilled_ratio_x64, tick.unfilled_ratio_x64).
  • تحويل الفرق إلى output_token_account.
  • تحديث limit_order.settled_output.
  • لا يُغلق الأمر؛ لا يزال مفتوحًا على أي إدخال متبقٍ.

CloseLimitOrder

إغلاق حساب أمر مُستهلك كليًا. يعود الإيجار دائمًا إلى limit_order.owner بصرف النظر عمّن وقّع. المُستدعي — إما owner أو limit_order_admin. الشروط المسبقة
  • الأمر لا يحتوي على جزء غير منفذ (إما أن amount == total_amount مُنفَّذ ومُسوَّى، أو أن المالك قلّل الأمر إلى الصفر مسبقًا ولم يُغلقه).
التأثير
  • إغلاق limit_order؛ إرسال الإيجار إلى limit_order.owner.

CreateDynamicFeeConfig (مشرف)

إنشاء مجموعة معاملات قابلة لإعادة الاستخدام تحت فهرس u16. الوسائط
index:                       u16
filter_period:               u16   // بالثواني؛ مثلاً 30
decay_period:                u16   // بالثواني؛ مثلاً 600. يجب أن يكون > filter_period
reduction_factor:            u16   // 1..10_000؛ مثلاً 5_000 = 50% احتفاظ لكل نافذة اضمحلال
dynamic_fee_control:         u32   // 1..100_000؛ مكسب على منحنى التذبذب-إلى-الرسوم
max_volatility_accumulator:  u32   // سقف
الحسابات
#الاسمWSملاحظات
1ownerWSالمفتاح العام للمشرف المُشفَّر.
2dynamic_fee_configWPDA، يُنشأ هنا.
3system_program
الأخطاء الشائعةInvalidDynamicFeeConfigParams إذا كان decay_period <= filter_period أو كان أي حقل بقيمة 0 خارج النطاق المسموح.

UpdateDynamicFeeConfig (مشرف)

تعديل DynamicFeeConfig قائمة. البولات التي أخذت لقطة من الإعداد وقت الإنشاء لا تُحدَّث بأثر رجعي؛ فقط البولات المُنشأة حديثًا التي تستند إلى هذا الإعداد ستلتقط القيم الجديدة. الوسائط — نفس حقول الضبط الخمسة كـ CreateDynamicFeeConfig (filter_period، decay_period، reduction_factor، dynamic_fee_control، max_volatility_accumulatorindex ثابت عند الإنشاء ولا يُمرَّر هنا.

CollectProtocolFee / CollectFundFee

نفس الشكل الموجود في CollectProtocolFee / CollectFundFee في CPMM. يجب أن يُطابق الموقِّع AmmConfig.owner / AmmConfig.fund_owner. يكنس الرسوم المتراكمة (بروتوكول/صندوق) من خزائن البول إلى المستلم، ويُصفِّر حقول PoolState.protocol_fees_* / fund_fees_* المقابلة.

InitializeReward

إضافة تدفق مكافأة جديد إلى بول. يُسمح بما يصل إلى 3 تدفقات نشطة في آنٍ واحد. الوسائط
open_time:     u64
end_time:      u64
emissions_per_second_x64: u128   // Q64.64
الحسابات
#الاسمWS
1reward_funderWS
2funder_token_accountW
3amm_config
4pool_stateW
5operation_statePDA حالة عمليات CLMM التي تتحكم في إنشاء المكافآت.
6reward_token_mint
7reward_token_vaultWيُنشأ هنا.
8reward_token_program
9system_program، rent
الشروط المسبقة
  • أقل من 3 تدفقات نشطة حاليًا على البول.
  • يُودع الممول total_emission = emissions_per_second × (end_time − open_time) من رمز المكافأة في الخزينة كجزء من هذه التعليمة.
  • mint المكافأة مُدرج في القائمة البيضاء وفق operation_state.

SetRewardParams

تمديد تدفق مكافأة قائم أو تعبئته أو تغيير معدل إصداره. يُستدعى عادةً من منشئ البول أو multisig Raydium. القيود موجودة على السلسلة: يمكن عادةً تمديد end_time أو زيادة الإصدار، لكن لا يمكن تقليصهما بأثر رجعي. تحقق من قائمة مالكي operation_state.

UpdateRewardInfos

محاسبة بحتة — تُسوّي reward_growth_global_x64 حتى الوقت الحالي بضرب emissions_per_second × Δt / liquidity. تُستدعى داخليًا من كل تعليمة تمسّ السيولة. مكشوفة كتعليمة مستقلة لأن جهات خارجية (واجهات المستخدم، المحركات) تريد أحيانًا تشغيلها.

CollectReward

يطالب مالك المركز برموز المكافأة المستحقة. الحسابات
#الاسمWS
1nft_ownerS
2nft_accountATA المالك الحامل لـ NFT المركز.
3personal_positionW
4pool_stateW
5protocol_position
6reward_token_vaultW
7recipient_token_accountW
8token_program
9token_program_2022
التأثير
  • تسوية نمو المكافأة (بنفس نمط الرسوم).
  • تحويل المبلغ المستحق إلى ATA المستلم، وتصفير reward_amount_owed[i].

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

التعليمةpool.liquiditypool.fee_growth_globalpool.reward_growth_globalpersonal_position.liquidityTick array
CreatePool00
OpenPosition+ إذا كان في النطاقجديدإضافة liquidity_gross/net
IncreaseLiquidity+ إذا كان في النطاقتسوية المستحقتسوية المستحق+تعديل
DecreaseLiquidity− إذا كان في النطاقتسوية المستحقتسوية المستحقتعديل
ClosePositionمحذوف
SwapV2± عند التقاطعات+تقاطع وقلب الخارج؛ مطابقة أفواج أوامر الحد
OpenLimitOrderorders_amount += amount على النقطة المستهدفة
IncreaseLimitOrderorders_amount += amount
DecreaseLimitOrderorders_amount -=، قد يُغلق الفوج
SettleLimitOrder— (قراءة فقط على النقطة)
CloseLimitOrder
CreateCustomizablePool00
UpdateRewardInfos+
CollectRewardتسوية المستحق

الخطوات التالية

المصادر: