هذه الصفحة مُترجَمة آليًا بواسطة الذكاء الاصطناعي. النسخة الإنجليزية هي المرجع المعتمد.عرض النسخة الإنجليزية →
sdk-api/rust-cpi يغطي الآليات منخفضة المستوى لاستدعاء كل برنامج Raydium. هذه الصفحة هي الرفيقة عالية المستوى: لماذا ستؤلف Raydium في برنامجك الخاص، أي نمط يناسب حالتك الاستخدامية، والمادة اللاصقة الكاملة التي تحتاجها من البداية إلى النهاية.متى يكون CPI هو الأداة الصحيحة
يكون البرنامج المخصص منطقياً عندما تحتاج المبادلة إلى الحدوث بشكل ذري مع تغييرات الحالة الأخرى على السلسلة التي يمكن لبرنامجك فقط أن يقوم بها. الحالات الشائعة:- برامج الضمان / أوامر الحد — يودع المستخدم mint في ضمانك، يراقب برنامجك حالة السعر، وعندما تنشط، يقوم برنامجك بمبادلة ذرية عبر Raydium وينسب حساب المستخدم.
- وكلاء المجمع — تعليمة واحدة توجه المبادلة عبر Raydium وواحد أو أكثر من DEXes الأخرى، مع جميع القفزات تحت فحص انزلاق واحد يملكه برنامجك.
- خزائن المركبات التلقائية — إيداع LP أو حصة المزرعة في خزانتك، تحصد الخزانة المكافآت على جدول زمني، وتعيد توريد السيولة، وتصدر رموز الأسهم.
- خزائن الاستراتيجية — مراكز LP ذات الرافعة المالية التي تعيد التوازن بالمبادلة عبر CLMM؛ المصفيات التي تغلق المراكز وتبادل الضمانات في معاملة واحدة.
- منصات إطلاق الرموز مع الاستحقاق المخصص — يحتفظ برنامجك برموز الاستحقاق ويطلقها في مجموعة Raydium على جدول زمني.
أنماط التكوين
النمط 1: وكيل رقيق
يكشف برنامجك عن تعليمة واحدة تتحقق من بعض السياسات (على سبيل المثال، أزواج mint المدرجة في القائمة البيضاء، خصم الرسوم للمستخدمين المتحققين) ثم تحويل إلى Raydium.النمط 2: الضمان
يملك برنامجك PDA يحتفظ بـ mint الإدخال للمستخدم. عند التشغيل، يوقع PDA CPI إلى Raydium لمبادلة رصيده الخاص.CpiContext::new_with_signer. انظر بذور موقع PDA.
النمط 3: متعدد القفزات المركب
يصدر برنامجك عدة CPIs في تعليمة واحدة، مع فرض حد انزلاق واحد عبر جميعها. تحتوي تعليمات مبادلة Raydium علىminimum_amount_out الخاصة بها، لكنك تعيينها إلى 0 (أو حد أدنى جداً) وتفرض حد أدنى صارم بعد القفزة الأخيرة بنفسك.
النمط 4: الخزانة / الاستراتيجية
يحتفظ برنامجك برموز LP أو حصة المزرعة في PDA. يستدعي حارس (أو المستخدم)compound()، الذي:
- يحصد المكافآت من المزرعة.
- يبادل المكافآت برموز المجموعة (CPI إلى CPMM أو CLMM).
- يودع العائدات مرة أخرى في LP (CPI آخر).
- يراهن على LP الجديد (CPI آخر).
بناء قائمة الحسابات
يعكس هيكلAccounts للبرنامج الاستدعاء ترتيب حساب برنامج Raydium، لكن معظم حسابات جانب Raydium هي UncheckedAccount لأن Raydium يتحقق منها بنفسه. تضيف فقط قيود على الحسابات التي تملكها:
UncheckedAccount على حسابات Raydium — ليس كسلاً. يتحقق المستقبل من حسابه الخاص؛ التحقق المزدوج في المستدعي يحرق فقط CU ويخاطر بالخروج عن المزامنة عندما تشحن Raydium حقل تخطيط هيكل جديد.
استدعاء CPI نفسه
بذور موقع PDA
ينجح CPI فقط إذا كان PDA الذي تم تمريره كـauthority يطابق الاشتقاق الذي يدعيه المستدعي. يجب أن يتفق الاثنان على:
- تسلسل البايت البذري (هنا
[b"escrow", user.key().as_ref()]). - الارتفاع.
- معرف البرنامج الاستدعاء (برنامجك، وليس Raydium).
authority في CPMM هي PDA خزانته الخاصة — حساب ثابت على مستوى البرنامج يشتقه ويوقّع به بنفسه، ولا يتحكم به برنامجك ولا يستبدله. الحساب الذي يجب أن تتوافق معه بذور PDA الخاصة بك هو payer: يحدث التحقق داخل مساعد CPMM نفسه transfer_from_user_to_pool_vault، الذي يشترط أن يكون الحساب المُمرَّر كـ payer هو مالك input_token_account.
الخطأ الشائع: تمرير user كـ payer في حين أن escrow_input_ata مملوك لـ escrow PDA. يرفض برنامج SPL Token مع owner mismatch. اجعل دائماً payer هو مالك ATA — ووقّع له بـ new_with_signer عندما يكون ذلك المالك PDA.
الحسابات المتبقية
تأخذ عدة تعليمات Raydium قائمة بطول متغير من الحسابات المضافة بعد الحسابات الثابتة — الحسابات المتبقية.- CLMM
SwapV2: 1–8 حساباتTickArrayStateلمصفوفات التجزئة التي قد تعبرها المبادلة، في اتجاه المبادلة. - Farm v6
Deposit/Harvest/Withdraw: أزواج(reward_vault, user_reward_ata)، زوج واحد لكل فتحة مكافأة نشطة. - رموز Token-2022 transfer-hook: برنامج transfer-hook بالإضافة إلى أي حسابات يحتاجها الخطاف.
ميزانية الحساب الحسابي للاستدعاءات المركبة
يكلف CPI حوالي 1,500 CU لإطار الاستدعاء نفسه؛ استخدام CU الخاص بالمستقبل يتراكم في الأعلى. أرقام المستقبِل أدناه مقيسة من معاملات فعلية على الشبكة الرئيسية على تجمعات عالية الحجم في 2026-09-09، مقروءة من سطر السجلProgram <id> consumed N of M compute units الخاص باستدعاء برنامج Raydium نفسه (لذا فهي تتضمن استدعاءات CPI الداخلية لبرنامج الرموز):
أضف حوالي 1,500 لكل إطار CPI بالإضافة إلى نفقات برنامجك الخاص. تتناسب تكلفة مبادلة CLMM مع عدد عبور التيكات، لذا اعتبر رقمها حداً أدنى. تضيف رموز Token-2022 تكلفة معالجة الامتدادات للنقل نفسه؛ قِسها لرموزك الخاصة بدلاً من تطبيق مُضاعِف ثابت.
اضبط دائماً
ComputeBudgetProgram::set_compute_unit_limit صريح:
انتشار الخطأ
تعيد برامج Raydium أخطاء Anchor مع رموز خطأ مستقرة. يرى برنامجك الاستدعاء لها كـErr(ProgramError::Custom(code)). فقاعة من خلال بشكل افتراضي:
ERROR_CODE_OFFSET: تُصدَر متغيرات #[error_code] بدءاً من 6000، لذا فإن المقارنة مع مميِّز التعداد المجرد لا تتطابق أبداً. (لا يوجد مساعد is_err في anchor-lang ولا في raydium_cp_swap — استخدمت مراجعات سابقة لهذه الصفحة مساعداً غير موجود.)
تعيين رمز الخطأ إلى المعنى مستقر لكل سياسة IDL (sdk-api/anchor-idl)؛ الرموز الجديدة تُلحق في النهاية، الرموز الموجودة لا تغير المعنى أبداً.
مثال عملي كامل: escrow أوامر الحد
التدفق:open_order— يودع المستخدمamount_inمنinput_mintفي escrow PDA؛ سجلmin_amount_outوالانتهاء المستهدف.execute_order— أي شخص (حارس) يستدعي مع حسابات المجموعة الحالية. يتحقق البرنامج من أن الاقتباس الحالي ≥min_amount_out، ثم يقوم بـ CPI مبادلة Raydium ويحتفظ بالإخراج في escrow.claim— يسحب المستخدم mint الإخراج من escrow.
order PDA على CPI بصفته payer، لأنه يملك ATA الإدخال الخاص بالـ escrow؛ لذا يحتاج ExecuteOrder أيضاً إلى حقل pool_authority: UncheckedAccount<'info> من أجل PDA خزانة CPMM الخاصة. كل من فحص الانزلاق من جانب Raydium و فحص دلتا escrow الخاص به يفرضان الحد الأدنى — حزام وحمالات.
الاختبار
سحب برامج Raydium إلى محقق محلي لاختبارات التكامل (منAnchor.toml):
anchor test يجلبها من mainnet عند بدء التشغيل. انظر sdk-api/rust-cpi.
الأخطاء المحددة للتكوين
إعادة الدخول
Solana ليس لديها إعادة دخول حقيقية — لا يمكن لـ CPI استدعاء البرنامج الأصلي مرة أخرى في نفس الاستدعاء. لكن يمكنك بناء نفسك في إعادة دخول منطقية: CPI يقرأ حالتك، ثم يقرأ الكود الخاص بك مرة أخرى بافتراض أن CPI لم يغيره. بالنسبة إلى Raydium، لا تلمس CPIs حالتك، لذا هذا أقل قلقاً من على سبيل المثال سياقات القروض الفورية. لكن إذا ركبت Raydium مع بروتوكول الإقراض، كن على علم.انجراف قابلية الحساب
إذا مرر برنامجك حساباً كـmut لكن Raydium يتوقع قراءة فقط (أو العكس)، يرفض وقت التشغيل الاستدعاء مع InvalidAccountData. تحقق دائماً من قابلية التغيير المتوقعة لتعليمة Raydium في IDL؛ تضبط raydium_cp_swap::cpi::accounts::Swap قابلية تغيير كل حساب من أجلك، انطلاقاً من علامات #[account(mut)] على بنية Swap الخاصة بـ CPMM — الحقول المولّدة كلها من نوع AccountInfo<'info> البسيط، لذا فإن تنفيذ ToAccountMetas المشتق، وليس أنواع الحقول، هو ما يحمل الأعلام.
حقل برنامج Token-2022
قد تكون رموز الإدخال والإخراج تحت برامج رموز مختلفة — واحد SPL Token، واحد Token-2022. يحتوي CPI على حقولinput_token_program و output_token_program منفصلة لهذا السبب. تحقق دائماً من حقل owner لكل mint وأرسل البرنامج الصحيح إلى كل فتحة.
معاملات مصدرة
معاملة مركبة تقوم بـ 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 لكل منتج.

