Witness Data هي بيانات تُرفق بمُدخلات المعاملة للتحقق من شروط الإنفاق في SegWit. يشير المُدخل إلى عملات استُلمت سابقاً وتُنفَق الآن. قد يحتوي witness على توقيعات أو مفاتيح عامة أو سكربت. إنه جزء من المعاملة، وليس مكاناً آخر تحفظ فيه أموالك.
استلمت آنا Bitcoin وتريد الآن أن تدفع منه لبطرس. أنشأت الدفعة السابقة مُخرجاً: سجلاً بالمبلغ وشروط إنفاقه لاحقاً. تشير المعاملة الجديدة إلى ذلك المُخرج عبر أحد مُدخلاتها. لكن مجرد القول إن العملات لآنا لا يكفي. في الدفع المعتاد تنشئ المحفظة توقيعاً يمكن التحقق منه دون كشف المفتاح الخاص. المحفظة تطبيق أو جهاز لاستقبال البيتكوين وإرساله. المفتاح الخاص قيمة عددية سرية تُستخدم لإنشاء هذا التوقيع. مع SegWit تُقدّم هذه البيانات ضمن witness الخاص بالمُدخل. وجود التوقيع وحده لا يثبت صحته. [1] [4] [5]
تخيّل الفرق بين شرط «قدّم وثيقة سارية» والوثيقة التي تقدمها فعلاً. في Bitcoin لا يحكم شخص على الأمر، بل تتحقق القواعد من العلاقة. يشكل witness program جزءاً من الشرط المسجل في المُخرج السابق، وتحدد نسخته طريقة التقييم. أما witness فتقدمه المعاملة الجديدة التي تنفق ذلك المُخرج. تقنياً، هو قائمة مرتبة من عناصر البيانات لكل مُدخل. وليس تلقائياً برنامجاً قابلاً للتنفيذ أو نسخة من جميع العملات غير المنفقة. [1] [7]
قد يكشف witness توقيعاً أو مفتاحاً عاماً أو السكربت المستخدم، أي البرنامج الذي يصف شروط الإنفاق. يُستخدم المفتاح العام للتحقق من التوقيعات، ولا يلزم إبقاؤه سرياً. ليس صندوقاً مشفراً. يبقى مفتاحك الخاص لديك: تستخدمه للتوقيع ولا ترسله للشبكة بدلاً من التوقيع. لا يغني witness ولا التوقيع المنشور عن Seed Phrase، الكلمات المستخدمة لاستعادة المحفظة. إذا فقدت المفاتيح والنسخة الاحتياطية، فلن يعيد لك سجل المدفوعات العلني وحده القدرة على توقيع تحويلات جديدة. [1] [3] [4]
مستكشف الكتل تطبيق للبحث عن المعاملات والكتل في شبكة معينة. قد يعرض المستكشف wtxid بجوار txid. كلاهما قيمة تجزئة، أي بصمة قصيرة تُحسب من تمثيل دقيق للبيانات بتطبيق SHA-256 مرتين. يستخدم txid التمثيل دون witness، ويستخدم wtxid التمثيل الكامل معه. ليسا عنواني مستلم ولا دفعتين مختلفتين. إن لم يكن للمعاملة witness، يُستخدم التنسيق الأصلي ويتساوى المعرّفان. في Bitcoin Core v29.0 يعرض decoderawtransaction المعرّف الكامل في hash، وبيانات witness للمُدخل في txinwitness. [1] [7] [8]
قد تشير معاملة أخرى إلى سابقتها قبل تأكيدها. لو أمكن تغيير معرّف السابقة بمجرد تعديل بيانات التوقيع، لما عاد المرجع مطابقاً. تغيير witness وحده لا يغير txid، مما يفيد بروتوكولات تعتمد على معاملات مترابطة مثل Lightning Network. لكن ذلك لا يجعل المعاملة كلها غير قابلة للتغيير. قد تظل الحقول الأخرى أو المُدخلات القديمة دون SegWit مؤثرة في txid، ويجب أن يفي witness المعدّل بقواعد التحقق المناسبة. [1] [6]
ينتقل witness مع التمثيل الكامل للمعاملة، ويصبح جزءاً من بيانات الكتلة عند إدراجها. ليس تخزيناً مجانياً خارج السلسلة. يضيف البايت الزائد في تسلسل witness وزناً قدره 1 WU مقابل 4 WU للبايت الأساسي؛ WU وحدة وزن. تتحقق Full Node من القواعد باستقلال وتحتاج البيانات المعنية للتحقق من الإنفاق. الوزن الأقل لا يسمح بتجاوز الفحوص المطلوبة، ولا يعني أن البيانات لا تشغل مساحة تخزين. [1] [7]
في التنسيق الأقدم كانت أدلة الإنفاق تُكتب في scriptSig. يتطلب SegWit الأصلي من النسخة 0 أن يكون الحقل فارغاً، فالأدلة في witness. وهناك صيغة مغلّفة بـ P2SH، الطريقة الأقدم للدفع إلى شرط يحدده هاش سكربت. فيها يجب أن يحتوي scriptSig بالضبط على إدراج witness program المعني، لا تعليمات إضافية اعتباطية. وتبقى أدلة الإنفاق في witness. قد تتعدد طرق تمثيل الغرض نفسه، فلا يكفي اسم الحقل وحده لفهمه. [1] [5]
يقدم P2WPKH توقيعاً ومفتاحاً عاماً. تتحقق العقدة من مطابقة هاش المفتاح للشرط الأصلي وصحة التوقيع. يتيح P2WSH شرطاً يحدده هاش سكربت كامل. آخر عنصر في witness هو witnessScript، ويجب أن يطابق هاشه البرنامج الموجود في المُخرج. توفر العناصر السابقة بيانات البداية لتنفيذ السكربت، مثل التوقيعات. يحدد BIP 143 طريقة تركيب الرسالة الموقّعة لهذه النسخة، بما فيها قيمة المُخرج المنفق. مجرد قراءة البيانات بنجاح لا يثبت استيفاء الشروط. [1] [2] [5]
يستخدم Taproot صيغة witness الأصلية من النسخة 1، ويفرق بين الإنفاق بمسار المفتاح ومسار السكربت. قبل تحديد المسار يُستبعد annex إن وُجد، وهو حقل إضافي خاص؛ لكن بياناته تبقى محسوبة في الوزن ومشمولة بالتوقيع. إذا بقي عنصر واحد، يُفسَّر كتوقيع مسار المفتاح. يكشف مسار السكربت السكربت المستخدم وcontrol block، أي بيانات تثبت صلته بالمُخرج السابق، لا كتلة جديدة في البلوكشين. وتوفر العناصر السابقة إن وُجدت بيانات للسكربت. لا يمكن نقل قواعد النسخة 0 إلى هذه الحالة مباشرة. [3] [5]
الالتزام التشفيري (commitment) بصمة تربط البيانات بمحتواها المحدد. عندما يلزم هذا الالتزام ببيانات witness، يربطها BIP 141 ببقية الكتلة عبر Coinbase Transaction، المعاملة الأولى المخصصة لمكافأة المعدّن. تنتج شجرة من قيم wtxid جذراً يلخص البيانات المشمولة. يُستخدم wtxid صفري لمعاملة المكافأة في تلك الشجرة. يُجمع الجذر مع قيمة محجوزة بطول 32 بايت، ثم تطبّق التجزئة مرتين لينتج الالتزام المسجل في مُخرجها. إذا لم تتضمن أي معاملة witness، يكون الالتزام اختيارياً. إنه يربط الأدلة العلنية، وليس نسخة احتياطية للمفاتيح أو بديلاً عن التحقق نفسه. [1]
للحصول على صورة أوضح، اقرأ هذا المدخل مع SegWit, Block Weight, Bitcoin Script, Taproot, Bitcoin, Seed Phrase. تشير إلى هذا المدخل أيضًا Block Weight, Miniscript, Compact Block Filters.