گواه اثبات کار به معنای سیستمی است که نیازمند اندکی تلاش به منظور جلوگیری از استفاده خرابکارانه و یا بیهدف از توان پردازشی (اقداماتی نظیر ارسال اسپم و یا حمله به سرور) است. این مفهوم اولین بار توسط هال فینی (Hal Finney) در سال ۲۰۰۴ در ایدهای تحت عنوان «گواه اثبت کار قابل استفاده مجدد» (reusable proof of work) مطرح شد. اما در سال ۲۰۰۹ و با ورود بیت کوین به بازار، این ایده به شکل گستردهای مورد توجه قرار گرفت. جالب است بدانید هال فینی خودش جزو کسانی بود که در نخستین تراکنشهای بیت کوین مشارکت داشت. گواه اثبات کار در بسیاری از ارزهای دیجیتال امروز نیز به کار گرفته میشود.
واکاوی گواه اثبات کار
در اینجا میخواهیم به بررسی عملکرد گواه اثبات کار در شبکه بیت کوین بپردازیم. همان طور که میدانید بیت کوین یک ارز دیجیتال است که با فناوری دفتر کل توزیع شده یا «بلاک چین» عمل میکند (در مطلب «بلاک چین چیست و چگونه عمل میکند؟» توضیحات کاملی درباره این فناوری داده شده است). این دفتر کل دربردارنده همه تراکنشهای صورت گرفته با بیت کوین است. اطلاعات این تراکنشها در قالب یک سری بلوک در شبکه قرار میگیرد و هیچ کاربری نمیتواند بیت کوین خود را دو بار خرج کند (از مشکل «خرج دوباره» جلوگیری میشود). برای جلوگیری از هر نوع دستکاری و خرابکاری، دفتر کل توزیع شده به شکل عمومی در اختیار همه قرار میگیرد و هر بلوک متغایر با بلوکهای مشابه شبکه به سرعت توسط کاربران رد میشود.
کاربران از طریق هش (hash) میتوانند متوجه بلوکهای غیرمعتبر شوند. هش یک رشته بلند دربردارنده اعداد اس که نقش گواه اثبات کار را بازی میکند. اگر یک عبارت مشخص را به تابع هش بدهید (بیت کوین از تابع SHA-256استفاده میکند) یک خروجی مشخص تولید خواهد کرد. به خاطر ماهیت طولانی این خروجی، هر نوع دستکاری جزیی در ورودی سبب ایجاد یک خروجی کاملا متفاوت میشود. فارغ از طول عبارت ورودی، طول عبارت خروجی همواره ثابت است. تابع هش یک تابع یک طرفه است و نمیتوان از آن برای به دست آوردن عبارت ورودی استفاده کرد. به کلامی دیگر نمیتوان با دادن خروجی به آن، ورودی اولیه را مشخص کرد.
ایجاد هش برای تراکنشهای بیت کوینی کاری بسیار ساده برای رایانههای امروزی است. اما شبکه بیت کوین برای اینکه بتوان آن را دشوارتر کند، سطح مشخصی از «دشواری» را برای آن تعیین میکند. این سطح مشخص به گونهای تنظیم میشود که برای استخراج یک بلوک تازه (افزودن بلاک چین) نیاز به حدود ۱۰ دقیقه زمان باشد. این تنظیم از طریق ایجاد یک «هدف» برای هش صورت میگیرد. هر قدر این هدف پایینتر باشد، تعداد هشهای معتبر کمتر خواهد بود و تولید آن نیز دشوارتر میشود. این در عمل به معنای ایجاد یک هش با رشتهای طولانی از صفر است. برا ینمونه، هش برای بلوک #۴۲۹۸۱۸ به صورت زیر خواهد بود:
۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۴dd3426129639082239efd583b5273b1bd75e8d78ff2e8d
این بلوک دربردارنده ۲۰۱۲ تراکنش است که بیش از ۱۰۰۰ بیت کوین را دربرمیگیرد و قسمت بالای بلوک قبلی نیز بخشی از آن است. اگر یک کاربر بخواهد تغییری در حد یک ده هزارم بیت کوین ایجاد کند، رشته خروجی کاملا متفاوت خواهد بود و شبکه آن را به خاطر نادرستی رد میکند.
با توجه به اینکه هر مجموعه داده میتواند فقط یک هش تولید کند، استخراجکنندگان (ماینرها) چگونه میتوانند از دستیابی به این هش درست اطلاعات یابند؟ پاسخ این است که آنها یک عدد صحیح که نانس (nonce) نامیده میشود را به آن اضافه میکنند. به محض اینکه هش معتبر یافت شد، به شبکه اعلام شده و به بلاک چین افزوده میشود.
استخراج (ماینینگ) فرآیندی رقابتی است و شانس در آن بسیار پررنگ است. هر ۱۰ دقیقه یک نفر میتواند به گواه اثبات کار معتبر دست یابد، اما مشخص نیست این فرد کیست. در برخی موارد، استخراجکنندگان به صورت مشترک دست به استخراج میزنند. این اقدام معمولا استخر (pool) استخراج نامیده میشود. به این ترتیب کارمزد به دست آمده از تراکنشها و نیز بیت کوین های جدید ایجاد شده بین کاربران حاضر در استخر توزیع میشود.
همان طور که گفته شد، بیت کوین و برخی دیگر از آلت کوین ها از گواه اثبات کار برای حفظ امنیت شبکه خود استفاده میکنند. با این وجود، گواه اثبات کار مشکل معایبی هم دارد که برای جبرانش، گواه اثبات سهام (Proof of Stake) پیشنهاد شده است.