ساختار بلاک در بیتکوین

ساختار بلاک در بیتکوین
ساختار بلاک در بیتکوین

در پست قبل، در زمینه‌ی نحوه‌ی انجام تراکنش در بیت‌کوین صحبت کردیم، در این پست می‌خواهیم به بررسی ساختار بلاک در بیتکوین بپردازیم، تمامی اطلاعاتی که در پست قبلی مطرح شد، در یک بلاک بیت‌کوین ذخیره میگردد. این بلاک‌ها ظرفیتی ۱ مگابایتی دارند و می‌توانند در حدود ۲۵۰۰ تراکنش بیتکوین را در خود جای دهند. این بلاک‌ها از بخش‌های مختلفی تشکیل شده‌اند که به صورت کلی می‌توان آن‌ بخش‌ها را به دو دسته‌ی:

  1. بلاک هدر (Block Header)
  2. بدنه بلاک (Block Body)

تقسیم‌بندی کرد. سایز بلاک هدر 80 بایت است و این بخش بر اساس ساختار بلاک در بیتکوین به شش جز تقسیم می‌شود:

  1. شماره‌ی نسخه‌ی برنامه (Bitcoin Version Number)
  2. هشِ بلاک قبلی (Previous Block Hash)
  3. هشِ ریشه‌ی درخت مرکل (Merkle Tree)
  4. زمان‌سنج (Timestamp Unix)
  5. هدف سختی فعلی (Difficulty Target)
  6. عدد تصادفی نانس (Nonce)

مابقی اطلاعات تراکنش مانند لیستی از ورودی‌ها و خروجی‌ها در مابقی فضای بلاک که با نام تراکنش شناخته می‌شود قرار می‌گیرند. در میان این داده‌ها، بیشترین فضا و حجم را داده‌های امضا تشکیل می‌دهند، چیزی در حدود 65 درصد کل سایز بلاک.

ساختار بلاک در بیتکوین را می‌توان شکل زیر در نظر گرفت:

ساختار بلاک در بیتکوین
ساختار بلاک در بیتکوین

همانطور که در شکل بالا می‌بینید، در قسمت هدر هر بلاک، ۶ داده قرار دارد و در قسمت بدنه، داده‌های مربوط به تراکنش‌ها.

این ساختار بلاک در بیتکوین، ۲ مشکل را ایجاد می‌کند، در درجه اول موضوع انعطاف‌پذیری می‌باشد و دیگری سایز بلاک و حجم بالای امضای دیجیتال. این موارد باعث شد، برنامه‌نویسان بیتکوین، به پروتکول SegWit فکر کنند.

در زمینه‌ی انعطاف‌پذیری می‌توان این توضیح را داد:

گیرنده بیتکوین خودش هش ‏را به صورت جداگانه محاسبه می‌کند. اگر هشی که کامپیوتر گیرنده محاسبه کرده با هش فرستنده برابر باشد به این معنا ‏خواهد بود که محتوای پیام هیچ‌گونه تغییری نکرده است‎.‎ اگر امضای دیجیتال را که در حقیقت رشته‌ای از اعداد و حروف است را به ‌نحوی تغییر دهیم که به لحاظ ریاضی ارزش آن تغییر ‏نکند، شناسه‌ی تراکنش عوض خواهد شد بدون آن که محتوای تراکنش تغییر کند، به این خاصیت انعطاف‌پذیری تراکنش‌های ‏بیتکوین گفته می‌شود.