بابک | 2016.12.25

گواه اثبات کار یا Proof of Work چیست؟ (PoW)

اثبات کار (Proof of Work) که خیلی جاها به‌اختصار PoW نوشته می‌شود، مکانیزمی برای پیش‌گیری از دوبار خرج‌کردن (double-spending) است؛ بیشتر رمزارزها از این الگوریتم اجماع استفاده می‌کنند. الگوریتم اجماع روشی برای ایمن‌ نگه‌داشتن دفترکل رمزارز است.

«تاریخ آخرین به‌روزرسانی این مقاله: مرداد ۱۴۰۰»

اثبات کار اولین الگوریتم اجماعی بود که معرفی شد و تاکنون الگوریتم غالب باقی مانده است. اثبات کار پیشتر در سال 2004 توسط هال فینی (Hal Finney) بااستفاده از الگوریتم هش SHA-256 معرفی و بعداً در سال 2008 توسط ساتوشی ناکاموتو در وایت‌پیپر بیت کوین ارائه شد.

هش‌کش (Hash Cash) آدام بک یکی از نمونه‌های اولیه الگوریتم اثبات کار در روزهای پیش از ظهور رمزارزهاست. دریافت‌کنندگان با ملزم‌کردن ارسال‌کنندگان ایمیل به انجام مقدار کمی محاسبات پیش از ارسال آن، می‌توانند میزان اسپم یا هرزنامه را کاهش دهند. این محاسبات برای یک ارسال‌کننده‌ی مشروع هزینه‌ای ندارد، اما برای کسی که ایمیل انبوه ارسال می‌کند می‌تواند هزینه‌هایی داشته باشد.

دوبار خرج‌کردن چیست؟

دوبار خرج‌کردن (double-spend) زمانی رخ می‌دهد که یک مقدار خاص وجه، دوبار برای فرد دیگری ارسال شود. این اصطلاح صرفاً در زمینه پول دیجیتال کاربرد دارد (نمی‌شود پول فیزیکی را دوبار خرج کرد). مثلاً وقتی امروز پول یک فنجان چای یا قهوه را پرداخت می‌کنید، پول‌تان را به فروشنده می‌دهید که احتمالاً او هم آن را در صندوق می‌گذارد. نمی‌توانید دیگر به آنجا بروید و با همان اسکناس یک فنجان چای دیگر بخرید.

اما در پول دیجیتال امکان دوبار خرج‌کردن پول وجود دارد. کپی‌کردن یک فایل کامپیوتری را درنظر بگیرید؛ آن را copy و یک‌جای دیگر paste می‌کنید؛ حتی می‌توانید آن را برای صدنفر دیگر هم ایمیل کنید.

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

پیشنهاد مطالعه: دوبار خرج کردن به چه معناست؟

چرا گواه اثبات کار ضرورت دارد؟

اگر با فضای کریپتو و بلاک چین آشنا باشید، می‌دانید که کاربران تراکنش‌های خود را در شبکه منتشر می‌کنند. این تراکنش‌ها بلافاصله تایید نمی‌شوند؛ تا زمانی هم که تایید نشوند به بلاک چین اضافه نخواهند شد.

بلاک چین یک پایگاه داده بزرگ است که همه کاربران می‌توانند آن را مشاهده کنند؛ پس می‌توانند ببینند آیا وجوه قبلاً خرج شده است یا خیر. این‌طور تصور کنید: شما و سه‌نفر از دوستان‌تان یک دفترچه یادداشت دارید. هربار که یکی از شما می‌خواهد مبلغی انتقال دهد، آن را می‌نویسید (مثلاً فرهاد 1000 تومان برای علی فرستاد، علی 500 تومن به احسان داد و …)

البته این فرایند ریزه‌کاری‌هایی هم دارد. هربار که تراکنش انجام می‌دهید، به تراکنشِ مبدأِ پول‌ها برمی‌گردید پس اگر علی 500 تومان به احسان بدهد، ورودی ما این ‌شکلی خواهد شد: علی از تراکنش قبلی با فرهاد، 500 تومان به احسان می‌دهد.

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

این مورد شاید در یک گروه کوچک که همه یکدیگر را می‌شناسند و توافق ‌می‌کنند که کدامیک از دوستان تراکنش‌ها را به دفترچه اضافه کند، خوب کار کند؛ اما اگر گروه 10000 عضو داشت چه؟ ایده‌ی دفترچه یادداشت به‌خوبی مقیاس‌پذیر نیست چون هیچ‌کس نمی‌تواند برای مدیریت دفترچه به یک غریبه اعتماد کند.

اینجاست که اثبات کار وارد میدان می‌شود. اثبات کار اطمینان حاصل می‌کند که کاربران نتوانند پولی که اجازه خرج‌ کردنش را ندارند برای کسی بفرستند. الگوریتم PoW با ترکیب نظریه بازی و رمزنگاری، اختیارِ به‌روزرسانی بلاک چین براساس قوانین سیستم را به همه می‌دهد.

اثبات کار چگونه کار می‌کند؟

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

البته پیوست یک بلاک ارزان نیست. اثبات کار به یک ماینر (سازنده بلاک) نیاز دارد که منابع خویش را در ازای پاداش یا هزینه مصرف کند. این منابع شامل توان رایانشی یا محاسباتی است که برای هش‌کردن داده‌های بلاک تا زمان حل پازل به‌کار گرفته می‌شود.

