حتى الآن رأينا أن كتل بيتكوين مترابطة تشفيريًا وأن لكل واحدة منها معرفًا فريدًا، يُعرف باسم تجزئة الكتلة.

لكن ما زلنا نفتقد إلى فهم أمر أساسي: من أين يأتي ذلك المعرف؟ ما المعلومات التي تُستخدم لحسابه؟ ولماذا لا يمكننا تعديل كتلة دون تغيير تجزئتها؟

للإجابة عن ذلك، علينا أولًا أن نميّز بين جزأين من كتلة بيتكوين: المعاملات التي تحتويها ورأسها، الذي يُسمّى أيضًا block header.

الترويسة بنية صغيرة تتكون من 80 بايتًا بالضبط، وتحتوي على ستة حقول تتضمن معلومات أساسية عن الكتلة.

يأخذ Bitcoin هذه البايتات الثمانين، المرتبة وفق تنسيق دقيق، ويطبّق عليها دالة SHA-256 التشفيرية مرتين متتاليتين. والناتج قيمة من 256 بتًا، نراها عادةً ممثلةً بـ 64 محرفًا سداسيًا عشريًا.

هذا الناتج هو تجزئة الكتلة.

ما المعلومات التي تتضمنها هذه البايتات الثمانون؟

الحقل الأول هو الإصدار، ويشغل 4 بايتات، ويشير إلى معلومات بشأن قواعد الإجماع التي تعلنها الكتلة.

أما الحقل الثاني، فهو مهم للغاية: تجزئة الكتلة السابقة (Previous Block Hash)، ويشغل 32 بايتًا.

يحتوي هذا الحقل على تجزئة ترويسة الكتلة السابقة. فعلى سبيل المثال، تتضمن الكتلة 1 مرجعًا إلى تجزئة الكتلة 0، بينما تتضمن الكتلة 2 مرجعًا إلى الكتلة 1.

وهكذا تنشأ الصلة التشفيرية بين الكتل.

الحقل الثالث، ويشغل أيضًا 32 بايتًا، هو جذر Merkle (Merkle Root).

وهنا يظهر اختلاف جوهري: لا يضع Bitcoin جميع المعاملات داخل الترويسة.

بل يحسب معرّفاتها التشفيرية ويدمجها وفق بنية تُسمى شجرة Merkle، إلى أن يصل إلى تجزئة نهائية واحدة: جذر Merkle.

يعتمد هذا الجذر على المعاملات المُدرجة وترتيبها. فإذا تغيرت أي معاملة، تغير جذر Merkle أيضًا، إلا في حالة تصادم تشفيري مستبعدة للغاية.

وبما أن هذا الجذر جزء من الترويسة، فإن تغيير المعاملات يغيّر أيضًا البيانات المستخدمة لحساب تجزئة الكتلة.

لدينا حتى الآن ثلاثة حقول: الإصدار، وتجزئة الكتلة السابقة، وجذر Merkle.

أما الحقول الثلاثة الأخرى فهي الطابع الزمني، والهدف المُرمّز للتعدين (bits)، والـ nonce، ويشغل كل منها 4 بايتات...

يمثل الطابع الزمني التاريخ والوقت اللذين يحددهما المُعدّن، مع خضوعهما لقواعد تحقق معينة.

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

والـ nonce هو رقم يمكن للمُعدّنين تغييره لإنتاج نتائج مختلفة عند حساب التجزئة.

ماذا يحدث إذن عند حساب التجزئة؟

لا يتعامل Bitcoin مع هذه الحقول الستة بوصفها نصًا. بل يعالجها كسلسلة من 80 بايتًا، مُرمّزة وفقًا لقواعد البروتوكول.

وعند تطبيق SHA-256 عليها مرتين، ينتج عنها ناتج تشفيري.

إذا غيّرنا معلومة واحدة فقط في الترويسة، فستكون النتيجة مختلفة تمامًا في العادة.

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

لذلك يجرّب المُعدّنون قيمًا مختلفة للـ nonce، وعند الحاجة يغيّرون بيانات أخرى مسموحًا بها وتؤثر في الترويسة، بحثًا عن نتيجة تستوفي هذا الشرط.

يتطلب العثور على هذه النتيجة عملًا حاسوبيًا. أما التحقق منها، فهو سهل نسبيًا.

تحقّق عملي | كيف ترتبط كتلتان

سنستخدم كتلتين حقيقيتين من Bitcoin.
الخطوة 1. افتح كتلة التكوين، المحددة بالارتفاع 0:

https://mempool.space/es/block/0

ابحث عن تجزئتها. فهي المعرّف التشفيري لتلك الكتلة الأولى.

الخطوة 2. استعلم الآن مباشرةً عن البيانات التقنية للكتلة 1 عبر واجهة برمجة التطبيقات Mempool:

https://mempool.space/api/block/00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048

يستخدم هذا العنوان خدمةً تُرجع بيانات الكتلة بتنسيق JSON، بدلًا من عرضها في الواجهة المعتادة للمستكشف.

الخطوة 3. ابحث عن الحقل المسمى previousblockhash.

يجب أن تكون قيمته: 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

قارِنها بتجزئة كتلة التكوين التي وجدتها في الخطوة الأولى.

ستتحقق من أن القيمتين متطابقتان تمامًا...

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

وإذا كررت الإجراء مع الكتل التالية، فستجد آلية الربط نفسها.

تمثل كتلة التكوين استثناءً: فبما أنه لا توجد كتلة سابقة لها، تستخدم ترويستها 32 بايتًا من الأصفار في ذلك الحقل.

ماذا يثبت كل هذا؟
يثبت أن تجزئة الكتلة ليست رقمًا اختير عشوائيًا ولا مجرد تسمية وضعها مستكشف الكتل.

بل هي ناتج حساب تشفيري يُجرى على معلومات محددة في ترويستها.

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

نعرف الآن البيانات التي تدخل في الحساب وسبب ارتباطها بعضها ببعض.

لكن ما زال هناك سؤال حاسم: إذا كان العثور على تجزئة صالحة يعتمد على إجراء محاولات عديدة، فكيف تحافظ Bitcoin على متوسط فاصل زمني يقارب عشر دقائق بين الكتل؟

لفهم ذلك، نحتاج إلى تحليل آلية عمل صعوبة التعدين....

$BTC $ETH $USDC

#hash #bitcoin #bloques