هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
تغطي
sdk-api/rust-cpi الآليات منخفضة المستوى لاستدعاء كل برنامج Raydium. هذه الصفحة هي الرفيقة ذات المستوى الأعلى: لماذا ستؤلف Raydium في برنامجك الخاص، أي نمط يناسب حالتك الاستخدام، والغراء الكامل الذي تحتاجه من البداية إلى النهاية.عندما يكون CPI الأداة الصحيحة
يكون البرنامج المخصص منطقياً عندما تحتاج المبادلة إلى حدوث ذرياً مع تغييرات الحالة الأخرى المسجلة على السلسلة والتي يمكن فقط لبرنامجك إجراؤها. الحالات الشائعة:- برامج الأرصدة المحفوظة / أوامر الحد — يودع المستخدم عملة معدنية في أرصدتك المحفوظة، يراقب برنامجك حالة السعر، وعندما يحدث، يقوم برنامجك بمبادلة ذرية من خلال Raydium ويعتمد على حساب المستخدم.
- كلاء المجمعات — تعليمة واحدة توجه مبادلة من خلال Raydium + DEX واحد أو أكثر، مع جميع الخطوات تحت فحص انزلاق واحد يملكه برنامجك.
- أقبية الإعادة التلقائية — إيداع رمز LP أو حصة مزرعة في أرصدتك، الأرصدة المحفوظة تجني المكافآت في الجدول الزمني، إعادة الإمداد بالسيولة، إصدار رموز الأسهم.
- أقبية الإستراتيجية — مراكز LP ذات الرافعة المالية التي تعيد التوازن من خلال المبادلة عبر CLMM؛ المصفّين الذين يغلقون المراكز ويبدلون الضمان في معاملة واحدة.
- منصات إطلاق الرموز المخصصة مع استحقاق مخصص — يحتفظ برنامجك برموز استحقاق وإصدارات في مجموعة Raydium في الجدول الزمني.
أنماط التكوين
النمط 1: وكيل رقيق
يكشف برنامجك عن تعليمة واحدة تتحقق من بعض السياسات (على سبيل المثال، أزواج العملات المعدنية المدرجة في القائمة البيضاء، خصم الرسوم للمستخدمين المتحققين) ثم التحويل إلى Raydium.النمط 2: أرصدة محفوظة
يملك برنامجك PDA يحتفظ برمز الإدخال للمستخدم. عند تفعيل، يوقع PDA عملية CPI إلى Raydium لمبادلة رصيده الخاص.CpiContext::new_with_signer. انظر بذور موقع PDA.
النمط 3: متعدد الخطوات المركب
يصدر برنامجك عمليات CPI متعددة في تعليمة واحدة، مما يفرض حداً انزلاقياً واحداً عبر كل منها. تحتوي تعليمات مبادلة Raydium علىminimum_amount_out خاصة بها، لكنك تعيين تلك إلى 0 (أو حد أدنى جداً) وتفرض حداً أدنى صارماً بنفسك بعد الخطوة الأخيرة.
النمط 4: أرصدة محفوظة / إستراتيجية
يحتفظ برنامجك برموز LP أو حصة مزرعة في PDA. يستدعي الحارس (أو المستخدم)compound()، الذي:
- حصاد المكافآت من المزرعة.
- مبادلة المكافآت برموز المجموعة (CPI إلى CPMM أو CLMM).
- إيداع العائدات مرة أخرى في LP (CPI آخر).
- حصة LP الجديدة (CPI آخر).
بناء قائمة الحسابات
يعكسAccounts struct للبرنامج الاستدعاء ترتيب حسابات برنامج Raydium، لكن معظم حسابات الجانب Raydium هي UncheckedAccount لأن Raydium يتحقق منها بنفسه. تضيف قيوداً فقط على الحسابات التي تملكها أنت:
UncheckedAccount على حسابات Raydium — ليس كسلاً. يتحقق المستقبل من حسابه؛ التحقق المزدوج في المستدعي يحرق CU فقط ويخاطر بالخروج عن التزامن عندما ترسل Raydium حقل تخطيط struct جديداً.
استدعاء CPI نفسه
بذور موقع PDA
تنجح عملية CPI فقط إذا تطابق PDA الذي يتم تمريره كـauthority مع الاشتقاق الذي يدعيه المتصل. يجب أن يتفق الاثنان على:
- تسلسل البايتات للبذرة (هنا
[b"escrow", user.key().as_ref()]). - الارتطام.
- معرف برنامج الاستدعاء (برنامجك، وليس برنامج Raydium).
authority يغطي المعاملة وأن ATA للإدخال يملكه هذا الموقع. التحقق يحدث في anchor_spl::token::transfer: يجب أن يساوي حقل authority الخاص بـ ATA المُوقِّع.
خطأ شائع: تمرير user كموقع (ونقل من escrow_input_ata التي يملكها PDA الأرصدة المحفوظة). يرفض برنامج SPL Token مع owner mismatch. اجعل حقل authority يطابق دائماً مالك ATA.
الحسابات المتبقية
تأخذ عدة تعليمات Raydium قائمة بطول متغير من الحسابات المُلحقة بعد الحسابات الثابتة — حسابات متبقية.- CLMM
SwapV2: 1–8 حساباتTickArrayStateلمصفوفات العلامات التي قد تعبرها المبادلة، في اتجاه المبادلة. - Farm v6
Deposit/Harvest/Withdraw: أزواج(reward_vault, user_reward_ata)، زوج واحد لكل فتحة مكافأة حية. - العملات المعدنية مع Token-2022 transfer-hook: برنامج transfer-hook بالإضافة إلى أي حسابات يحتاجها الخطاف.
ميزانية الحوسبة للاستدعاءات المركبة
تكلفة CPI حوالي 1500 وحدة حوسبة لإطار الاستدعاء نفسه؛ استخدام CU الخاص بـ callee يتراكم فوقها. ميزانية تقريبية لكل CPI من Raydium:| Call | CU (SPL Token) | CU (Token-2022) |
|---|---|---|
| CPMM swap_base_input | ~150,000 | ~200,000 |
| CLMM swap_v2 (single tick array) | ~180,000 | ~230,000 |
| CLMM swap_v2 (crosses 2 ticks) | ~220,000 | ~270,000 |
| Farm v6 deposit | ~120,000 | ~150,000 |
| Farm v6 harvest (per reward slot) | +30,000 | +40,000 |
| AMM v4 swap_base_in | ~140,000 | n/a |
harvest → swap A → swap B → deposit LP → stake LP بسهولة إلى 700k CU.
عيّن دائماً ComputeBudgetProgram::set_compute_unit_limit صريح:
نشر الأخطاء
تعيد برامج Raydium أخطاء Anchor برموز خطأ مستقرة. يرى برنامجك الاستدعاء الأخطاء كـErr(ProgramError::Custom(code)). انشرها بشكل افتراضي:
sdk-api/anchor-idl)؛ الرموز الجديدة تُضاف في النهاية، الرموز الموجودة لا تتغير معانيها أبداً.
مثال عملي كامل: أرصدة محفوظة لأوامر الحد
التدفق:open_order— يودع المستخدمamount_inمنinput_mintفي PDA الأرصدة المحفوظة؛ تسجيلmin_amount_outالهدف والانتهاء.execute_order— أي شخص (حارس) يستدعي مع حسابات المجموعة الحالية. يتحقق البرنامج من أن الاقتباس الحالي ≥min_amount_out، ثم CPI Raydium swap ويبقي الإخراج في الأرصدة المحفوظة.claim— ينسحب المستخدم من الرمز المخرج من الأرصدة المحفوظة.
الاختبار
سحب برامج Raydium إلى مدقق محلي لاختبارات التكامل (منAnchor.toml):
anchor test من الشبكة الرئيسية عند البدء. انظر sdk-api/rust-cpi.
مزالق محددة للتكوين
إعادة الدخول
Solana ليس لديها إعادة دخول حقيقية — CPI لا يمكنه استدعاء برنامج الأصل مرة أخرى في نفس الاستدعاء. لكن يمكنك بناء نفسك في إعادة دخول منطقية: CPI يقرأ حالتك، ثم يقرأ الكود الخاص بك مرة أخرى على افتراض أن CPI لم يتغيره. بالنسبة لـ Raydium، لا تلمس CPIs حالتك، لذا هذا أقل قلقاً من سياقات التمويل الوميضي على سبيل المثال. لكن إذا كنت تركب Raydium مع بروتوكول إقراض، فكن على علم.انجراف قابلية الحساب
إذا مرر برنامجك حساباً كـmut لكن Raydium يتوقع عدم تغييره (أو العكس)، يرفض وقت التشغيل الاستدعاء مع InvalidAccountData. تحقق دائماً من قابلية التغيير المتوقعة لتعليمات Raydium في IDL؛ يفرضها anchor_cp_swap::cpi::accounts::Swap عبر أنواع حقوله.
حقل برنامج Token-2022
قد تكون العملات المعدنية للإدخال والإخراج تحت برامج رموز مختلفة — واحدة SPL Token، واحدة Token-2022. CPI له حقولinput_token_program و output_token_program منفصلة لهذا السبب. تحقق دائماً من حقل owner لكل عملة معدنية ووجه البرنامج الصحيح إلى كل فتحة.
معاملات مصدرة
معاملة مركبة تفعل 2+ Raydium CPIs بالإضافة إلى إنشاء ATA نادراً ما تناسب معاملة وراثية (v0-without-LUT). استخدم V0 مع جداول البحث عن العناوين؛ اسحب LUTs العام Raydium عبرraydium.getRaydiumLutAddresses().
المؤشرات
sdk-api/rust-cpi— آليات CPI منخفضة المستوى.integration-guides/priority-fee-tuning— ميزانية الحوسبة حجم.products/cpmm/code-demos،products/clmm/code-demos،products/farm-staking/code-demos— مقاطع CPI لكل منتج.

