عقود وعناوين متعددة في Bitcoin و Ethereum


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


على الرغم من نفس الاسم ومنطق العمل المماثل ، إلا أن الخوارزميات والأساليب الداخلية للتفاعل مع العناوين المحمية بتوقيع متعدد مختلفة تمامًا في Bitcoin و Ethereum. حول هذا الجهاز الداخلي الذي سيتم مناقشته في هذه المقالة.


سنتحدث عن شبكتين: Bitcoin و Ethereum. في سلاسل blockchains أخرى ، يمكن تنفيذ الوصول متعدد الأصول إلى أصول التشفير بطريقة مختلفة تمامًا.


مقدمة


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


الآن ، يجب على كل من المشاركين الثلاثة ، الراغبين في إنشاء معاملة للسحب ، تقديم توقيعه لتأكيد موافقته على المعاملة. عندما يتم جمع توقيعات كافية ، يتم تحويل الأموال. يسمى هذا المنطق multisig: إرسال N من التوقيعات M (M> N) لتأكيد العملية.


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


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


تنجذب مهام المحاسبة ودفع الخدمات أيضًا نحو multisig 2/3: غالبًا ما تتطلب جهة خارجية لتحديد ما إذا كانت الخدمة قد تم تقديمها وإلى أي مدى. Multisig ، حيث ينتمي أحد التوقيعات الثلاثة إلى المنظمة ، والتي تقرر في نهاية المطاف ما إذا كانت الخدمة قد تم تقديمها أم لا (على سبيل المثال ، إلى المحكمة) ، يعني أن المحكمة ، بعد أن قررت لصالح أحد الأطراف ، تقوم ببساطة بتوقيع قرارها وترسل المعاملة ، وتفتح الأموال تلقائيًا للجانب الفائز. بالنسبة لخدمات B2C مثل Uber أو AirBnB ، فإن multisig ، وإن كان ضمنياً ، هو نمط العمل الرئيسي: عندما يتم تقديم الخدمة ، فإن توقيع الطلب من قبل الخدمة هو الذي يبدأ بإرسال الأموال من العميل إلى السائق أو مالك الشقة.


بشكل عام ، تعد عدة أسلحة يتم تنفيذها بشكل ملائم - مثل بندقية كلاشنيكوف: رخيصة ومبهجة ، مناسبة للاستخدام في المنزل ولرسوم الملايين من الدولارات. وفي سلسلة الكتل ، كل هذا هو "بدون تسجيل ورسائل نصية قصيرة" (من وجهة نظر أمنية ، هذه ، بالمناسبة ، أطروحة خطيرة جدًا ، إذا كنت تفكر في ذلك).


سننظر في اثنين من blockchains - Bitcoin و Ethereum. يجب أن أقول أن الجهاز الداخلي المتعدد فيه مختلف تمامًا ، كل شيء يعمل بشكل مختلف. ولكن دعونا لا نتقدم على أنفسنا.


متعدد البيتكوين


إن Bitcoin في الواقع ليس بهذه البساطة كما قد يبدو للكثيرين. يتيح لك تصميمها تنفيذ مخططات خفيفة الوزن وآمنة للغاية للوصول إلى الأموال. حسنًا ، أضيف أنه في رأيي الشخصي فقط ، فإن الهياكل والخوارزميات في Bitcoin مدروسة جيدًا ومثالية وجميلة ببساطة. إن الترجمة القياسية لـ X bitcoins من عنوان إلى عنوان هي فقط النوع الافتراضي من المعاملات ، وهي قمة جبل الجليد من إمكانيات Bitcoin المحتملة. المعاملة الافتراضية لترجمة BTC من وجهة نظر الكود هي أبسط multigig 1/1: لاستخدام X bitcoins من العنوان a1 ، تحتاج إلى إرفاق المعاملة بتوقيع إلكتروني تم إنشاؤه باستخدام مفتاح سري ينتمي إلى العنوان a1. دعنا نلقي نظرة على هيكل معاملة البيتكوين ونبحث قليلاً في كيفية عملها.


الصورة


هناك متطلبات في Bitcoin: يتم دائمًا إنفاق جميع BTC المخزنة في عنوان معين ككل. أي ، بعد تأكيد حقه في امتلاك عنوان ، تنفق المعاملة الرصيد بالكامل ، وتوزعه على عدة مخرجات. في الحياة الواقعية ، ترك الفرق بين المدخلات والمخرجات للعمال كعمولة ، ولكن بالنسبة لهذه المقالة ، هذا ليس مهمًا.


تخيل الوضع. تلقى Vasya 50 BTC. Vasya يريد إرسال Peta 0.5 BTC. للقيام بذلك ، يجب عليه أن ينفق كل 50 BTC. للحصول على التغيير ، يأخذ Vasya إدخال واحد (50 BTC) وإنشاء نتيجتين:


  • 0.5 BTC إلى عنوان Petit ؛
  • 49.5 BTC لأحد عناوينك الخاصة.

