نيوجو v0.119.0 يستعد لشوكة جورغون الصلبة ويعالج 41 تناقضًا في الآلة الافتراضية

أصدرت شركة Neo SPCC الإصدار الجديد NeoGo v0.119.0 “Yawl”، الذي يقدم تغييرات بروتوكولية ستدخل حيز التنفيذ مع تحديث Gorgon القادم. هذا الإصدار يحل 41 اختلافًا في المعاملات بين NeoGo وعقدة C# المرجعية على الشبكة الرئيسية، كما يقدم تحسينات في الأداء لمشغلي العقد. الإصدار متوافق مع عقدة C# الإصدار 3.9.2 ولا يتطلب إعادة مزامنة قاعدة البيانات.
يأتي هذا التحديث بينما تستعد فرق البنية التحتية لشبكة Neo لتحديث Gorgon، وهو التحديث القادم للشبكة. في أبريل الماضي، صوّت مجلس Neo لتأجيل تخفيض رسوم التنفيذ المقترح، وانتظار نموذج التسعير الديناميكي للأكواد (opcode) الذي صممته Neo SPCC. هذا النموذج يجعل المعاملات العادية أرخص بكثير، بينما يجعل المعاملات الضارة أكثر تكلفة بشكل كبير. لم يتم تحديد موعد بعد لتطبيق هذا التحديث.
تغييرات بروتوكول Gorgon
العديد من التغييرات في السلوك في الإصدار v0.119.0 ستدخل حيز التنفيذ فقط عند تفعيل Gorgon. تشمل هذه التغييرات معالجة أكثر صرامة للحجج غير الصالحة للتوقيعات المشفرة في عمليات CryptoLib و System.Crypto، والتي ستؤدي الآن إلى خطأ FAULT بدلاً من المتابعة بصمت. كما يضيف الإصدار فحوصات مفقودة للمعاملات في تعليمات SHR و SHL الخاصة بالآلة الافتراضية، وفحص حدود الفهرس لـ HASKEY، مما يجعل سلوك NeoGo متوافقًا مع مواصفات Gorgon المتوقعة.
كما تم تضمين تغييرات في إدارة العقود – حيث يتم الآن تحديث ذاكرة التخزين المؤقت لـ ContractManagement قبل حذف العقد، ويتم حظر حسابات العقود قبل تدمير العقد، وكلاهما سيدخل حيز التنفيذ عند تفعيل Gorgon.
إصلاحات توافق الآلة الافتراضية
يعالج الإصدار v0.119.0 41 معاملة على الشبكة الرئيسية حيث أنتجت NeoGo والعقدة المرجعية C# نتائج FAULT مختلفة. هذه الاختلافات تعني أن كلا التطبيقين كانا يعالجان بعض العقود بشكل مختلف – وهو ما يشكل مصدر قلق للاعتمادية في شبكة متعددة العملاء.
- تشمل الإصلاحات معالجة محسنة لاستدعاءات async في System.Contract.CallNative
- التحقق من صحة نوع القيمة المرجعة للدوال أثناء استدعاءات العقود
- تصحيحات متعددة لعد المراجع في PACKMAP و SETITEM و SYSCALL
- تم إصلاح عدة أعطال في الآلة الافتراضية، بما في ذلك الأعطال عند الوصول إلى حقول الهياكل
- تم إصلاح استجابة غير صحيحة من getBlock في Ledger عند إعطاء فهرس كتلة يتجاوز الارتفاع الحالي – يعيد NeoGo الآن قيمة فارغة (null) لتتوافق مع سلوك عقدة C#
كما تم إعادة هيكلة التنفيذ الأساسي لـ stackitem.Map، وتم نقله من تطبيق C# المرجعي لاستخدام هيكل مرتب.
تحسينات الأداء
يوفر خيار DirectRelayRPC الجديد إمكانية البث المباشر للمعاملات إلى النظائر (peers) بدلاً من توجيهها عبر قائمة الانتظار القياسية لاستدعاءات sendrawtransaction. هذه الميزة مهمة بشكل خاص بعد تفعيل أوقات الكتل ثلاث ثوانٍ على الشبكة الرئيسية في أواخر أبريل، حيث يكون للانتشار الأسرع تأثير أكبر. أشارت Neo SPCC إلى أن اختبارات الشبكة الاصطناعية أظهرت تحسنًا طفيفًا، لكن الظروف الفعلية قد تختلف.
حصلت عمليات Mempool على تحسينات دقيقة أدت إلى تقليل الوقت والتخصيص بنسبة تصل إلى 24% في سيناريو الرسوم المتساوية الشائع. كما تم تحسين توصيل رسائل الإجماع من خلال طبقة P2P، وتم ترقية BoltDB إلى إصدار محسّن للتخصيص لتقليل ضغط الذاكرة.
تحديثات تشغيلية
يمكن لمشغلي العقد الذين يستخدمون systemd الآن استخدام تكامل sd_notify، مما يتيح وحدات خدمة من نوع Type=notify مع إشارات READY و RELOADING و STOPPING. تم إضافة مقياس Prometheus جديد لاتصالات WebSocket النشطة، بدافع من عقد تخزين NeoFS التي تواجه حدودًا لعملاء WebSocket.
تمت إعادة تسمية أربعة مقاييس Prometheus موجودة دون فترة انتقالية – current_state_height و current_block_height و current_persisted_height و current_header_height تفقد البادئة “current_”. سيحتاج المشغلون إلى تحديث لوحات المعلومات والتنبيهات وفقًا لذلك.
للمطورين، تم إهمال نوع الخطأ actor.ErrExecFailed لصالح neorpc.FaultException، مما يتطلب إجراء تعديلات في التطبيقات التي تتحقق من فشل التنفيذ.
النظرة المستقبلية
يقرب الإصدار NeoGo v0.119.0 العميل Go من الاستعداد لتحديث Gorgon، مع تعزيز توافقه مع تطبيق C# المرجعي. لا يزال تحديث Gorgon بدون تاريخ محدد، مع تطبيق التسعير الديناميكي للأكواد بالفعل في جانب NeoGo بانتظار اكتماله في عقدة C#. يمكن العثور على التغطية السابقة لـ NeoGo في مقال عن الإصدار v0.118.0.
يمكن العثور على ملاحظات الإصدار الكاملة على الرابط أدناه:
https://github.com/nspcc-dev/neo-go/releases/tag/v0.119.0
الأسئلة الشائعة
س: ما هو تحديث Gorgon وماذا يعني لمستخدمي Neo؟
ج: Gorgon هو تحديث قادم لشبكة Neo. سيقدم نموذج تسعير ديناميكي للأكواد (opcode) يجعل المعاملات العادية أرخص، بينما يجعل المعاملات الضارة باهظة الثمن. هذا يحسن أمان الشبكة ويخفض التكاليف للمستخدمين العاديين.
س: هل يحتاج مشغلو العقد إلى إعادة مزامنة قواعد البيانات الخاصة بهم بعد هذا التحديث؟
ج: لا، الإصدار الجديد NeoGo v0.119.0 لا يتطلب إعادة مزامنة قاعدة البيانات. كما أنه متوافق مع عقدة C# الإصدار 3.9.2.
س: ما هي التحسينات الرئيسية في الأداء التي يقدمها هذا الإصدار؟
ج: يقدم الإصدار عدة تحسينات، منها: خيار البث المباشر للمعاملات (DirectRelayRPC) لتسريع انتشار المعاملات، وتحسين عمليات Mempool بنسبة تصل إلى 24%، وتحسين توصيل رسائل الإجماع، وتقليل استهلاك الذاكرة في BoltDB.












