هذا هو الجزء الثالث من سلسلة المقالات الفنية حول مواثيق البيتكوين بواسطة Cointelegraph Research. لقراءة المقال السابق اضغط هنا.
يعتمد SIGHASH_ANYPREVOUT، كما هو مقترح في BIP 118، على مفهوم SIGHASH_NOINPUT السابق المذكور في ورقة Lightning Network لعام 2015 التي أعدها جوزيف بون وثاديوس دريجا، والذي تم اقتراحه رسميًا لاحقًا بواسطة جوزيف بون في القائمة البريدية لتطوير البيتكوين في فبراير 2016.
SIGHASH_ANYPREVOUT ليس كود تشغيل جديدًا ولكنه قيمة جديدة مقترحة لعلامة SIGHASH، مصممة ليتم نشرها كترقية شوكة ناعمة إلى Bitcoin. يتم إلحاق علامة SIGHASH بالتوقيع وتحدد أجزاء المعاملة التي تم توقيعها وسيتم فحصها بواسطة كود تشغيل CHECKSIG. يتم اختيار العلامة المحددة بواسطة الموقّع، ولا يتم فرضها بواسطة scriptPubKey. نظرًا للتفاصيل الفنية المتعلقة بإمكانية الترقية في softfork، فإن اقتراح SIGHASH_ANYPREVOUT يمتد فقط إلى الإنفاق من عناوين الجذر.
توجد بالفعل مجموعة متنوعة من أوضاع SIGHASH القياسية، كما هو موضح في الشكل 1. إذا تم تعيين العلامة على SIGHASH_ALL، فيجب أن يغطي التوقيع جميع المدخلات، وجميع المخرجات، ونقطة النهاية المحددة التي يتم إنفاقها، وبالتالي ربط التفويض بهذا UTXO بالضبط. النقطة الخارجية هي مزيج من معرف المعاملة وفهرس الإخراج اللذين يحددان معًا بشكل فريد UTXO الذي تستهلكه المعاملة. باستخدام SIGHASH_NONE، يلزم توقيع المدخلات فقط، مما يترك المخرجات غير مقيدة. يقوم المتغير SIGHASH_SINGLE بتسجيل جميع المدخلات، ولكن فقط المخرجات في نفس الفهرس مثل الإدخال الذي يتم توقيعه. يقدم معدِّل ANYONECANPAY المزيد من المرونة من خلال السماح بتوقيع مدخل واحد بشكل مستقل عن الآخرين. والأهم من ذلك، أن أيًا من هذه الأوضاع الحالية لا يسمح للتوقيع بحذف الالتزام بالنقطة الخارجية. هذا القيد هو ما يزيله SIGHASH_ANYPREVOUT.
يحدد BIP-118 متغيرين ANYPREVOUT يختلفان في مقدار المخرجات السابقة التي تم حذفها من الملخص، والملخصة في الشكل 2. ضمن SIGHASH_ANYPREVOUT، يتم استبعاد النقطة الخارجية من الملخص، لكن التوقيع لا يزال ملتزمًا بالمبلغ وscriptPubKey للمخرجات السابقة، بالإضافة إلى nSequence للإدخال. ضمن SIGHASH_ANYPREVOUTANYSCRIPT، يتم أيضًا استبعاد المبلغ وscriptPubKey، مما يعني أن التوقيع غير مرتبط ببرنامج القفل النصي للمخرجات المستهلكة على الإطلاق. تتبع جميع الالتزامات الأخرى البنية القياسية لرسالة توقيع Taproot وتعتمد على العلامة الأساسية المحددة، مثل SIGHASH_ALL أو SIGHASH_SINGLE.

