النزاعات P2P blockchain


شبكة Ethereum ، المعروفة على نطاق واسع في دائرة ضيقة من مطوري blockchain ، قد أثبتت بالفعل كمنصة مريحة ومستقرة لتطوير العقود الذكية. نحاول جعل العقود الذكية متاحة للمستخدمين غير المستعدين من خلال تقديم عقود بسيطة ولكنها مفيدة عمليًا. طورنا مؤخرًا عقدًا ذكيًا بشأن النزاع في Bet Me العقد مبني على الرهان (الخلاف) بين الخصمين. أنها تعزز البر الذاتي مع معدل النقود. الخاسر يخسر المال ، والفائز يأخذ كل شيء. سأخبرك المزيد عنه في هذه المقالة.


لماذا يوجد blockchain هنا؟


بادئ ذي بدء ، السؤال الذي نادرا ما يطرحه مؤلفو المقالات حول blockchain هو: هل blockchain مطلوب في هذه الحالة؟ ما المهام التي يصعب حلها باتفاق شفهي أو عقد قانوني ، ولكن ببساطة باستخدام blockchain؟


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


هذا النهج له عيوب عديدة.


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

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


التنفيذ


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


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


ينقسم عمل العقد إلى عدة مراحل متتالية.


  1. المفاوضات . يمكن للمالك والمعارض ، حتى قبل إبرام العقد ، التفاوض بأي طريقة مناسبة. بعد أن قرروا بشكل مشترك من سيكون الحكم ، يرسلون المرشح دعوة للحكم على نزاعهم. عند تلقي الدعوة ، سيشاهد الحكم جميع الشروط والدولة المقابلة. المزيد عن هذا أدناه ، ولكن من المهم الآن أن نفهم أن الحكم المستقبلي يجب أن يحول هذا الرقم إلى العقد من أجل إظهار الشروط التي يكون مستعدًا فيها للحكم على المناقشين. إذا كان المالك قد حدد مبلغًا غير صفري من وديعة الضمان (ArbiterPenaltyAmount) ، فيجب على المحكم ، وفقًا للشروط ، تحويل المبلغ المحدد من وقت البث إلى العقد ، وبعد ذلك يتم حظره حتى يقرر المحكم المدينين أو حتى الموعد النهائي لتسوية النزاع. في الحالة الأخيرة ، يفقد المحكم فرصة سحب وديعة الضمان ، ويتم توزيع هذا المبلغ بالتساوي بين أطراف النزاع.
  2. التهيئة . يقوم مالك العقد بإنشاء مثيل للعقد وتحديد معاييره: موضوع النزاع ؛ التاريخ الذي يجب أن يقرر فيه المحكم (الموعد النهائي) ؛ النسبة المئوية للجنة التحكيم (العدد الكسري ≥ 0 و <100) ؛ مبلغ الكفالة (قد يكون صفرًا) ، والذي يجب على المحكم تقديمه كضمان يتعهد به للفصل في النزاع في الصياغة الحالية في الوقت المناسب. يقوم المالك أيضًا بتعيين عنوان Ethereum للحكم الذي يثق به. سيتمكن مالك هذا العنوان فقط من أن يصبح محكمًا في وقت لاحق.
  3. سعر المالك بعد الإعداد ، يقوم صاحب العقد بعمل رهان. للقيام بذلك ، يرسل أي كمية من الأثير إلى العقد. هذا المبلغ هو المعدل ، يتم حظره في عنوان العقد.
  4. موافقة المحكم . تحدد محاولة المالك شروط النزاع. الآن يرى الحكم الشروط الكاملة للمعاملة: صياغة النزاع ، والوقت الذي يجب قبله اتخاذ القرار ، والأهم من ذلك ، أنه يستطيع فهم مقدار الأثير الذي سيحصل عليه كمكافأة. إذا كان المحكم سعيدًا بكل شيء ، فإنه يؤكد مشاركته ويقوم في نفس الوقت بتحويل وديعة التأمين.
  5. ابحث عن خصم . بعد موافقة الحكم ، يبدأ البحث عن الخصم. يقوم المالك بتعيين عنوان الخصم مقدمًا ، إذا كان مستعدًا للمجادلة مع شخص محدد فقط ، أو يترك العنوان فارغًا ، وبعد ذلك يمكن أن يصبح مالك أي عنوان على الشبكة (باستثناء الحكم والمالك) هو الخصم. يؤكد الخصم المشاركة في النزاع من خلال استدعاء طريقة منفصلة للعقد ، والتي يرسل إليها رقم الإصدار الحالي للبيانات والبث - بقدر ما حدده المالك. من الآن فصاعدا ، يعتبر الرهان منتهيا. العقد الآن ينتظر قرار الحكم أو الموعد النهائي.
  6. نتيجة النزاع . يجوز للمحكم أن يحكم في النزاع بثلاث طرق.
    - الاعتراف بالبيان على أنه صحيح. في هذه الحالة ، يمكن لمالك العقد سحب كامل مبلغ الأثير ، باستثناء عمولة المحكم وإيداع الضمان (إذا كان كذلك): يتم سحب الأموال من قبل الحكم ، ولا يحصل الخصم على أي شيء.
    - الاعتراف بالبيان كاذب. في هذه الحالة يجوز للمحكم سحب الأثير في مقدار العمولة المستحقة له ومبلغ الرهن. يأخذ الخصم الباقي ، لكن المالك لا يحصل على أي شيء.
    - نعلن النزاع غير قابل للذوبان. على سبيل المثال ، أنشأ المالك نزاعًا مع عبارة "مباراة كرة القدم بين الفريقين A و B ، المقرر إجراؤها يوم الأحد المقبل ، ستنتهي بنتيجة 2: 1 لصالح A". إذا ألغيت المباراة ، لن يحكم الحكم في النزاع ، ولكن يجب أن يكون قادرًا على الوفاء بتعهده ، لأن المشكلة لم تنشأ بسبب خطئه. في هذه الحالة ، يجوز لكل من الطرفين أن يطلب نقل الهواء بمبلغ عطاءه الخاص من عنوان العقد إلى محفظته.
  7. سحب الأموال . عندما يتخذ الحكم قرارًا أو يصل الموعد النهائي ، يجوز لكل طرف طلب استنتاج على الهواء. كم من الأثير الناتج ، سيحسب العقد نفسه ، مع التركيز على نتائج النزاع.
  8. إتلاف العقد . يمكن للمالك إرسال أمر التدمير الذاتي للعقد. يمكن القيام بذلك إما قبل إتمام المعاملة (إذا لم يتم العثور على المحكم) ، أو بعد إتمامها (إذا سحبت جميع الأطراف الأموال المستحقة لها). ستكون هذه الفرصة مفيدة إذا تم بطريقة سحرية ، تلقي المزيد من الهواء أكثر مما تم تلقيه في عنوان العقد. احتمال حدوث مثل هذا الحدث منخفض جدًا ، ولكن لا يزال في Ethereum من المستحيل منع نقل البث تمامًا إلى عنوان عقد تعسفي ، ورمي الأموال المجمدة أمر سخيف.

