عقدة waves في لغة البرمجة GO

اعلان
اعلان


 في هذا المنشور، سنناقش كيف ظهرت عُقَد Waves في لغة البرمجة Go وكيف يمكنك إطلاقها.


وبفضل بساطة “GO” ، تجذب العقدة في تلك اللغة مطورين جدد إلى مجتمع WAVES .

🔺خطأ الرمز :

في أوائل شهر يناير من عام 2018، عندما كانت روسيا في عطلة العام الجديد، شهدت بلوكتشين WAVES فترة من الهبوط دامت نحو 40 دقيقة. وكشف التحليل اللاحق أن السبب كان خطأً بسيطاً في رمز العقدة.

ومن الصعب للغاية أن نكشف عن أخطاء من هذا النوع، وأن مثل هذه الأخطاء المحددة كانت موجودة في الرمز لأكثر من ستة أشهر قبل أن “تتوقف”.

ولكن الخطأ لم يكن في بروتوكول WAVES بل في تنفيذه . إن وجود تطبيق واحد فقط جعل شبكة ويفز بالكامل عُرضة للخطر في مثل هذه الحالات. لذلك ، تم اتخاذ قرار بتنفيذ عقدة Waves مرة أخرى.

وقد اختيرت لغة “التنفيذ الجديد” على أساس المعايير التالية :

1- وجود مكتبات تشفير. 

2- شعبية في مشاريع التشفير الأخرى وفي مجتمع التشفير. 

3- بساطة اللغة للمطورين. 


وكان هناك مرشحان رئيسيان هما “Go” و”Rust”.

ولكن لا نستطيع أن نطلق على Rust لغة بسيطة بسبب نموذجها في إدارة الذاكرة وما يترتب على ذلك من تضاعف عدد الكيانات. وعلى عكس Rust ، فإن Go تحتوي على عدد ضئيل من المفاهيم، وبالتالي الشيفرة الخاصة بها قابلة للقراءة .

تتضمن المزايا الأخرى لتطوير عقدة في Go فرصة لاختبار نهوج جديدة لتنفيذ الخوارزميات الموجودة بالفعل وإضافة مواصفات بروتوكول ويفز لتفاصيل التنفيذ المخفية في رمز Scala .

🔹الطريق إلى التنفيذ

تم إطلاق مشروع لتطوير عقدة WAVES في Go في خريف عام 2018. وقد تميز الفريق بثلاثة مطورين، على الرغم من أن تشكيلته قد تغيرت بشكل جزئي عدة مرات.

كانت خطة التطوير بسيطة. وكانت نقطة البداية هي الأولية الأساسية لبروتوكول WAVES، بما في ذلك وظائف التشفير والمعاملات ورسائل الشبكة.

ثم ولصالح المجتمع، تم تنفيذ مكتبة عملاء لواجهة برمجة تطبيقات عقدة REST في رمز SCALA ، وقد تم استخدامه في العديد من خدمات Waves الداخلية . وفيما بعد، لتوضيح قدرات مكتبة العميل تم إنشاء لوحة أدوات المرافق وكاشف فرع الخدمات، وأجهزة إرسال، وبيانات سوق WAVES .


في ربيع عام 2019، بدأ تطوير العقدة. وقد تم تكليف المطورين بضمان السرعة العالية لعمليات العقدة وتسريع عمليات استيراد الكتل. تم تنفيذ خوارزميات التوافق في الآراء وفحص الكتلة والمعاملات كجزء من تطوير مستورد أدوات المساعد.


وفي نفس الوقت، تم إنشاء مفهوم لتخزين حالة الكتلة والعقدة. في تطبيق Go، تم التخلي عن تخزين الكتل في المستوى db حيث تتم إضافة كتل جديدة بالكامل إلى ملف ثنائي بسيط، ويتم تخزين معلومات التعريف الخاصة بها في leveldb.

وكان هناك تحسن آخر في تحقيق Go هو المخزن المؤقت التكيفي للكتل المطبقة. تطبق عقدة Scala الكتل على دفعات متساوية من 100 ، وتتتبع عقدة Go باستمرار حجم الكتلة وتضبط عدد الكتل في المخزن المؤقت ، بناء على حجمها. أي، إذا كانت الكتل فارغة، فيمكن للعقدة GO تطبيقهم على دفعات من عدة آلاف، وإذا كانت الكتل تحتوي على عدد كبير من المعاملات يمكن تقليل المخزن المؤقت ديناميكيًا إلى عدة عشرات من الكتل. وتسهل هذه الآلية الإسراع الكبير في الاستيراد الأولي لسلسلة Waves blockchain.


كما تمت إضافة بعض التحسينات في عقدة Go انتقالاً إلى عقدة Scala. على سبيل المثال، ساعدت إضافة عوامل تصفية “bloom” عند الاتصال بتخزين الدولة في تقليل عدد المعاملات المكلفة للمفاتيح غير الموجودة، وهو أمر بالغ الأهمية لاستيراد سلاسل blockchain حيث كل الكتل والمعاملات جديدة في ذلك الوقت، فيما القاعدة ، كانت غائبة عن التخزين. 