نظرًا لحذف النقطة الخارجية من الملخص، يمكن للتوقيع نفسه أن يأذن بإنفاق أي UTXO متوافق يلبي الحقول الملتزم بها المتبقية. على سبيل المثال، معاملة تم توقيعها مسبقًا باستخدام ANYPREVOUT | يمكن إعادة استخدام الكل لإنتاج مخرجات بقيمة 0.5 بيتكوين إذا تلقى نفس العنوان لاحقًا UTXO آخر بقيمة 0.5 بيتكوين، حتى لو لم يعد المفتاح الخاص المستخدم لإنشاء التوقيع الأصلي متاحًا. إذا كان UTXO الجديد يحمل أكثر من 0.5 بيتكوين، فسيتم فقدان الفائض لصالح القائمين بالتعدين ما لم يتضمن التوقيع الأصلي مخرجات تغيير. خاصية إعادة الربط هذه هي ما يجعل ANYPREVOUT مفيدًا لبروتوكولات الطبقة الثانية، حيث يجب أن تنطبق نفس المعاملة الموقعة مسبقًا على العديد من UTXOs المحتملة على السلسلة دون الحاجة إلى توقيعات جديدة لكل منها.
بالنسبة للتطبيقات المشابهة للعهد، تحافظ متغيرات ANYPREVOUT على الالتزام بـ scriptPubKey الخاص بالمخرجات السابقة، وعادةً ما تكون الأكثر صلة. إنها تسمح بإعادة استخدام التوقيعات عبر UTXOs المتوافقة مع ضمان بقاء الأموال مرتبطة بنفس نص القفل. يقوم ANYPREVOUTANYSCRIPT بإزالة هذا الارتباط بالكامل وبالتالي فهو أقل ملاءمة لتطبيقات نمط العهد.
على غرار OP_CTV، تعمل SIGHASH_ANYPREVOUT على تحسين المنطق الذي يمكن تحقيقه بالفعل من خلال المعاملات الموقعة مسبقًا ولكنها لا تتيح في حد ذاتها المواثيق المتكررة أو الاستبطان للمعاملات. بدلاً من ذلك، فهو يخفف الارتباط بين التوقيع وUTXO محدد، مما يسمح بإعادة استخدام التوقيع عبر العديد من UTXOs المتوافقة.
أشارت بعض الأبحاث أيضًا إلى أن إزالة التزام النقطة الخارجية يجعل إنشاءات المفتاح المسترد ممكنة – أي أنه يمكن اشتقاق المفتاح العام من توقيع ثابت وزوج رسائل بحيث يكون المفتاح الخاص المقابل غير معروف لأي شخص، مما يجعل مسار مفتاح UTXO غير قابل للصرف ويفرض أي إنفاق من خلال مسار البرنامج النصي. من شأنه أن يتجنب الحاجة إلى مفاتيح مؤقتة، والتي تكون مطلوبة بطريقة أخرى لجعل مسار المفتاح غير قابل للاستهلاك في الإنشاءات التي تعتمد على فرض مسار البرنامج النصي فقط. تظهر هذه الملاحظة في مواثيق البيتكوين: ثلاث طرق للتحكم في المستقبل بواسطة جاكوب سوامبو وآخرون. (2020)، على الرغم من أنه يظل بناءًا نظريًا وليس تصميمًا مقترحًا في BIP-118.
الخطر الأساسي المرتبط بتوقيعات SIGHASH_ANYPREVOUT هو إعادة تشغيل التوقيع. نظرًا لأن هذه التوقيعات لا تلتزم بنقطة خارجية محددة، يمكن استخدام نفس التوقيع لإنفاق UTXO مختلف عن الذي كان مقصودًا في الأصل، بشرط أن يلبي UTXO الجديد الحقول الملتزم بها المتبقية. يصبح هذا الخطر أكثر وضوحًا في تكوينات محددة: عند استخدام ANYPREVOUT | يتم استخدام SINGLE ويمكن إعادة ترتيب كميات الإخراج؛ عند وجود UTXO منفصل بنفس scriptPubKey والمبلغ، في حالة ANYPREVOUT؛ عندما يظهر نفس المفتاح العام في برنامج نصي متوافق، في حالة ANYPREVOUTANYSCRIPT؛ أو عندما يتمكن القائم بالتعدين من التأثير على طلب المعاملات وإدراجها لاستغلال هذه الظروف. ومع ذلك، تتطلب هذه السيناريوهات إما سوء استخدام متعمد أو فشل المستخدم أو المطور في مراعاة شروط إعادة التشغيل أثناء تصميم البروتوكول.
في مقالتنا التالية سنبدأ مناقشتنا لرموز التشغيل التي تعمل كأدوات داعمة. تعمل هذه على توسيع نطاق تعبير نص Bitcoin أو معالجة البيانات ولكنها لا تنفذ وظائف العهد ما لم يتم دمجها مع أكواد التشغيل الأخرى. في هذه الفئة التالية، سنناقش OP_CHECKSIGFROMSTACK و OP_CAT.













