الاستدعاء عبر البرامج

الاستدعاء عبر البرامج (Cross-Program Invocation أو CPI) هو عندما يستدعي برنامج تعليمة على برنامج آخر أثناء التنفيذ. تتيح CPIs قابلية التركيب: يمكن استدعاء تعليمات أي برنامج بواسطة أي برنامج آخر على الشبكة.

مثال على الاستدعاء عبر البرامجمثال على الاستدعاء عبر البرامج

حقائق أساسية

  • دالتان: invoke (بدون توقيع PDA) و invoke_signed (مع توقيع PDA).
  • توسيع الصلاحيات: صلاحيات الحساب (الموقع، القابل للكتابة) تمتد من المستدعي إلى المستدعى. لا يمكن للمستدعى تصعيد الصلاحيات بما يتجاوز ما مرره المستدعي.
  • ميزانية حوسبة مشتركة: استهلاك CU للمستدعى يقلل من الميزانية المتبقية للمستدعي.
  • إعادة الدخول: يُسمح بالتكرار الذاتي المباشر (A->A->A). إعادة الدخول غير المباشرة غير مسموحة (A->B->A يُرجع ReentrancyNotAllowed).

الحدود

الحدالقيمةالمصدر
أقصى عمق لمكدس التعليمات5 (9 مع SIMD-0268)MAX_INSTRUCTION_STACK_DEPTH، MAX_INSTRUCTION_STACK_DEPTH_SIMD_0268
تكلفة استدعاء CPI1,000 CUs (946 مع SIMD-0339)DEFAULT_INVOCATION_COST، INVOKE_UNITS_COST_SIMD_0339
أقصى عدد موقعي PDA لكل CPI16MAX_SIGNERS
أقصى حجم لبيانات تعليمة CPI10 KiB (10,240 بايت)MAX_INSTRUCTION_DATA_LEN
أقصى حجم للبيانات المُرجعة1,024 بايتMAX_RETURN_DATA
أقصى عدد معلومات حساب CPI128 (255 مع SIMD-0339)*MAX_CPI_ACCOUNT_INFOS، MAX_CPI_ACCOUNT_INFOS_SIMD_0339
تكلفة تسلسل CPI1 CU لكل 250 بايتcpi_bytes_per_unit
أقصى إعادة تخصيص لبيانات الحساب لكل CPI10,240 بايت (10 KiB)MAX_PERMITTED_DATA_INCREASE

invoke مقابل invoke_signed

توفر سولانا دالتين لإجراء استدعاءات البرامج المتقاطعة (CPIs):

الدالةحالة الاستخدامتوقيع PDA
invokeاستدعاءات البرامج المتقاطعة حيث قام جميع الموقعين المطلوبين بالفعل بتوقيع المعاملة الأصليةلا
invoke_signedاستدعاءات البرامج المتقاطعة حيث يحتاج البرنامج المستدعي إلى التوقيع نيابة عن PDA يمتلكهنعم، عبر بذور الموقع

في الأساس، تقوم invoke ببساطة باستدعاء invoke_signed مع مصفوفة بذور موقع فارغة. استخدم invoke عندما لا تحتاج إلى توقيع PDA، واستخدم invoke_signed عندما يجب على البرنامج تفويض إجراء نيابة عن PDA.

تؤدي كلتا الدالتين في النهاية إلى تشغيل نفس استدعاء النظام (sol_invoke_signed_rust) وتتدفقان عبر نفس مسار وقت التشغيل (cpi_common). الفرق الوحيد هو ما إذا تم توفير بذور الموقع. عند توفير البذور، يشتق وقت التشغيل مفاتيح PDA العامة ويضيفها إلى مجموعة الموقعين الصالحين قبل التحقق من الامتيازات.

Is this page helpful?

جدول المحتويات

تعديل الصفحة

تدار بواسطة

© 2026 مؤسسة سولانا.
جميع الحقوق محفوظة.
تواصل معنا