الانتقال إلى المحتوى الرئيسي

Documentation Index

Fetch the complete documentation index at: https://docs.raydium.io/llms.txt

Use this file to discover all available pages before exploring further.

هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →

ما هي IDL

تنشر برامج Anchor على Solana ملف IDL (لغة تعريف الواجهة) يصف تعليماتها وتخطيطات الحسابات وتعداد الأخطاء وأنماط البيانات الهيكلية. تعتبر IDL مصدر الحقيقة لإنشاء كود العميل — يتم إنشاء TS SDK وصندوق Rust CPI والعملاء من جهات خارجية من (أو كتابتها يدويًا مقابل) IDL. تنشر Raydium IDLs لـ CPMM و CLMM و LaunchLab. AMM v4 و Stable AMM و Farm (v3 / v5 / v6) سابقة لـ Anchor أو لا يتم توزيعها عبر Anchor بطريقة أخرى — يتم الاحتفاظ بهياكل حساباتها يدويًا في SDK.

حيث يمكنك العثور عليها

توجد IDLs في مستودع مخصص:
https://github.com/raydium-io/raydium-idl
الملفات الدقيقة:
البرنامجملف IDL
CPMMraydium_cpmm/raydium_cp_swap.json
CLMMraydium_clmm/raydium_clmm.json
LaunchLabraydium_launchpad/raydium_launchpad.json
AMM v4لا توجد IDL رسمية — راجع raydium-sdk-V2/src/raydium/liquidity/layout.ts للتخطيطات المكتوبة يدويًا
Stable AMMلا توجد IDL رسمية — التخطيطات في SDK
Farmلا توجد IDL رسمية — التخطيطات في SDK
يتم إصدار ملفات IDL في سجل git للمستودع؛ ثبّت على التزام معين إذا كنت بحاجة إلى إعادة الإنتاج بالضبط. يمكن سحب IDLs أيضًا مباشرة من البرامج المنشورة عبر ميزة Anchor الخاصة بـ on-chain IDL (إذا اختار ناشر البرنامج ذلك):
anchor idl fetch <PROGRAM_ID> --provider.cluster mainnet
CPMM و CLMM و LaunchLab جميعها لديها IDLs على السلسلة. AMM v4 و Stable AMM و Farm لا (برامج سابقة لـ Anchor).

إعادة إنشاء عميل TypeScript

ينتج عن codegen الخاص بـ Anchor عميل مكتوب من IDL:
# باستخدام CLI الخاص بـ anchor
anchor build
anchor idl parse \
  --file target/idl/cpmm.json \
  --out target/types/cpmm.ts

# أو باستخدام مساعدات TS من `@coral-xyz/anchor` في وقت التشغيل:
import { Program, AnchorProvider } from "@coral-xyz/anchor";
// اسحب IDL مباشرة من مستودع raydium-idl (أو أدرجه في مشروعك).
import cpmmIdl from "./idls/raydium_cp_swap.json";

const provider = new AnchorProvider(connection, wallet, {});
const program  = new Program(cpmmIdl as any, CPMM_PROGRAM_ID, provider);

// منشئو الطرق المكتوبة التي يتم إنشاؤها تلقائيًا:
await program.methods
  .swapBaseInput(new BN(amountIn), new BN(minAmountOut))
  .accounts({ ... })
  .rpc();
معظم المدمجين لا يفعلون هذا — فهم يستخدمون مساعد raydium.cpmm.swap(...) ذو المستوى الأعلى الذي يلتف حول طرق Anchor بالإضافة إلى كل العمليات المحاسبية (إنشاء ATA، تعديل رسم التحويل، ميزانية الحساب، توجيه برنامج Token-2022). أعد الإنشاء فقط عندما تحتاج إلى طبقة أسفل SDK.

إعادة إنشاء عميل Rust (صندوق CPI)

تنشر Raydium صناديق Anchor للبرامج التي لديها IDLs:
# Cargo.toml
[dependencies]
raydium_cp_swap = { git = "https://github.com/raydium-io/raydium-cp-swap", branch = "master", features = ["cpi"] }
raydium_amm_v3 = { git = "https://github.com/raydium-io/raydium-clmm",    branch = "master", features = ["cpi"] }
تعرّض ميزة cpi هياكل حسابات cpi::accounts::<Ix> و invokers cpi::<ix>() — أغلفة CPI جاهزة للاستخدام. راجع sdk-api/rust-cpi لأنماط الاستخدام. إذا كنت تفضل إنشاء ربطات جديدة:
# من IDL، باستخدام anchor-client
anchor idl parse \
  --file raydium_cpmm/raydium_cp_swap.json \
  --out src/generated/cpmm_bindings.rs

