هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
CPI («cross-program invocation») هو الآلية التي يستدعي بموجبها برنامج Solana واحد برنامجًا آخر. تُرسل برامج Raydium المدعومة بـ Anchor مع crate غلاف CPI تجعل موقع الاستدعاء يبدو مثل استدعاء دالة مكتوبة بشكل صريح — هياكل حساب مع أسماء حقول تم التحقق من صحتها ومساعدات
cpi::<ix>(). تُوثّق هذه الصفحة النمط العام؛ للحصول على مقاطع برمجية خاصة بكل منتج، انظر إلى صفحة code-demos في فصل كل منتج.تبعيات Cargo
cpi يجعل الـ crates تُترجم إلى سطح CPI فقط (هياكل حساب + invokers) بدلاً من البرنامج الكامل، بحيث يبقى ملفك الثنائي صغيرًا.
للحصول على أمثلة CPI فعلية تربط هياكل الحسابات بالكامل، انظر إلى raydium-io/raydium-cpi-example (يغطي AMM v4 و CPMM و CLMM).
بناء قائمة الحسابات
كل CPI من Raydium يتطلب هيكلAccounts في البرنامج الذي يستدعيه. تطابق الحقول ترتيب حساب التعليمات في البرنامج 1-لـ-1، مع محققي على مستوى الحقل:
UncheckedAccount لأن البرنامج المُستدعى (Raydium) يمتلك التحقق. برنامجك الذي يستدعيه يتحقق فقط بشكل صريح من الحسابات التي تمتلكها — ATAs المستخدم، PDAs الخاصة بك. تعليق /// CHECK: يُثبّط تحذير Anchor حول الفحوصات المفقودة.
بناء استدعاء CPI
يُنشئ Anchor مساعدًا واحدًا لكل تعليمة:cpi::swap_base_input من IDL؛ قائمة الحجج الخاصة به تعكس قائمة حجج التعليمات من Anchor.
بذور التوقيع (PDA-signed CPI)
عندما يوقّع برنامجك CPI نيابة عن PDA (شائع للأقبية والضمانات، وما إلى ذلك)، استخدمCpiContext::new_with_signer:
authority (أو دور توقيع مشابه)، تحقق runtime Solana من أن PDA يوقّع عبر هذه البذور.
الحسابات المتبقية
بعض تعليمات Raydium تأخذ حسابات متبقية — قائمة ذات طول متغير مُلحقة بعد الحسابات الثابتة. الأمثلة الكنسية:- CLMM
SwapV2: تُلحق 1–8 حساباتTickArrayStateتقابل مصفوفات القيمة التي قد تقطعها المبادلة. - Farm v6
Deposit: تُلحق أزواج(reward_vault, user_reward_ata)لكل تدفق مكافآت نشط.
.with_remaining_accounts(...):
نشر الأخطاء
برامج Raydium تُرجع enum أخطائها الخاصة. Anchor يلفّها؛ برنامجك الذي يستدعيه يراها كـErr(ProgramError::Custom(code)). للتعامل مع أخطاء محددة:
sdk-api/anchor-idl). يمكنك الاختبار مقابل أكواد محددة بالمقارنة مقابل القيمة الرقمية.
الميزانية الحسابية في CPIs المركبة
كل إطار CPI له overhead (~1,500 CU للاستدعاء نفسه)، واستهلاك البرنامج المُستدعى بالـ CU يتراكم على رأسك. معاملة تستدعي CPMM swap من داخل برنامجك تنفق:ComputeBudgetProgram::set_compute_unit_limit(...) صريحة في المعاملة — حد 200k CU الافتراضي سينفد بصمت.
AMM v4 — بناء Instruction يدويًا
AMM v4 ليس لديه crate Anchor. بناءInstruction يدويًا:
products/amm-v4/code-demos لقائمة الحسابات الكاملة.
Farm v6 — حسابات الأزواج المتبقية للمكافآت
Farm v6 الـDeposit / Withdraw / Harvest تستخدم نمط زوج (reward_vault_i, user_reward_ata_i) في الحسابات المتبقية. التسلسل الدقيق:
farm_state.reward_infos[i].reward_state.
اختبار تدفق CPI
يتطلب dev محليًا أن تكون برامج Raydium متاحة في محقق الاختبار الخاص بك. الخيارات:-
anchor testمع نسخ البرنامج — فيAnchor.toml:هذا يسحب رمز النشر من mainnet إلى محقق محليك. -
Devnet — Raydium ينشر جميع البرامج إلى devnet بنفس معرفات البرامج مثل mainnet. شغّل
anchor test --provider.cluster devnetللوصول إلى الكود الحي. -
النشر المحلي — استنسخ مستودعات Raydium و
anchor deployإلى محقق محلي. يضيف overhead دورة اختبار لكنه يتيح لك تعديل المستقبِل للتصحيح.
مؤشرات
products/cpmm/code-demos,products/clmm/code-demos,products/amm-v4/code-demos,products/farm-staking/code-demos— أمثلة CPI خاصة بالمنتج.sdk-api/anchor-idl— استرجاع IDL وإعادة توليد العميل.integration-guides/cpi-integration— أنماط على مستوى أعلى: الضمانات والأقبية وتركيب المجمّع.