الآن قليلاً عن سبب الحاجة إلى رقم إصدار الولاية. هذا هو العدد الذي يزداد مع كل تغيير في الظروف الهامة للنزاع ، مثل صياغة النزاع ، وحجم لجان أو غرامات المحكم. عندما يوافق شخص ما على شروط النزاع ، فإنه 1) يرى الوضع الحالي للبيانات ؛ 2) يرسل دعوة إلى طريقة العقد التي تسجل قبول الشروط. إذا قام أحد الطرفين (على الأرجح ، المالك) بين هذين الحدثين بتغيير معلمة العقد ، فإنك توافق على النسخة الأخرى من البيانات. على سبيل المثال ، يدخل مرشح الحكم في واجهة العقد على smartz.io ويرى أنه يُعرض عليه الحكم على نزاع في 10 Ether (اليوم حوالي 3000 دولار) مقابل عمولة 1٪ (حوالي 30 دولارًا). يسر المرشح الموافقة على عملية التأكيد وإرسالها إلى الشبكة. يرى المالك غير النزيه في مجمع التعدين المعاملة الأولية للحكم ويرسل له: يغير أجر الحكم بنسبة 0٪. يضع المحتال سعر الغاز فوق المتوسط ​​، ومع بعض عمال المناجم المحتملين يمكنهم معالجة معاملته في وقت سابق. يسمى هذا الهجوم هجوم الجري الأمامي. رقم إصدار الولاية يحميها. إذا تمت معالجة معاملة المالك - الآفات في وقت سابق ، فسيتم تغيير رقم إصدار البيانات في العقد. أرسل الحكم في معاملته رقم إصدار البيانات أقل. لذلك ، سيرفض العقد إتمام المعاملة ، وسيحدث التراجع. سيراجع الحكم الشروط الجديدة ويرفض المشاركة أو الموافقة بإرسال رقم الإصدار الحالي للبيانات.


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


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


