توی قسمت قبلی فهمیدیم که منظور از عدم تمرکز چیه. حالا توی این بخش میخوام یکمی بیشتر در مورد ساختار خود بلاک صحبت کنم.

ساختار بلاک

همونطوری که آجرها اجزای سازنده یک خونه هستن، بلاک‌ها هم اجزای اصلی سازنده یک بلاک چین هستن. یک بلاک شامل داده‌های تراکنش و جزئیات مهم مربوط به ایجاد اون بلوکه. این اطلاعات میتونن یکسری متادیتا1 مثل زمان ایجاد بلاک و اطلاعات منحصر به فرد خود تراکنش هست. برای ایجاد یک بلاک، باید یک رکورد داشته باشیم که میخوایم ذخیرش کنیم.

بیاین با یه مثال بقیه بحث رو جلو ببریم. بلاک‌ها بسته به اینکه بلاک چین برای چه چیزی استفاده میشه، می‌تونن انواع مختلفی از داده‌ها رو ذخیره کنن. با این حال، به صورت کلی میشه گفت که یک بلاک همیشه حاوی یک زمان2 یا داده‌های مربوط به زمان ایجاد بلاکه، یک هش یا کد منحصر به فرد داره که معمولا از ترکیب همه محتویات داخل خود بلوک تولید میشه (که با عنوان اثر انگشت دیجیتال3 نیز بهش اشاره میکنن) و در نهایت، همیشه هش4 بلاک قبلی یا یک جور ارجاع به بلاک قبلی رو هم شامل میشه (شکل 1). این ارجاع به بلاک قبلی باعث میشه که این بلاک‌ها بتونن زنجیره وار به هم متصل بشن. الان خیلی درگیر هش نشین چون بعداً با جزئیات بیشتری بررسیش میکنیم. پس به این ترتیب ما با استفاده از این زنجیره بلاک‌ها یا بلاک چینمون میتونیم توالی اتفاقات رو متوجه بشیم. (حالا سوالی که پیش میاد اینه که ما گفتیم همیشه اطلاعات بلاک قبلی توی بلاک بعدی ذکر میشه. پس تکلیف بلاک اولیه چی میشه؟ آخر همین مطلب راجع بهش با هم حرف میزنیم)

شکل 1- نمونه ای از محتویات بلاک در بلاک چین

هش کردن

هش کردن یکی از کاربردهای علم رمزنگاریه5. با استفاده از روش‌های هش کردن ما میتونیم با یک الگوریتم یا روشی یک رشته ظاهرا تصادفی از حروف و اعداد رو از روی داده ورودی بدست بیاریم. این کار در حدی که ما لازمه بدونیم خیلی ساده با استفاده از یک تابع (تابع هش) انجام میشه.

یک تابع هش رو مثل تمام توابع دیگه در نظر بگیرین. حتی اگر برنامه نویسی هم بلد نیستین یادتون میاد که توی ریاضیات ما یک توابعی داشتیم مثل سینوس و امثالش که یه عدد بهشون میدادیم و یک عددی در جواب به ما میداد. تابع هش رو هم مثل همون در نظر بگیرین که میتونه هر چیزی رو (معمولا تراکنش‌ها و متا دیتاها رو) میگیره و اونو به یک ترکیبی از حروف و اعداد مثلا “1a432bf” تبدیل می کنه (شکل 2). مثلا فکر کنین خروجی “1a432bf” هش شده کلمه “علی” باشه. حالا اگر به جای یک “علی” کلمه “علی علی” رو به تابع بدین دیگه این با قبلی فرق میکنه و طبیعتا هشش هم متفاوت میشه. مثلا میشه “26f5ce1”.

شکل 2 – عملکرد تابع هش

انواع مختلفی از این توابع هش وجود دارن. در واقع این توابع الگوریتمشون از هم متفاوته و طبیعتا هشی که به عنوان خروجی میدن هم ب ازای هر کدومشون از بقیه متفاوته. برای بلاک چین‌ها از توابع هشی استفاده میشه که خروجیشون در عین تصادفی بودن قطعیه. یعنی با ورودی ثابت همیشه یک هش مشخصی تولید میشه (در عین حالی که چند تا کلمه متفاوت هم ممکنه هش یکسانی داشته باشن و الزاما این هش یکتا نیست).پس در واقع این یک فرآیند یک طرفه هست و خروجی تابع هش نمی‌تونه برای تولید ورودی اصلی استفاده بشه (اصطلاحا رمز یا رمزنگاری میشه که هرکسی دقیقا متوجه محتواش نشه).

بلاک آغازین6

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

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

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


1. Meta Data
2. Timestamp
3. Digital Fingerprint
4. Hash
5. Cryptography
6. Genesis Block