نشر البرنامج

ملخص

يمكن ترقية البرامج المنشورة عبر loader-v3 عندما يتم تعيين صلاحية الترقية. إلغاء الصلاحية يجعل البرنامج غير قابل للتغيير. يغطي آلية الترقية المكونة من 9 خطوات، وجميع تعليمات loader-v3 التسعة، والتحقق من البناء، وأنواع المحمل الخمسة.

نشر البرامج

ترقية البرامج

لترقية برنامج، يجب أن يحمل حساب صلاحية الترقية (عادةً الحساب الذي نشر البرنامج في الأصل). أثناء النشر أو الترقية، يتم تحميل الكود الثنائي الجديد إلى حساب مؤقت مخصص للتخزين المؤقت، ثم يُكتب إلى حساب بيانات البرنامج. تعيين صلاحية الترقية إلى None يجعل البرنامج غير قابل للتغيير ويمنع التحديثات الإضافية بشكل دائم.

آلية الترقية

عند معالجة UpgradeableLoaderInstruction::Upgrade، يقوم وقت التشغيل بـ:

  1. التحقق من أن حساب البرنامج قابل للكتابة ومملوك بواسطة loader-v3.
  2. التحقق من أن حساب المخزن المؤقت يحتوي على حالة Buffer مع الصلاحية الصحيحة.
  3. التحقق من أن upgrade_authority_address لحساب ProgramData يتطابق وليس None.
  4. التحقق من أن البرنامج لم يتم نشره بالفعل في الفترة الزمنية الحالية (clock.slot != slot).
  5. تحميل والتحقق من بايتات ELF الجديدة من المخزن المؤقت.
  6. نسخ الكود الثنائي الجديد من المخزن المؤقت إلى حساب ProgramData وتصفير البايتات المتبقية.
  7. تمويل حساب ProgramData للإعفاء من الإيجار.
  8. تفريغ حساب المخزن المؤقت (تعيين lamports إلى 0) واقتطاع بياناته.
  9. تصبح النسخة الجديدة فعالة في الفترة الزمنية التالية (deployment_slot + 1).

حساب Program نفسه (حالته ومؤشر programdata_address) لا يتغير أثناء الترقية. يتم تحديث الكود الثنائي وبيانات الـ slot الوصفية لحساب ProgramData فقط.

مرجع تعليمات Loader-v3

Loader-v3 (BPF Loader Upgradeable) هو المحمّل الافتراضي الحالي لنشر البرامج على سولانا.

التعليمةالوصف
InitializeBufferتعيّن حالة حساب المخزن المؤقت إلى Buffer مع الصلاحية المحددة. تفشل إذا كان مهيأً بالفعل.
Writeتكتب البايتات عند الإزاحة المحددة في حساب المخزن المؤقت. يجب أن توقع الصلاحية.
DeployWithMaxDataLenتنشئ برنامجاً جديداً: تشتق عنوان ProgramData، تنشئ حساب ProgramData عبر CPI إلى System Program، تتحقق من ملف ELF وتنشره من المخزن المؤقت، تعيّن حالة حساب البرنامج وتجعله قابلاً للتنفيذ.
Upgradeتستبدل الكود الثنائي في حساب ProgramData لبرنامج موجود من مخزن مؤقت.
SetAuthorityتغيّر صلاحية حساب Buffer أو ProgramData. التعيين إلى None على ProgramData يجعل البرنامج غير قابل للتغيير. لا يمكن تعيين صلاحية Buffer إلى None.
SetAuthorityCheckedمثل SetAuthority، لكن تتطلب أن توقع الصلاحية الجديدة على المعاملة أيضاً.
Closeتغلق حساب مخزن مؤقت أو غير مهيأ أو ProgramData بتحويل lamports الخاصة به إلى مستلم. إغلاق ProgramData يكتب أيضاً علامة Closed في ذاكرة التخزين المؤقت للبرنامج. لا يمكن إغلاق برنامج تم نشره في الـ slot الحالي.
ExtendProgramCheckedتوسّع تخصيص حساب ProgramData ببايتات إضافية، مع تمويل الإيجار الإضافي من الدافع.
Migrateتهاجر برنامج loader-v3 إلى loader-v4 بنقل ملكية حساب البرنامج ونسخ الكود الثنائي. تتطلب صلاحية الترحيل أو صلاحية ترقية البرنامج للتوقيع. loader-v4 لم يتم إصداره بعد على الشبكة الرئيسية.

التحقق من البرامج

تدعم سولانا البناءات القابلة للتحقق، والتي تتيح للمستخدمين التأكد من أن الكود الثنائي للبرنامج على السلسلة يطابق كوده المصدري العام. يوفر إطار عمل Anchor دعمًا مدمجًا للبناءات القابلة للتحقق.

للتحقق من حالة التحقق لبرنامج منشور، ابحث عن معرف البرنامج الخاص به على Solana Explorer، أو استخدم Solana Verifiable Build CLI من Ellipsis Labs للتحقق بشكل مستقل من البرامج على السلسلة.

برامج التحميل

المحمّلالعنوانقابل للترقيةالوصف
Native LoaderNativeLoader1111111111111111111111111111111فقط عبر ترقية برنامج المدققيمتلك البرامج المدمجة (System، Vote، Stake) والمحملات الأخرى
BPF Loader (v1)BPFLoader1111111111111111111111111111111111لا (إدارة المحمل معطلة)البرامج القديمة
BPF Loader (v2)BPFLoader2111111111111111111111111111111111لا (إدارة المحمل معطلة)البرامج القديمة
BPF Loader UpgradeableBPFLoaderUpgradeab1e11111111111111111111111نعم، إذا تم تعيين صلاحية الترقيةيمتلك جميع البرامج المنشورة حديثًا
Loader-v4LoaderV411111111111111111111111111111111111نعم، إذا تم تعيين الصلاحيةلم يتم إصداره بعد على الشبكة الرئيسية

Is this page helpful?

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

تعديل الصفحة

تدار بواسطة

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