
حتما شنیدهاید که ماینرها با دستگاههای خود به دنبال حل یک مساله ریاضی و یافتن یک عدد هستند و با یافتن جواب آن، پاداش استخراج بلاک جدید به آن ماینر میرسد. مثلا در شبکه بیت کوین تمام ماینرها به طور مداوم در حال شرکت در مسابقهای هستند که هر ده دقیقه یکبار، یک برنده دارد. این برنده ماینری است که موفق شده آن عدد را درست حدس بزند. پس میتوان گفت که تمام ماینرها برای یافتن یک عدد با هم در رقابت هستند. اما این عدد چیست؟ نانس (Nonce) همان عددی است که این همه ماینر در سراسر جهان با مصرف برق زیاد و به کار بستن کامپیوترهای فوقالعاده قدرتمند خود به دنبال یافتن آن و دریافت پاداش استخراج بلاک جدید در بلاک چین هستند. در این مقاله قصد داریم شما را با عدد نانس و کاربرد آن در شبکه بلاک چین آشنا کنیم.
در این مقاله مکانیزم عدد نانس در شبکه بلاک چین بیت کوین توضیح داده شده است. اما باید گفت که بسیاری از بلاک چینهای سایر ارزهای دیجیتال هم مکانیزم مشابهی دارند و کاربرد نانس در آنها به همین صورت است.
البته نانس تنها در بلاک چینهایی که دارای الگوریتم گواه اثبات کار (POW) هستند، میتواند کاربرد داشته باشد و در بلاک چینهایی با سایر الگوریتمهای اجماع که به ماینینگ نیازی ندارند، کاربردی ندارد.
مقدمه عدد نانس : سربرگ یا هدر بلاک
در شبکه بیت کوین، هر بلاک دارای دوبخش اصلی است، بدنه بلاک که شامل تعدادی تراکنش است و هدر بلاک (Block Header) یا سربرگ، که شامل یک سری اطلاعات خلاصه در خصوص آن بلاک است.
اطلاعاتی که در هدر بلاک وجود دارند عبارتند از:
- ورژن: این عدد ورژن بلاک یا نسخهای از قوانینی است که این بلاک بر اساس آن قابل تایید است.
- هش هدر بلاک قبلی: بلاک قبل از این بلاک در بلاک چین هم دارای یک هدر مخصوص به خود است که هش آن در هدر بلاک بعدی ثبت میشود.
- هش ریشه مرکل تراکنشها: به صورت خلاصه و ساده، میشود “هش مجموع تراکنشهای موجود در این بلاک”.
- زمان: این عدد نشاندهنده دقیق زمانی است که در آن ماینر شروع به پیدا کردن هش بلاک کرده است.
- nBits: نشان دهنده تارگت یا هدفی است که توسط شبکه مشخص شده و در صورتی که هشی که ماینر برای این بلاک پیدا میکند از این عدد کوچکتر باشد، بلاک استخراج شده تلقی میشود و ماینر به پاداشش میرسد.
- نانس (nonce): یک عدد دلخواه است که توسط ماینر مدام عوض میشود و با عوض شدن آن هش هدر بلاک هم تغییر میکند، تا زمانی که این هش از Target یا هدف تعیین شده توسط شبکه مقدار کوچکتری داشته باشد و بلاک به اصطلاح استخراج شود.
برای آن که بهتر متوجه نحوه عملکرد و کاربرد عدد نانس شوید، پیشنهاد میشود ابتدا با مکانیزم تابع هش آشنا شوید. اما به صورت خلاصه هش یک تابع رمزنگاری یک طرفه است که هر ورودی با هر حجمی، یک خروجی با طول ثابت ۲۵۶ بیتی میدهد که متمایز آن ورودی است و با کوچکترین تغییر در داده ورودی، خروجی یا همان هش کاملا تغییر میکند و یک چیز دیگر میشود. به همین دلیل به هش، اثر انگشت دیجیتال دادهها هم گفته میشود.
از بین این ۶ عددی که در هدر هر بلاک وجود دارد و در بالا هم به آنها اشاره شد، ۵ مورد مربوط به اطلاعات بلاک و شبکه بلاک چین هستند و ماینر قادر به تغییر آنها نیست و تنها چیزی که ماینر قادر به تغییر آن است همین عدد نانس است.
در واقع نانس یک عدد است که تنها کاربردی که دارد این است که ماینر با تغییر آن، قادر به تغییر اطلاعات هدر بلاک است (چون نانس یکی از اطلاعات موجود در هدر بلاک است) و بدین ترتیب با تغییر هدر بلاک، هش آن هم کاملا تغییر خواهد کرد.
ماینرها با استفاده از کامپیوترهای خود، با سعی و خطا آنقدر این عدد را تغییر میدهند تا هش هدر بلاک از تارگت تعیین شده توسط شبکه بیت کوین کوچکتر باشد.
اولین ماینری که موفق به پیدا کردن عدد نانس با شرایط گفته شده شود، برنده پاداش استخراج بلاک جدید میشود و بلاکی که آن ماینر موفق به استخراج آن شده است، به زنجیره بلاکها یا بلاک چین اضافه میگردد.
فرآیند استخراج
اما برای آن که بهتر متوجه کاربرد عدد نانس و فرآیندی که در استخراج اتفاق میافتد شوید، بیایید یکبار دیگر به شکلی سادهتر به کل آن نگاه کنیم:
هر ماینر ابتدا تعدادی از تراکنشهای تایید نشده موجود در شبکه (این تراکنشها در فضای MemPool قرار دارند) را برای خود انتخاب میکند (معمولا تراکنشهایی را انتخاب میکنند که کارمزد بیشتری دارند) و آنها را در قالب یک بلاک طبق بندی میکند؛ یعنی بدنه بلاک پیشنهادی این ماینر، از همین تراکنشهای انتخابی او تشکیل شده است.
در قسمت سربرگ، ورژن یک عدد است که به واسطه آن ماینر به شبکه اعلام میکند که تابع کدام نسخه از قوانین شبکه است. هش هدر بلاک قبلی هم که بر اساس آخرین بلاک موجود در بلاک چین تعیین میشود.
هش ریشه مرکل هم که در واقع هش تمام تراکنشهای موجود در این بلاک پیشنهادی است و بر اساس تراکنشهای انتخاب شده تعیین میشود. زمان هم که مشخص است و nBits هم که به نوعی نشان دهنده تارگت است و توسط شبکه بیت کوین تعیین شده و معیاری برای سخت و آسان کردن رقابت (سختی شبکه) است. هرچه تارگت کوچکتر باشد، شرایط سختتر میشود.
بعد از آن که تمام این اطلاعات مشخص شد، تنها چیزی که باقی میماند عدد نانس است که ماینر باید آن را خودش پیدا کند. ماینر ابتدا یک عدد شانسی را به جای نانس قرار میدهد؛ اما فرض کنید مثلا ابتدا عدد ۱ را به عنوان نانس قرار میدهد. حال تمام اطلاعات هدر مشخص شده و میتوان هش آن را محاسبه کرد.
اگر این هش مقدارش از عدد تارگت تعیین شده توسط شبکه کوچکتر باشد، ماینر موفق به استخراج بلاک پیشنهادی خودش شده و میتواند بلاکش را به زنجیره بلاک چین اضافه کند و پاداشش را دریافت کند؛ اما احتمال این که ماینر در اولین حدس خود برای عدد نانس موفق شود، نزدیک به صفر است (جلوتر متوجه میشوید که این احتمال چقدر کم است) و احتمالا آن عدد نانس منجر به پیدا شدن هش هدری بزرگتر از تارگت میشود که قابل قبول شبکه نیست.
در گام بعدی، ماینر حدس خود برای نانس را عوض میکند به فرض عدد ۲ را قرار میدهد و هش بلاک را محاسبه میکند و میبیند که هش هدر از تارگت کوچکتر میشود یا خیر و مجدد در صورت بزرگتر بودن هش، باز هم حدس خود برای عدد نانس را تغییر میدهد و با سعی و خطا این کار را ادامه میدهد.
حال در آخر، بعد از کلی حدس یا موفق میشود که بلاک خود را به عنوان اولین نفر استخراج کند یا یک نفر دیگر در جایی دیگر از دنیا زودتر از او موفق میشود بلاک پیشنهادیش را استخراج کند؛ در این صورت ماینر از ادامه دادن به حدس زدن نانس برای بلاک خودش دست میکشد. چون حالا دیگر آخرین بلاک موجود در بلاک چین (بلاک قبلی) و هش آن تغییر کرده و ماینر باید این اطلاعات را هم به روز رسانی کند و دوباره مشغول به حدس زدن عدد نانس شود.
حتما شنیدهاید که میگویند مثلا فلان دستگاه ماینر، ۱۴ ترا هش بر ثانیه (Th/s) قدرت دارد. جالب است بدانید که این عدد یعنی آن دستگاه قادر است در هر ثانیه ۱۴ تریلیون حدس مختلف برای عدد نانس بزند؛ یعنی این دستگاه میتواند در یک ثانیه، کل فرآیند توضیح داده شده را ۱۴ تریلیون بار تکرار نماید!
با این توان خارقالعاده در حدس زدن پیاپی، اگر چنین دستگاهی بخواهد در حال حاضر (با فرض هش ریت کلی ۷۰ میلیون تراهش بر ثانیه)، به تنهایی در این رقابت جهانی شرکت کند، شانسش برای برنده شدن، در هر ده دقیقه که یک بلاک جدید به شبکه اضافه میشود، تقریبا یک در ۵ میلیون است! یعنی شاید سالها طول بکشد که این دستگاه بتواند به تنهایی موفق به استخراج یک بلاک جدید شود.