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