Skip to main content
هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
ما يفعله هذا. ينشئ مجمع CLMM جديد بفئة الرسوم التي تختارها، ثم يفتح مركز تركيز أولي. معاملتان عبر أربع ملفات — config.ts، createPool.ts، createPosition.ts، و utils.ts — تعمل مع npx tsx. تم استخراج الكود من العروض التوضيحية الرسمية في raydium-sdk-V2-demo/src/clmm وتكييفه للعمل بشكل مستقل.

الإعداد

تأكد من أنك قرأت متطلبات البدء السريع وأن لديك RPC_URL و KEYPAIR والمكتبات المثبتة. بالإضافة إلى المكتبات في البدء السريع، تحتاج إلى:
  • decimal.js — حسابات السعر والـ tick في createPool.ts و createPosition.ts.
  • bs58 — فك تشفير مفتاح مشفر بـ base58 في config.ts إذا استخدمت KEYPAIR_BS58 بدلاً من ملف JSON.
  • tsx — يشغل ملفات .ts أدناه مباشرة عبر npx tsx؛ بخلاف سكريبتات swap و CPMM، هذا ليس ملف .mjs عادي يعمل مع node.
إنشاء مجمع CLMM له رسم لمرة واحدة بالإضافة إلى إيجار مصفوفة tick لكل مركز أولي. ستحتاج أيضًا إلى كلا mint البذور في محفظتك — فتح مركز عندما يكون السعر داخل النطاق المختار يتطلب سيولة على كلا الجانبين. تشغيل هذا على devnet. تغيير cluster إلى "devnet" في config.ts ليس كافيًا بمفرده. يمرر createPool.ts programId: CLMM_PROGRAM_ID صريح، وهو ثابت mainnet ثابت لا يتبع cluster — استبدله بسطر DEVNET_PROGRAM_ID.CLMM_PROGRAM_ID المعلق أعلاه مباشرة. يقوم createPosition.ts أيضًا بترميز poolId mainnet (مجمع RAY-USDC)؛ استبدله برقم مجمع devnet الذي أنشأته في الخطوة 2.

الخطوة 1 — config.ts

احفظ باسم config.ts. هذا له نفس شكل src/config.ts.template في مستودع العرض التوضيحي — يتم فرض disableFeatureCheck على true (موصى به لأي تكامل غير تافه حتى لا يحجب SDK على استدعاء كشف الميزات عند البدء):
config.ts

الخطوة 2 — createPool.ts

احفظ بجانب config.ts. المصدر: src/clmm/createPool.ts.
createPool.ts

الخطوة 3 — createPosition.ts

المصدر: src/clmm/createPosition.ts.
createPosition.ts

الخطوة 4 — utils.ts

المصدر: src/clmm/utils.ts.
utils.ts

شغّله

ما حدث للتو

المعاملة 1 — raydium.clmm.createPool هيأت:
  • حالة المجمع في PDA الكنسي لـ (mint1, mint2, ammConfig)،
  • token_0_vault و token_1_vault (مرتبة حسب ترتيب بايت mint)،
  • حلقة المخزن المؤقت observation،
  • خريطة البت المضمنة للـ tick،
وعيّنت sqrt_price_x64 الأولي من initialPrice الخاص بك. المعاملة 2 — raydium.clmm.openPositionFromBase فتحت مركز تركيز:
  • صكت NFT موضع في محفظتك (NFT هو الموضع؛ نقله ينقل الموضع)،
  • خصصت مصفوفات tick عند الحدود السفلى والعليا (إيجار لمرة واحدة إذا كان أول موضع في تلك النطاقات؛ لا تُغلق مصفوفات tick أبدًا بواسطة البرنامج، لذا تدفع المراكز اللاحقة في نفس المصفوفات بدون إيجار إضافي)،
  • أودعت inputAmount من mint1 ومبلغ الزوج المطابق من mint2 (محسوب بواسطة PoolUtils.getLiquidityAmountOutFromAmountIn
  • أضافت رصيد الموضع بسيولة متناسبة مع عرض النطاق.
كلما كان النطاق أضيق، كلما زادت كفاءة رأس المال لكل دولار من TVL — وكلما كانت الخسارة المؤقتة أكثر إيلامًا عندما ينجرف السعر خارج النطاق. النطاق المستخدم أعلاه ([0.000001, 100000]) هو بشكل فعلي نطاق كامل؛ ضيّقه لتركيز الرسوم بالقرب من السعر الفوري الحالي.

اختيار فئة الرسوم

clmmConfigs[0] هي فئة الرسوم الأقل. تُنشر المجموعة الكاملة على GET https://api-v3.raydium.io/main/clmm-config: انظر user-flows/choosing-a-pool-type للحصول على مصفوفة قرار كاملة.

الأخطاء الشائعة

  • Pool already exists for this config — يوجد بالفعل مجمع CLMM لهذا الثلاثي (mint1, mint2, ammConfig). ابحث عن رقم المجمع الموجود وتخطّ الخطوة 2.
  • Insufficient funds for amount B — محفظتك تحتوي على المبلغ المطلوب من mintA لكن ليس مبلغ mintB المطابق. فتح مركز عندما يكون السعر داخل النطاق يتطلب سيولة على كلا الجانبين.
  • Tick out of rangelowerPrice أو upperPrice الخاص بك يقع خارج نطاق السعر القابل للتمثيل. استخدم نطاقًا أكثر معقولية بالنسبة للسعر الحالي.
  • سعر قديم — يمكن أن يكون الاقتباس من API قديمًا بمقدار 5–60 ثانية. إذا فشل executePosition على slippage، قم بإلغاء التعليق عن كتلة getRpcClmmPoolInfo في createPosition.ts لإعادة جلب السعر الحي مباشرة قبل التوقيع.

تحذيرات

  • NFT الموضع هو مقبضك الوحيد. فقدان NFT أو نقله، فقدان الوصول إلى الموضع. تعامل معه مثل المفتاح.
  • المراكز خارج النطاق لا تكسب رسومًا. إذا تحرك السعر خارج [lowerPrice, upperPrice]، يكون موضعك متوقفًا بالكامل في أصل واحد ولا يكسب شيئًا حتى تعيد التوازن.
  • إيجار مصفوفة Tick أحادي الاتجاه. أول موضع يلمس مصفوفة tick لم تُهيأ أبدًا يدفع إيجارها؛ البرنامج لا يعرّض مسارًا لإغلاق مصفوفات tick، لذا هذا الإيجار دائم. المراكز اللاحقة في نفس المصفوفة مجانية.

التالي

المصادر: