ارتباط نود (Node) و ماینینگ (Mining): ساده و سرراست

آیا میدونید که نود (node) توی دنیای بیت کوین به چه چیزی گفته میشه؟ یا این که نودها اطلاعاتی رو به همدیگه می فرستن، یعنی چی و دقیقا چه اتفاقی می افته؟ از ارتباطش با ماینینگ و استخراج بیت کوین چیزی شنیدید؟ اصلا خود فرآیند ماینینگ چه طور انجام میشه و چطوری با صرف کردن هزینه و برق و قدرت پردازش کامپیوتری، بیت کوین های جدیدی تولید میشن؟ توی این مطلب سعی می کنیم این موضوعات رو به طور روشن و شفاف توضیح بدیم.

نود (Node)

شبکه ی بیت کوین رو نودهایی که توی این شبکه هستن تشکیل میدن. نود، به هر دستگاهی گفته میشه که قابلیت اتصال به اینترنت رو داره و یک کلاینت (client) یا نرم افزار بیت کوین روی اون نصب و اجرا میشه. در واقع بهتره بگیم هر کلاینتی که به اینترنت هم وصل شده، یک نود حساب میشه.

 میشه گفت که کلاینت بیت کوین از دو بخش تشکیل شده:

1. بخشی که مسئولیت ذخیره ی اطلاعات لازم برای ارسال و دریافت بیت کوین توسط خود فرد رو داره (کلید خصوصی، کلید عمومی، آدرس، مقدار دارایی).

2. بخشی که با اطلاعات تراکنش ها و همینطور با سایر نودهای موجود توی شبکه سروکار داره

 این بخش دوم کلاینت، برنامه ریزی شده که سه تا کار انجام بده:

  • چک کردن تراکنش های جدید و تایید درستی اونها
  • ارسال تراکنش های جدید و تراکنش های قدیمی تایید شده به باقی نود ها (شامل تراکنش های خود فرد)
  • نگه داشتن یک نسخه از تراکنش های تایید شده داخل خودش (یک نسخه از بلاک چین).

منظور از تراکنشها، همون تراکنشهای ارسال و دریافت بیت کوین هستن که افراد مختلف توی سراسر دنیا به شکل های مختلف انجام میدن. تمام مبادلات وارد شبکه ی بیت کوین میشن و اطلاعات مربوط به اونها توسط نودها چک میشه و در صورت تایید، به نودهای دیگه هم ارسال میشه.

بنابراین، نودهای شبکه ی بیت کوین کلاینت ها یا همون نرم افزارهایی هستن که با هم دیگه در ارتباطن، اطلاعات مربوط به تراکنشها رو چک و تایید می کنن و به همدیگه میفرستن، و یک نسخه از تمام تراکنشهای انجام شده و تایید شده توی شبکه رو پیش خودشون نگه میدارن.

ماینینگ (Mining)

قبل از اینکه فرآیند ماینینگ رو توضیح بدیم، اول بهتره مفهوم بلاک و بلاک چین رو باهم بررسی کنیم.

 بلاک

 روزانه صدها هزار تراکنش توی دنیای بیت کوین انجام میشه و همونطور که گفتیم، نودها نسخه ای از این تراکنش ها رو پیش خودشون نگه می دارن. اما این تراکنش ها به طور گروهی توی نود ذخیره میشن و نه تک تک، که به این گروه تراکنش ها در اصطلاح بلاک (block) گفته میشه. هر تراکنش بیت کوین بسته به جزئیات تراکنش، حجم مشخصی داره (از چند صد بایت تا به بالا) و هر بلاک هم از نظر تئوری حداکثر 2.8 مگابایت گنجایش داره (بعد از تغییرات اخیر). بنابراین هر بلاک میتونه شامل چند هزار تراکنش با حجم خیلی کم باشه، یا حتی یک تراکنش 2.8 مگابایتی (البته به لحاظ تئوری، چون در عمل کم پیش میاد که تراکنشی حجم 2.8 مگابایتی داشته باشه).

نکته ی دیگه اینکه هر بلاک غیر از تراکنشهای انجام شده، یک سری مشخصات دیگه رو داخل خودش داره که از جمله ی اونها میشه به block header اشاره کرد. header بلاک شامل اطلاعاتی مثل یک نسخه ی هش شده از تمام تراکنش های داخل اون بلاک و همچنین یک نسخه ی هش شده از header بلاک قبل از خودش هست (بعلاوه ی آیتم های دیگه). از این طریق، هر بلاک به وسیله ی header خودش با بلاک قبلی ارتباط داره و میشه گفت که بلاک ها با زنجیرهای ریاضی و دیجیتالی به همدیگه وصل شدن و بلاک چین رو تشکیل دادن.

بلاک چین