عندما يقولون "Vasya يوقع الصفقة" - هذا ليس دقيقًا تمامًا لبيتكوين. يوقع Vasya جميع المدخلات في المعاملة ، وكل إدخال هو عنوان بيتكوين منفصل ، ويحتاج كل واحد منهم إلى مفتاح سري مطابق. افترض أن Vasya لديه ثلاثة عناوين أرسل فيها ثلاثة من أصدقائه 0.1 BTC لكل منها. لإنفاق 0.25 BTC ، سيتعين على Vasya التوقيع على ثلاثة مدخلات (كل من 0.1) وتشكيل ناتجين (0.25 إلى عنوان المستلم و 0.05 لنفسه كتغيير). يسمح هذا المخطط ، على وجه الخصوص ، بعدم استخدام نفس العنوان مرتين أبدًا والعودة التغيير في كل مرة إلى عنوان جديد. تسمح بعض المحافظ ، مثل Electrum ، للمالك باختيار استراتيجية لإعادة استخدام العناوين ، أكثر خصوصية (في كل مرة عنوان جديد) أو أبسط ، ولكن مع عناوين دائمة (هذا المخطط أكثر ملاءمة إذا كنت تلجأ إلى المعاملات العادية المعقدة). أذكركم أن الفرق بين مجموع المدخلات والمخرجات هو عمولة لعمال المناجم: بسيطة وموثوقة.


الآن ، بدلاً من "Vasya يوقع الصفقة" ، أقول ، "Vasya يوقع المدخلات". لكنني أخطأت عمدا بضع نقاط أخرى ، حتى لا أعقد المخطط العام. والحقيقة هي أن العناوين في Bitcoin ليست مفتاحًا عامًا في أنقى صورها ، ولكن التجزئة (مرتين تجزئة مع عدة بايت خدمة وإصدار ، تفاصيل في مقالة Bitcoinwiki) ، أي أنه في المعاملة العادية ، لا يعرف المرسل حتى المفتاح العام للمستلم. لذلك ، Vasya ، توقيع المدخلات ، بالإضافة إلى التوقيع نفسه ، يقدم Bitcoin Script بمفتاحه العام ، وبالتالي يكشف عنه. بطبيعة الحال ، عند معرفة المفتاح العام ، يمكنك بسهولة إنشاء عنوان بيتكوين.


بالإضافة إلى توقيع المدخلات ، يحدد Vasya أيضًا شرطًا لكل إخراج ، وكيفية إنفاق BTC من هذا الإخراج المعين. ولكن تم توفير "المتطلبات" له من قبل الشخص الذي سيحصل على عملات البيتكوين: فمن قلقه كيف سينفق BTC الخاص به. هذه نقطة مهمة للغاية. يحتوي عنوان Bitcoin على تجزئة من الرمز الذي سيقرر ما إذا كان سيسمح لـ BTC من هذا العنوان.


إذا كنت لا تزال تبحث عن أوجه التشابه ، فسيقوم Vasya بإرفاق كل ناتج (والذي حصل عليه من قبل أولئك الذين يتلقون BTC) بالبيانات التي تجيب على السؤال "ما هو الرمز وما هي البيانات التي يجب أن تعود بشكل صحيح حتى يعتبر الموقِّع مالك هذا الإخراج؟" . في ما يلي تشبيه آخر للموسيقيين: يمكنك أن تتخيل أن كل ناتج يحتوي على وظيفة لامدا ، التي تنفذها بيتيا ، التي زودتها بالحجج ، ستعود صحيحة أو خاطئة. إذا تم إرجاع true ، فيمكن ل Petya استخدام الإخراج كمدخل للمعاملات اللاحقة. في الإصدار الافتراضي ، يمكن للبرنامج أخذ حجتين مقدمتين من Petya - توقيع الإخراج ومفتاح Petin العام - والتحقق من التوقيع. إذا تم إرجاع true ، فإن Petya لها الحق في الإخراج ويمكن أن تنفقه ؛ لذلك ، تكون المعاملة صالحة. ليس من الضروري التعمق أكثر في إطار هذه المقالة في البرنامج النصي ، ولكن من المرغوب فيه للغاية. بالمناسبة ، استرداد النص - هذا هو العقد الذكي للغاية ، أي قاعدة رسمية ينتقل من خلالها الحق في BTC من عنوان إلى آخر. يقوم عملاء الشبكة ، أثناء المعاملة ، بتنفيذ كل نص برمجي في كل معاملة ، والتحقق مما إذا كان صالحًا. إذا كانت صالحة - نفايات صالحة وبيتكوين من عنوان محدد.


