مصحح أخطاء TezEdge – عرض جميع الرسائل من طبقات P2P و RPC (لكل من العقد المستندة إلى Rust و Ocaml)

عندما تقوم بتطوير عقدة في OCaml أو Rust ويواجه برنامجك خطأ أو خطأ أو حالة غير مرغوب فيها بطريقة أخرى ، فأنت تريد أن تكون قادرًا على تحديد موقع المثيل وتحديد وقت حدوث المشكلة وكيفية حدوثها.

ومع ذلك ، عندما تعمل مع شبكة مشفرة ، مثل شبكة Tezos من نظير إلى نظير (P2P) ، فإن تحديد موقع المشكلة ليس بهذه السهولة. يجب أولاً فك تشفير الرسائل وإلغاء تسلسلها قبل أن تتمكن من فهمها.

مصحح TezEdge

أثناء تطوير عقدة TezEdge ، أردنا الحصول على أداة مصحح أخطاء يمكن أن تعمل بشكل جيد مع OCaml بالإضافة إلى Rust. من أجل تصحيح أي حالة في العقدة ومحاكاتها تمامًا ، نحتاج إلى الوصول إلى شبكة P2P ونقاط نهاية RPC والتخزين.

لهذا الغرض ، أنشأنا TezEdge Debugger ، وهي أداة تسجل الرسائل المرسلة والمستلمة بواسطة عقدة Tezos عبر طبقات P2P و RPC ، وتقوم بفك تشفيرها (إذا لزم الأمر) وإلغاء تسلسلها ، وأخيراً توفيرها في صورة بشرية -تنسيق قابل للقراءة في واجهة المستخدم الخاصة به (UI) ، والتي تُعرف باسم TezEdge Explorer. بينما يشكل المصحح النهاية الخلفية لهذا النظام ، يشكل المستكشف واجهته الأمامية.

من خلال TezEdge Explorer ، يمكن للمستخدمين عرض:

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

يعد مصحح أخطاء TezEdge حياديًا للعقد ، مما يعني أنه سيتم تشغيله على أي نوع من عقدة Tezos ، سواء كان إصدار OCaml الأصلي أو عقدة TezEdge القائمة على Rust أو بدائل أخرى.

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

كيف يعمل

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

هناك عدة طرق لاعتراض اتصالات الشبكة. في حالتنا ، اخترنا استخدام مقبس TCP خام.

يعمل الإنترنت كنظام “متعدد الطبقات” ، مع بروتوكولات متعددة في كل طبقة. بروتوكول الإنترنت (IP) هو بروتوكول من الطبقة الثالثة بينما ينتمي بروتوكول مخطط بيانات المستخدم (UDP) وبروتوكول التحكم في الإرسال (TCP) إلى الطبقة الرابعة من نموذج TCP / IP.

يعمل الاتصال من نظير إلى نظير (P2P) بين عقد Tezos بموجب بروتوكول TCP المذكور أعلاه. تستخدم العقدة الداخلية مقبس TCP. من وجهة نظر التطبيق ، يعمل مقبس TCP كقناة ، أثناء إدخال البيانات ، يتم إصدارها على الطرف الآخر بالترتيب الذي تم استلامها به. يتم التعامل مع كل شيء آخر بواسطة نظام التشغيل.

يعمل مقبس Raw TCP بشكل مختلف – فهو يلتقط الحزم ذات الرؤوس ، ولكن عليك إنشاء الرسالة بنفسك والتأكد من أنها بالترتيب الصحيح. ومع ذلك ، فإنه يسمح لك بالتقاط جميع الاتصالات ، وليس فقط الاتصالات المخصصة لتطبيقك.

تستخدم التطبيقات عادةً مآخذ TCP القياسية ، مع الاحتفاظ بمكدس TCP داخليًا بواسطة نظام التشغيل. من ناحية أخرى ، نستخدم مقبس TCP “خام” ، والذي يتم استلامه من نظام التشغيل ويعمل على حزم TCP (بدلاً من وحدات البايت التي تمت معالجتها بالفعل) ولكنه لا يحتوي على مكدس TCP.

يتيح ذلك لها التقاط جميع حزم TCP ، بما في ذلك رؤوس TCP و IP الخاصة بها. باستخدام المقبس الخام ، يمكنك اعتراض جميع الحزم التي تشكل اتصال TCP. استنادًا إلى البيانات الموجودة في رؤوس الحزمة ، يمكنك بعد ذلك تصفية الحزم المستخدمة في الاتصال مع عقدة Tezos.

مقبس TCP الأولي

بالإضافة إلى الرسالة ، يحتوي رأس TCP على عنصرين آخرين: رأس IP ورأس TCP نفسه.