همونطور که از اسمش مشخصه، بلاک چین زنجیره ای از بلاک هاست و اطلاعات تمام تراکنش های تایید شده از زمان به وجود اومدن بیت کوین در بلاک چین ثبت شدن. در واقع میشه بلاک چین رو یک دفترکل فرض کرد، که هر بلاک یک صفحه از اون رو تشکیل میده و این صفحه با صفحات قبلی و بعدی خودش به لحاظ ریاضی ارتباط داره. تمام نودهای موجود توی شبکه ی بیت کوین، آخرین نسخه ی بلاک چین رو توی خودشون دارن و به طور مداوم آپدیت میشن و بلاک های جدید رو به اون اضافه میکنن. اما این بلاک های جدید چطور به بلاک چین اضافه میشن و اصلا بلاک جدید چطور به وجود میاد؟

جواب؟ ماینینگ.

ماینینگ

ماینینگ یا استخراج بلاک (همون استخراج بیت کوین)، به فرآیند هش کردن header بلاک گفته میشه که هدفش پیدا کردن عددی کمتر از عدد مشخص شده ی فعلی (target) هست. با یه مثال این موضوع رو بررسی می کنیم:

فرض کنیم شما یک عدد بین 1 تا 100 رو توی ذهنتون در نظر گرفتید، و به دوست خودتون میگید که باید یا خود اون عدد یا عددی که کمتر از اون باشه رو حدس بزنه. پس اگه شما عدد 80 رو مد نظر داشته باشید، تمام اعداد از 1 تا 80 جواب درستی هستن. همینطور اگر عدد مورد نظر شما 30 باشه، تمام اعداد از 1 تا 30 جواب درستی هستن، اما این بار احتمال اینکه دوست شما جواب درست رو بده پایینتر اومده. اگر فرضا عدد مد نظر شما 5 باشه، احتمال جواب درست خیلی پایینتر اومده و دوستتون فقط 5 درصد شانس حدس درست داره.

فرآیند ماینینگ هم دقیقا چیزی شبیه به این مثال هست. نرم افزار یا کلاینت شما باید header بلاک مد نظر رو تا جایی هش کنه که نتیجه ی اون عددی برابر یا کمتر از عدد مشخص شده ی فعلی باشه. این روند کاملا تصادفیه و اینطور نیست که هرکس مدت زمان بیشتر هش کنه، به جواب نزدیکتر بشه. با عوض کردن یک متغیر به اسم nonce، میشه هش های مختلف header بلاک رو حساب کرد؛ عوض کردن این متغیر و محاسبه ی هش جدید رو تا جایی ادامه میدیم که نتیجه کمتر/مساوی عدد مشخص شده بشه.

اولین نودی که جواب کمتر/مساوی عدد مشخص شده رو پیدا کنه، بلاک مورد نظر رو ماین کرده و می تونه به بلاک چین اضافه اش کنه. جایزه ی این ماین کردن و اضافه کردن بلاک به بلاک چین هم، دریافت مقداری بیت کوین هست که سود آوری ماینینگ به اون وابسته هست. البته تمام این کارها رو خود نرم افزار بیت کوین انجام میده و شما لازم نیست کاری بکنید. صرفا اینها رو توضیح میدیم که روند ماین کردن بلاک براتون روشن بشه. نرم افزار بیت کوین این قابلیت رو داره که یا صرفا برای انجام تراکنش و چک کردن و تایید باقی تراکنش ها استفاده بشه، یا اینکه برای ماین کردن هم به کار گرفته بشه. انتخاب فعالسازی گزینه ی ماین کردن با خود شماست.

 خب، اینجا سه تا سوال به وجود میاد، که بهشون جواب میدیم:

1. بلاک جدید چطور تشکیل میشه؟

تراکنش های جدید و تایید شده توی فضایی به اسم memory pool یا استخر حافظه هستن و تمام نودها به این استخر دسترسی دارن. میشه این فضا رو چیزی شبیه به فضای RAM یا حافظه موقت کامپیوتر تصور کرد. تراکنش های جدید موقتا اونجا هستن، تا این نودها شروع به چیدن اونها توی یک بلاک جدید میکنن و همزمان کار هش کردن این بلاک هم شروع میشه تا عدد مورد نظر (کوچکتر/مساوی عدد مشخص شده ی فعلی) پیدا بشه. یک بلاک دائما در حال آپدیت شدن با تراکنش های جدید و همینطور هش شدن توسط نودهاست، تا وقتی که جواب درست پیدا بشه.

2. عدد مشخص شده ی فعلی چطور و توسط چه کسی تعیین میشه؟

ساتوشی ناکاموتو (خالق بیت کوین) شبکه ی بیت کوین رو جوری طراحی کرد که به طور متوسط هر 10 دقیقه، یک بلاک ماین بشه. اما چطور؟ توی همون مثال اعداد 1 تا 100، گفتیم که هرچی عدد مد نظر کوچیکتر باشه، شانس پیدا کردنش هم کمتر میشه. همین موضوع در مورد شانس ماین کردن بلاک هم صدق می کنه. سرعت ماین شدن یک بلاک به این بستگی داره که عدد مشخص شده ی فعلی (target) چه عددی باشه. 

