الت كوين

نيوغو v0.122.0 يستهدف القضاء على انحراف الحالة عبر العقود الأصلية والجهاز الافتراضي

أصدر فريق Neo SPCC تحديث الصيانة الجديد NeoGo v0.122.0 “Vitalization”، الذي يركّز على إزالة الاختلافات المحتملة في حالة الشبكة بين تطبيقي العقدة بلغة Go وC#. يتضمّن الإصدار خمسة إصلاحات للتوافق تغطي العقود الأصلية وتعليمات الآلة الافتراضية، إلى جانب تحسينات على المترجم (Compiler) الخاص بالعقود الذكية.

هذا التحديث متوافق مع إصدار عقدة C# v3.10+ ولا يتطلب إعادة مزامنة سلسلة الكتل أو تغيير الإعدادات.

تعزيز التوافق بين العقد

الاختلافات في حالة الشبكة، حيث تعالج تطبيقات العقد المختلفة نفس المعاملات بنتائج مختلفة، تشكّل خطرًا كبيرًا على الشبكات متعددة العملاء، وقد تؤدي إلى فشل في التوافق أو نتائج تنفيذ غير موثوقة. عمل فريق NeoGo بشكل منهجي على معالجة هذه المشكلات عبر الإصدارات الأخيرة؛ بدءًا من حل 41 اختلافًا في الشبكة الرئيسية MainNet في إصدار v0.119.0، ثم إصلاح اختلاف شبكة التجارب TestNet في إصدار v0.120.0.

في إصدار v0.122.0، عالجت خمسة إصلاحات اختلافات محتملة في الحالة عبر العقود الأصلية Oracle وStdLib وCryptoLib، وتعليمتي الآلة الافتراضية ISTYPE وROLL، وتحليل التدوين العلمي للأرقام في JSON. تم تصنيف ثلاثة من هذه الإصلاحات بمستوى أولوية مرتفع، مما يشير إلى مشكلات صحة حرجة:

  • إصلاح اختلافات في العقد الأصلي CryptoLib (#4368).
  • إصلاح تحليل الأرقام العلمية في JSON مثل 1e5 و1.5e-3، لتطابق سلوك دالة deserializeJSON في العقدة C# (#4384).

تحسينات على المترجم

تضمّن هذا الإصدار أربعة طلبات سحب (Pull Requests) تستهدف مترجم العقود الذكية في NeoGo، بإجمالي أكثر من 1,100 إضافة عبر 24 ملفًا.

أهم إضافة هي دعم المصفوفات ذات الطول الثابت (#4358)، مما يحل مشكلة قديمة من الإصدار #3524. كان مترجم NeoGo سابقًا يدعم الشرائح فقط، مما اضطر المطورين إلى إيجاد حلول بديلة للبيانات ذات الحجم الثابت.

كما يفرض المترجم الآن فحصًا صارمًا لأنواع بيانات وسائط أحداث runtime.Notify (#4369). سابقًا، كان المترجم يحوّل الوسائط تلقائيًا أثناء الترجمة عندما لا تتطابق الأنواع مع تعريفات الأحداث في المانيفست. الآن، سيفشل البناء إذا كانت أنواع الوسائط غير متوافقة، مما يساعد على اكتشاف الأخطاء مبكرًا في دورة التطوير. هذا يحل مشكلة #3027.

إصلاحان إضافيان على المترجم يحسّنان إخراج معلومات التصحيح لاستخدام أنواع معلمات العقود الذكية الصحيحة بدلاً من أنواع الآلة الافتراضية (#4379)، ويفحصان شجرة الاستيراد الكاملة لإظهار أخطاء التبعية من الحزم المستوردة (#4361).

تغييرات قد تؤثر على المطورين

على مطوري العقود الذكية الانتباه إلى أن التحويل التلقائي للأنواع في وسائط runtime.Notify قد أُزيل. العقود التي كانت تعتمد على التحويل الضمني ستحتاج الآن إلى تحويل الوسائط يدويًا إلى الأنواع المحددة في تعريفات الأحداث في المانيفست.

أما مطورو التطبيقات اللامركزية الذين يستخدمون عميل RPC في NeoGo، فيجب عليهم الانتقال من استخدام actor.ErrExecFailed – الذي أُزيل كما كان مقررًا سابقًا – إلى استخدام neorpc.FaultException لاكتشاف فشل تنفيذ الآلة الافتراضية.

إصلاحات أخرى

تم تصحيح خطأ في دالة CompileFile ضمن إطار neotest (#4362). كانت الدالة تخزّن تجزئات العقود بشكل غير صحيح عندما يُنشر نفس العقد عدة مرات مع مرسلين مختلفين، مما أثر على مشاريع مثل neofs-contract التي تختبر عمليات النشر عبر موقّعين مختلفة.

الأسئلة الشائعة

س: هل يتطلب تحديث NeoGo v0.122.0 إعادة مزامنة سلسلة الكتل؟
ج: لا، التحديث متوافق مع عقدة C# v3.10+ ولا يتطلب إعادة مزامنة سلسلة الكتل أو أي تغيير في الإعدادات الحالية.

س: ما هو التغيير الأهم في مترجم العقود الذكية بهذا الإصدار؟
ج: أبرز تحسين هو دعم المصفوفات ذات الطول الثابت، مما يلغي الحاجة إلى حلول بديلة للبيانات ذات الحجم الثابت. كما أصبح المترجم يفرض فحصًا صارمًا لأنواع وسائط أحداث runtime.Notify، مما يساعد على اكتشاف الأخطاء مبكرًا.

س: هل هناك تغييرات قد تكسر التوافق مع التطبيقات الحالية؟
ج: نعم، أُزيل التحويل التلقائي للأنواع في وسائط runtime.Notify، ويجب على المطورين تحويل الوسائط يدويًا. كما يجب على مطوري تطبيقات RPC الانتقال من خطأ actor.ErrExecFailed إلى neorpc.FaultException.

عميد الاستثمار

خبير استثماري ذو خبرة واسعة، يقدم رؤى استراتيجية ونصائح عملية لتعزيز العوائد المالية.
زر الذهاب إلى الأعلى