همهی ما میدانیم که بیت کوین بر بستر بلاک چین است. اما بلاک چین چیست؟ بهطور دقیقتر، چگونه میتوانیم اجزای بلاک چین را تصور کنیم؟
بلاک چین زنجیرهای از ساختارهای اطلاعاتی به نام بلاک است. هر بلاک را میتوان صفحهای از یک دفتر کل در نظر گرفت. هربلاک از اجزای مختلفی تشکیل شده است که بهطور دقیقتر این اجزا را میتوان در دو بخش بلاک هدر (Block Header) و بدنهی بلاک (Block Body) قرار داد.
بلاک هدر (Block Header)
بلاک هدر به شش جز تقسیم میشود:
• شمارهی نسخهی برنامه (Bitcoin Version Number)
• هشِ بلاک قبلی (Previous Block Hash)
• ریشهی هشِ درخت درهم سازی یا درخت مرکل (Merkle Tree)
• زمانسنج از تاریخ ۱ ژانویهی ۱۹۷۰ (Timestamp Unix)
• هدف سختی فعلی (Difficulty Target)
• عدد تصادفی نانس (Nonce)
شمارهی نسخهی برنامه
شمارهی نسخهی برنامه در بسیاری از موارد اهمیتی ندارد. بههرحال یک ماینر با یک شمارهی نسخه، میتواند مشخص کند که از تصمیمات کدام پروتکل پشتیبانی میکند.
هشِ بلاک قبلی
هشِ بلاک قبلی در اصطلاح زنجیرهی بلاک چین نامیده میشود. از آنجایی که بلاک جدید، هش بلاک قبلی را دربردارد، بلاکهای بلاک چین براساس یکدیگر بنا میشوند. بدون این مولفه، هیچ ارتباط و گاهشماری بین بلاکها شکل نمیگیرد.
ریشهی درخت درهمسازی
همهی تراکنشهای موجود در بلاک میتواند در یک هش خلاصه شود. این هش، ریشهی هشِ درخت درهمسازی است.
ثانیهشمار از تاریخ اول ژانویهی ۱۹۷۰
یک تایم استمپ در خودِ بلاک. مقدار این ثانیهشمار از ابتدای روز اول ژانویه ۱۹۷۰ است.
هدف سختی فعلی
هدفِ سختی نشان میدهد که هشِ فعلی، چهاندازه باید کوچک باشد تا اعتبار آن توسط ماینرها تائید شود. بهعبارت دیگر یک هش، سایزی را به بیت دارد که باید مساوی یا کوچکتر از هشِ هدف باشد. یک هش با تعداد زیادی صفر در ابتدا، کوچکتر از هشِ بدون صفر در ابتدا میباشد.
نانس
نانس، متغیر افزوده شده توسط الگوریتم اثبات کار است. بدین طریق ماینر هشِ معتبری را که کمتر از هدف سختی میباشد، حدس میزند.
شش جزء ذکر شده بلاک هدر را تشکیل میدهند. بلاک هدر نقش بنیادی را برای بیت کوین دارد؛ بدلیل اینکه تمام بلاکها را بهیکدیگر مرتبط میسازد. شما میتوانید آن را مانند اتاق فرمان تصور کنید؛ در این اتاق اسنادی موجود است که از طریق کنترل شبکه مشخص میکند کدام کامیون به کدام سمت برود.
بدنهی بلاک (Block Body)
بدنهی بلاک، همانند فضای بارگیری کامیون است که شامل تمام تراکنشهای تایید شده میشوند.
وقتی که ماینر یک بلاک را میسازد، در واقع تراکنشها را تایید میکند. به این ترتیب، یک ماینر بررسی میکند که فرستنده بیت کوین بهاندازهی کافی بیت کوین برای خرج کردن دارد. ماینر، این اطلاعات را از طریق بلاک چین بررسی میکند. ماینر با بررسی اطلاعات گذشته آگاه میشود که آیا فرستندهی ۱۰ بیت کوین قبلاً ۱۰ بیت کوین دریافت کرده است؟
تراکنشهای بلاک فقط در یک لیست موجود نمیباشد بلکه بهاصطلاح در درخت درهمسازی هم موجود است.
درخت درهمسازی چیست؟
درخت درهمسازی یا درخت مرکل اسمش را از رالف مرکل ریاضیدان معروف گرفته است. کشف این ریاضیدان این بود که اطلاعات زیادی را میتوان توسط یک هش ارائه داد. برای این امر، در وهلهی اول، اطلاعات (در اینجا تراکنشها) بهصورت منفرد هش میشوند؛ سپس همهی هشها دوباره هش میشوند و باهم ادغام میشوند. سرانجام درخت مرکل در یک هش جمع میشود. آخرین هش را ریشهی درخت درهمسازی هم مینامند. ریشهی هش، اطلاعات بالاتر همچون «برگها» (تراکنشها) و «شاخهها» (هشِ تراکنشها) را در یک سلسله متغییر نسبتاً کوتاه بهصورت خلاصه ارائه میدهد.
توضیح نویسنده: امکان رسیدن به ورودی (تراکنشها) از طریق خروجی در تابع هش وجود ندارد.
مادامی که اطلاعات شاخهها و برگها در دسترس باشند، ساخت یک ریشهی هش کار بسیار سادهای است. عملکرد تابعِ هش را بیاد بیاوریم؛ عملکردی سریع و واضح در یک مسیر دارد و شکست مسیر آن غیرممکن است. اگر ریشهی هش معلوم و تراکنشها نامعلوم باشد، حدس تراکنشها غیرممکن است.
بنابراین ریشهی هش بهتنهایی کافی نیست و باقی بلاک هم باید ذخیره شود. بنابراین ماینرها هر زمان میتوانند از طریق هشِ محتوای داخل بلاک، ریشهی هش را تائید کنند. تا زمانی که تابع هش یکسان باشد ماینرها در ازای اطلاعات وارد شده، به هش یکسان میرسند. این امر بسیار مفید است زیرا آنها فقط در صورت همسطح بودن هش [ یا از یک تابع هش استفاده کنند] میتوانند اطلاعات را بررسی کنند.
ماینینگ؛ فرایندی برای جستجوی هش منحصربهفرد
در این زمینه، درک استخراج مبتنی بر اثبات کار راحتتر است؛ در هنگام ماینینگ، بلاک هدر به تدریج تغییر میکند تا به هشِ منحصربهفرد برسد. بلاک هدر شامل ۵ ثابت و ۱ متغیر است. ثابتها شامل شمارهی نسخهی برنامه، هشِ بلاک قبلی، ریشهی هش بلاک، تایم استمپ و سختی هدف بهمنظور جستجوی ماینر میباشد.
متغیر، نانس است که افزایش پیدا میکند. سپس ماینر اطلاعات را هش میکند تا از هدف سختی پایینتر باشد. اگر مقدار هش از سختی هدف بزرگتر باشد، ماینر نانس را تغییر میدهد و هش جدید را میسازد و دوباره بررسی میکند. این فرایند تا جایی ادامه پیدا میکند که هش، پایینتر از سختی هدف باشد یا بلاکی را که قبلاً توسط شبکه (توسط ماینر دیگر) هش شده را دریافت کند. سپس بلاک جدید را میسازد و از این هش برای بلاک بعدی استفاده میکند (بهعنوان «هش بلاک قبلی» در بلاک هدر استفاده میشود).
ماینینگ یک فرایند بسیار تکراری بهمنظور یافتن هش منحصربهفرد است. زمانی که هش پیدا شود، بازی تازه شروع میشود. بهطور میانگین هر ۱۰ دقیقه یک بلاک ساخته میشود. بهدلیل اینکه سختی تطابق پیدا میکند، بهطور میانگین این مقدار یکسان است.
ویژگی خاص این فرایند آن است که هشِ منحصربهفرد، فقط با حدس زدن پیدا میشود. این روش محاسبات کامپیوتری هزینه زیادی در بردارد و در نتیجه انرژی زیادی را میطلبد.
در اینجا مثالی از هش بلاک چین بیت کوین آورده شده است:
۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۹۴bfa۴edb۱۲۴۵c۳۴۷e۴۲۴۵۲e۴۴۱۸e۹fe۵a۱d۲۴e۳۳۵b۱۶
هشهای بلاک؛ قیاسی از عروسکهای تودرتوی ماتروشکا
ساختار یک بلاک را میتوان به عروسکهای ماتروشکا تشبیه کرد. کوچکترین عروسک، تراکنش هش نشده است، عروسک بعدی، هش تراکنش است. پس از آن دو تراکنش با هم ترکیب میشوند و دوباره هش میشوند و این فرایند بیشتر و بیشتر ادامه میابد؛ در آخر فقط یک هش باقی میماند؛ ریشهی هش درخت درهمسازی، که میتوان آن را همانند بزرگترین عروسک تشبیه کرد.