سختی شبکه (Difficulty) یا سختی استخراج چیست؟
سختی شبکه (Difficulty) یا سختی استخراج متغیری است که هدف آن ثابت نگه داشتن میانگین زمان ایجاد یک بلاک در شبکه است. در ارزهای دیجیتالی که قابلیت استخراج دارند و یا به اصطلاح سازوکار آنها اثبات کار (PoW) است، وجود قابلیتی انعطافپذیر در برابر افزایش و یا کاهش تعداد ماینرها ضروری است. در این مطلب به توضیح سختی شبکه و جزئیات آن میپردازیم.
پیش از اینکه وارد مبحث سختی شبکه و توضیح آن شویم، باید به صورت خلاصهوار به مفاهیم اولیه ارزهای دیجیتال قابل استخراج نگاهی میاندازیم.
یکی از قابلیتهای ارزهای دیجیتال که آنها را محبوب ساخته، استفاده از بلاک چینهای عمومی است. این نوع بلاک چین ها شفاف هستند و هر کسی بدون نیاز به اجازه گرفتن از مرکز یا نهادی میتواند در این شبکهها فعالیت کند و یا از آنها خارج شود. برای مثال شما برای وارد شدن به شبکه بیت کوین، اتریوم و لایت کوین نیاز ندارید که از شخص یا گروهی اجازه بگیرید. تنها کاری که لازم است انجام دهید، دانلود کردن کل بلاک چین این شبکهها و اجرای یک فول نود است.
فول نودها دستگاههایی هستند که کل تاریخچه تراکنشهای شبکه را در حافظه خود نگهداری میکنند و به طور مستقیم وظیفه اعتبارسنجی تراکنشها را بر عهده دارند.
عملیات استخراج یا همان ماینینگ هم به صورت آزادانه توسط هر شخص یا گروهی در شبکه میتواند انجام شود. اساس کار ارزهای دیجیتالی که از سازوکار استخراج استفاده میکنند، حل کردن یک مسئله پیچیده به نام «هش» در هر بلاک است تا پاسخ آن را پیدا کنند و به این وسیله تراکنشهایی که در آن بلاک قرار گرفته است، تایید شوند. ماینرها در فرایند پیدا کردن هش هر بلاک، این کار را با حدس و خطا انجام میدهند.
هش یا همان مسئله ریاضی پیچیدهای که جزء اساسی تمام ارزهای دیجیتال است، حاصل تابعی به نام تابع هش (Hash Function) است. این تابع یکطرفه در ارزهای دیجیتال، داده یا ورودیها که همان تراکنشهای افراد مختلف است را دریافت میکند و خروجی آن رشته عباراتی با طول و حجم ثابت است. یکی از جالبترین ویژگیهای توابع هش آن است که امکان رسیدن به داده اولیه از طریق داشتن خروجی را تقریبا غیرممکن میکند.
سختی استخراج چیست؟
اساس کلی مفاهیم سختی شبکه در تمامی ارزهای دیجیتال یکسان است. برای توضیح سختی شبکه یکی از ارزهای دیجیتال قابل استخراج مانند بیت کوین را در نظر بگیرید.
سختی شبکه بیت کوین هر دو هفته یک بار تغییر میکند تا زمان پیدا شدن هر بلاک به طور میانگین 10 دقیقه باقی بماند. در صورتی که سختی شبکه وجود نداشته باشد، با وارد شدن ماینرهای بیشتر به شبکه حدسهایی که درباره هش هر بلاک زده میشود نیز افزایش پیدا میکند. به دنبال افزایش تعداد حدسهای زده شده، احتمال پیدا شدن هر بلاک در زمانی کمتر از 10 دقیقه هم بیشتر میشود.
با این حساب عامل کنترل کنندهای در شبکه وجود نخواهد داشت تا جلوی ماینرها را از ایجاد بلاک در هر دقیقه، ثانیه و یا حتی کمتر از یک ثانیه بگیرد و آنها را وادار به ایجاد بلاک در زمان حدودی 10 دقیقه کند.
گفته شد که سختی شبکه بیت کوین هر دو هفته یکبار (به عبارت دیگر پس از ساخته شدن هر 2016 بلاک)، تغییر میکند. با در نظر داشتن زمان 10 دقیقه برای حل هر بلاک، زمان مورد نیاز برای حل این تعداد بلاک، 20,160 دقیقه خواهد بود.
اما اگر تعداد ماینرها در این مدت دو هفتهای افزایش پیدا کند و این تعداد بلاک زودتر از موعد مشخص شده و یا دیرتر حل شوند (برای مثال در 18,000 دقیقه)، در این صورت سختی شبکه باید خود را با تعداد ماینرها مطابقت دهد.
اگر زمان حل شدن مجموع 2016 بلاک را بر مقدار ایدهآل 10 دقیقه به ازای هر بلاک تقسیم کنیم، با یک تناسببندی ساده میتوان فهمید که سختی شبکه باید نسبت به حالت قبلی فرضاً 20160/18000 یا 1.12 برابر شود.
در صورتی که نسبت به دست آمده بیشتر از 1 باشد، ماینرها با سرعت بیشتری نسبت به حد معمول بلاکها را حل کردهاند و در صورتی که این عدد کمتر از یک باشد، قدرت استخراجکنندگان نسبت به قبل کاهش داشته است.
نمودار سختی شبکه بیت کوین از سایت بلاک چین داتکام قابل دسترس است. مفهوم نمودار سختی و اعدادی که در آن به کار رفته، بیانگر نسبتی است که مثلا استخراج بیت کوین نسبت به هفته گذشته یا مثلا روزهای ابتدایی شروع کار بیت کوین، چقدر دشوارتر شده است.
یکی از منابعی که سختی شبکه را به خوبی توضیح داده، سایت learnmeabitcoin است. نموداری را تصور کنید که اعداد 1 تا 100 بر روی آن قرار گرفتهاند و قرار است دستگاهی در هر دقیقه عددی تصادفی در این بازه انتخاب کند. عدد 50 را به عنوان هدفی در نظر میگیریم که اعداد تصادفی کمتر از آن مدنظر ماست. در اینصورت به طور میانگین باید 2 دقیقه برای به دست آمدن هر عدد زیر 50 صبر کنیم. در صورتی که هدف ما اعداد زیر 20 باشد، این زمان به 5 دقیقه افزایش مییابد.
البته ممکن است شانس با ما یار باشد و همان عدد اولی که دستگاه به طور تصادفی انتخاب میکند، زیر 20 باشد اما در یک بازه طولانی، زمان مورد نیاز برای پیدا شدن عدد زیر 20 همان 5 دقیقه خواهد بود.
پس با عوض کردن عددی که آن را به عنوان هدف میشناسیم، مدت زمان به دست آمدن آن نیز تغییر میکند.
سختی شبکه یا دیفیکالتی نیز به همین صورت کار میکند. ماینرها تلاش میکنند تا با تولید اعداد تصادفی، به هشهایی کمتر از هش هدف (Target Hash) دست یابند. با سختتر شدن استخراج، هش هدف نیز کمتر و کمتر میشود. البته این کار با اضافه شدن صفرهای بیشتر به ابتدای هش هدف انجام میشود. به همین خاطر هم هشِ بلاکهای جدیدتر در شبکه بیت کوین، نسبت به بلاکهای چند سال قبل صفرهای بیشتری دارند.
سختی استخراج چه زمانی تغییر میکند؟
میزان سختی، هر 2016 بلاک یکبار تنظیم میشود که حدودا برابر با دو هفته است
در این بازههای زمانی، هر گره، زمان پیشبینی شده برای استخراج 2016 بلاک (دقیقه 2016 x 10 ) را تقسیم بر زمان حقیقی استخراج آن (دقیقه) میکند:
زمان حقیقی/ زمان پیشبینی شده
زمان حقیقی / 20160
اگر ماینرها بتوانند مسائل هر بلاک را سریعتر از زمان پیشبینی شده حل کنند، مثلا در مدت 9 دقیقه برای هر بلاک، آنگاه به چنین نتیجهای میرسند:
1.11=20160/18144
سپس هر گره از این عدد برای تنظیم سختی 2016 بلاک بعدی استفاده میکند:
سختی جدید =سختی * 1.11
- اگر عدد به دست آمده بزرگتر از 1 باشد (یعنی بلاکها زودتر از زمان پیشبینی شده استخراج شده باشند) آنگاه سختی افزایش مییابد.
- اگر عدد به دست آمده کوچکتر از 1 باشد (یعنی بلاکها دیرتر از زمان پیشبینی شده استخراج شده باشند) آنگاه سختی کاهش مییابد.
به این ترتیب میزان سختی ماینینگ مشخص میشود. اکنون همه ماینرها در شبکه بیت کوین، این سختی جدید را برای 2016 بلاک بعدی در نظر میگیرند.
فاکتور تنظیم کننده سختی در بالاترین حالت 4 است، یعنی رقم آن از 4 بیشتر نیست و از 0.25 کمتر نمیباشد. دلیل این امر جلوگیری از بروز تغییرات شدید در سختی و پیشگیری از فاصله زیاد سختی جدید نسبت به سختی قبل از خود است.
توضیح با یک مثال
برای نمونه به چگونگی محاسبه هش بلاک شماره 578500 بیت کوین نگاهی بیندازیم:
هش معتبری که برای بلاک به دست آمده، در بلاک چین ثبت میشود.
هش بلاک 578,500
برای اینکه هش هدف را به دست آوریم، باید حداکثر هش ممکن (نقطه بالایی نمودار) را به سختی شبکه تقسیم کنیم. سختی شبکه از سایت bitcoinwisdom گرفته شده است. همچنین به حداکثر هش ممکن که توسط دستگاههایی با الگوریتم SHA-256 کار میکنند، در بیت کوین ویکی اشاره شده است.
در تصویر بالا به سختی شبکه بیت کوین در تاریخ 30 می 2019 اشاره شده است.
نکتهای که وجود دارد این است که اعداد ارائه شده در قالب هگزادسیمال هستند و باید آنها را به مبنای 10 تبدیل کرد.
هش بلاک 578,500 را اگر در یک تبدیلگر آنلاین هگزادسیمال به مبنای 10 ببریم، مشاهده خواهیم کرد که عدد به دست آمده کوچکتر از هش هدف خواهد بود.