إليك أول مقال ممتاز حول هذا الموضوع ، أوصي بشدة بقراءته ، فالآلية الأولية الكاملة مع أمثلة في الثعبان مطلية بشكل مثالي: Bitcoins بالطريقة الصعبة: استخدام بروتوكول Bitcoin الخام . وهنا آخر: البيتكوين باختصار - الصفقة .


دعنا نعود إلى multisig 2/3 ، مع ملاحظة أن المعاملة المعتادة مع نقل البيتكوين يمكن اعتبارها أيضًا multisig 1/1. افترض أن Petya يريد Vasya أن ينقل BTC إليه ببساطة. يعطي Petya Vasya العنوان الذي يتم خياطة تجزئة البرنامج النصي الافتراضي إليه ، ويمكن ل Bitcoins التقاط البيتكوين من هذا العنوان من خلال توفير رمز التحقق من التوقيع القياسي والتوقيع نفسه. تبدأ هذه العناوين "التقليدية" في Bitcoin بالرقم 1 (الوحدة). تُسمى العناوين التي يتم فيها خياطة الرمز "غير التقليدي" (التحقق من البرنامج النصي multisig) الدفع إلى النص البرمجي وتبدأ بـ 3 (ثلاثة أضعاف).


تسمح لنا Bitcoin بإنشاء عنوان يتم فيه خياطة تجزئة نص OUR OWN لاسترداد القيمة. بعد كل شيء ، هذه هي مشكلتنا ، حيث سننفق BTC لدينا ، وليس المرسل. لا نهتم بمن يقوم بتحويل عملات البيتكوين إلى عنوان ، ولكن من المهم أنه عندما نريد إنفاقها ، سيتعين علينا تقديم رمز يتوافق مع العنوان. بمعنى ، من خلال مطالبتي بتحويل BTC إلى عنوان الدفع مقابل النص البرمجي ، أتعهد بتقديم النص البرمجي نفسه لاحقًا ، في معاملة تستخدم هذا الإدخال.


وفقًا للتوثيق ، يتم استخدام رمز متعدد الأنواع من هذا النوع:


----------------------------------------------------------- Pubkey script: OP_HASH160 <Hash160(redeemScript)> OP_EQUAL Signature script: <sig> [sig] [sig...] <redeemScript> ----------------------------------------------------------- 

( تابع المقال في النص و multigig )


نحن بحاجة إلى برنامج نصي بحيث يتم تقديم جميع التوقيعات الضرورية على الفور في معاملة الإنفاق. على سبيل المثال ، إذا احتوى النموذج متعدد المحاور 2/3 على عناوين ثلاثة مشاركين (الرئيس التنفيذي ورئيس المحاسب ومدير النظام) والمفاتيح السرية للتوقيعات موجودة على أجهزة الكمبيوتر الخاصة بهم بشكل منفصل ، فلكي يشكل معاملة الإنفاق ، سيتعين على مسؤول النظام:


  • إنشاء معاملة إنفاق ؛
  • إنشاء توقيع خاص بك ؛
  • نقل محتويات المعاملة إلى المُوقِّع الثاني (على سبيل المثال ، انتقل إلى قسم المحاسبة أو إلى الجنرال باستخدام محرك أقراص محمول) ؛
  • اطلب من الموقّع الثاني إضافة توقيع إلى المعاملة ؛
  • إرسال معاملة إلى الشبكة مع اثنين من التوقيعات الثلاثة.

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


Ethereum multisig


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


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


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


حسنًا ، نظرًا لأن العقد يحتوي على حالة داخلية (حقول الكائن في القياس لدينا) ، يمكنه تنفيذ تعدد الأجزاء دون الحاجة إلى إرسال التوقيعات في معاملة واحدة. نحن ننشئ عقدًا ، فيه نرمز إلى عناوين الموقعين ، عندما تصل معاملات السحب - ننقل العقد بالتسلسل إلى حالة الانتظار لعدد التأكيد المطلوب. إذا كنا نتحدث عن multisig 2/3 ، فقد يبدو شيء مثل هذا:


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

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


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


الخلاصة


لقد درسنا مخطط تشغيل أحد أهم الطوب لبناء أنظمة العقود المعقدة وتنظيم المعاملات متعددة الأطراف. أين هي أسهل طريقة لتشعر بالعديد من العناوين المتعددة تعيش:


  • لـ Bitcoin: تحتوي محفظة Electrum على تعليمات تفصيلية خطوة بخطوة مع لقطات شاشة حول كيفية إنشاء وتكوين عنوان متعدد المسارات وكيفية استخدامه. مجرد البحث عن Electrum multisig.
  • لـ Ethereum: يوجد قسم العقود في محفظة Ethereum القياسية ، ويمكنك بسهولة إنشاء مولتيسيج. أيضا ، سيتم تقديم multisig بالتأكيد في العديد من الأشكال على منصات لإطلاق العقود القياسية ، على سبيل المثال ، لدينا بالفعل واحد على Smartz.io .

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

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


All Articles