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

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

وهكذا ، يتم وصف دورة يتم تنفيذها في تسلسل محدد. أولاً ، يتم التحقق من المساواة بين المتغير A والثابت 32. إذا لم يثبت ، فانتقل إلى نص الحلقة ، حيث يتم تعيين المتغير A مجموع قيمتين: المتغير A نفسه والثابت 2. هذا هو هيكل شجرة البناء المجردة بعبارات عامة.
ما هو MAST؟
لقد أعددنا الأرضية النظرية ، والآن سنحدد ما هو MAST وما فوائده. MAST هي شجرة البناء المجردة Merkelized ، والتي تستخدم أفكار شجرة Merkle وشجرة البنية المجردة لتحديد الشروط الحصرية المتبادلة لإنفاق العملات المعدنية. في الوقت نفسه ، يعمل Bitcoin Script ، كالمعتاد ، كلغة لوصف الشروط. يعزز مفهوم MAST الخصوصية ويقلل حجم المعاملات.
تطور المفهوم والموقف الحالي
بدأ أشخاص مثل راسل أوكونور ، وبيتر وويل ، وبيتر تود وجونسون لاو في تطوير وتعزيز فكرة MAST في مجتمع Bitcoin. في بداية عام 2016 ، تم نشر مقترح لتحسين بروتوكول Bitcoin تحت الرقم 114 (BIP114) ، الذي وصف مواصفات أحد الخيارات لتنفيذ هذا النهج باستخدام برامج الشهود ، والتي تم تقديمها بدورها مع تحديث SegWit. يقدم BIP114 أيضًا تطبيقًا برمجيًا يضيف قواعد إجماع جديدة إلى بروتوكول Bitcoin.
في وقت لاحق ، في عام 2017 ، اقترحوا تنفيذ بديل لمفهوم MAST ، والذي تم وصفه في BIP117. يقوم على BIP114 ويقوم ببعض التعديلات. حتى عام 2018 ، كان كلا الاقتراحين قيد النظر.
لاحظ أنه يمكن دمج MAST في Bitcoin باستخدام تحديثات بروتوكول softfork. وربما تكون هذه هي الميزة الأكثر أهمية لهذا المفهوم.
MAST على الرسم التخطيطي
من الناحية التخطيطية ، ستبدو شجرة البناء المجردة Merkelized هكذا.

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

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

تم تحديد شرطين متنافيين لإنفاق العملات المعدنية هنا. في الحالة الأولى ، يمكن إنفاق العملات المعدنية من خلال توفير توقيع واحد والانتظار لفترة معينة ، وفي الحالة الثانية - تحتاج إلى تقديم العديد من التوقيعات. يمكن للمستخدمين اللجوء إلى أحد الخيارات ، بينما لن يتم الكشف عن شروط الخيار الثاني.
التطبيق العملي للماجستير
في الحالة الأولى ، يمكن استخدام MAST من أجل تنفيذ أمثل لـ HTLC (عقود قفل الوقت المقسم) ، والتي يتم استخدامها في بروتوكول Lightning Network. في بلد آخر ، من أجل تنفيذ أفضل للضمان.
يجعل MAST من الممكن تنفيذ هياكل كبيرة جدًا باستخدام توقيع متعدد. سيساعد هذا في حل المشاكل الملحة مثل السرقة أو فقدان البيتكوين ، وفي بعض الحالات يسمح لك بالتخلي عن التخزين البارد.
بفضل MAST ، في كثير من الحالات ، يمكنك رفض عملية OP_RETURN لإضافة البيانات إلى blockchain Bitcoin. بدلاً من ذلك ، يمكنك تضمين هذه البيانات في شجرة ، وإذا لزم الأمر ، إثبات أنه تم تسجيل بيانات محددة في blockchain Bitcoin. في هذه الحالة ، لن تحتاج إلى زيادة حجم blockchain نفسه.
تحسين حجم البيانات
دعونا ننتبه إلى تحسين كمية البيانات التي تقع في النهاية في blockchain. نلقي نظرة فاحصة على الرسم البياني أدناه. يشير المحور الرأسي إلى كمية البيانات بالبايت ، بينما المقياس نفسه لوغاريتمي. يشير المحور الأفقي إلى عدد الشروط البديلة لإنفاق العملات المعدنية.

يشير الخط الأزرق إلى اعتماد حجم البيانات على عدد الشروط دون استخدام MAST. يشير الخط الأحمر إلى اعتماد حجم البيانات على عدد الشروط باستخدام MAST. الخط الأزرق هو حد حجم Bitcoin Script لـ P2SH. الخط الأخضر هو حد حجم Bitcoin Script في بنية الشاهد.
الاستنتاج بسيط. يسمح لك مفهوم MAST بتخزين بيانات أقل بكثير بنفس موثوقية التحقق ووظائف أكبر بكثير.
الآن دعنا ننتقل إلى الأسئلة المتداولة حول هذا الموضوع.
أسئلة متكررة
- هل سيتم تعيين الجذر الرئيسي في هيكل الشاهد أو أين سيتم إدراجه؟MAST Root مع البيانات التي تحددها سيتم الإشارة إليها في ScriptPubKey عند إخراج المعاملة. ستشغل هذه البيانات 25-35 بايت ، وعلى الأرجح ، سيتم تشفيرها بسهولة في عنوان Bitcoin المعتاد. وفي هيكل الشاهد ، حيث يتم إثبات ملكية العملات المعدنية ، سيتم الإشارة إلى Merkle Branch والبيانات التي تفي بشروط الإنفاق ، مثل التوقيعات الإلكترونية.
- هل سيتم توسيع العديد من OP_CODE المتاحة في لغة Bitcoin Script؟في الوقت الحالي ، لم يتضح الأمر بعد ، لأن الاقتراح قيد النظر وربما لا تزال هناك تغييرات وتحسينات إضافية. من المرجح أن تتم إضافة OP_CODE مثل OP_MERKLEBRANCHVERIFY لمرونة استخدام MAST. ربما سيقدمون شيئًا مفيدًا آخر ، لكن هذا لا يزال غير دقيق.
- هل هناك أي فرصة لدمج MAST في المستقبل القريب؟بالطبع هناك احتمال ، لكنه صغير. بعد كل شيء ، هذا التحديث مهم ، ولكنه ليس عاجلاً ، لذلك يمكنه الانتظار بينما يفكر المطورون في تحسينات البروتوكول الأخرى. في وقت لاحق ، يمكنهم دمج العديد من التحسينات في وقت واحد في تحديث واحد ، كما كان الحال مع SegWit.