Skip to main content
هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
لافتة الإصدار.
  • SDK: @raydium-io/raydium-sdk-v2@0.2.64-alpha
  • الكتلة: Solana mainnet-beta
  • معرّف برنامج Stable AMM: 5quBtoiQqxF9Jv6KYKctB59NT3gtJD2Y65kdnB1Uev3h (انظر reference/program-addresses)
  • آخر تحقق: 2026-09-09 مقابل مصدر SDK 0.2.64-alpha وعروض amm/trade التوضيحية في raydium-sdk-V2-demo
وحدة liquidity في SDK تتعامل مع مجمعات Stable AMM بشكل أصلي. تظهر مجمعات الاستقرار كـ version: 5 (أو pooltype: "StablePool") على ApiV3PoolInfoStandardItem؛ نفس مساعدات addLiquidity / removeLiquidity / swap تعمل معها كما هو الحال مع مجمعات الناتج الثابت AMM v4 (version: 4) — يكتشف SDK المتغير ويصدر التعليمات الصحيحة تلقائيًا. رياضيات منحنى الاستقرار خارج السلسلة توجد في src/raydium/liquidity/stable.ts.

الإعداد

initLayout() ليس اختياريًا لمجمعات Stable. يتفرع liquidity.computeAmountOut على poolInfo.version: بالنسبة للإصدار 4 يستخدم صيغة الناتج الثابت، وبالنسبة لأي شيء آخر يقرأ this.stableLayout.stableModelData ويقحم جدول البحث. هذا الذاكرة المؤقتة فارغة حتى يعمل initLayout()، لذا فإن اقتباس مجمع v5 بدونها ينتج عنه قمامة بدلاً من خطأ. إنه عملية متكررة وغير مكلفة — استدعه مرة واحدة عند بدء التشغيل.منشئو المعاملات (builders) (swap, addLiquidity, removeLiquidity) لا يحتاجون إليه: يتم الإرسال على pooltype.includes("StablePool") وإصدار تعليمات AmmV5*، وحدود المبلغ التي تمررها مُحسوبة بالفعل.
liquidity.computeAmountIn لا يدعم مجمعات Stable. بخلاف computeAmountOut، لا يوجد فرع إصدار — يطبق دائمًا معكوس الناتج الثابت، لذا على مجمع v5 يعيد maxAmountIn خاطئ. لمبادلة ناتج دقيق مقابل مجمع Stable، اعكس باستخدام getDxByDyBaseIn بنفسك (انظر مساعدات الاقتباس خارج السلسلة أدناه) ومرر النتيجة إلى swap مع fixedSide: "out".

تحديد مجمع Stable

إشارتان متكافئتان على ApiV3PoolInfoStandardItem:
يتدفق كل من AMM v4 (version: 4، الناتج الثابت) و Stable AMM (version: 5) عبر نفس واجهة برمجة تطبيقات LiquidityModule على SDK. داخليًا تتفرع الوحدة إلى:
  • InstructionType.AmmV4AddLiquidity / AmmV4RemoveLiquidity لمجمعات v4
  • InstructionType.AmmV5AddLiquidity / AmmV5RemoveLiquidity لمجمعات v5 (Stable)
يخبر programId للمجمع (المُرجع مع مفاتيح المجمع) SDK ببرنامج CPI؛ لا تحتاج إلى ترميزه بشكل ثابت.

البحث عن مجمع حسب زوج العملات

إذا كان زوج العملات يحتوي على مجمع v4 (ناتج ثابت) ومجمع v5 (مستقر)، تتضمن الاستجابة كليهما — اختر الذي يحتاجه تدفقك، أو سلّمهما إلى برنامج AMM Routing واترك له اختيار أفضل مسار.

المبادلة عبر مجمع Stable

تدفق LiquidityModule.swap له نفس الشكل كما هو الحال مع مجمعات v4 — فقط سلّمه كائن v5. هناك تفصيلان من السهل الخطأ فيهما: computeAmountOut يحتاج إلى الاحتياطيات الحية للمجمع المدمجة في معلومات المجمع (عنصر واجهة برمجة التطبيقات وحده لا يحملها)، و slippage الخاص به هو رقم عادي، وليس Percent:
يقرأ SDK programId للمجمع من مفاتيح المجمع ويتفرع إلى برنامج Stable AMM. لا يلزم أي حجة programId خاصة.

إضافة وإزالة السيولة

يعمل addLiquidity و removeLiquidity بشكل متطابق عبر مجمعات v4 و v5:
داخليًا يصدر SDK InstructionType.AmmV5AddLiquidity لأن pooltype.includes("StablePool") صحيح. تدفق removeLiquidity المقابل متماثل — أدخل lpAmount والحد الأدنى من المبالغ التي ستقبلها على كل جانب.

مساعدات الاقتباس خارج السلسلة (stable.ts)

للاقتباس من جانب الخادم أو الاختبار العكسي، يكشف SDK عن رياضيات منحنى الاستقرار الأساسية:
هذه دوال نقية — لا RPC، لا توقيع. يتم جلب ModelDataInfo على السلسلة مرة واحدة بواسطة initLayout() وتخزينها مؤقتًا داخل raydium.liquidity.stableLayout، قابلة للقراءة كـ .stableModelData. initStableModelLayout() عملية متكررة: تعيد الجلب فقط بينما validDataCount === 0، لذا استدعاء initLayout() مرة أخرى مجاني. مرر الاحتياطيات الحالية (x, y) والمساعدات تحسب بالبحث الثنائي عن جدول البحث والاستيفاء الخطي بين صفي DataElement المحيطين. انظر products/stable/math للخوارزمية الأساسية.

التوجيه عبر AMM Routing (متعدد القفزات / أفضل سعر)

إذا كنت لا تريد اختيار مكان بنفسك، فسيأخذ برنامج AMM Routing في الاعتبار كل Raydium AMM (v4 / CPMM / CLMM / Stable) والتوجيه عبر أي مزيج هو الأفضل: الموجه عبارة عن خط أنابيب من خمس استدعاءات بدلاً من swap() واحد، وهو مكتوب بالكامل — مع نصيحة التخزين المؤقت التي تجعله قابلاً للاستخدام في الإنتاج — على products/routing/code-demos. الشكل هو:
لا يوجد raydium.tradeV2.fetchRoutes، و tradeV2.swap لا يقبل inputMint / outputMint / slippage — يأخذ swapInfo محسوب بالفعل من getAllRouteComputeAmountOut. لمجمع واحد معروف، استخدم منشئ نوع المجمع الخاص به (raydium.liquidity.swap لـ AMM v4 و Stable، raydium.cpmm.swap، raydium.clmm.swap) كما هو موضح سابقًا على هذه الصفحة.
هذا هو المسار الموصى به لمبادلات الإنتاج والمجمعات — لا تحتاج أبدًا إلى تحديد ما إذا كان مجمع Stable موجودًا أو ما إذا كان أفضل مكان اليوم.

التوصيات

  1. لمبادلات المستخدم النهائي، فضّل تدفق التوجيه tradeV2. يتعامل مع كل نوع مجمع Raydium بما في ذلك Stable.
  2. للعمليات الخاصة بالمجمع (إضافة / إزالة LP على مجمع Stable معروف)، استخدم LiquidityModule مباشرة — يكتشف تلقائيًا مجمعات v5.
  3. للاقتباس خارج السلسلة / التحليلات، استدعِ getStablePrice / getDyByDxBaseIn / getDxByDyBaseIn بعد initLayout(). لا حركة RPC لكل اقتباس بعد تخزين بيانات النموذج مؤقتًا.
  4. لا تقم بترميز تعليمات SwapBaseIn الخام يدويًا. أزالت ترقية 2026-06-22 حسابات OpenBook الميتة، لذا يأخذ تخطيط المبادلة الجديد 9 حسابات (التخطيط القديم 18 حساب لا يزال يحلل للتوافق العكسي). Deposit الآن 12 حساب (القديم 14 متوافق)، Withdraw 12 (القديم 21/22 متوافق)، و WithdrawPnl 10 بدون مسار توافق. تختار مساعدات SDK المدمجة مسبقًا التخطيط والترتيب الصحيح لك؛ لف الخاص بك عرضة للخطأ. انظر products/stable/instructions لجداول الحسابات الكاملة.

أين تذهب بعد ذلك

  • الرياضيات — كيفية عمل استيفاء جدول البحث.
  • التعليمات — مرجع التعليمات الكامل.
  • AMM Routing — التوجيه متعدد المجمعات عبر AMM v4، CPMM، CLMM، Stable.
المصادر: