⛓ دانشکدهٔ ۲ · مبانی بلاکچین
ساختار بلاک و زنجیرهشدن بلاکها
Block structure and chaining: header, previous hash, Merkle root, nonce
پیشنیازها: بلاکچین چیست؟ دفتر کل توزیعشده، نودها و اعتبارسنجها
📚 آموزش در سه سطح
از سطح ساده شروع کنید؛ اگر روشن بود، سطح بعد را بخوانید. سطح مناسب شما ذخیره میشود.
🌱 توضیح ساده
هر بلاک از دو بخش ساخته شده است: «سربرگ» و «بدنه». بدنه فهرست تراکنشهاست؛ مثل متن یک صفحه از دفتر. سربرگ خلاصهای کوتاه دربارهٔ همان صفحه است: چه زمانی نوشته شده، به کدام صفحهٔ قبلی وصل است و یک «اثر انگشت» از همهٔ تراکنشهای داخلش. این اثر انگشتها با تابع «هش» ساخته میشوند؛ تابعی که از هر دادهای، یک رشتهٔ کوتاه و ثابت میسازد و با کوچکترین تغییر در داده، کاملاً عوض میشود.
زنجیرهشدن را مثل دانههای تسبیحی تصور کنید که هر دانه، شمارهٔ سریال حکشده روی دانهٔ قبلی را روی خودش هم دارد. اگر کسی دانهٔ وسط را عوض کند، شمارهٔ آن عوض میشود و دیگر با شمارهای که روی دانهٔ بعدی حک شده نمیخواند. برای پنهانکردن تقلب باید همهٔ دانههای بعدی را هم از نو بسازد. در بلاکچین، هر سربرگ «هش سربرگ بلاک قبلی» را در خود دارد؛ پس تغییر یک بلاک قدیمی، زنجیره را از همان نقطه به بعد میشکند.
در بیتکوین ساختن هر بلاک تازه هم کار آسانی نیست و به محاسبهٔ بسیار زیادی نیاز دارد. بنابراین کسی که بخواهد یک تراکنش قدیمی را عوض کند، باید بلاک تغییرکرده و همهٔ بلاکهای بعد از آن را دوباره بسازد و آن هم سریعتر از کل شبکهای که همچنان بلاک تازه اضافه میکند. این همان چیزی است که دفتر را «دستکاریآشکار» و پرهزینه برای تقلب میکند.
📘 توضیح متوسط
سربرگ بلاک بیتکوین دقیقاً ۸۰ بایت است و شش فیلد دارد: نسخه (۴ بایت) که قابلیتهای پشتیبانیشده را نشان میدهد؛ هش بلاک قبلی (۳۲ بایت)؛ ریشهٔ مرکل (۳۲ بایت) که خلاصهٔ همهٔ تراکنشهاست؛ مُهر زمانی (۴ بایت)؛ فیلد bits (۴ بایت) که هدف دشواری را به شکل فشرده نگه میدارد؛ و نانس (۴ بایت) که ماینر آن را عوض میکند تا هش سربرگ از هدف کوچکتر شود. هش خود بلاک در سربرگ ذخیره نمیشود؛ هر نود آن را با دو بار اجرای SHA-256 روی همین ۸۰ بایت محاسبه میکند.
ریشهٔ مرکل از «درخت مرکل» به دست میآید: ابتدا هش هر تراکنش محاسبه میشود، سپس هشها دوتادوتا کنار هم گذاشته و دوباره هش میشوند، و این کار تا رسیدن به یک هش واحد ادامه پیدا میکند. اگر تعداد هشها در یک سطح فرد باشد، بیتکوین آخرین هش را تکرار میکند. فایدهٔ بزرگ این ساختار «اثبات مرکل» است: برای اثبات اینکه یک تراکنش در بلاکی با ۱۰۲۴ تراکنش وجود دارد، بهجای همهٔ تراکنشها فقط حدود ۱۰ هش لازم است، چون ۲ به توان ۱۰ برابر ۱۰۲۴ است. کلاینتهای سبک دقیقاً از همین روش استفاده میکنند.
نخستین تراکنش هر بلاک «تراکنش پاداش» (Coinbase) است که ورودی واقعی ندارد و پاداش بلاک بهاضافهٔ کارمزدهای تراکنشهای همان بلاک را به ماینر میدهد. پاداش بیتکوین در آغاز ۵۰ بیتکوین بود و هر ۲۱۰ هزار بلاک (تقریباً چهار سال) نصف میشود؛ از آوریل ۲۰۲۴ برابر ۳٫۱۲۵ بیتکوین است. اندازهٔ بلاک هم محدود است: پس از SegWit، سقف بلاک بر حسب «وزن» تعریف میشود و حداکثر ۴ میلیون واحد وزن است.
🔬 توضیح تخصصی
فضای نانس فقط ۳۲ بیت است، یعنی حدود ۴٫۳ میلیارد حالت؛ سختافزارهای امروزی این فضا را در کسری از ثانیه تمام میکنند. به همین دلیل ماینرها فیلدهای دیگری را هم تغییر میدهند: «اکسترانانس» در تراکنش پاداش (که ریشهٔ مرکل را عوض میکند)، مهر زمانی و برخی بیتهای فیلد نسخه (version rolling). مهر زمانی هم آزاد نیست: باید از میانهٔ مهرهای زمانی ۱۱ بلاک قبلی بزرگتر باشد و نودها بلاکی را که بیش از دو ساعت از زمان شبکه جلوتر باشد نمیپذیرند. بنابراین ترتیب بلاکها را ارتفاع و پیوند هشها تعیین میکند، نه لزوماً مهر زمانی؛ گاهی مهر زمانی یک بلاک از بلاک قبلیاش کمتر است.
تکرار آخرین هش در درخت مرکل بیتکوین یک ظرافت امنیتی داشت: میشد دو فهرست تراکنش متفاوت ساخت که ریشهٔ مرکل یکسانی تولید کنند (آسیبپذیری CVE-2012-2459) و نرمافزار نود با بررسی تراکنشهای تکراری آن را مهار کرد. درس کلی این است که ساختار دادهای که فقط «بهنظر» یکبهیک است، باید از نظر رمزنگاری هم یکبهیک باشد. همچنین در SegWit دادههای امضا (witness) از محاسبهٔ txid بیرون آمد و در یک ریشهٔ مرکل جداگانه قرار گرفت که تعهد آن در تراکنش پاداش ثبت میشود؛ به این ترتیب سربرگ ۸۰ بایتی بدون تغییر ماند و ارتقا بهصورت سازگار با نسخههای قبلی انجام شد.
بلاکچینهای دیگر ساختار متفاوتی دارند. سربرگ اتریوم بهجای یک ریشه، چند ریشه دارد: ریشهٔ وضعیت (stateRoot) که خلاصهٔ موجودی و حافظهٔ همهٔ حسابهاست، ریشهٔ تراکنشها و ریشهٔ رسیدها؛ این ریشهها از درخت «مرکل پاتریشیا» ساخته میشوند. اتریوم پس از ادغام نانس اثبات کار ندارد و فیلد مربوط به آن صفر است. نکتهٔ مشترک همهٔ این طراحیها این است که سربرگ کوچک به کل دادهٔ بلاک «متعهد» میشود؛ هر کس سربرگ معتبر را داشته باشد، میتواند با یک اثبات کوتاه نشان دهد که دادهای خاص بخشی از آن بلاک هست یا نیست.
🌍 مثال واقعی: سربرگ بلاک پیدایش بیتکوین (۳ ژانویهٔ ۲۰۰۹)
بلاک پیدایش بیتکوین تنها بلاکی است که بلاک قبلی ندارد؛ به همین دلیل فیلد «هش بلاک قبلی» در سربرگ آن ۳۲ بایتِ تمام صفر است. هش خود این بلاک با 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f شناخته میشود و صفرهای ابتدای آن نتیجهٔ اثبات کار است.
بلاک شمارهٔ ۱ در فیلد هش بلاک قبلی، دقیقاً همین مقدار را دارد. اگر در مرورگر بلاکچین (مثلاً mempool.space) بلاک ۱ را باز کنید، میبینید که به بلاک ۰ اشاره میکند؛ بلاک ۲ هم به بلاک ۱ اشاره میکند و همینطور تا آخرین بلاک امروز.
بلاک پیدایش فقط یک تراکنش دارد، پس ریشهٔ مرکل آن همان هش تراکنش پاداش است. پاداش ۵۰ بیتکوینی این بلاک بهدلیل نحوهٔ نوشتهشدن کد اولیه هرگز قابل خرج نیست؛ ظرافتی که نشان میدهد قواعد واقعی شبکه همان کدی است که نودها اجرا میکنند.
🔤 واژگان تخصصی
بخش کوچک و ثابت بلاک (در بیتکوین ۸۰ بایت) که شامل نسخه، هش بلاک قبلی، ریشهٔ مرکل، مهر زمانی، دشواری و نانس است و هش بلاک از آن محاسبه میشود.
مثال: کلاینت سبک فقط سربرگها را دانلود میکند؛ حجم سربرگهای بیتکوین در طول سالها فقط در حد چند ده مگابایت است.
فیلدی در سربرگ که هش سربرگ بلاک قبلی را نگه میدارد و بلاکها را به هم زنجیر میکند.
مثال: تغییر یک تراکنش در بلاک ۱۰۰ هش آن را عوض میکند و پیوند بلاک ۱۰۱ را میشکند.
هش نهایی درختی که از هشکردن جفتجفت هش تراکنشها ساخته میشود و به همهٔ تراکنشهای بلاک متعهد است.
مثال: جابهجاکردن ترتیب دو تراکنش هم ریشهٔ مرکل را تغییر میدهد.
عددی ۳۲ بیتی در سربرگ که ماینر آن را تغییر میدهد تا هش سربرگ از هدف دشواری کوچکتر شود.
مثال: ماینر میلیاردها نانس را امتحان میکند و وقتی تمام شد، اکسترانانس را در تراکنش پاداش عوض میکند.
نخستین تراکنش هر بلاک که ورودی واقعی ندارد و پاداش بلاک و کارمزدها را به تولیدکنندهٔ بلاک میدهد.
مثال: تیتر روزنامهٔ تایمز در تراکنش پاداش بلاک پیدایش نوشته شده است.
🔑 نکات کلیدی
- هر سربرگ هش سربرگ قبلی را دارد؛ تغییر یک بلاک قدیمی زنجیره را از همان نقطه به بعد میشکند.
- سربرگ بیتکوین ۸۰ بایت و شامل نسخه، هش قبلی، ریشهٔ مرکل، زمان، bits و نانس است؛ هش بلاک از همین ۸۰ بایت با SHA-256 دوگانه محاسبه میشود.
- ریشهٔ مرکل به همهٔ تراکنشها متعهد است و اثبات حضور یک تراکنش فقط حدود log₂(n) هش لازم دارد.
- نانس ۳۲ بیتی کافی نیست؛ ماینرها اکسترانانس، زمان و بیتهای نسخه را هم تغییر میدهند.
- ترتیب بلاکها را پیوند هشها و ارتفاع تعیین میکند، نه مهر زمانی.
⚠️ اشتباهات رایج
- تصور اینکه هش هر بلاک داخل خود بلاک ذخیره شده است؛ هش از سربرگ محاسبه میشود و فقط بلاک بعدی آن را نگه میدارد.
- فکر اینکه برای تقلب کافی است فقط یک بلاک را عوض کرد؛ باید همهٔ بلاکهای بعدی هم دوباره ساخته شوند و از شبکه جلو زد.
- اعتماد به مهر زمانی بلاک بهعنوان ساعت دقیق؛ این فیلد چند ساعت انعطاف دارد و ممکن است حتی از بلاک قبلی کمتر باشد.
- یکیدانستن ریشهٔ مرکل با هش کل بلاک؛ ریشهٔ مرکل فقط خلاصهٔ تراکنشهاست و خودش یکی از فیلدهای سربرگ است.
🛠 تمرین عملی: دنبالکردن زنجیرهٔ هشها در چند بلاک
- در mempool.space بلاکی دلخواه، مثلاً بلاک ۸۴۰۰۰۰، را باز کنید و هش آن را یادداشت کنید.
- بلاک بعدی (۸۴۰۰۰۱) را باز کنید و در جزئیات آن، فیلد هش بلاک قبلی (Previous block) را پیدا کنید.
- این دو مقدار را مقایسه کنید و همین کار را برای یک جفت بلاک دیگر تکرار کنید.
- ریشهٔ مرکل و تعداد تراکنشهای هر دو بلاک را بنویسید و حساب کنید اثبات مرکل برای هر کدام تقریباً چند هش لازم دارد.
- در آزمایشگاه هش آکادمی یک جمله را هش کنید، سپس فقط یک حرف آن را عوض کنید و ببینید چرا تغییر یک تراکنش، ریشهٔ مرکل و هش بلاک را عوض میکند.
✅ معیار درستی: هش بلاک ۸۴۰۰۰۰ باید دقیقاً با فیلد هش بلاک قبلی در بلاک ۸۴۰۰۰۱ یکسان باشد؛ برای بلاکی با حدود ۴۰۰۰ تراکنش، اثبات مرکل حدود ۱۲ هش لازم دارد (۲ به توان ۱۲ برابر ۴۰۹۶).
🔒 در هیچ تمرینی از سرمایهٔ واقعی، عبارت بازیابی (Seed Phrase)، کلید خصوصی یا اتصال کیف پول اصلی استفاده نکنید.
📝 آزمون تطبیقی
هر بار ۵ سؤال از بانک ۹ سؤالی این درس انتخاب میشود؛ سؤالهایی که قبلاً اشتباه زدهاید زودتر برمیگردند. حدنصاب قبولی ۸۰٪ (۴ از ۵) است و درس بعد با قبولی باز میشود.
✍️ پرسش تشریحی
توضیح دهید هش بلاک قبلی و ریشهٔ مرکل چگونه با هم کار میکنند تا تغییر حتی یک ساتوشی در یک تراکنش قدیمی آشکار شود. نقش اثبات کار در پرهزینهکردن پنهانسازی این تغییر را هم بگویید.
بعد از نوشتن، پاسخ خود را با این معیارها بسنجید
خودارزیابی: هر نکتهای را که پاسخ شما بهروشنی پوشش داده علامت بزنید.
🤖 دستیار آموزشی
دستیار آفلاین آکادمی: پاسخها فقط از متن درسها و واژگان همین آکادمی پیدا میشوند و منبع هر پاسخ نشان داده میشود. هوش مصنوعی مولد نیست، حدس نمیزند و هیچ سیگنال خرید و فروشی نمیدهد.
📎 منابع مطالعاتی
- Bitcoin Developer Reference — Block Chain (block headers)
- Bitcoin: A Peer-to-Peer Electronic Cash System
- ethereum.org — Blocks
🏁 معیار تسلط بر این درس: بتوانید شش فیلد سربرگ بیتکوین را نام ببرید، نقش هر کدام را بگویید و اندازهٔ تقریبی اثبات مرکل را برای یک بلاک مشخص حساب کنید.