ساختار یک بلاک در بلاکچین – جلسه نهم (+ویدئو)
یک بلاک بلاکچین از چه اجزایی تشکیل شده است؟
همانطور که احتمالا میدانید بلاکها، اجزای سازنده بلاکچین هستند. اولین سوال این است: داخل هر بلاک دقیقا چه چیزی هست؟ هدف اولیه یک بلاک ثبت تراکنشهاست. اکنون با یک مثال ساده از بلاک قصد داریم فهرست تراکنشهایی را که شامل این بلاک هستند به شما نشان دهیم.
به خاطر دارید که ما در مقاله بلاکچین چیست مثال بلاکچین کاغذی را مطرح کردیم. هر بلاک یک تکه کاغذ است که تراکنشهای مربوط به یک روز خاص در فرمت دفترحساب در آن فهرست شده است. این مثال تنها شامل هفت تراکنش است. هر بلاک در بیتکوین میتواند تا ۲۰۰۰ تراکنش را شامل شود. توجه کنید این عدد بین بلاکچینهای مختلف، متفاوت بوده و به حداکثر سایز هر بلاک بستگی دارد.
برای جلوگیری از ازدحام در شبکه بلاکچین، سایز بلاک باید کوچکتر از یک مقدار مشخص باشد. مثلا در بیتکوین، هر بلاک نمیتواند بزرگتر از یک مگا بایت باشد.
هر بلاک شماره منحصر به فردی دارد که ارتفاع (Height) آن نامیده میشود. از آنجایی که بلاکچین، به صورت خطی است، این شمارهها یا ارتفاعها پیوسته افزایش مییابند. در یک ارتفاع مشخص فقط یک بلاک وجود دارد.
هر بلاک شامل یک برچسب زمانی (Timestamp)، یک عدد عجیب و غریب به اسم نانس (Nonce) و هش بلاک قبلی میباشد. علاوه بر این برخی اطلاعات دیگر نیز در بلاک وجود دارد که فعلاً از جزئیات آن چشمپوشی میکنیم.
مفهوم اعتبار (Validity) یک بلاک در بلاکچین چیست؟
اکنون میخواهیم در مورد یکی از مهمترین مفاهیم بلاکچین یعنی اعتبار (validity) صحبت کنیم. اما این دقیقا چه معنایی دارد؟ بلاک معتبر، ویژگی خاصی دارد که در ادامه آن را دقیقا توضیح میدهیم. این ویژگی به گونهای تعریف میشود که بلاکهای معتبر در اقلیت بوده و اکثریت با بلاکهای نامعتبر است. به عبارت دیگر اگر شما بلاکی ایجاد کنید، به احتمال زیاد این بلاک نامعتبر است. پیدا کردن بلاکهای معتبر در انبوه بلاکهای نامعتبر کار سختی است که به آن استخراج (Mining) گفته میشود و توسط استخراج کننده (Miner) ها انجام میشود.
مفهوم مکانیزم اثبات کار (proof-of-work) و ارتباط آن با درجه سختی
سختی استخراج قابل تنظیم است و با درجه سختی (Difficulty) مشخص میشود. درجه سختی، اساساً یک تنظیمات قراردادی است که میزان سختی ایجاد بلاک معتبر جدید را مشخص میکند. در حقیقت، تمام ارزشها از مفهوم درجه سختی حاصل میشوند. اگر هر کسی بتواند بلاکی را ایجاد کند و آن را در زنجیره قرار دهد دیگر ارزشی وجود نخواهد داشت و شبکهها در خصوص اینکه کدام بلاکها در زنجیره قرار گیرند موافقتی نخواهند کرد. ایجاد یک بلاک به این معنی است که شما باید مقداری کار انجام داده باشید. این مفهومِ اثبات انجام کار (Proof-of-Work) است. با یافتن یک بلاک معتبر، شما اثبات میکنید کار مورد نظر انجام شده است. همانطور که گفتیم درجه سختی قابل تنظیم (قابل تغییر) است تا بلاکها در فواصل زمانی منظمی ایجاد شوند. حالا اجازه دهید ویژگی خاص یک بلاک معتبر را دقیقا تعریف کنیم. یک بلاک تنها در صورتی معتبر شناخته میشود که مقدار هش کل بلاک از یک عدد آستانه مشخص کمتر باشد. این آستانه توسط درجه سختی، تعیین میشود. ما یک بلاک را برداشته و مقدار هش تمام محتویات آن را محاسبه میکنیم. با این کار یک امضای منحصر به فرد برای آن بلاک به دست میآوریم. اگر هر یک از دادههای آن بلاک را تغییر دهید قطعا مقدار هش آن هم تغییر خواهد کرد، درست همانگونه که در دروس گذشته توضیح دادیم.
روش تعیین اعتبار یک بلاک این است که ببینید آیا مقدار هش این بلاک کمتر از حد آستانه سختی قرار دارد یا خیر؟ اگر مشاهده کنیم که مقدار هش از عدد آستانه بیشتر است به معنای نامعتبر بودن بلاک مذکور است. در مثال ما اگر ۳ رقم اولیه هش صفر باشند، آن بلاک، معتبر در نظر گرفته میشود. مثل چیزی که در هش بلاکهای قبلی مشهود است.
برای افزایش درجه سختی، مقدار حد آستانه را کوچکتر انتخاب میکنند. از آنجا که هشها، اعدادی تصادفی هستند، یافتن مقادیر کوچکتر برای آنها، دشوارتر است. این کار شبیه پرتاب تاس است. تصور کنید هر رقم هش مثل پرتاب یک تاس ۱۶-سطحی است، برای رسیدن به سه صفر متوالی که مورد نیاز ماست شما باید سه مرتبه این تاس ۱۶-سطحی را پرتاب کنید و هدف این است که فقط به ۰۰۰ دست پیدا کنید. بنابراین، برای رسیدن به حالت ۰۰۰ باید تاس را در حدود ۴۰۰۰ (یا ۱۶۳) مرتبه پرتاب کنید.
اما در بلاکها، ما تاس پرتاب نمیکنیم و فقط میتوانیم دادهها را تغییر داده و نتیجه هش را مشاهده کنیم که آیا معتبر است یا خیر؟ این کار را تا رسیدن به یک هش معتبر باید تکرار کنیم. اما چه نوع دادهای در بلاکها قابل تغییر هستند؟ بلاکها شامل دادههای منتج از تراکنشها هستند و بنابراین ما اجازه نداریم آنها را تغییر دهیم. نقش فیلد نانس، دقیقاً در همین جا مشخص میشود! نانس یک تکه از داده است که ماینرها میتوانند آن را تغییر دهند. ماینرها مادامی که خروجی هش بلاک از آستانه درجه سختی تعیین شده کمتر نباشد، دائما نانس را تغییر داده و هش را محاسبه میکنند. سرانجام، هنگامی که نانسی را پیدا کنند که موجب کمتر شدن هش بلاک از مقدار آستانه درجه سختی گردد به این معنا است که بلاک مذکور، معتبر میباشد. اکنون ماینر، این بلاک معتبر را روی شبکه به صورت همهپخشی (Broadcasting) منتشر کرده و بابت تلاشی که انجام داده است پاداش (Fee) دریافت میکند.
واضح است که این روند کاملا مبتنی بر شانس و اقبال است. ماینرها بارها و بارها نانس را تغییر داده و دوباره هش را محاسبه میکنند و امیدوار هستند که موفق به یافتن یک مقدار هش شوند که کمتر از عدد آستانه باشد. در مثال مورد نظر ما، باید هشی را بیابیم که با سه صفر شروع شود. در حال حاضر در بلاکچین بیتکوین، ماینرها باید هشی با ۱۹ صفر آغازین بیابند. احتمال این کار به انداره پرتاب یک تاس۱۶ -سطحی و رسیدن به ۱۹ صفر بوده و بسیار اندک است. عملیات ماین کردن یک بلاک معتبر، بسیار دشوار است و اگر رایانهای را ۲۴ ساعته در حالت اجرا قرار دهید باید انتظار داشته باشید که پس از گذشت ۴۰ سال، موفق به یافتن بلاک معتبر شوید!
توجه داشته باشید که اگر پس از اینکه شما بلاکی را ماین کرده و نانس جدید را یافتید سعی کنید هر یک از دادههای بلاک مورد نظر را تغییر دهید، عملا آن بلاک، نامعتبر تلقی شده و شما باید نانس مناسب آن را مجددا پیدا کنید و این یعنی برای دادههای جدیدتان باید تمام مراحل یافتن نانس را دوباره طی کنید! به همین دلیل است که گفته میشود تغییر دادن بلاک ها پس از استخراج، بسیار دشوار است.
پاداش (Fee) یافتن بلاک معتبر در مکانیزم توافق اثبات کار چقدر است؟
ذکر این نکته ضروری است که پاداش یافتن بلاک میتواند قابل توجه باشد. در حال حاضر پاداشی که برای یافتن بلاک جدید در بیتکوین در نظر گرفته شده است ۱۲/۵ بیتکوین است که هم اکنون (در فوریه سال ۲۰۱۹) حدود ۵۰۰۰۰ دلار ارزش دارد! جای تعجب نیست که رقابت بر سر این موضوع بسیار زیاد است. هنگامی که سایر گرههای شبکه یک بلاک جدید را دریافت کنند، به راحتی با محاسبه هش آن بلاک و بررسی اینکه آیا این مقدار، کمتر از حد آستانه درجه سختی هست یا خیر، میتوانند اعتبار آن را تائید یا رد کنند. اگر مقدار مذکور از حد آستانه کمتر باشد، بلاک به زنجیره اضافه شده و آنها کار خود را برای یافتن بلاک بعدی آغاز میکنند. بدیهی است بلاک بعدی، هش بلاک قبلی را در دادههای خود قرار میدهد و اینگونه پیوستگی پیوندی بلاکچین تضمین میگردد. در مورد این پیوستگی یا زنجیرهسازی از بلاکها در ادامه بیشتر توضیح خواهیم داد.