هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
ترتبط هذه الصفحة بـ
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
الوسائط
| # | الاسم | W | S | ملاحظات |
|---|---|---|---|---|
| 1 | pool_creator | W | S | |
| 2 | amm_config | مستوى الرسوم المختار. | ||
| 3 | pool_state | W | يُهيَّأ هنا. | |
| 4 | token_mint_0 | مُرتَّب. | ||
| 5 | token_mint_1 | |||
| 6 | token_vault_0 | W | يُهيَّأ هنا، مملوك لـ PDA سلطة البول. | |
| 7 | token_vault_1 | W | ||
| 8 | observation_state | W | يُهيَّأ هنا. | |
| 9 | tick_array_bitmap_extension | W | يُهيَّأ هنا (V2). | |
| 10 | token_program | |||
| 11 | token_program_2022 | |||
| 12 | system_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 مع إضافة وضع جمع الرسوم لكل بول على حدة وخيار اشتراك اختياري في الرسوم الديناميكية.
الوسائط
CreatePool مع إضافة ما يلي عند enable_dynamic_fee = true:
| # | الاسم | W | S | ملاحظات |
|---|---|---|---|---|
| N | dynamic_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
إنشاء مركز جديد داخل بول قائم.
الوسائط
| # | الاسم | W | S | |
|---|---|---|---|---|
| 1 | payer | W | S | |
| 2 | position_nft_owner | |||
| 3 | position_nft_mint | W | S (keypair) | |
| 4 | position_nft_account | W | ATA المالك لـ NFT. | |
| 5 | metadata_account | W | Metaplex (اختياري، عند with_metadata). | |
| 6 | pool_state | W | ||
| 7 | protocol_position | |||
| 8 | tick_array_lower | W | يُنشأ إن لم يكن مُهيَّأً. | |
| 9 | tick_array_upper | W | كذلك. | |
| 10 | personal_position | W | يُنشأ هنا. | |
| 11 | token_account_0، token_account_1 | W | ATAs المصدر للمستخدم. | |
| 12 | token_vault_0، token_vault_1 | W | ||
| 13 | rent، system_program، token_program | |||
| 14 | associated_token_program | |||
| 15 | metadata_program | اختياري. | ||
| 16 | token_program_2022 | V2. | ||
| 17 | vault_0_mint، vault_1_mint | V2. | ||
| 18 | tick_array_bitmap_extension | W | V2 (عند اللمس). |
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
إضافة سيولة إلى مركز مفتوح.
الوسائط
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
سحب السيولة من مركز.
الوسائط
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.
الوسائط
| # | الاسم | W | S | ملاحظات |
|---|---|---|---|---|
| 1 | payer | S | ||
| 2 | amm_config | |||
| 3 | pool_state | W | ||
| 4 | input_token_account | W | ||
| 5 | output_token_account | W | ||
| 6 | input_vault | W | ||
| 7 | output_vault | W | ||
| 8 | observation_state | W | ||
| 9 | token_program | |||
| 10 | token_program_2022 | V2. | ||
| 11 | memo_program | V2 (مطلوب لبعض مسارات Token-2022). | ||
| 12 | input_vault_mint، output_vault_mint | V2. | ||
| 13 | tick_array_bitmap_extension (اختياري) | W | إذا دخلت المبادلة منطقة الامتداد. | |
| 14+ | tick_array (المتبقية) | W | مصفوفات كافية لتغطية النطاق المتوقع. |
PoolUtils.computeAmountOutFormat أو نقطة نهاية الاقتباس في الـ API.
الشروط المسبقة
pool_state.statusيسمح بالمبادلة.now >= open_time.sqrt_price_limit_x64على الجانب الصحيح منsqrt_price_x64للاتجاه المحدد.
ExceededSlippage، SqrtPriceLimitOverflow، TickArrayNotFound، LiquidityInsufficient.
ما يفعله SwapV2 داخليًا مما ينبغي للمُستدعين معرفته (إصدار ما بعد 2025):
- رسوم ديناميكية إضافية — إذا كان
pool.dynamic_fee_infoغير صفري، يُحدّث البرنامج مُجمِّع التذبذب باستخدام المسافة بالنقاط المقطوعة منذ آخر مبادلة (مع قواعد التصفية/الاضمحلال منproducts/clmm/fees) ويُضيفdynamic_fee_componentفوقAmmConfig.trade_fee_rate. إجمالي الرسوم محدود بنسبة 10% (MAX_FEE_RATE_NUMERATOR / 1_000_000). - مطابقة أوامر الحد — عندما يتجاوز مسار السعر نقطة tick تحتوي على أوامر حد مفتوحة، يملأ البرنامج أولاً سيولة أوامر الحد المتاحة عند تلك النقطة (FIFO حسب
order_phase)، ثم يتابع على طول منحنى سيولة LP. تُحدِّث المبالغ المنفذةtick.unfilled_ratio_x64وtick.part_filled_orders_remainingللتسوية اللاحقة؛ تبقى الأوامر نفسها معلقة حتى يستدعي مالكهاSettleLimitOrder. - توجيه الرسوم أحادية الجانب — عندما يكون
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 خاص بكل نقطة ويُنفَّذ عند تجاوز السعر لها.
الوسائط
| # | الاسم | W | S | ملاحظات |
|---|---|---|---|---|
| 1 | payer | W | S | مالك الأمر؛ يدفع الإيجار. |
| 2 | pool_state | W | ||
| 3 | tick_array | W | مصفوفة tick التي تحتوي على tick_index. | |
| 4 | limit_order_nonce | W | PDA. init_if_needed — يُنشأ عند أول أمر للمستخدم تحت هذا nonce_index. | |
| 5 | limit_order | W | PDA. يُنشأ هنا. | |
| 6 | input_token_account | W | ATA الإدخال للمستخدم. | |
| 7 | input_vault | W | خزينة الإدخال للبول. | |
| 8 | input_vault_mint | معالجة رسوم Token-2022. | ||
| 9 | input_token_program | SPL أو Token-2022. | ||
| 10 | system_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 != 0)، OrderPhaseSaturated.
IncreaseLimitOrder
إضافة مبلغ إلى أمر مفتوح قائم. قابل للاستدعاء من owner الأمر فقط.
الوسائط
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
تقليل أو إلغاء أمر مفتوح كليًا. يُعيد الجزء غير المنفذ إلى المالك، إضافةً إلى أي مخرجات مُسوَّاة من تعبئات جزئية سابقة.
الوسائط
| # | الاسم | W | S |
|---|---|---|---|
| 1 | owner | S | |
| 2 | pool_state | W | |
| 3 | tick_array | W | |
| 4 | limit_order | W | |
| 5 | input_token_account | W | |
| 6 | output_token_account | W | |
| 7 | input_vault | W | |
| 8 | output_vault | W | |
| 9 | input_vault_mint، output_vault_mint | ||
| 10 | token_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 الأمر.
الحسابات
| # | الاسم | W | S | |
|---|---|---|---|---|
| 1 | signer | S | المالك أو limit_order_admin | |
| 2 | pool_state | |||
| 3 | tick_array | |||
| 4 | limit_order | W | ||
| 5 | output_token_account | W | ATA مخرجات المالك. | |
| 6 | output_vault | W | خزينة مخرجات البول. | |
| 7 | output_vault_mint | |||
| 8 | output_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.
الوسائط
| # | الاسم | W | S | ملاحظات |
|---|---|---|---|---|
| 1 | owner | W | S | المفتاح العام للمشرف المُشفَّر. |
| 2 | dynamic_fee_config | W | PDA، يُنشأ هنا. | |
| 3 | system_program |
InvalidDynamicFeeConfigParams إذا كان decay_period <= filter_period أو كان أي حقل بقيمة 0 خارج النطاق المسموح.
UpdateDynamicFeeConfig (مشرف)
تعديل DynamicFeeConfig قائمة. البولات التي أخذت لقطة من الإعداد وقت الإنشاء لا تُحدَّث بأثر رجعي؛ فقط البولات المُنشأة حديثًا التي تستند إلى هذا الإعداد ستلتقط القيم الجديدة.
الوسائط — نفس حقول الضبط الخمسة كـ CreateDynamicFeeConfig (filter_period، decay_period، reduction_factor، dynamic_fee_control، max_volatility_accumulator)؛ index ثابت عند الإنشاء ولا يُمرَّر هنا.
CollectProtocolFee / CollectFundFee
نفس الشكل الموجود في CollectProtocolFee / CollectFundFee في CPMM. يجب أن يُطابق الموقِّع AmmConfig.owner / AmmConfig.fund_owner. يكنس الرسوم المتراكمة (بروتوكول/صندوق) من خزائن البول إلى المستلم، ويُصفِّر حقول PoolState.protocol_fees_* / fund_fees_* المقابلة.
InitializeReward
إضافة تدفق مكافأة جديد إلى بول. يُسمح بما يصل إلى 3 تدفقات نشطة في آنٍ واحد.
الوسائط
| # | الاسم | W | S | |
|---|---|---|---|---|
| 1 | reward_funder | W | S | |
| 2 | funder_token_account | W | ||
| 3 | amm_config | |||
| 4 | pool_state | W | ||
| 5 | operation_state | PDA حالة عمليات CLMM التي تتحكم في إنشاء المكافآت. | ||
| 6 | reward_token_mint | |||
| 7 | reward_token_vault | W | يُنشأ هنا. | |
| 8 | reward_token_program | |||
| 9 | system_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
يطالب مالك المركز برموز المكافأة المستحقة.
الحسابات
| # | الاسم | W | S | |
|---|---|---|---|---|
| 1 | nft_owner | S | ||
| 2 | nft_account | ATA المالك الحامل لـ NFT المركز. | ||
| 3 | personal_position | W | ||
| 4 | pool_state | W | ||
| 5 | protocol_position | |||
| 6 | reward_token_vault | W | ||
| 7 | recipient_token_account | W | ||
| 8 | token_program | |||
| 9 | token_program_2022 |
- تسوية نمو المكافأة (بنفس نمط الرسوم).
- تحويل المبلغ المستحق إلى ATA المستلم، وتصفير
reward_amount_owed[i].
مصفوفة تغييرات الحالة
| التعليمة | pool.liquidity | pool.fee_growth_global | pool.reward_growth_global | personal_position.liquidity | Tick array |
|---|---|---|---|---|---|
CreatePool | 0 | 0 | — | — | — |
OpenPosition | + إذا كان في النطاق | — | — | جديد | إضافة liquidity_gross/net |
IncreaseLiquidity | + إذا كان في النطاق | تسوية المستحق | تسوية المستحق | + | تعديل |
DecreaseLiquidity | − إذا كان في النطاق | تسوية المستحق | تسوية المستحق | − | تعديل |
ClosePosition | — | — | — | محذوف | — |
SwapV2 | ± عند التقاطعات | + | — | — | تقاطع وقلب الخارج؛ مطابقة أفواج أوامر الحد |
OpenLimitOrder | — | — | — | — | orders_amount += amount على النقطة المستهدفة |
IncreaseLimitOrder | — | — | — | — | orders_amount += amount |
DecreaseLimitOrder | — | — | — | — | orders_amount -=، قد يُغلق الفوج |
SettleLimitOrder | — | — | — | — | — (قراءة فقط على النقطة) |
CloseLimitOrder | — | — | — | — | — |
CreateCustomizablePool | 0 | 0 | — | — | — |
UpdateRewardInfos | — | — | + | — | — |
CollectReward | — | — | تسوية المستحق | — | — |
الخطوات التالية
products/clmm/code-demos— نماذج TypeScript قابلة للتشغيل.products/clmm/fees— تفاصيل استحقاق الرسوم والمكافآت.reference/error-codes— جدول أخطاء Anchor الكامل لـ CLMM.
raydium-io/raydium-clmm—programs/amm/src/instructions- Raydium SDK v2 —
@raydium-io/raydium-sdk-v2

