يستهدف NeoGo v0.119.0 جاهزية شوكة Gorgon الصلبة، ويصلح 41 تناقضًا في الأجهزة الافتراضية

أصدرت Neo SPCC إصدار NeoGo v0.119.0 "Yawl"، حيث تقدم تغييرات البروتوكول التي يتم تنشيطها في شوكة Gorgon الصلبة القادمة، وحل 41 اختلافًا في معاملات MainNet بين NeoGo والعقدة المرجعية C#، وتقديم تحسينات في الأداء لمشغلي العقد. الإصدار متوافق مع عقدة C# v3.9.2 ولا يتطلب إعادة مزامنة قاعدة البيانات.
يصل التحديث بينما تستعد فرق البنية التحتية في Neo لـ Gorgon، الانقسام الصعب التالي للشبكة. صوت مجلس Neo في أبريل على تأجيل التخفيض المقترح لرسوم التنفيذ لصالح انتظار نموذج تسعير كود التشغيل الديناميكي الخاص بـ Gorgon، والذي صممته Neo SPCC لجعل المعاملات القياسية أرخص بشكل كبير مع جعل المعاملات الضارة أكثر تكلفة بشكل كبير. لم يتم تحديد تاريخ نشر للشوكة الصلبة.
تغييرات بروتوكول جورجون
تسري العديد من التغييرات السلوكية في الإصدار 0.119.0 فقط عند تنشيط Gorgon. يتضمن ذلك معالجة أكثر صرامة لوسائط توقيع التشفير غير الصالحة عبر عمليات CryptoLib وSystem.Crypto، والتي ستؤدي الآن إلى تشغيل FAULT بدلاً من المتابعة بصمت. يضيف الإصدار أيضًا عمليات فحص المعاملات المفقودة لتعليمات SHR وSHL VM وفحص حدود الفهرس لـ HASKEY، مما يتوافق مع سلوك NeoGo مع مواصفات Gorgon المتوقعة.
تم تضمين تغييرات إدارة العقود أيضًا - يتم الآن تحديث ذاكرة التخزين المؤقت لإدارة العقود قبل حظر العقد عند التدمير، ويتم حظر حسابات العقد قبل تدمير العقد، وكلاهما ساري المفعول في Gorgon.
إصلاحات التوافق VM
يعالج الإصدار 0.119.0 41 معاملة من معاملات MainNet حيث أنتجت NeoGo والعقدة المرجعية C# نتائج FAULT مختلفة. تعني هذه التناقضات أن التطبيقين كانا يعالجان بعض العقود بشكل مختلف - وهو ما يمثل مصدر قلق بشأن الموثوقية بالنسبة لشبكة متعددة العملاء.
تتضمن الإصلاحات المعالجة المصححة لعمليات الاسترجاعات غير المتزامنة System.Contract.CallNative، والتحقق من صحة نوع قيمة إرجاع الطريقة أثناء مكالمات العقد، وتصحيحات إعادة العد المتعددة لتحليل وسيطة PACKMAP وSETITEM وSYSCALL. تم أيضًا حل العديد من حالات الذعر الخاصة بالأجهزة الافتراضية، بما في ذلك الأعطال في الوصول إلى حقل البنية والاستجابة غير الصحيحة من getBlock الخاص بـ Ledger عند إعطاء فهرس كتلة يتجاوز الارتفاع الحالي - يُرجع NeoGo الآن قيمة فارغة، مما يتوافق مع سلوك عقدة C#.
تمت أيضًا إعادة صياغة التطبيق الأساسي لـ Stackitem.Map، وتم نقله من التطبيق المرجعي لـ C# لاستخدام بنية مرتبة.
تحسينات في الأداء
يتيح خيار DirectRelay RPC الجديد بث المعاملات المباشرة إلى الأقران بدلاً من التوجيه عبر قائمة الانتظار القياسية لمكالمات sendrawtransaction. تعد هذه الميزة ذات أهمية خاصة بعد تفعيل أوقات الحظر لمدة ثلاث ثوانٍ على MainNet في أواخر أبريل، حيث يكون للانتشار الأسرع تأثير أكبر. لاحظت شركة Neo SPCC أن اختبارات الشبكات الاصطناعية أظهرت تحسنًا طفيفًا، على الرغم من أن ظروف العالم الحقيقي قد تختلف.
تلقت عمليات Mempool تحسينات دقيقة أدت إلى تقليل الوقت والتخصيصات بنسبة تصل إلى 24% لسيناريو نفس الرسوم الشائع. تم أيضًا تحسين تسليم رسائل الإجماع من خلال طبقة P2P، وتمت ترقية BoltDB إلى إصدار محسّن للتخصيص لتقليل ضغط الذاكرة.
التحديثات التشغيلية
يمكن الآن لمشغلي العقدة الذين يقومون بتشغيل systemd استخدام تكامل sd_notify، مما يتيح وحدات خدمة Type=notify المناسبة بإشارات جاهز وإعادة تحميل وإيقاف. تمت إضافة مقياس 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 السابقة في مقالة NNT على الإصدار 0.118.0.
يمكن العثور على ملاحظات الإصدار الكاملة على الرابط أدناه: https://github.com/nspcc-dev/neo-go/releases/tag/v0.119.0