هش‌کردن به فرایند تولید یک خروجی ثابت از یک خروجی متغیر گفته می‌شود؛ این‌کار با استفاده از فرمول‌های محاسباتی به‌نام تابع هش (که با عنوان الگوریتم‌های هش شناخته شده‌اند) انجام می‌شود. در الگوریتم اثبات کار از تابع هش برای عملیات محاسباتی در پیداکردن بلاک بعدی و همچنین امضای تراکنش استفاده می‌شود.

پیشنهاد مطالعه: هش (hash) به زبان ساده

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

در اثبات کار، باید داده‌هایی ارائه کنید که هش آن‌ها با شرایط مشخص مطابقت داشته باشد؛ اما نمی‌دانید چطور به این شرایط برسید؛ تنها گزینه‌تان این است که داده‌های‌تان را از تابع هش عبور داده و مطابقت آن با شرایط را چک کنید. اگر مطابقت نداشت، باید برای گرفتن یک هش متفاوت، داده را اندکی تغییر دهید. تغییرِ حتی یک حرف از داده یک نتیجه‌ی کاملاً متفاوت خواهد داد؛ پس هیچ راهی برای پیش‌بینی خروجی وجود ندارد.

درنتیجه، اگر می‌خواهید بلاکی بسازید، تنها «حدس می‌زنید». شما اطلاعات تمام تراکنش‌هایی که قصد اضافه‌کردن‌شان را دارید و برخی داده‌های مهم دیگر را گرفته و همه را با هم هش می‌کنید؛ اما چون مجموعه داده‌تان تغییری نمی‌کند، باید اطلاعاتی که متغیر است را اضافه کنید. در غیر این‌صورت، همیشه همان هش یکسان را به‌عنوان خروجی دریافت می‌کنید. این داده‌ی متغیر همان چیزی است که به آن نانس (nonce) گفته می‌شود. نانس عددی است که هر بار تغییر می‌دهید تا هر بار هش متفاوتی دریافت کنید. این همان چیزی‌ست که به استخراج یا ماینینگ شهرت یافته است.

پیشنهاد مطالعه: استخراج رمز ارز ها: از کجا شروع کنیم؟ (راهنمایی برای افراد مبتدی)

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

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

همان‌طور که می‌توان تصور کرد، تلاش برای حدس‌زدن تعداد زیاد هش می‌تواند برای کامپیوتر شما هزینه‌بردار باشد؛ اما اگر یک هش معتبر پیدا کنید، پروتکل به شما رمزارز پاداش می‌دهد.

خُب، پس فهمیدیم که:

  • استخراج‌کردن هزینه‌بر است.
  • اگر بلاک معتبری تولید کنید پاداش می‌گیرید.
  • یک کاربر با دانستن ورودی می‌تواند هش آن را چک کند (کاربرانی که استخراج نمی‌کنند می‌توانند بدون مصرف توان رایانشی زیادی، اعتبار یک بلاک را تایید کنند).

تا اینجا مشکلی نیست؛ اما اگر بخواهید تقلب کنید چه؟ چه چیزی از قراردادن تراکنش‌های متقلبانه در یک بلاک و تولید یک هش معتبر جلوگیری می‌کند؟

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

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

هر بلاکی که شامل یک تراکنش نامعتبر باشد به‌صورت خودکار توسط شبکه رد خواهد شد. حتی اقدام به تقلب نیز برای‌ کاربر پُرهزینه خواهد بود؛ بدون اینکه پاداشی بگیرید منابع‌تان را هدر می‌دهید.

اینجاست که زیبایی اثبات کار را می‌بینیم: تقلب را برای خرابکاران پُرهزینه کرده و صادقانه عمل‌کردن را سودآور می‌کند. هر استخراج‌کننده‌‌ای که منطقی عمل کند، به‌دنبال بازگشت سرمایه خواهد بود؛ پس باید به‌شکلی عمل کند که درآمدش تضمین شود.

مثالی از اثبات کار

الگوریتم اثبات کار، یک کامپیوتر را به مشارکت در هش‌کردن تابع تا زمان رسیدن به خروجیِ دارای حداقل مقدار صحیحی صفرهای پیش از عدد، ملزم می‌کند. به‌عنوان مثال، هش بلاکِ #429818 که در 14 سپتامبر 2016 استخراج شده، مثلاً

000000000000000004dd3426129639082239efd583b5273b1bd75e8d78ff2e8d است. پاداش بلاک برای آن هش موفق، در آن زمان 12.5 بیت کوین بود.

الگوریتم اثبات کار در مقابل الگوریتم اثبات سهام

الگوریتم‌های اجماع زیادی وجود دارد اما یکی از برجسته‌ترین موارد، الگوریتم اثبات سهام (Proof of Stake) یا PoS است. این مفهوم به سال 2011 برمی‌گردد و در برخی پروتکل‌های کوچک‌تر اجرا و هم‌اکنون نیز در بلاک چین اتریوم مورداستفاده قرار گرفته شده است.

پیشنهاد مطالعه: گواه اثبات سهام یا proof of stake چیست؟ (PoS)

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

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

اثبات سهام مزایایی بر اثبات کار دارد. قابل‌توجه‌ترین مزیت آن اثر کربن پایین‌تر است؛ چون مانند اثبات کار نیازی به فارم‌های استخراج پُرهزینه و پُرمصرف ندارد و برق مصرفی آن پایین است.

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

پیشنهاد مطالعه: مقایسه الگوریتم اثبات کار و اثبات سهام: کدامیک بهتر است؟

در پایان…

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

منابع: ۱ و ۲