هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
برامج Raydium الأحدث (CPMM و CLMM و Farm v6 و LaunchLab) مكتوبة بـ Anchor — إطار عمل Rust يبني على نموذج برنامج Solana الأصلي لتوفير التحقق من الحسابات ومعالجة الأخطاء و IDL (وصف الواجهة). يسبق AMM v4 والمزارع الأقدم Anchor. فهم كلا النموذجين يساعدك على قراءة الكود وإنشاء عملاء من IDL وتصحيح الأخطاء غير المتوقعة.
نموذج نشر البرنامج
كل برنامج Solana يعيش فيPubkey. يتم تخزين bytecode البرنامج في حساب قابل للتنفيذ مملوك لـ BPF Upgradable Loader (BPFLoaderUpgradeab1e11111111111111111111111).
يتكون نشر البرنامج من ثلاثة حسابات:
- حساب البرنامج: حساب بيانات وصفية صغير في معرّف البرنامج. المالك: BPF Upgradable Loader.
- حساب ProgramData: يحتفظ بـ bytecode الفعلي. مشتق من
[program_id, "programdata"]. - حساب Buffer (مؤقت): يحتفظ بـ bytecode جديد أثناء الترقية. يتم حذفه بعد الترقية.
security/admin-and-multisig.
التحقق من برنامج مُنشّر
للتأكد من أن ما هو على السلسلة يطابق ما هو في المصدر المعتمد من التدقيق:Anchor: إطار عمل فوق Solana
برامج Solana الخام هي دوال Rust بهذا التوقيع:- إنشاء discriminator حتمي بـ 8 بايتات لكل تعليمة ولكل نوع حساب.
- التحقق من قيود الحساب (المالك والـ seeds والـ writable والـ signer ومطابقة الـ mint ومطابقة برنامج الرموز) قبل تشغيل الكود الخاص بك.
- إنشاء IDL — ملف وصف الواجهة الذي يستخدمه العملاء لاستدعاء البرنامج.
- يأتي مع مكتبة عميل Rust و TypeScript و Python.
discriminator بـ 8 بايتات
كل حساب Anchor وكل تعليمة Anchor تبدأ بـ discriminator بـ 8 بايتات — أول 8 بايتات من SHA-256 لسلسلة ثابتة:getProgramAccounts التي تعدد جميع الحسابات من نوع معين.
الأخطاء
تحدد برامج Anchor الأخطاء عبر#[error_code]:
reference/error-codes.
IDL
ملف IDL (لغة وصف الواجهة) الخاص بـ Anchor هو وصف JSON لبرنامج: تعليماته وحساباته وأنواعه وأخطاؤه وأحداثه. إنه معادل Ethereum ABI. تنشر Raydium IDLs لجميع برامج Anchor. جلب مباشر من على السلسلة:src/raydium/*/idl/*.json.
هيكل IDL
إنشاء عميل من IDL
يقوم CLIanchor الخاص بـ Anchor بإنشاء أنواع TypeScript و Rust:
عندما يكون IDL صديقك
إذا كنت تريد بناء تكامل مخصص لا يمر عبر Raydium SDK:- جلب IDL (مباشر من على السلسلة أو من مصدر SDK).
- البحث عن التعليمة التي تريدها (مثل
swap_base_input). - بناء بيانات التعليمة: discriminator بـ 8 بايتات + الحجج المشفرة.
- تمرير الحسابات بالترتيب الذي يحدده IDL.
sdk-api/anchor-idl للحصول على أمثلة عملية.
برامج ما قبل Anchor: AMM v4 و Farm v3/v5
هذه البرامج تسبق Anchor. تستخدم:- توزيع التعليمات اليدوي: علامة
u8فيinstruction_dataمع بيانmatch. - التحقق من الحساب اليدوي:
if accounts[0].owner != &expected_program { ... }. - حجج التعليمات المسلسلة بـ Borsh: لا توجد discriminator، فقط
instruction_data[1..]. - التخطيط عبر
#[repr(C, packed)]: تخطيط ثنائي لهيكل C.
ميكانيكا ترقية البرنامج
فقطupgrade_authority الخاص بـ ProgramData يمكنه الترقية. الخطوات:
- ترجمة bytecode جديد.
- كتابته إلى حساب buffer (
solana program write-buffer). - تقديم تعليمة ترقية:
BpfLoaderUpgradeable::Upgrade { buffer, program, authority }. - يقوم وقت التشغيل بالاستبدال الذري لـ bytecode البرنامج بمحتويات buffer.
security/admin-and-multisig.
جعل برنامج غير قابل للتغيير
يمكن تعيين سلطة الترقية إلىNone، وعند هذه النقطة يصبح البرنامج غير قابل للتغيير بشكل دائم. لم تقم Raydium بهذا لأي منتج — يحتفظ الفريق بالقدرة على دفع إصلاحات الأمان. المقايضة: يجب على المستخدمين الثقة في عملية multisig + timelock.
البرامج والإيجار
نشر برنامج يستهلك lamports معفاة من الإيجار:- برنامج بحجم 50 كيلوبايت: ~0.35 SOL في الإيجار.
- برنامج بحجم 200 كيلوبايت: ~1.4 SOL في الإيجار.
solana program close) يعيد lamports. تبقى برامج Raydium نشطة ولا يتم جدولة إغلاقها.
تصحيح برامج Anchor
إخراج السجل
يكتب ماكروmsg! الخاص بـ Anchor إلى سجل المعاملة. محاكاة معاملة لرؤية السجلات:
- استدعاء البرنامج (
Program CPMMoo8... invoke [1]). - استدعاءات
msg!من كود البرنامج. - استهلاك وحدة الحساب (
consumed 137842 of 400000 compute units). - نجاح البرنامج أو خطأ.
أكواد الأخطاء
إذا رمى برنامج Anchor خطأ، يظهر السجل:SlippageExceeded). تحقق من مع مصفوفة errors الخاصة بـ IDL.
انظر reference/error-codes لجدول الأخطاء الكامل الخاص بـ Raydium.
عدم تطابق تخطيط الحساب
إذا مررت الحساب الخاطئ في الفتحة الخاطئة، تعيد ماكروهات التحقق من الحساب الخاصة بـ Anchor أخطاء مثل:ErrorCode الخاص بـ Anchor)؛ الأخطاء ≥6000 هي أكواد البرنامج المخصصة.
مؤشرات
solana-fundamentals/account-model— كيف تمتلك البرامج الحسابات.solana-fundamentals/pdas-and-cpis— PDAs كما يعلنها Anchor.sdk-api/anchor-idl— جلب واستخدام IDLs الخاص بـ Raydium.reference/program-addresses— معرفات البرامج.reference/error-codes— مرجع رمز الخطأ.security/admin-and-multisig— التحكم في سلطات الترقية.
- وثائق Anchor.
- نشر برنامج Solana.
- IDLs الخاص بـ Raydium (منشور في SDK
src/raydium/*/idl/*.json).