إعادة إنشاء عميل Python

لا يوجد SDK رسمي لـ Raydium Python. تتضمن المولدات من جهات خارجية:
  • anchorpy — نسخة Python من @coral-xyz/anchor. يولد منشئي طرق مكتوبة من IDLs.
  • solders — بدائية Solana منخفضة المستوى (المعاملات، المفاتيح، المفاتيح العامة) في ربطات Rust؛ مستخدمة أسفل anchorpy.
pip install anchorpy solders solana
from anchorpy import Program, Provider
from solana.rpc.async_api import AsyncClient
from pathlib import Path
import json

idl = json.loads(Path("cpmm.json").read_text())
provider = Provider(AsyncClient("https://api.mainnet-beta.solana.com"), wallet)
program  = Program(idl, CPMM_PROGRAM_ID, provider)

await program.rpc["swap_base_input"](amount_in, min_amount_out, ctx=Context(accounts={...}))
راجع sdk-api/python-integration للحصول على شرح أكثر اكتمالاً.

سياسة تغيير IDL

تتبع Raydium هذه القواعد لاستقرار IDL:
  1. لا تتغير محددات التعليمات أبدًا. إضافة تعليمات جديدة توسّع التعداد في النهاية؛ المحددات الموجودة تبقى مستقرة.
  2. تتطور تخطيطات هياكل الحساب فقط بشكل إضافي. تذهب الحقول الجديدة في النهاية، سابقة بنقل الحجم في الأسفل. الحقول الموجودة تحافظ على انزياحاتها.
  3. رموز تعداد الأخطاء للإلحاق فقط. رمز الخطأ الموجود دائمًا يعني نفس الشيء.
  4. التغييرات الجذرية تُرسل في برامج جديدة. عندما يكون هناك حاجة لإعادة التصميم، يعتمد الفريق برنامج ID جديد (مثلاً CPMM كبرنامج جديد بدلاً من ترقية AMM v4). تستمر المجموعات القديمة في التشغيل على البرنامج القديم؛ المجموعات الجديدة تذهب إلى الواحد الجديد.
تجعل هذه السياسة العملاء المعاد إنشاؤهم متوافقة مع الإصدارات السابقة: سيظل العميل الذي تم إنشاؤه مقابل IDL قديم من إصدارين قديمين قادرًا على فك تشفير الحالة الحالية بشكل صحيح (يرى البايتات الزائدة اللاحقة كحشوة).

ماذا تفعل عندما تتغير IDL

  1. حدّث SDK. npm update @raydium-io/raydium-sdk-v2.
  2. أعد إنشاء كود العميل الخاص بك إذا كنت تستخدم Anchor codegen مباشرة.
  3. قارن تخطيط الحساب. الحقول الزائدة للتخطيط الجديد هي الشيء الوحيد الذي لم يرَه الكود الخاص بك؛ تأكد ما إذا كنت بحاجة إليها.
  4. لا تفترض أن محددات التعليمات القديمة غير صالحة. وفقًا للقاعدة 1، لا تزال تعمل.
  5. أعد تشغيل اختبارات التكامل على devnet قبل الانتقال إلى mainnet.

استكشاف أخطاء IDL

أخطاء “Invalid discriminator”

عادة ما تعني أن عميلاً تم بناؤه مقابل الإصدار N من IDL يحاول استدعاء تعليمة موجودة فقط في إصدار سابق من البرنامج قبل النشر. أعد سحب IDL من البرنامج المباشر:
anchor idl fetch <PROGRAM_ID>

فشل فك تشفير الحساب

إذا رمى program.account.<Name>.fetch(pubkey) مع “Invalid account discriminator”، فقد تم إنشاء الحساب بواسطة إصدار برنامج سابق ويرفضه Anchor محدد البايتات 8 الخاص به. الحل هو استخدام محلل التخطيط الخام من SDK (PoolInfoLayout.decode(accountData)) الذي لا ينفذ محددات Anchor.

تعليمات مفقودة في العميل الذي تم إنشاؤه

يولد Anchor’s TS codegen فقط طرقًا للتعليمات التي إدخال IDL الخاص بها له name الذي يتم تحليله كمعرّف صالح. جميع تعليمات Raydium تستوفي هذا، لكن إذا رأيت عدم تطابق، تحقق من ما إذا كان ملف IDL من إصدار SDK الحالي.

المؤشرات

المصادر: