
چگونه بیت کوین به واسطه انرژی محافظت میشود؟ مفهوم مقادیر بیمعنی یا نانس (Nonce) برای این شبکه چیست؟ تابع SHA256 و مفهوم هش ریت چیست؟ آیا استخراج بیت کوین و تابع SHA-256، امنیت شبکه بیت کوین را تامین میکنند یا ذخایر عرضه را به اتمام میرسانند؟ با میهن بلاکچین همراه باشید تا در این مقاله به این سوالات پاسخ دهیم.
امنیت شبکه بیت کوین و پیشدرآمدی از ماینینگ و تابع هش
باید از فرایند عملکرد تابع هش آغاز کنیم. بدون وجود داشتن توابع هش، وجود داشتن بیت کوین غیرممکن خواهد بود. اجازه بدهید در ابتدا در مورد ماهیت این توابع صحبت کنیم؛ زیرا نه تنها به نظرتان جذاب خواهد بود، بلکه درک کردن شیوه کارکرد شبکه بیت کوین امری بنیادین نیز محسوب میشود. این رویکرد بنیادی، استخراج یا ماینینگ و تراکنشهای این شبکه را نیز شامل میشود.
در صورت تمایل به منفعت بردن و بهرهمند شدن از مزایای بیت کوین لازم نیست تا شیوه کارکرد شاه رمزارزها را بدانید، درست شبیه به اینکه نیازی نیست تا شیوه عملکرد TCP/IP را برای استفاده از اینترنت کسب کنید.
تابع هش چیست؟
بیایید از یک الگوی نموداری آغاز کنیم که در شکل زیر قابل مشاهده است:
در قسمت چپ این عکس میتوانید بخش ورودی داده را مشاهده کنید، در بخش میانی نیز تابع مورد نظر ما قرار دارد و در سمت راست، مقدار خروجی ما دریافت میشود. مقادیر ورودی میتوانند هر مقدار دیجیتالی را شامل شوند. مقدار اندازه این ورودی دیجیتال نیز بدون محدودیت بوده و به حد توان پردازش کامپیوتر شما بستگی دارد. داده وارد شده در ادامه این روند به تابع SHA256 منتقل میشود. این تابع داده ورودی را دریافت کرده و یک عدد به ظاهر تصادفی (Random) با خصوصیتهای معینی که در ادامه این مطلب توضیح میدهیم را محاسبه میکند.
اولین الگوریتم ایمن هش (Secure Hash Algorithm) یا به اختصار SHA، توسط سازمان امنیت ملی آمریکا (NSA) توسعه یافت و امروزه نسخههای گوناگون بسیاری از این الگوریتم عرضه شدهاند (بیت کوین از الگوریتم SHA-256) استفاده میکند. این الگوریتم در حقیقت مجموعهای از دستورالعملهایی در راستای به هم ریختن دادهها به روشی بسیار پیچیده، اما کاملا مشخص را شامل میشود. این دستورالعملها به هیچ عنوان محرمانه نیستند و حتی امکان انجام آنها به صورت دستی نیز وجود دارد؛ اما این روند بسیار خستهکننده است.
خروجی SHA256 یک عدد ۲۵۶ بیتی است و این یک رویداد تصادفی نیست.
یک عدد ۲۵۶ بیتی به معنای یک عدد باینری (دودویی) با طول ۲۵۶ رقم است. عدد باینری بدین معناست که ارزش عدد مورد نظر با دو نماد ۱ یا ۰ نشان داده میشود. اعداد باینری را میتوان به هر قالب دیگری، مثل اعداد اعشاری مبنای ده که با آنها آشنا هستیم، تبدیل کرد.
با وجود اینکه این تابع یک عدد باینری ۲۵۶ رقمی را در اختیار ما قرار میدهد، میزان ارزش مورد نظر معمولا به صورت هگزادسیمال ۶۴ رقمی بیان میشود.
هگزادسیمال بدان معناست که به جای ۱۰ نماد آشنای ما با اعشار (۰ تا ۹)، ۱۶ نماد در اختیار داریم (یعنی ۱۰ رقمی که میشناسیم به علاوه حروف a، b، c، d، e و f که میزان ارزش ۱۱ تا ۱۵ را به نشان میدهند). به عنوان مثال، برای نشان دادن ارزش اعشاری ۱۵ در هگزادسیمال، تنها کافیست تا «f» را بنویسیم که دارای مقدار یکسانی با این عدد است. در صورت نیاز به توضیحات بیشتر، اطلاعات زیادی به صورت آنلاین در این زمینه وجود دارند و با یک جستجوی سریع در گوگل در دسترس شما قرار میگیرند.
برای نمایش دادن SHA256 در عمل، میتوانید عدد ۱ را مورد استفاده قرار دهید و از طریق یک ماشین حساب آنلاین هش خروجی که در تصویر زیر میبینید، دریافت کنید.
قسمت بالایی عکس نشاندهنده خروجی و قسمت پایینی نشاندهنده نتیجه خروجی است.
به یاد داشته باشید که تمامی کامپیوترهای دنیا نیز همین خروجی را به شما نشان میدهند، البته این در صورتی است که ورودی یکسانی در کنار تابع SHA256 استفاده شود.
عدد هگزادسیمال خروجی نیز در صورت تبدیل شدن به اعداد ده رقمی اعشاری بدین صورت خواهند بود (توجه داشته باشید که ارقام بیشتری برای نوشتن آن مورد استفاده قرار گرفتهاند):
در صورت تبدیل آن به باینری نیز خروجی زیر به ما نشان داده میشود:
در صورت تمایل میتوانید در این لینک همین مقدار عددی را در مبنای ۶۴ مشاهده کنید.
توجه داشته باشید که کوچکترین مقدار ارزشی ممکنی که SHA-256 به عنوان خروجی ارائه میکند عدد صفر است، اما طول آن باز هم ۲۵۶ رقم است. در این تصویر میتوانید شیوه نمایش صفر را مشاهده کنید:
بزرگترین خروجی ممکن نیز مقدار ارزش ۱ است:
این مقدار ارزشی در مبنای اعشاری ده بدین صورت است:
همین عدد در مبنای ۱۶ یا هگزادسیمال بدین صورت نمایش داده میشود:
توجه داشته باشید که در این عکس دقیقا ۶۴ حرف F نوشته شده است.
عدد صفر در مبنای ۱۶ با یک صفر ساده قابل نمایش دادن است، اما در رابطه با خروجی تابع هش، ۶۴ عدد صفر نمایش داده میشود تا نیازمندی نمایش دادن اندازه دقیقی از خروجی این تابع مرتفع شود:
در ادامه، خلاصهای از برخی خصوصیات تابع هش که ارزیابی کردن آنها از اهمیت بالایی برخوردار است را مورد بررسی قرار میدهیم:
- نمیتوانیم مقدار ورودی را با توجه به خروجی حاصل شده معین کنیم.
- مقدار ورودی میتواند هر میزان رقم و طول دلخواهی داشته باشد (حتی هزاران رقم).
- خروجی این تابع همواره طول یکسانی دارد.
- در صورت وارد کردن ورودی یکسان، مقدار خروجی دریافتی همواره یکسان خواهد بود.
- اعمال هرگونه تغییری در مقدار ورودی هرچقدر هم ناچیز، به تغییرات غیرقابل پیشبینی و بسیار متفاوتی در میزان خروجی منجر میشود.
- به نظر میرسد که میزان خروجی کاملا تصادفی یا رندوم است، اما در حقیقت این مقدار دریافتی کاملا قطعی است (بدین معنا که کاملا محاسبه شده و قابل تکرار است).
- میزان خروجی دریافتی غیرقابل پیشبینی است. خروجی ما تنها قابل محاسبه بوده و چنین محاسباتی نیازمند انجام کار قابل توجهی توسط کامپیوتر است ( با مداد و کاغذ ساعتها به طول میانجامد پس این کار را انجام ندهید).
حالا که مفاهیم پایه ماهیت تابع هش را یاد گرفتید، میتوانید توضیحات حول محور شیوه کارکرد ماینینگ بیت کوین را نیز درک کنید.
با این حال، پیش از اینکه به ادامه این مقاله بپردازید پیشنهاد میکنیم تا یک ماشین حساب آنلاین هش را امتحان کنید و بر اساس مطالبی که در مورد توابع هش گفتیم کمی با آن کار کنید.
ماینینگ بیت کوین چیست؟
با نشان دادن مفهوم کار در این عرصه آغاز میکنیم، که در حقیقت نشاندهنده منشا «گواه اثبات کار (PoW)» در حوزه Bitcoin است.
به یک ماشین حساب آنلاین هش مراجعه کرده و این عبارت را در بخش ورودی آن وارد کنید:
«.I am creating 50 bitcoins and paying myself this amount»
دقیقا همین عبارت را با در نظر داشتن حروف کوچک و بزرگ بنویسید و در پایان جمله نیز نقطه بگذارید. در این صورت، خروجی که در تصویر میبینید را دریافت میکنید:
حالا بیایید یک قانون ایجاد کنیم که بیانگر این باشد که برای معتبر بودن این پیام پرداخت، باید هش را با یک صفر شروع کنیم. برای انجام چنین کاری، لازم است تا ورودی را به نحوی تغییر دهیم؛ با این حال همانطور که پیش از این نیز یاد گرفتید، مقدار خروجی به هیچ عنوان به واسطه ورودی ما قابل پیشبینی نیست. چه اصلاحاتی میتوانیم انجام دهیم تا از شروع شدن تابع هش با یک صفر اطمینان حاصل کنیم؟
لازم است برای انجام چنین کاری، دادههای خود را با استفاده از آزمون و خطا اضافه کنیم. در عین حال، قصد تغییر مفهوم پیام ورودی را نیز نداریم؛ بنابراین، میتوانیم یک زمینه یا فیلد (یک بخش تخصیص داده شده) به نام «Nonce» ایجاد کنیم که دارای یک مقدار بیمعنی است.
مبنا بر این است که واژه «Nonce» از «عددی که تنها یک بار استفاده شده است» مشتق شده باشد، اما برای ما قابل مشاهده نیست.
به بخش بعدی توجه داشته باشید و دقت کنید که چگونه تنها با افزودن «:Nonce» به عنوان یک فیلد اضافه، خروجی هش تغییر پیدا میکند.
این خروجی هنوز هم با یک «0» آغاز نمیشود، پس در این بخش باید مقادیر بیمعنی را بیافزاییم (به عنوان مثال ما یک «X» را افزودیم):
همچنان عبارت مورد نظر ما با ۰ آغاز نمیشود. در ادامه، کاراکترهای بیشتری را مورد استفاده قرار دادیم تا در نهایت، تابع هش با یک صفر آغاز شد:
بالاخره به هدف خود رسیدیم. اکنون بر اساس قوانین دلخواه برای این نسخه شبیهسازی شده بیت کوین، متن ما در پنجره ورودی به صورت یک بلاک معتبر همراه با یک تراکنش واحد است، که ۵۰ بیت کوین به ما پرداخت میکند.
توجه داشته باشید که بلاکهای Bitcoin به صورت بنیادین صفحاتی از یک دفترکل توزیع شده هستند. هر یک از بلاکها شماره مختص خود را داشته و بیتکوین جدیدی را به همراه لیست کردن تراکنشها بین کاربران تولید میکنند.
حالا به قانون جدیدی میپردازیم. لازم است تا هش بلاک قبلی در بلاک بعدی درج شود. در این بخش کمی میزان پیچیدگی را بالا برده و چند فیلد دیگر به این قسمت اضافه میکنیم تا به مفهوم یک بلاک واقعی بیت کوین نزدیکتر شویم.
همانطور که مشاهده میکنید، هش با «F» آغاز شده است و نه با «0»، پس لازم است تا مقادیر بیمعنی دیگری را در فیلد نانس وارد کنیم:
این بار خوششانستر بودیم و نانس مناسب را پس از ۴ دفعه تلاش کردن پیدا کردیم. برای بلاک مثال اول، ۲۲ دفعه امتحان کردیم. عنصر تصادفی بودن و شانس، اندکی در این بخش دخیل است؛ اما به صورت کلی، پیدا کردن هش معتبر برای دست یافتن به یک صفر ساده کار دشواری نیست. ۱۶ مقدار ارزشی محتمل برای رقم اول هش اول وجود دارد؛ بنابراین یک شانزدهم شانس این را دارم که هرگونه اصلاحاتی که در فیلد ورودی ایجاد میکنم، به این منجر میشود که اولین رقم هش «0» باشد.
به یاد داشته باشید که فیلدهای بیت کوین به این صورت هستند، اما جزئیات بیشتری نیز وجود دارند که در این بخش استفاده نکردیم. این امر تنها برای نشان دادن نکات مورد نظر ما در این بخش است و هدف ما شبیهسازی دقیق بلاک بیت کوین نیست.
در بلاک بعدی یک فیلد زمانی را اضافه میکنم؛ زیرا برای توضیح دادن «تنظیم سختی» در ادامه این مطلب به آن نیاز داریم:
در تصویر بالا بلاک شماره سه را مشاهده میکنید. این بلاک هش بلاک قبلی را شامل میشود و همچنین فیلد زمانی را نیز به آن اضافه میکنیم. Nonce مورد استفاده ما به صورت موفقیتآمیزی موجب آغاز شدن هش با صفر شد (با تایپ کردن «1» روند کار خود را آغاز کردیم تا به هدف مورد نظر رسیدیم).
تا به اینجا به اندازه کافی در مورد بلاک بیت کوین یاد گرفتیم تا توضیح برخی از ایدههای جذاب بلاک چین بیت کوین و ماینینگ را به شما ارائه کنیم.
برنده شدن یک بلاک
فرایند ماینینگ در حقیقت یک رقابت است. کسی که پیش از سایرین یک بلاک معتبر را تولید کند میتواند پاداش تعیین شده برای هر بلاک را دریافت کند. بنابراین چیزی نصیب ماینری که همان بلاک را با کمی تاخیر تولید میکند، نخواهد شد و بلاک تولید شده مورد قبول قرار نمیگیرد.
پس از اینکه بلاک شماره سه پیدا شده و به همگان (تمامی نودهای شبکه Bitcoin) عرضه شود، تمامی ماینرها از کار کردن بر روی یافتن چیزی که قرار بود بلاک شماره ۳ خود باشد دست میکشند. سایر ماینرها بر روی یافتن نانس مناسب برای بلاک چهارم (با قرار دادن هش بلاک ۳ در بلاک جدید) کار میکنند. برنده بلاک نتایج حاصل شده را منتشر کرده و سپس همه ماینرها (نودها) بر روی بلاک پنجم کار میکنند و این روند ادامه پیدا میکند.
با آغاز فرایند کار کردن بر روی هر بلاک، بیت کوین جدید تولید میشود و مجموع کلی ذخایر عرضه را تا به امروز تشکیل میدهند. اگر ماینرهای زیادی در حال فعالیت کردن در این حیطه باشند، از نظر آماری انتظار داریم تا بلاکها با سرعت بیشتری تولید شوند و در نتیجه این امر، بیت کوین نیز سریعتر عرضه میشود. این روندی مشکلساز است، اینطور نیست؟
ساتوشی ناکاموتو (Satoshi Nakamoto) با در نظر داشتن ذخایر عرضه محدود بیت کوین و انتشار قابل پیشبینی آن در طول زمان، به این مشکل فکر کرده بود و یک حلقه بازگشتی منفی برای حفظ روند تولید بلاک متوسط، در فاصله زمانی ۱۰ دقیقهای را معرفی کرد. این چرخه چگونه عرضه شد؟ آیا راهی به ذهنتان میرسد؟ کمی مکث کنید و در مورد آن تفکر کنید.
تنظیم سختی استخراج بیت کوین
میانگین زمانی تولید بلاکهای جدید بیت کوین، توسط همه نودها و در طول تولید هر ۲۰۱۶ بلاک محاسبه میشود (این امر دلیل نیاز ما به فیلد زمانی است). این در حقیقت بخشی از پروتکل و قوانینی است که نودها دنبال میکنند. فرمول خاصی نیز در این بخش مورد استفاده قرار میگیرد، که به تنظیم تعداد صفرهایی که هر هش بلاک برای معتبر بودن باید با آنها آغاز شود منجر میشود.
اگر بخواهیم به صورت دقیق اشاره کنیم، این تعداد صفرها نیست که تنظیم میشود؛ بلکه مقدار هدفی است که تابع هش باید پوششدهی کند، اما مثال صفرهای اصلی برای توضیح این بخش بسیار قابل فهمتر است.
اگر بلاکها با سرعت بسیار بالایی تولید شوند، هدف هش بر اساس قوانین از پیش تعریفشدهای که تمامی نودها به صورت مشابه از آنها پیروی میکنند (و در کد آنها تعریف شده است) تنظیم میشود.
برای ساده بیان کردن این موضوع، بیایید در نظر بگیریم که برخی از افراد در حال رقابت کردن با من هستند و بلاکها نیز با سرعت بالایی در حال تولید شدن هستند و حالا بر اساس محاسبات خیالی، بلاک چهارم به جای یک صفر به دو صفر نیاز دارد.
بدون شک من به زمان بیشتری برای دست یافتن به دو صفر نیاز دارم؛ اما در این مثال فرض کردیم که افراد بسیار دیگری نیز در حال رقابت کردن با من هستند و مدت زمان کلی مورد نیاز برای همه افراد در این فرایند به هدف بلاک ارتباط دارد.
در این تصویر میتوانیم بلاک مورد نظر را مشاهده کنیم:
به زمان توجه داشته باشید، بیش از ۱۰ دقیقه از تولید بلاک قبل میگذرد (ما بخش زمان را تنها برای نمایش دادن مورد استفاده قرار دادیم). هدف ۱۰ دقیقهای برای بلاکها امری محتمل و پیش فرض است و هیچوقت مشخص نیست که زمان دقیق پیدا شدن بلاک بعدی به چه اندازه است.
مدت زمانی طول کشید تا بتوانیم دو صفر را با کمک گرفتن از کیبورد پیدا کنیم. این روند بسیار دشوارتر از یافتن یک صفر واحد بود. شانس پیدا کردن دو صفر در یک ردیف، به میزان ۱ از ۱۶ به توان ۲ و یا یک دویست و پنجاه و ششم است.
با دخیل شدن افراد بیشتری در روند ماینینگ و رقابت برای تولید بیت کوین جدید، در نهایت به این نقطه میرسیم که صفر سومی نیز مورد نیاز خواهد بود.
ما کمی پیش آخرین بلاک حقیقی بیت کوین را مورد بررسی قرار دادیم که هش بلاک قبلی در آن درج شده بود. این هش بدین صورت بود:
همانطور که در تصویر مشاهده میکنید، با ۱۶ صفر مواجه هستیم! یعنی یک از شانزده به توان ۱۹ شانس داریم تا چنین بلاکی را در هر بار تلاشمان پیدا کنیم. ماینرهای بیت کوین سراسر جهان در هر ثانیه تلاشهای زیادی را پشت سر میگذارند.
تعداد تلاشهای ما در هر ثانیه برای یافتن بلاک مورد نظر تحت عنوان «هش ریت» یا نرخ هش شناخته میشود. در حال حاضر، میزان نرخ هش تخمینزده شده در جهان کمی کمتر از ۲۰۰ میلیون تراهش در هر ثانیه (هر تراهش به معنای یک تریلیون هش است) است. با توجه به تعداد دفعات بالای تلاش ما در هر ثانیه، پیدا کردن بلاکی که دارای یک هش آغاز شونده با ۱۹ صفر است در هر ۱۰ دقیقه امکانپذیر است.
در آینده و با پیوستن ماینرهای جدید به شبکه بیت کوین، نرخ هش بالا میرود و بلاکها سریعتر پیدا میشود و سختی شبکه Bitcoin نیز تا حد نیاز به یافتن ۲۰ صفر افزایش پیدا میکند. چنین امری به پایین آمدن سرعت تولید بلاک و نگه داشتن آن در چهارچوب یک بلاک در هر ده دقیقه منجر میشود.
رویداد هاوینگ یا نصف شدن پاداش استخراج چیست؟
هنگامی که پادشاه رمزارزها به تازگی روند کاری خود را آغاز کرده بود، به میزان ۵۰ بیت کوین با هر بلاک تولید میشد. قوانین بلاک چین Bitcoin نشان میدهند که پس از تولید هر ۲۱۰,۰۰۰ بلاک، پاداش تولید بلاک نصف میشود. چنین رویدادی تحت عنوان «هاوینگ» شناخته میشود و در طول هر ۴ سال اتفاق میافتد. رویداد Halving در کنار تنظیم سختی تولید بلاکها در فواصل ۱۰ دقیقهای، بدین معناست که در حدود سال ۲۱۴۰، پاداش بلاک به میزان ۰.۰۰۰۰۰۰۰۱ یا ۱ ساتوشی که کوچکترین واحد تقسیمبندی بیت کوین است، میرسد و دیگر قادر به نصف کردن آن نیستیم. روند استخراج در این زمان متوقف نمیشود؛ اما پاداش بلاک صفر خواهد بود. در آن هنگام، هیچ بیت کوین جدیدی تولید نمیشود و تعداد بیت کوین از نظر ریاضی قابل محاسبه و نزدیک به ۲۱ میلیون کوین است. بدین ترتیب کل ذخایر عرضه محاسبه میشود و به صورت برنامهریزی شده تنظیم میشود.
حتی با وجود صفر بودن پاداش بلاک نیز ماینرها به ادامه دادن روند کاری خود برای دریافت فی تراکنشها تشویق میشوند.
چگونه پاداش بلاک دقیقا نصف میشود؟ این در کد مختص نودها نهفته است. آنها برنامهریزی شدهاند که هر بلاک جدیدی را پس از تولید بلاک ۲۱۰,۰۰۰ (حدود ۴ سال) رد کنند و این نقطهای است که ماینر به میزان ۲۵ BTC پاداش را به خود اختصاص داده است. سپس بلاک جدید پس از تولید بلاک ۴۲۰,۰۰۰ رد میشود و ماینرها به میزان ۱۲.۵ بیت کوین پاداش دریافت میکنند و این روند نیز به همین منوال ادامه پیدا میکند. در زمان نگارش این مقاله، پاداش هر بلاک ۶.۲۵ بیت کوین است.
فی تراکنشها
تا اینجا تنها به بلاکهای خیالی پرداختیم که یک تراکنش واحد را شامل میشدند و این تراکنشی بود که ماینر در ازای آن پاداش دریافت میکرد. چنین فرایند تحت عنوان «تراکنش کوین بیس» شناخته میشود.
این نام هیچ ارتباطی با صرافی Coinbase ندارد؛ البته جالب است بدانید که این شرکت نام خود را از این تراکنشها برگرفته است.
علاوه بر تراکنشهای کوین بیس، تراکنشهایی نیز وجود دارند که مردم در ازای آنها به یکدیگر پول پرداخت میکنند. در ادامه یک نمونه مثالی از آنها را مشاهده میکنیم:
در این نمونه به دنبال یافتن یک هش واقعی نپرداختیم (این در حقیقت هش گزارش شدهای در بلاک ۲۰۰,۰۰۱ است). Nonce درون این تصویر تنها برای شوخی نمایش داده شده است؛ اما به یاد داشته باشید که درج کردن یک پیام در این بخش نیز امری امکانپذیر است.
ساتوشی عبارت مشهور «نخست وزیر در آستانه دریافت دومین کمک مالی از بانکها» برگرفته از تیتر روزنامههای آن روز را در اولین بلاک بیت کوین (بلاک جنسیس) درج کرد.
نکته مورد نظر ما در این تصویر نشان دادن ۱۳۲ تراکنش است که تمامی آنها به صورت کامل درج نشدهاند. به تراکنش شماره ۱۳۲ نگاه کنید، ۲.۳ BTC از آدرس مبدا در حال پرداخت ۲.۱ BTC به آدرس مقصد و در ادامه، به آدرس دوم به میزان ۰.۱ BTC است (از نقطه برای کوتاه کردن آدرس استفاده کردهایم).
بنابراین، مبدا ۲.۳ بیت کوینی ما در حال پرداخت به میزان ۲.۲ بیت کوین (۲.۲=۰.۱+۲.۱) است. آیا ۰.۱ BTC در این روند از قلم افتاده است؟ خیر، میزان اختلاف ما توسط ماینر دریافت میشود که در ادامه به توضیح آن میپردازیم.
ماینر این اجازه را دارد تا به میزان ۲۵ بیت کوین به عنوان پاداش بلاک به خود اختصاص دهد (زیرا از تولید ۲۱۰,۰۰۰ بلاک گذر کردهایم و میزان پاداش از ۵۰ به ۲۵ کاهش پیدا کرده است). اگر دقت کنید متوجه میشوید میزان تراکنش کوین بیس معادل ۲۷.۳۳۸۸۰۰۲۲ است و ۲.۳۳۸۸۰۰۲۲ BTC افزوده از جانب ۱۳۲ تراکنش درون بلاک حاصل شدهاند و میزان ورودیها کمی بیشتر از مجموع خروجیها خواهند بود؛ بنابراین ماینر این حق را دارد تا این بیت کوین «رها شده» را به عنوان پرداختی به خود اختصاص دهد. این در حقیقت فی تراکنشهایی در نظر گرفته میشوند که به ماینر پرداخت میشوند.
فضای بلاک محدود است. هنگامی که Bitcoin مقولهای نوظهور حساب میشد، کاربران میتوانستند تراکنشهای خود را به صورت رایگان و بدون نیاز به پرداخت فی ارسال کنند و ماینرها نیز این تراکنشها را در بلاک درج میکردند. در حال حاضر، کاربران بیشتری در این عرصه حضور دارند و با توجه به اینکه دسترسی به بلاک بعدی به امری رقابتی مبدل شده است، کاربران فی معینی را برای ترغیب ماینرها در راستای انتخاب کردن تراکنش آن فرد در قیاس با سایرین تعیین میکنند.
بنابراین با در نظر داشتن کاهش مداوم میزان پاداش بلاک که در طول هر چهار سال اتفاق میافتد و در نهایت نیز به صفر میرسد، پرداخت به ماینرها از این طریق صورت میگیرد.
به عقیده برخی از افراد، روزی میرسد که پرداختیهایی که به ماینرها اختصاص پیدا میکنند کافی نبوده و اولین رمزارز با شکست مواجه میشود. این نگرانی به صورت کامل رفع شده و از تکرار و پرداختن به آن در این مقاله خودداری میکنیم.
آیا میتوان یک بلاک را بازنویسی کرد؟
توانایی انجام چنین کاری بسیار غیرمحتمل بوده و ارزش این را دارد تا به درک دلیل آن بپردازیم. در ادامه، قدردان عدم وجود قابلیت تغییرپذیری تراکنشهای Bitcoin خواهید بود.
پیش از این توضیح دادیم که هش بلاک قبلی در بلاک بعدی درج میشود. این بدان معناست که اعمال هرگونه ویرایشی در تراکنشهای یک بلاک قدیمی به تغییر پیدا کردن هش آن بلاک منجر میشود. سپس آن هش در بلاک بعدی ثبت میشود؛ بنابراین میتوان متوجه شد که چنین اقدامی وجود نیاز به روزرسانی بلاک بعدی را به وجود میآورد. اگر هش ثبت شده در بلاک بعدی را تغییر دهید، لازم است تا بلاک پس از آن نیز به روزرسانی شود و این روند ادامه پیدا میکند.
به یاد داشته باشید در هر زمانی که یک هش تغییر پیدا میکند، تمامی صفرهایی که با زحمت پیدا شدهاند، از دست میروند و یک هش تصادفی یا رندوم در اختیار خواهید داشت و لازم است که تمامی فرایند یافتن صفرها را از اول تکرار کنید. اگر چنین اقدامی را در رابطه با بلاکی که قصد ویرایش آن را داشتید به انجام برسانید، باید همین روند را آنقدر برای بلاکهای بعدی تکرار کنید تا به بلاک فعلی برسید. به هیچ عنوان نمیتوانید در جایی از این مسیر متوقف شوید؛ زیرا قوانین کارکرد شبکه Bitcoin بدین صورت است که طولانیترین زنجیره بلاکها سابقه و پیشینه حقیقی ثبت شده بیت کوین را نشان میدهند. اگر به عقب برگردید و دهمین بلاک تولید شده پیش از بلاک فعلی را ویرایش کنید، دیگر طولانیتری زنجیره از بلاکها را در اختیار نداریم؛ بنابراین مجبور خواهید بود که تمامی بلاکهای پس از آن و حتی کمی بیشتر را نیز ویرایش کنید، زیرا احتمالا در طول زمانی که به تغییر آن بلاک اختصاص دادید، بلاکهای جدید دیگری نیز تولید شدهاند و زنجیره ما کمی طولانیتر شده است. در واقع برای دستیابی دوباره به زنجیره حقیقی لازم است تا با روند تولید بلاک مسابقه بدهید. اگر موفق به انجام چنین کاری شوید، زنجیره جدید به نسخه حقیقی تبدیل میشود.
تکرار کردن مجموع تلاش هش کردن حاصل از تمامی ماینرهای دنیا از بلاک ویراست شده تا بلاک آخر، مانع حقیقی بر سر راه ویرایش پیشینه شبکه بیت کوین است. انرژی زیادی برای تولید این هشها و صفرهای غیرمحتمل آنها صرف شده است و لازم است تا برای ویرایش بیت کوین، این هزینه انرژی تکرار شود. این امر دلیل اصلی عدم هدر رفتن انرژی صرف شده برای ماین کردن یا استخراج بیت کوین است. این انرژی هدر نرفته است و برای دفاع از Bitcoin در برابر تغییر و ویرایش صرف میشود تا دفترکل این شبکه غیرقابل تغییر باقی مانده و نیازه به اعتماد کردن به یک مرجع مرکزی رسیدگی به امور وجود نداشته باشد.
اگر دو ماینر به صورت همزمان یک بلاک را بیابند چه اتفاقی میافتد؟
این رویداد هرازگاهی اتفاق میافتد و همواره بدین شکل به این امر رسیدگی میشود:
هر یک از نودها ابتدا یکی از بلاکهای تولید شده به صورت همزمان تقریبی را دریافت میکنند و بلاکی که در ابتدا دریافت کردهاند پذیرفته و بلاکی که کمی بعد دریافت میکنند را رد میکنند. این امر به تقسیم شبکه منجر میشود، اما به صورت موقتی بوده و رفع میشود.
برای تصور کردن این امر، اجازه دهید یکی از بلاکها را با نام آبی و دیگر را قرمز صدا بزنیم (البته بلاکها رنگ ندارند و این تنها یک مثال است).
در ادامه مثال قبل، ماینرها به کار کردن بر روی بلاک بعدی ادامه میدهند؛ اما در رابطه با اینکه از کدام بلاک زنجیره را گسترش میدهند یک شکاف و گسستگی به وجود میآید.
بیایید فرض کنیم که ماینر برنده بلاکی را پیدا کرده است که از زنجیره آبی استفاده میکند. این ماینر بلاک جدید را برای تمامی نودها ارسال میکند و طولانیترین زنجیره مشخص میشود. سپس نودهایی که زنجیره قرمز را مورد پذیرش قرار دادهاند آن را رها کرده و زنجیره جدید را میپذیرند.
تمامی ماینرهایی هم که در حال کار کردن بر روی زنجیره قرمز بودند کار خود را متوقف کرده و از این پس بر روی زنجیره طولانیتر کار میکنند که در این مثل زنجیره آبی نام دارد. بنابراین، زنجیره قرمز حذف شده و یا در اصطلاح میمیرد.
سخن پایانی
تابع هش و عملکرد آن به تولید بلاک جدید در نتیجه مقدار ورودی داده شده به آن و بر اساس SHA256 منجر میشود. ماینرها همواره در تلاش برای یافتن نانس مورد نظر برای استفاده در خروجی این تابع هستند تا در رقابت تولید بلاک جدید، سریعتر از سایرین بلاک خود را به نودها ارائه کرده و پاداش بلاک را در کنار فی تراکنش دریافتی از کاربران به دست بیاورند. پاداش بلاک به صورت ۴ سال یک بار نصف میشود و این رویداد تحت عنوان هاوینگ شناخته میشود. با افزایش تعداد روزافزون ماینرها انتظار میرود تا روند تولید بلاک نیز تسریع شود، اما از طرف دیگر رقابت برای پیدا کردن نانس یا عبارت بیمعنی مورد نظر در خروجی هش نیز همواره دشوارتر میشود و این امر به باقی ماندن روند تولید بلاک در طول تقریبی هر ۱۰ دقیقه منجر میشود. انرژی صرف شده برای انجام این فرایند و تولید اولین رمزارز در شبکه Bitcoin به امنیت شبکه بیت کوین و عدم تغییرپذیر بودن محتوای درج شده از هر بلاک در بلاک بعدی به واسطه تابع هش منجر میشود و این انرژی هدر نرفته و صرف حفظ تغییرناپذیری این شبکه میشود. آیا با این روند کاری شبکه بیت کوین آشنایی داشتید؟ تا به حال از محاسبهگرها و یا ماشینحسابهای آنلاین هش استفاده کرده بودید؟ چه مشکلاتی را پیش روی ماینرهای بیت کوین میبینید؟