لجزء من النزاعات ، من الممكن استبدال مجموعة المحكمين بعقد باستخدام واحد أو أكثر من أوراكل. أو ابتكر طريقة أخرى ، على سبيل المثال ، حوّل الحجة إلى لعبة روليت باستخدام حل عشوائي. وكل هذا - دون تغيير قانون عقد النزاع ودون تعقيد منطق عمله.


الاختبار


أريد أن أقول بضع كلمات عن الاختبار. يعلم الجميع أن أتمتة الاختبار جيدة. في الواقع ، يكتب العديد من الاختبارات لرموزهم. يستخدم بعض الأشخاص منهج TDD في التنمية - وهو التطوير الطويل الأمد والمعروف جيدًا القائم على الاختبار. والفرق الرئيسي بين TDD والاختبار البسيط هو أن الاختبارات تكتب قبل الرمز. هذا يسمح لك بإلقاء نظرة على رمز العقد من الخارج ، والشعور بالمشاكل المحتملة وحلها مسبقًا. بالإضافة إلى ذلك ، يسمح TDD ، عند استخدامه بشكل صحيح ، بتغيير منطق العمل بشكل كبير إذا لزم الأمر فجأة. الاستخدام السليم يأتي مع الخبرة. TDD ليست رصاصة فضية ، كما قد تعتقد ، قراءة العديد من المواد حول هذا الموضوع. في الوقت نفسه ، من المقلق أن أدلة التطوير في Truffle و Node.js لا توضح استخدام TDD لتطوير Solidity على الإطلاق. يكتسب المطورون المبتدئون عادات سيئة وينتهي بهم الأمر إلى المعاناة كثيرًا.


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


تحت الغطاء ، يستخدم Truffle إطار Mocha للاختبار. يمكن لـ Mocha تصفية إطلاق الاختبارات على فترات منتظمة ، ولكن Truffle غير قادر على تمرير المعلمة المقابلة - grep من سطر الأوامر خارج الصندوق. بالاستفادة من حقيقة أن تكوين Truffle هو رمز JavaScript عادي ، فقد أدخلت فيه تحليلًا لحجج سطر الأوامر وتكوين المعلمات لـ Mocha. التكوين ، الذي حصلت عليه نتيجة لذلك ، متاح في مشروع GitHub. التنفيذ ليس جميلًا جدًا ، ولكنه يعمل ويوفر الكثير من الوقت.


الملخص


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


يمكن اختبار عقد النزاع BetMe وتشغيله باستخدام نموذج محدد مسبقًا على منصة Smartz . سيتطلب هذا إضافة Metamask لمتصفح سطح المكتب أو Trust Wallet للأجهزة المحمولة. أيضًا ، يتم نشر كود المصدر للعقد نفسه على GitHub.


تجدر الإشارة إلى أن استخدام تقنيات blockchain يرجع اليوم بشكل أساسي إلى العملات المشفرة ومسألة الرموز المميزة لـ ICOs. لم تصبح المنظمات المستقلة اللامركزية (DAO) حقيقة بعد. ولكن إذا كنت تتخيل كيف ستتطور أنظمة عقود النزاع بشكل أكبر ، فيمكنك أن تتخيل قائمة المحكمين الذين حصلوا على تصنيف ، على سبيل المثال ، استنادًا إلى Token Curated Registry. بعد الانتهاء من النزاعات ، يمكن للمشاركين التصويت لصالح أو ضد المحكمين الذين تعاملوا معهم ، وتغيير موقفهم في الترتيب.


من ناحية ، يعد عقد نزاع BetMe عنصرًا من عناصر الاكتفاء الذاتي القابلة للتطبيق عمليًا. ولكن من ناحية أخرى ، قد يصبح أحد الطوب الذي يتشكل منه النظام البيئي للمنظمات اللامركزية بمرور الوقت.


الروابط


Source: https://habr.com/ru/post/ar420941/


All Articles