نودهای شبکه تقریبا هر دو هفته یکبار، به 2016 بلاک جدید ماین شده طی این دو هفته نگاه می کنن و متوسط زمان ماین شدن اونها رو حساب می کنن. اگر متوسط زمان ماین شدن بلاک ها کمتر از 10 دقیقه شده باشه و بلاک ها زودتر از حد انتظار ماین شده باشن، نودها عدد کوچکتری رو به عنوان هدف مشخص می کنن، که یعنی شانس پیدا کردن عدد کوچکتر/مساوی کاهش پیدا می کنه و بنابراین سختی ماینینگ(mining difficulty) بیشتر میشه. اگر هم ماین شدن بلاک ها به طور متوسط بیشتر از 10 دقیقه طول کشیده باشه، نودها سختی ماینینگ رو کم می کنن. چون تک تک نودها نسخه ی یکسانی از بلاک چین رو دارن و دستورها و عملیات های یکسانی رو هم انجام میدن، محاسبات همه ی اونها به یک رقم یکسان برای عدد مشخص شده (target) منتهی میشه. اینکه چرا زمان تعیین سختی ماینینگ هر دو هفته یکباره و ماین شدن هر بلاک هم 10 دقیقه زمان میبره، مشخص نیس. این تنظیمات رو ساتوشی ناکاموتو تعیین کرده و شاید دلیل خوبی براش داشته.

بنابراین، تا اینجا گفتیم که سختی ماینینگ توسط تک تک نودها و از طریق دستکاری عدد مشخص شده ی فعلی تعیین میشه، و اینطور نیست که سیستم خودش این عدد رو تعیین و به نودها اعلام کنه. غیرمتمرکز بودن شبکه و مستقل بودن نودها هم تابع همین موضوع هست.

3. اگر تمام نودها مثل هم هستن، چرا بعضیهاشون زودتر از بقیه به جواب می رسن و بلاک رو ماین می کنن؟

ماین کردن یک بلاک به نیروی پردازشی احتیاج داره. کلاینت های بیت کوین دستورات و برنامه ریزی های یکسانی دارن، اما روی کامپیوترها و دستگاهایی نصب شدن که توانایی پردازشی یکسانی ندارن. برای ماین کردن یک بلاک، کامپیوتر شما در هر ثانیه هش های مختلفی از header اون بلاک رو تولید و تست می کنه. طبیعتا هرقدر که تعداد این هش ها در هر ثانیه بیشتر باشه، شانس بیشتری برای پیدا کردن عدد مورد نظر وجود داره. نرخ هش کردن کامپیوترها مگاهش(MH/s)، گیگا هش (GH/s) و ترا هش (TH/s) بر ثانیه است، که این نرخ بستگی به قدرت پردازشی کامپیوتری داره که کلاینت بیت کوین روی اون نصب شده.

البته باید گفت که در حال حاضر از کامپیوترهای توی خونه و لپتاپ برای هش کردن و ماین کردن بلاک ها استفاده نمیشه، چون بازار ماینینگ بیت کوین به قدری داغ شده که دستگاه های مخصوصی برای انجام اینکار تولید شدن (به اسم ASIC) و این دستگاه ها قابلیت پردازش بیشتری دارن و در نتیجه می تونن سریعتر به جواب مورد نظر برسن. اما استفاده از اونها نیازمند دسترسی به برق ارزون قیمت هست، چون مصرف بالایی دارن و اگر بهای برق بالا باشه، بیت کوین های ماین شده سودآوری زیادی نخواهند داشت. 

یک نمونه دستگاه ASIC که برای ماین کردن بیت کوین استفاده می شود

نتیجه

کل موضوع نود و ماین کردن، برمیگرده به استفاده از کلاینت بیت کوین. هر کسی که کلاینت بیت کوین روی کامپیوترش داره و اون رو به اینترنت وصل کرده، یک نود حساب میشه. حالا این فرد میتونه انتخاب بکنه که از یکی از امکانات کلاینت خودش که همون ماین کردن باشه، استفاده بکنه یا نه. به بیان دیگه، هر ماینری یک نود در شبکه ی بیت کوین به حساب میاد، اما هر نود لزوما ماینر نیست. با فعال کردن گزینه ی ماینینگ، کلاینت یا نرم افزار بیت کوین header بلاک رو تا جایی هش می کنه که عددی کوچکتر/مساوی عدد مشخص شده ی فعلی (target) پیدا بشه. اینجا کار ماین کردن بلاک تموم میشه و کلاینت بلاک جدید رو به بلاک چین اضافه می کنه، مقداری بیت کوین به عنوان جایزه دریافت می کنه و میره سراغ بلاک بعدی.

منابع:

Bitcoin.stackexchange.com

learnmeabitcoin

Cointelegraph

Stackexchange

Investopedia

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*