ملخص
يمكن ترقية البرامج المنشورة عبر loader-v3 عند تعيين سلطة الترقية. إلغاء السلطة يجعل البرنامج غير قابل للتغيير. يغطي آلية الترقية، وتعليمات النشر والترقية لـ loader-v3، والتحقق من البناء، وبرامج التحميل المتاحة.
نشر البرامج
Rust الأصلي
النشر باستخدام Solana CLI مع solana program deploy.
Anchor
النشر باستخدام إطار عمل Anchor مع anchor deploy.
ترقية البرامج
لترقية برنامج، يجب أن يحمل حساب صلاحية الترقية (عادةً الحساب الذي
نشر البرنامج في الأصل). أثناء النشر أو الترقية، يتم
تحميل الكود الثنائي الجديد إلى حساب مؤقت مخصص للتخزين المؤقت، ثم يُكتب إلى حساب
بيانات البرنامج. تعيين صلاحية الترقية إلى None يجعل البرنامج غير قابل
للتغيير ويمنع التحديثات الإضافية بشكل دائم.
آلية الترقية
عند معالجة
UpgradeableLoaderInstruction::Upgrade،
يقوم وقت التشغيل بـ:
- التحقق من أن حساب البرنامج قابل للكتابة ومملوك بواسطة loader-v3.
- التحقق من أن حساب المخزن المؤقت يحتوي على حالة
Bufferمع الصلاحية الصحيحة. - التحقق من أن
upgrade_authority_addressلحساب ProgramData يتطابق وليسNone. - التحقق من أن البرنامج لم يتم نشره بالفعل في الفترة الزمنية الحالية
(
clock.slot != slot). - تحميل والتحقق من بايتات ELF الجديدة من المخزن المؤقت.
- نسخ الكود الثنائي الجديد من المخزن المؤقت إلى حساب ProgramData وتصفير البايتات المتبقية.
- تمويل حساب ProgramData للإعفاء من الإيجار.
- تفريغ حساب المخزن المؤقت (تعيين lamports إلى 0) واقتطاع بياناته.
- تصبح النسخة الجديدة فعالة في الفترة الزمنية التالية (
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 | يغلق حساب buffer أو uninitialized أو ProgramData عن طريق تحويل lamports الخاصة به إلى مستلم. إغلاق ProgramData يكتب أيضاً علامة Closed إلى ذاكرة التخزين المؤقت للبرنامج. لا يمكن إغلاق برنامج تم نشره في slot الحالي. |
ExtendProgramChecked | يوسّع تخصيص حساب ProgramData ببايتات إضافية، ويموّل rent الإضافي من الدافع. |
التحقق من البرامج
تدعم سولانا عمليات البناء القابلة للتحقق، والتي تتيح للمستخدمين التأكد من أن الشيفرة الثنائية للبرنامج على السلسلة تطابق الشيفرة المصدرية العامة. يوفر إطار عمل Anchor دعماً مدمجاً لعمليات البناء القابلة للتحقق.
للتحقق من حالة التحقق لبرنامج تم نشره، ابحث عن معرف البرنامج الخاص به على مستكشف سولانا، أو استخدم أداة سطر الأوامر Solana Verifiable Build CLI من Ellipsis Labs للتحقق بشكل مستقل من البرامج الموجودة على السلسلة.
برامج التحميل
| المحمّل | العنوان | قابل للترقية | الوصف |
|---|---|---|---|
| المحمّل الأصلي | NativeLoader1111111111111111111111111111111 | فقط عبر ترقية برنامج المدقق | يمتلك البرامج المدمجة (النظام، التصويت، الرهان) والمحمّلات الأخرى |
| محمّل BPF (الإصدار 1) | BPFLoader1111111111111111111111111111111111 | لا (إدارة المحمّل معطلة) | البرامج القديمة |
| محمّل BPF (الإصدار 2) | BPFLoader2111111111111111111111111111111111 | لا (إدارة المحمّل معطلة) | البرامج القديمة |
| محمّل BPF القابل للترقية | BPFLoaderUpgradeab1e11111111111111111111111 | نعم، إذا تم تعيين صلاحية الترقية | يمتلك جميع البرامج المنشورة حديثاً |
Is this page helpful?