هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
لافتة الإصدار. جميع الأمثلة تستهدف
@raydium-io/raydium-sdk-v2@0.2.42-alpha على شبكة Solana mainnet-beta، تم التحقق منها في 2026-04. معرفات البرامج تأتي من reference/program-addresses عبر SDK.الإعداد
raydium-sdk-V2-demo/src/clmm؛ رابط GitHub يظهر بجانب كل قسم. يتبع التمهيد ملف config.ts.template من مستودع العرض التوضيحي (المصدر) — disableFeatureCheck: true هو الإعداد الموصى به لأي تكامل غير تافه:
إنشاء مجمع CLMM
المصدر:src/clmm/createPool.ts
- ترتيب
mint1/mint2حسب ترتيب البايت قبل الاشتقاق. - حساب
sqrt_price_x64 = floor(sqrt(initialPrice × 10^(dB−dA)) × 2^64). - إنشاء حسابات
observationوtick_array_bitmap_extension. - دفع رسوم إنشاء المجمع المحددة بواسطة
ammConfig.
فتح مركز في نطاق محدد
المصدر:src/clmm/createPosition.ts
InitTickArray إذا كانت أي منها غير مهيأة.
زيادة السيولة على مركز موجود
المصدر:src/clmm/increaseLiquidity.ts
تقليل السيولة (وجمع الرسوم في نفس الوقت)
المصدر:src/clmm/decreaseLiquidity.ts و src/clmm/closePosition.ts
decreaseLiquidity مع liquidity = new BN(0). التأثير الجانبي للتعليمة هو تسوية tokens_fees_owed_{0,1} ونقلها للخارج.
لإغلاق المركز بالكامل بعد تصفير السيولة والرسوم، مرّر closePosition: true في استدعاء decreaseLiquidity النهائي. يضيف SDK ClosePosition ويحرق NFT.
لعميل Anchor مباشر، احتفظ بالحسابات المعلنة دون تغيير وأضف المجمع:
poolId في كل إغلاق. يقرأه CLMM فقط عندما يكون positionNftAccount مجمدًا، مما يحافظ على توافق مسار عميل واحد مع المراكز القديمة والجديدة.
جمع المكافآت
المصدر:src/clmm/harvestAllRewards.ts
harvestAllRewards عبر كل مركز على كل مجمع تم تمريره، ويجمع تعليمات CollectReward (وأي UpdateRewardInfos)، ويقسمها عبر المعاملات إذا لزم الأمر.
المبادلة
المصدر:src/clmm/swap.ts
computeAmountOutFormat عبر خريطة التكات خارج السلسلة باستخدام نفس منطق البرنامج على السلسلة ويعيد:
- المبلغ المتوقع للخروج،
- الحد الأدنى للمبلغ بعد الانزلاق،
- قائمة حسابات مصفوفة التكات التي ستلمسها المبادلة الفعلية (
remainingAccounts).
remainingAccounts المُرجعة من المحاكاة: إذا مررت عددًا قليلاً جدًا، ستعود المبادلة في منتصف المسير مع TickArrayNotFound؛ إذا مررت واحدة قديمة، ستهدر الحساب.
إنشاء مجمع CLMM قابل للتخصيص
createCustomizablePool هي نقطة الدخول الجديدة التي تكشف عن تبديلات الرسوم الديناميكية والرسوم أحادية الجانب في وقت إنشاء المجمع. تأخذ نفس الشكل مثل createPool بالإضافة إلى ثلاث إضافات:
createPool في العمل لمسار الرسوم الافتراضية وبدون أوامر الحد والرسوم الديناميكية. استخدم createCustomizablePool كلما احتجت إلى أي من الأزرار الثلاثة الجديدة. انظر products/clmm/instructions للحصول على قائمة الحسابات على السلسلة.
أوامر الحد
يوقف أمر الحد إدخال المستخدم عند تكة واحدة ويتم ملؤه FIFO عندما تعبر مبادلة تلك التكة. يتم دفع المخرجات إلى ATA المالك في وقت التسوية؛ لا يحتاج المالك إلى أن يكون متصلاً بالإنترنت ليتم ملؤه.فتح أمر حد
LimitOrderState PDA من (pool, owner, tick, nonce)، ويزيد LimitOrderNonce لكل (pool, owner)، ويدرج الأمر في مجموعة FIFO في تلك التكة.
زيادة / تقليل أمر مفتوح
decreaseLimitOrder فقط إزالة من الجزء غير المملوء من الأمر؛ الجزء المملوء مقفول حتى التسوية. كلا التعليمتين تعودان مع InvalidOrderPhase إذا تم ملء الأمر بالكامل بالفعل.
تسوية أمر مملوء
settleLimitOrder unfilled_ratio_x64 للأمر مقابل متتبع المجموعة، ويحسب المخرجات المملوءة، وينقلها إلى ATA المالك. يمكن للمالك استدعاء هذا بنفسه؛ limit_order_admin (حارس تشغيلي خارج السلسلة) يمكنه أيضًا استدعاؤه نيابة عن المالك — المخرجات تذهب إلى المالك.
لإغلاق الأوامر المسوّاة بالكامل لاسترجاع الإيجار، استخدم closeLimitOrder (واحد) أو closeAllLimitOrder (دفعة). لتسوية الكثير في نفس الوقت، يجمع settleAllLimitOrder أكبر عدد ممكن من استدعاءات SettleLimitOrder في معاملة v0.
قائمة أوامر المحفظة المتوقفة (خارج السلسلة)
totalAmount / filledAmount / pendingSettle تميز المراحل). لسجل الأوامر المغلقة استخدم /limit-order/history/order/list-by-user?wallet=… (لكل محفظة، مرقمة حسب nextPageId)؛ لسجل الأحداث الكامل لأمر معين استخدم /limit-order/history/event/list-by-pda?pda=….
هيكل CPI Rust
SwapV2:
الأخطاء الشائعة
- نقاط نهاية التكة خارج المسافة →
InvalidTickIndex. قم دائمًا بالمحاذاة عبرTickUtils.getPriceAndTick. - عدم توفير مصفوفات تكات كافية في
SwapV2→TickArrayNotFound. استخدمcomputeAmountOutFormatللحصول على القائمة الكاملة. - مركز النطاق الكامل بدون امتداد الخريطة النقطية → يجب أن يكون PDA الامتداد قابلاً للكتابة؛ يتعامل SDK مع هذا تلقائيًا.
- الخلط بين
sqrt_price_x64وprice→ الالتباس بمعامل 2 هنا مؤلم بشكل خاص. عند الشك، دع SDK يحسبها من سعر يمكن قراءته بواسطة الإنسان. - جمع المكافآت بحماس شديد → كل جمع يكلف معاملة واحدة. قم بالتجميع عبر
harvestAllRewardsعبر العديد من المراكز. - إغلاق حسابات NFT بنفسك →
ClosePositionيحرق NFT ويغلق ATA الخاص به. كما يغلق رمز NFT من Token-2022؛ يبقى رمز SPL Token الكلاسيكي عند إمداد صفر لأن هذا البرنامج لا يمكنه إغلاق الرموز. لا تغلق الحسابات المدعومة بشكل منفصل أو ستعود التعليمة. - فتح أمر حد عند تكة غير متباعدة →
InvalidTickIndex. قم دائمًا بتحديد الكمية عبرTickUtils.getPriceAndTick. - استدعاء
decreaseLimitOrderعلى أمر مملوء بالكامل →InvalidOrderPhase. استخدمsettleLimitOrderثمcloseLimitOrderبدلاً من ذلك. - نسيان
dynamicFeeConfigIdأثناء تمريرenableDynamicFee: true→ عودةCreateCustomizablePoolهيInvalidDynamicFeeConfigParams. إما أطفئ الرسوم الديناميكية، أو اختر تكوينًا من/main/clmm-dynamic-config.
الخطوات التالية
sdk-api/typescript-sdk— سطح SDK الكامل.sdk-api/rest-api— نقاط نهاية الاقتباس وبيانات تعريف المجمع.user-flows/create-clmm-pool— شرح بدون كود.integration-guides/aggregator— توجيه CLMM كجزء من مسار.