باستخدام Docker ، يمكنك إنشاء شبكة مشتركة – كانت هناك حاويتان على نفس الشبكة ، إحداهما تشغل عقدة Tezos والأخرى تشغل مصحح الأخطاء. نظرًا لوجود كل الاتصالات داخل هذه الشبكة ، يمكنك استخدام المصحح لتحليلها. يؤدي هذا إلى إلغاء الالتزام بإعداد جهاز Tun ، مما يجعله تجربة أكثر سهولة في الاستخدام.

محاكاة حركة مرور الشبكة

لإجراء الإعادة ، نحتاج إلى محاكاة عقدة جارية عن طريق توصيل العقدة فعليًا بعقدة أخرى. الآن بعد أن أصبحت لديك عقدة محلية قيد التشغيل ، يمكنك تشغيل المصحح

إذا كنت تريد إجراء إعادة التشغيل على العقدة قيد التشغيل ، فأنت بحاجة إلى فتح مقبس TCP آخر محليًا. في هذه الحالة ، يكون مقبس TCP مشتركًا (وليس خامًا). من خلال هذا المقبس ، يتصل المصحح بالعقدة كما لو كانت عقدة أخرى ، ويرسل الرسائل بناءً على ما يتم تخزينه في قاعدة البيانات الخاصة به.

لإجراء إعادة ، نحتاج إلى إنشاء لقطة اتصال نريد محاكاتها (باستخدام مصحح الأخطاء). باستخدام اللقطة ومقبس TCP العادي ، يمكننا استخدام مصحح الأخطاء كما لو كان عقدة بحد ذاتها ، ولكن بدلاً من منطق اتصال P2P الفعلي ، فإنه يستخدم اللقطة التي تم إنشاؤها كدليل لدفع اتصال P2P.

التشغيل داخل شبكة Tezos

عند تشغيل TezEdge Debugger ، سيتم تشغيله بالتوازي مع عقدة Tezos ، حيث يسجل الرسائل والحزم و RPCs التي تم إنشاؤها فيما يتعلق بالعقدة. يستخدم مصحح الأخطاء TezEdge هوية .json التي تم إنشاؤها بواسطة عقدة قبل إجراء أول اتصال لها بشبكة Tezos. ثم يستخدم المفتاح الخاص من الهوية. json جنبًا إلى جنب مع المفاتيح العامة و nonces التي يعترضها أثناء إرسالها عبر الشبكة

على مستوى واسع ، يعمل P2P Debugger عن طريق إعداد طبقة اعتراض بين نظيرين قبل تبادل المفاتيح العامة وغير الرسمية.

لنفترض أن أليس تشغل عقدة على شبكة Tezos P2P. إنها تريد تشغيل TezEdge P2P Debugger لفحص الرسائل المرسلة بين العقدة وعقدة Bob. الاتصال بين أليس وبوب غير مشفر لأنهما لم يتبادلا المفاتيح العامة وغير الضرورية للتشفير.

الآن بعد أن تلقى مصحح أخطاء TezEdge المفاتيح العامة وغير الرسمية ، أصبح جاهزًا لاعتراض الرسائل التي تتدفق بين النظراء وفك تشفيرها وإلغاء تسلسلها:

6. تستخدم أليس المفتاح العام لبوب ، و المفتاح الخاص الخاص بها و المفتاح الخاص بها لتشفير رسالة ترسلها بعد ذلك إلى بوب.

7. يعترض مصحح أخطاء TezEdge ويفك تشفير (وإذا لزم الأمر ، يلغي تسلسل) رسالة Alice ، مما يوفر البيانات في مصحح أخطاء TezEdge الذي يعرضها عبر واجهة المستخدم الخاصة بها.

8. يتلقى بوب رسالة أليس الأصلية.

9. يمكن لـ Alice الوصول إلى واجهة المستخدم لتصفح البيانات التي تم اعتراضها بواسطة مصحح TezEdge في أي وقت

كيفية تشغيل TezEdge Debugger

1. افتح shell واكتب هذا الرمز في سطر الأوامر ثم اضغط على Enter

2. قم بتنزيل وتثبيت Docker and Docker Compose

افتح shell واكتب هذا الرمز في سطر الأوامر ثم اضغط على Enter:

3. افتح TezEdge Explorer في متصفحك

يمكنك عرض حالة مصحح الأخطاء في متصفحك عن طريق إدخال هذا العنوان في شريط عنوان URL بالمتصفح:

نشكرك على اهتمامك ونأمل أن تكون قد استمتعت بمقال اليوم. لقراءة المزيد حول Tezos وعقدة TezEdge ، راجع وثائقنا على tezedge.com. نرحب دائمًا بالملاحظات أو التعليقات أو الأسئلة – لا تتردد في مراسلتي عبر البريد الإلكتروني على jurajselep@simplestaking.com.