آشنایی با پرکاربردترین مکانیزم اجماع؛ اثبات کار (PoW)
حتما تا به حال در مورد استخراج و ماینینگ بیتکوین شنیدهاید، ولی آیا میدانید این عملیات از چه الگوریتمی استفاده میکند؟ مکانیزم اجماع اثبات کار (PoW)، الگوریتمی است که فرآیند استخراج یا ماینینگ رمزارز بیتکوین از آن استفاده میکند. این الگوریتم یکی از مکانیزمهای پرکاربرد میباشد و اولین شبکهای که استفاده از PoW در بلاکچین را معرفی کرد، بیتکوین بود.
در این مقاله سعی شده به صورت مفصل به این الگوریتم پرداخته شود و مقایسهای هم با دیگر الگوریتم مهم، یعنی اثبات سهام یا PoS، شده است.
الگوریتم اجماع چیست؟
قبل از پرداختن به اصل موضوع، لازم است ابتدا به تعریف مکانیزم اجماع بپردازیم. به منظور به دست آوردن اطمینان در یک شبکه شامل چندین گره، الگوریتمهای اجماع (Consensus Algorithm) طراحی شدهاند. در واقع مکانیزم اجماع روشی است برای به توافق رساندن تمام مشارکت کنندگان شبکه، که باعث دستیابی به اعتماد بین طرفین میشود. دستیابی به توافق با استفاده از این الگوریتمها، این اطمینان را میدهد که تمامی بلوکهای اضافه شده به بلاکچین، همان نسخههایی باشند که تمامی گرهها بر روی آن توافق کردهاند. در مقاله الگوریتم اجماع در بلاکچین، به طور کامل به این مبحث پرداخته شده است.
اثبات کار (Proof of Work) چیست؟
اثبات کار، یک نوع الگوریتم اجماع است که در جهت تایید و اعتبارسنجی به تراکنشها و همچنین افزودن بلاکهای جدید به شبکه بلاکچین استفاده میباشد. میتوان گفت رقابتی که میان ماینرها وجود دارد، به دلیل وجود این الگوریتم در بلاکچین است.
Proof of Work (به اختصار PoW) مکانیزمی برای جلوگیری از دوبار خرج کردن (double-spending) میباشد. اکثر بلاکچینهای قدیمی موجود در حوزه کریپتوکارنسی، از این مکانیزم به عنوان الگوریتم اجماع خود استفاده میکنند. (بلاکچینهایی که از الگوریتم اجماع اثبات کار استفاده میکنند را میتوانید در این لینک بررسی کنید) این روش، همان چیزی است که آن را راهی برای بالا بردن امنیت دفتر کل رمز ارزها مینامیم. PoW، اولین الگوریتم اجماعی بود که توسط رمز ارزها استفاده شد و تا به امروز نیز الگوریتم غالب باقی مانده و بیشترین استفاده را در میان پروژههای موجود دارد. اگرچه فناوری اثبات کار از مدتها قبل وجود داشت، اما توسط ساتوشی ناکاموتو در وایت پیپر بیتکوین در سال ۲۰۰۸ معرفی شد.
تاریخچه الگوریتم Proof of Work
مفهوم Proof of Work برای اولین بار در سال ۱۹۹۳ توسط Cynthia Dwork و Moni Naor بیان شد که روشی برای جلوگیری از سوءاستفادههایی مانند اسپم کردن بر روی شبکهها میباشد. Markus Jakobsson و Ari Juels نیز در سال ۱۹۹۹ برای اولین بار اصطلاح اثبات کار را بیان کردند و این اصطلاح بعداً توسط رمزارز بیت کوین مشهور و شناخته شد.
دوبار خرج کردن چیست؟
double-spending، زمانی رخ میدهد که یک دارایی (برای مثال یک واحد بیت کوین) بیش از یک بار خرج شود. این اصطلاح معمولاً در زمینه پول دیجیتال استفاده میشود؛ در نهایت، برای دوبار خرج کردن همان پول نقد فیزیکی (cash) با مشکل مواجه خواهیم شد. فرض کنید به یک کافی شاپ میروید و برای یک قهوه پول میپردازید؛ پول نقد را به صندوقدار تحویل میدهید که احتمالاً آن را در یک دفتر ثبت میکند و به سما یک قبض رسید میدهد. شما نمیتوانید به کافی شاپ روبروی خیابان بروید و با همان قبض قهوه دیگری سفارش دهید.
اگر میخواهید بدانید که دوبار خرج کردن در بلاکچین چگونه اتفاق میافتد؟ مقاله مربوط به آن را حتما بخوانید.
چرا اثبات کار (Proof of Work) ضروری است؟
همانطور که میدانید، کاربران تراکنشها را به شبکه پخش میکنند، اما تراکنشها بلافاصله معتبر تلقی نمیشوند. این موضوع تنها زمانی اتفاق میافتد که آن تراکنشها به بلاکچین اضافه شوند. بلاکچین یک پایگاه داده بزرگ است که هر کاربر میتواند آن را ببیند، بنابراین هرکسی میتواند بررسی کند که آیا مبلغ قبلاً خرج شده است یا خیر؟
این امر را اینگونه تصور کنید: شما و سه نفر از دوستانتان یک دفترچه یادداشت دارید. هر زمان که یکی از شما میخواهد هر واحد را انتقال دهد، آن را یادداشت میکنید؛ صدف به علی پنج واحد پرداخت میکند، علی به محمد دو واحد پرداخت میکند و…
در اینجا پیچیدگی دیگری نیز وجود دارد؛ هر بار که تراکنشی انجام میدهید، به تراکنشی که مبلغ از آنجا انتقال داده شده اشاره میشود. بنابراین، اگر علی دو واحد به محمد پرداخت کند، ورودی در واقع به شکل زیر خواهد بود: علی دو واحد از تراکنش قبلی با صدف را به محمد پرداخت میکند.
اکنون، ما راهی برای پیگیری واحدها داریم. به این صورت که اگر علی سعی کند با استفاده از همان واحدهایی که به محمد فرستاده تراکنش دیگری انجام دهد، همه بلافاصله متوجه خواهند شد و گروه اجازه نمیدهد تراکنش به دفترچه یادداشت اضافه شود. از آنجاییکه در یک گروه کوچک همه یکدیگر را میشناسند، این موضوع ممکن است به خوبی کار کند. بنابراین احتمالاً در مورد اینکه کدام یک از دوستان باید تراکنشها را به دفترچه یادداشت اضافه کنند، توافق خواهند کرد.
اگر یک گروه با ۱۰۰۰۰ شرکت کننده بخواهیم چطور؟
ایده دفترچه یادداشت به خوبی مقیاسبندی نمیشود، زیرا هیچ کس نمیخواهد به یک غریبه برای مدیریت آن اعتماد کند. اینجاست که به چیزی به نام Proof of Work نیاز داریم. این تضمین میکند که کاربران پولی را که حق خرج کردن آن را ندارند خرج نمیکنند. الگوریتم PoW، با استفاده از نظریه بازی و رمزنگاری، هر کسی را قادر میسازد تا بلاکچین را مطابق با قوانین سیستم بهروزرسانی کند.
PoW چگونه کار میکند؟
تراکنشها نه به صورت یکی یکی، بلکه به صورت تودهای به بلوکها اضافه میشوند. بعد از اعلام تراکنشها به شبکه، کاربرانی که یک بلوک ایجاد میکنند آنها را در یک بلوک کاندید قرار میدهند. تراکنشها تنها زمانی معتبر تلقی میشوند که بلوک کاندید به یک بلوک تأیید شده تبدیل شود، به این معنی که به بلاکچین اضافه شده است.
با این حال، اضافه کردن یک بلوک ارزان نیست. اثبات کار مستلزم آن است که یک ماینر (کاربر ایجاد کننده بلوک) از یک منبع قدرت محاسباتی برای هش کردن دادههای بلوک، تا زمانی که یک راه حل برای معما پیدا شود، استفاده کند. هش کردن دادههای بلوک به این معنی است که آن از یک تابع هش برای ایجاد هش بلوک عبور داده میشود. هش بلوک مانند یک «اثر انگشت» عمل میکند؛ به صورت یک هویت برای دادههای ورودی که برای هر بلوک منحصر به فرد است.
این تابع هش را مثل یک دستگاه گوشت چرخ در نظر بگیرید؛ ورودی= گوشت، خروجی= گوشت چرخ کرده! آیا میتوانید گوشت چرخ کرده را به گوشت سالم تبدیل کنید؟ قطعا خیر! تابع هش نیز به این صورت است، معکوس کردن هش بلوک برای دریافت دادههای ورودی عملاً غیرممکن است. برای بررسی اینکه خروجی یکسان است یا خیر، فقط باید ورودی را از طریق تابع ارسال کرد.
در Proof of Work، باید دادههایی را ارائه داد که هش آنها با شرایط خاصی مطابقت دارد. تنها گزینه این است که دادههای خود را از طریق یک تابع هش ارسال کرده و بررسی شود که آیا با شرایط مطابقت دارد یا خیر. اگر اینطور نیست، باید اطلاعات را کمی تغییر داد تا هش متفاوتی به دست آورد. تغییر حتی یک کاراکتر در دادهها نتیجهای کاملا متفاوت خواهد داشت، بنابراین هیچ راهی برای پیشبینی خروجی وجود ندارد. (برای اطلاعات بیشتر در رابطه با توابع هش پیشنهاد میکنم مقاله “تابع هش یا هشینگ چیست” از سایت بیتفا را مطالعه کنید)
در نتیجه، ایجاد بلوک به این صورت خواهد بود:
شما معمولاً اطلاعات مربوط به تمام تراکنشهایی را که میخواهید اضافه کنید به علاوه برخی دادههای مهم دیگر را میگیرید، سپس همه را با هم هش میکنید. اما از آنجایی که مجموعه داده شما تغییر نمیکند، باید اطلاعاتی را اضافه کنید که متغیر باشد. در غیر این صورت، شما همیشه همان هش را به عنوان خروجی دریافت خواهید کرد. این داده متغیر همان چیزی است که آن را nonce مینامیم.
به طور خلاصه، ماینینگ (Mining) فرآیند جمعآوری دادههای بلاکچین و هش کردن آن به همراه یک nonce است تا زمانی که یک هش خاص پیدا شود. اگر یک هش پیدا شود که شرایط تعیین شده توسط پروتکل را برآورده کند، حق پخش بلوک جدید به شبکه به وجود میآید. در این مرحله، سایر شرکتکنندگان شبکه، بلاکچینهای خود را بهروزرسانی میکنند تا بلوک جدید را در بر گیرند.
برای رمز ارزهای اصلی که الان وجود دارند، شرایط فوق العاده چالش برانگیز است؛ هرچه نرخ هش (hash rate) در شبکه بیشتر باشد، یافتن هش معتبر دشوارتر است. همانطور که میتوانید تصور کنید، تلاش برای حدس زدن مقادیر زیادی هش میتواند روی سیستم شما گران تمام شود. یعنی، چرخههای محاسباتی و برق را هدر میدهید. اما اگر هش معتبری پیدا کنید، این پروتکل به شما پاداش میدهد.
موفقیت ماینرها، به میزان قدرت محاسباتی آنها در شبکه بستگی دارد؛ به این صورت که اگر قدرت شبکه افزایش یابد، بلوکها به سرعت و پشت سر هم استخراج میشوند. هنگامی که قدرت پردازشی شبکه به مقدار زیادی افزایش یابد، سختی شبکه (Difficulty) افزایش مییابد تا فرایند استخراج سختتر و دیرتر انجام شود و بالعکس، زمانی که قدرت محاسباتی شبکه کاهش یابد، شبکه سختی را کاهش میدهد تا بلوکها راحتتر و سریعتر استخراج شوند. پروتکل بیت کوین، سختی شبکه را تقریبا دو هفته به نحوی تنظیم میکند که زمان ایجاد هر بلاک، تقریبا ۱۰ دقیقه طول بکشد.
بیایید آنچه را که گفتیم به صورت خلاصه مرور کنیم:
- استخراج کردن، روشی پرهزینه و گران است.
- در صوت تولید یک بلوک معتبر، به شما پاداش داده میشود.
- با دانستن یک ورودی، کاربر میتواند به راحتی هش آن را بررسی کند. کاربران غیر ماینینگ (non-mining users) میتوانند اعتبار یک بلوک را بدون صرف توان محاسباتی زیاد تأیید کنند.
اما اگر بخواهید تقلب کنید چه؟ چه چیزی شما را از قرار دادن تراکنشهای تقلبی در بلوک و تولید یک هش معتبر باز میدارد؟
اینجاست که رمزنگاری کلید عمومی وارد میشود. به طور خلاصه، از برخی ترفندهای دقیق رمزنگاری استفاده میکنیم که به هر کاربری اجازه میدهد تا بررسی کند که آیا شخصی حق دارد وجوهی را که میخواهد خرج کند، جابجا کند یا خیر؟
وقتی تراکنش ایجاد میکنید، آن را امضا میکنید. هر کسی در شبکه میتواند امضای شما را با کلید عمومی شما مقایسه کند و بررسی کند که آیا آنها مطابقت دارند یا خیر؟ آنها همچنین بررسی میکنند که آیا واقعاً میتوانید سرمایه خود را خرج کنید و اینکه آیا مجموع ورودیهای شما از مجموع خروجیهای شما بیشتر است یا کمتر؟ (یعنی اینکه بیش از آنچه دارید خرج نمیکنید). هر بلوکی که شامل تراکنش نامعتبر باشد به طور خودکار توسط شبکه رد میشود. باید این را بدانید که حتی تلاش برای تقلب هم برای شما گران تمام میشود، چون منابع خود را بدون هیچ پاداشی هدر خواهید داد.
نکته مثبت مکانیزم اثبات کار: تقلب را گران میکند، اما صادقانه عمل کردن را سودآور میکند.
مزایای PoW
از مزیتهای این الگوریتم، میتوان به موارد زیر اشاره کرد:
- در PoW نیازی به کوین مورد نظر برای شروع نیست.
- در طی سالهایی که از به وجود آمدن بیت کوین و اتریوم میگذرد، الگوریتم اجماع اثبات کار امنیت آنها را فراهم کرده است. بنابراین میتوان گفت که این الگوریتم امتحان خود را پس داده است.
- راه اندازی و شروع به کار اثبات کار، فرآیندی به نسبت ساده میباشد.
معایب PoW
از مهمترین معایب مکانیزم اجماع اثبات کار، سه مورد زیر میباشد که عبارتند از:
- مصرف انرژی بسیار زیاد و خطرناک برای محیط زیست
- نیاز به تجهیزات مخصوص با هزینه بالا برای استخراج رمزارزها
- احتمال متمرکز شدن شبکه و تحت تاثیر قرار گرفتن امنیت شبکه به دلیل وجود استخرهای استخراج با قدرت محاسباتی بالا
مشهورترین رمزارزهایی که از اثبات کار استفاده میکنند:
- بیتکوین
- اتریوم (در حال حاضر)
- بیتکوین کش
- مونرو
- زی کش
- دوج کوین
- لایت کوین
همچنین از طریق این لینک، میتوانید به لیست رمز ارزهایی که از این مکانیزم استفاده میکنند دسترسی داشته باشید.
اثبات کار (PoW) در مقابل اثبات سهام (PoS)
در میان الگوریتمهای اجماع زیادی که وجود دارد، الگوریتم اثبات سهام (PoS) یکی از مهمترین آنهاست. این مفهوم به سال ۲۰۱۱ برمیگردد و در برخی از پروتکلهای کوچکتر پیادهسازی شده است، اما هنوز هنوز هیچ یک از بلاکچینهای بزرگ شاهد پذیرش آن نبوده است.
در سیستمهای Proof of Stake، ماینرها با اعتبارسنجی جایگزین میشوند. در واقع، نه عملیات استخراجی وجود دارد و نه مسابقهای برای حدس زدن هش. در عوض، کاربران بهطور تصادفی انتخاب میشوند؛ اگر انتخاب شوند، باید یک بلوک را پیشنهاد کنند. اگر بلوک معتبر باشد، پاداشی متشکل از کارمزد تراکنشهای بلوک دریافت خواهند کرد.
لازم به ذکر است که نمیتوان هر کاربری را انتخاب کرد و پروتکل آنها را بر اساس تعدادی از عوامل انتخاب میکند. برای واجد شرایط بودن، شرکت کنندگان باید مقداری از یک رمز ارز مشخص را قفل کنند که به این عمل استیکینگ، (Staking) میگویند. این سهام مانند وثیقه عمل میکند؛ اعتبار سنجها استیکینگ را انجام میدهند تا از تقلب جلوگیری کنند و اگر آنها غیر صادقانه عمل کنند، سهام آنها (یا بخشی از آن) گرفته میشود.
Proof of Stake نسبت به Proof of Work مزایایی دارد. قابل توجهترین آنها مصرف انرژی کمتر است؛ از آنجایی که نیازی به مزارع ماینینگ پرقدرت در PoS وجود ندارد، برق مصرفی تنها کسری از برق مصرفی در PoW است.
جمعبندی
Proof of Work، راه حل اصلی برای مشکل دوبار خرج کردن بود و ثابت شده که قابل اعتماد است و امنیت بالایی دارد. بیت کوین ثابت کرد که برای جلوگیری از دوبار خرج کردن، به نهادهای متمرکز نیاز نداریم. با استفاده هوشمندانه از رمزنگاری، توابع هش و تئوری بازی، شرکت کنندگان در یک محیط غیرمتمرکز میتوانند در مورد وضعیت یک پایگاه داده مالی به توافق برسند.