نانس چیست؟ توضیح nonce در بلاک چین به زبان ساده
آیا میدانید مفهوم «نانس» در بلاک چین چیست و چه کاربردی دارد؟ شاید شنیده باشید که ماینرها به دنبال پیدا کردن چیزی به نام نانس هستند تا بتوانند از فرایند استخراج بلاک، پاداش دریافت کنند. کاملا درست است. ولی اینکه نانس از کجا آمده و چه نقشی در فرایند استخراج ارز دیجیتال دارد، موضوعی است که تصمیم داریم در این مقاله راجع به آن صحبت کنیم. این بحث نیاز به درک مفاهیم خاصی از جزئیات بلاکها و سازوکار رمزنگاری در بلاک چین دارد و به همین خاطر ابتدا به مقدمات پرداختهایم و در قسمت انتهایی مقاله، سازوکار نانس را بررسی کردهایم.
همانطور که میدانید در فناوری بلاک چین برای تایید عملیات مختلف از الگوریتم اجماع استفاده میشود که انواع مختلفی دارد مثل الگوریتم گواه اثبات کار. این الگوریتم در شبکه بسیاری از ارزهای دیجیتال از جمله بیت کوین استفاده میشود. اساس کار این الگوریتم بر پایه قدرت پردازشی ماینرها در حل مسائل پیچیده ریاضی طراحی شده است. نانس یک عدد تصادفی است و توسط ماینرها در بلاک چینی که بر اساس گواه اثبات کار طراحی شده، برای تشخیص هش بلاک جدید استفاده میشود. در ادامه بیشتر با مفهوم نانس آشنا میشویم.
آشنایی با نانس
«نانس» (nounce) کوتاهشده عبارت Number Only used Once به معنای عددی یکبار مصرف است. این عدد به یک بلاکِ رمزنگاریشده اضافه شده و باعث میشود عملیات رمزنگاری نهایی با یک درجه سختی مشخص صورت بگیرد. نانس در حقیقت عددی است که ماینرهای شبکه در تلاشاند آن را پیدا کنند.
پیدا کردن نانس قابل قبول، مهمترین فاکتور برای اضافهشدن بلاک جدید به بلاک چین است؛ به همین خاطر به اولین ماینری که نانس معتبر را پیدا کند پاداش داده میشود. اگر موضوع کمی پیچیده به نظر میرسد، اصلا نگران نباشید. در ادامه بهطور کامل نانس را توضیح خواهیم داد.
برای اینکه بتوانیم مفهوم نانس را بهتر درک کنیم، ابتدا لازم است که در مورد موضوعاتی مثل رمزنگاری، عملیات هشینگ، تابع هش، محتویات بلاکها مثل هدر بلاک و… کمی صحبت کنیم تا با نحوه پردازش اطلاعات در بلاک چین آشنا شوید. سپس بهراحتی متوجه طرز کار نانس خواهید شد. در ادامه با ما همراه باشید.
هشینگ Hashing چیست؟
همانطور که میدانید همه ارزهای دیجیتال بر بستر فناوری بلاک چین ساخته شدهاند. برای اینکه امنیت شبکه بلاک چین حفظ شود، اطلاعات هر بلاک توسط عملیات «هشینگ» (Hashing)، رمزنگاری میشود. این رمزنگاری توسط یک تابع ریاضی برگشتناپذیر به نام «هش فانکشن» (Hash Function) انجام میشود. هنگام ایجاد بلاک جدید، هش بلاک قبلی به همراه اطلاعات بلاک جدید توسط تابع هش رمزنگاری میشوند و هش بلاک جدید ساخته میشود. به این صورت تمام زنجیره بلاکها به هم مرتبط هستند.
عملکرد تابع هش به این صورت است که به ازای هر نوع ورودی، یک خروجی منحصربهفرد با طول مشخص ۲۵۶ بیت تولید میکند. اگر صد بار هم ورودی یکسان به تابع هش بدهید، همواره خروجی یکسانی را تولید میکند؛ اما اگر کوچکترین تغییری در ورودی ایجاد شود، خروجی کاملا تغییر خواهد کرد.
از این فرایند برای حفظ امنیت و یکپارچگی بلاک چینها استفاده میشود. یعنی اگر کسی بخواهد اطلاعات یک بلاک را دستکاری کند، مجبور است هش تمام بلاکهای قبلی را تغییر دهد تا کسی متوجه این دستکاری نشود و احتمال انجام چنین کاری بسیار کم است.
هدر بلاک
هر بلاک در بلاک چین از دو قسمت بدنه و هدر ساخته شده است. تراکنشها به صورت خاصی که به آن «درخت مرکل» (Merkle Tree) گفته میشود، بهصورت رمزنگاریشده در بدنه بلاک قرار دارند. قسمت «هدر» (Header) جایی است که مشخصات کنترلی خاصی برای هر بلاک در آن قرار داده میشود تا عملیات پردازش بلاکها سادهتر انجام شود.
محتویات درون هدر بلاک شامل اطلاعاتی است که در اصطلاح به آن «متادیتا» (metadata) گفته میشود. مثلا در بلاک چین بیت کوین، این متادیتا یک رشته طولانی ۸۰ بایتی است و شامل ورژن بلاک (۴ بایتی)، هش هدر بلاک قبلی (۳۲ بایتی)، هش درخت مرکل (۳۲ بایتی)، تایم استمپ یا پیوستگی زمانی بلاک (۴ بایتی)، تارگت یا سختی شبکه (۴ بایتی) و نانس (۴ بایتی) است. با استفاده از تمام این قسمتها در نهایت یک بلاک معتبر منحصربهفرد تولید میشود.
ورژن بلاک یک پارامتر عددی است که تغییرات پروتکل بیت کوین را نشان میدهد. مثلا وقتی یک فورک در شبکه اتفاق بیفتد، این عدد تغییر میکند. هش درخت مرکل (یا ریشه مرکل) پارامتری است که از طریق هش تراکنشها به دست میآید. جالب است بدانید که تراکنشهای هر بلاک بیت کوین به صورت جفت جفت هش میشوند و هشهای تولیدشده مجدد بهصورت جفت جفت هش شده و این کار بهصورت درخت (از ریشه تا بالاترین نقطه) ادامه پیدا میکند تا زمانی که فقط یک هش نهایی تولید شود که به آن ریشه مرکل گفته میشود و در هدر بلاک قرار میگیرد.
تایم استمپ پارامتر بعدی موجود در هدر بلاک است و تاریخ و زمان دقیق وقوع اتفاقات درون بلاک را نشان میدهد و با استفاده از آن میتوان پیوستگی زمانی هر تراکنش را بررسی کرد. تارگت یا سختی شبکه، پارامتری است که توسط شبکه تعیین میشود و درجه سختی کار ماینرها را مشخص میکند. در حقیقت خروجی کار ماینرها یافتن عددی است که از تارگت کوچکتر باشد.
نانس آخرین پارامتری است که برای تولید هش نهایی بلاک مورد نیاز است. ماینرها با سیستمهای خاص خود در هر ثانیه چندین میلیون عدد را امتحان میکنند تا در نهایت «نانس طلایی» (Golden Nonce) را پیدا کنند. نانس طلایی همان عددی است که از تارگت کوچکتر بوده و منجر به پیدا شدن و تأیید بلاک جدید میشود.
ساز و کار و نحوه بدست آوردن نانس
حالا که با محتویات و اتفاقاتی که در یک بلاک از بلاک چین میفتد آشنا شدیم، به توضیح ساز و کار و نحوه به دست آوردن نانس توسط ماینر میپردازیم.
میدانیم که ماینر توان پردازشی خود را در اختیار شبکه بلاک چین قرار میدهد و این توان پردازشی صرف حل معادلات پیچیده ریاضی میشود و کسی که زودتر به جواب برسد، بلاک جدید را به بلاک چین اضافه میکند و در ازای این کار پاداش میگیرد. اما این معادلات چگونه مشخص میشوند و درجه سختی آنها چطور تغییر میکند؟
به این مثال ساده توجه کنید. فرض میکنیم در یک کلاس درس، معلم یک معادله روی تخته مینویسد که از این قرار است: (۱۷۶= ؟ + ۲۵) و میگوید اولین دانشآموزی که زودتر به جواب برسد، جایزه دریافت میکند. این یک سوال ساده است ولی اگر پارامترهای این معادله با مقادیر ۲۵۶ بیتی و خروجیهای هش جایگزین شود، دیگر یک معادله با روش حل مشخص نخواهد بود و فقط از طریق حدس زدن تصادفی میتوان جواب درست را پیدا کرد.
در مثال بالا، میتوان علامت سوال را همان نانس در نظر گرفت. برای پیدا کردن مقدار صحیح نانس، تعداد بسیار زیادی عملیات آزمون و خطا باید انجام شود. ماینر باید یک نانس تصادفی را انتخاب کرده و به همراه هش هدر بلاک فعلی در تابع هش قرار دهد و هش خروجی را با هش تارگت مقایسه کند. اگر این هش از تارگت کوچکتر باشد، ماینر یک جواب قابل قبول برای معادله پیدا کرده و به این ترتیب تکلیف هش نهایی بلاک مشخص خواهد شد و یک بلاک با موفقیت استخراج میشود.
ماینر با توجه به قدرت پردازشی که دارد، در هر ثانیه چندین میلیون عدد تصادفی را در معادله تست میکند، پس احتمال اینکه جواب درست در اولین تلاش پیدا شود، تقریبا صفر است. هر چه مقدار عددی تارگت بزرگتر باشد، پیدا کردن جوابی کوچکتر از آن کار سادهتری است و برعکس هر چه تارگت کوچکتر باشد، پیدا کردن جوابی کوچکتر از آن دشوارتر خواهد بود. به همین خاطر، از تارگت برای تعیین میزان سختی شبکه استفاده میشود.
جالب است بدانید که از آنجایی که احتمال پیدا کردن تصادفی نانس بدون انجام حجم زیادی از کار پردازشی ممکن نیست، اسم این الگوریتم گواه اثبات کار گذاشته شده است.
میزان سختی شبکه برای تمام ماینرها یکسان است، یعنی اگر توان پردازشی دو ماینر با هم برابر باشد، هر دو شانس یکسانی در پیداکردن هش بلاک جدید دارند. هر بلاک چین مدت زمان لازم برای ساخت بلاک جدید را مقدار مشخصی در نظر میگیرد. اگر توان پردازشی بیشتر شود بهطوری که بلاکها زودتر از موعد مقرر پیدا شوند، سختی شبکه افزایش پیدا میکند تا همواره مدت زمان استخراج بلاک جدید ثابت بماند. به همین ترتیب اگر توان پردازشی شبکه کاهش پیدا کند، سختی شبکه هم کمتر میشود.
سخن پایانی
در این مقاله به بررسی نانس و سایر اتفاقاتی که در یک بلاک چین مبتنی بر الگوریتم گواه اثبات کار میفتد پرداختیم. برای پردازش و اضافهشدن هر بلاک جدید کارهای زیادی باید انجام شود. تکتک تراکنشهای هر بلاک با تابع هش رمزنگاری میشود. به هر بلاک یک هدر شامل پارامترهای ورژن، هش درخت مرکل، تایم استمپ، تارگت و نانس اضافه میشود تا مدیریت پیوستگی بلاک چین سادهتر انجام گیرد.
از نانس به عنوان پارامتری تصادفی و یکبارمصرف برای تشخیص هش بلاک جدید استفاده میشود و ماینرها توان پردازشی دستگاههای خود را صرف پیدا کردن نانس قابل قبول میکنند.
ماینر برای استخراج موفق یک بلاک میبایست به صورت تصادفی مجموعهای از مقادیر را برای نانس امتحان کند و به هش محتویات بلاک اضافه کرده و مجدد آنها را هش کند. این کار تا زمانی انجام میشود که هش قابل قبول (که کوچکتر از تارگت است) پیدا شود.
برای دریافت مشاوره تخصصی رایگان از کارشناسان ما، اطلاعات خواسته شده رو تکمیل فرمایید.