تم تطبيق فلاتر “Bloom” غير القابلة للتَقطُّع في عقدة Scala، الأمر الذي ساعد في تسريع عملية استيراد blockchain.

تم تطوير عقدة انتقال Go تحت نموذج الصندوق الرمادي. ولن يبدأ تنفيذ أي وظيفة إلا بالاستناد إلى البيانات الموثّقة ذات الصلة. وللاختبار، استخدمت بيانات سلسلة blockchain ، ولم تعقد مقارنات مع تنفيذ Scala إلا في مرحلة التنفيذ النهائية.


ونتيجة لذلك، في شتاء 2019، تم إكمال تطبيق عامل بالكامل لعقدة التحقق من الصحة في لغة Go. وكان القيد الوحيد يتلخص في عجز العقدة عن توليد كتل جديدة. وكانت هذه هي المهمة التالية التي يتعين على المطورين القيام بها، وفي ربيع عام 2020، تم إطلاق عقد توليد في لغة Go في شبكة الاختبار، وبعد بضعة أسابيع، في الشبكة الرئيسية.

وفي نفس الوقت عمل مطورو Scala بنشاط على توسيع وظائف العقدة وتحضير الإصدار 1.2 Malibu، الذي صدر في أغسطس/آب 2020 . 

في أكتوبر، تمت إضافة دعم بروتوكول “Waves 1.2 Malibu” في النسخة Go.

وفي المستقبل، سيتم إطلاق جميع عمليات إطلاق بروتوكول Waves الكبرى، في نفس الوقت في Scala و Go .

وفي عملية التطوير، أوليَ اهتمام خاص لمترجم برنامج Ride النصي. وقد تم تطوير العديد من إصدارات المترجمين الشفويين بدرجات متفاوتة من التحسين.

في الوقت الحالي، يوجد جهاز افتراضي لتنفيذ برنامج Ride النصي في مرحلة تطوير نشطة. ومن المتوقع أن يؤدي إنشاء جهاز افتراضي إلى زيادة سرعة تشغيل العقدة وإنشاء هامش سعة لزيادة نمو سلسلة blockchain. 

وأثناء العمل المشترك بشأن وظائف بروتوكول 1,2 Malibu الجديدة، تم اكتشاف العديد من الأخطاء في تنفيذ مشروع Scala، والتي تم تصحيحها على الفور قبل أن تتمكن من الوصول إلى أجهزة الكمبيوتر الخاصة بالمستخدمين.

🔺إمكانية التحسين:

إن تطبيق عقدة Waves في Go عبارة عن منتج صغير نسبياً لا يستطيع تقديم عدد من واجهات المستخدم مثل عقدة Scala. في العقدة Go ، يتم تنفيذ واجهة gRPC جديدة (gRPC API) بالكامل للوصول إلى بيانات العقدة و blockchain. 

ولكن الدعم المقدم لواجهة برمجة التطبيقات الأصلية للعقدة REST لم يتم تنفيذه إلا جزئيا. وهذا يفرض بعض القيود على استخدام العقدة Go.

ومع ذلك، يمكن استخدام عقدة Go بشكل صحيح لتطوير وتشغيل الخدمات الجديدة التي تحصل على البيانات عبر واجهة برمجة تطبيقات gPRC، وكذلك لتوليد كتلة في TESTnet وstagenet.

ورغم ذلك فإن سجل عقدة “Go” في إنتاج الكتل ليس طويلاً بالقدر الكافي، لذا فإننا نوصي بالاستخدام المحدود لها لهذا الغرض على الشبكة الرئيسية.

لا يعتزم فريق تطوير عقدة Go إبطاء الأداء وسيعمل على إدخال وظائف جديدة، بالإضافة إلى دعم الواجهات المألوفة بالفعل للمستخدمين.

وتتضمن الخطط الأكثر مباشرة إضافة العقدة Go إلى اختبار التكامل كامل الدورة وتصحيح الأخطاء وتحسين الأمان.

ندعو المطورين إلى دراسة عقدة Waves واكتشاف الأخطاء وتصحيحها واقتراح التحسين أو الوظيفة الجديدة. وبفضل التنفيذ السريع، أصبح إنجاز كل هذا أكثر سهولة.

عملية إطلاق عقدة Go

عملية إطلاق عقدة GO بسيطة للغاية. انتقل إلى صفحة إصدار GitHub، وقم بتنزيل ملف قابل للتنفيذ ثم ابدأ تشغيله، باتباع الإرشادات القصيرة.

إذا كانت لديك مشاكل أو أسئلة أو اقتراحات ، فقم بإنشاء مشكلة Github أو الدردشة مع المطورين على Telegram أو Discord.


————————————————-

تداول العملات الرقمية بكل سهولة وأمان عبر منصة CoinEx من الرابط التالي 

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

زر الذهاب إلى الأعلى