هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
ما يفعله هذا. ينشئ مجمع 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.
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)، - أضافت رصيد الموضع بسيولة متناسبة مع عرض النطاق.
[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 range—lowerPriceأوupperPriceالخاص بك يقع خارج نطاق السعر القابل للتمثيل. استخدم نطاقًا أكثر معقولية بالنسبة للسعر الحالي.- سعر قديم — يمكن أن يكون الاقتباس من API قديمًا بمقدار 5–60 ثانية. إذا فشل
executePositionعلى slippage، قم بإلغاء التعليق عن كتلةgetRpcClmmPoolInfoفيcreatePosition.tsلإعادة جلب السعر الحي مباشرة قبل التوقيع.
تحذيرات
- NFT الموضع هو مقبضك الوحيد. فقدان NFT أو نقله، فقدان الوصول إلى الموضع. تعامل معه مثل المفتاح.
- المراكز خارج النطاق لا تكسب رسومًا. إذا تحرك السعر خارج
[lowerPrice, upperPrice]، يكون موضعك متوقفًا بالكامل في أصل واحد ولا يكسب شيئًا حتى تعيد التوازن. - إيجار مصفوفة Tick أحادي الاتجاه. أول موضع يلمس مصفوفة tick لم تُهيأ أبدًا يدفع إيجارها؛ البرنامج لا يعرّض مسارًا لإغلاق مصفوفات tick، لذا هذا الإيجار دائم. المراكز اللاحقة في نفس المصفوفة مجانية.
التالي
products/clmm/overview— ميكانيكا CLMM الكاملة.products/clmm/ticks-and-positions— الرياضيات خلف ticks.algorithms/impermanent-loss— تحديد كمي لتضخيم IL في CLMM.user-flows/create-clmm-pool— نفس التدفق عبر واجهة Raydium.

