Proof of Work (PoW) یکی از اجزای اصلی معماری امنیتی بیتکوین است. اگر PoW را فقط «ماینرها باید یک عدد مناسب پیدا کنند» تعریف کنیم، بخش مهمی از ماجرا از دست میرود.
در بیتکوین، Proof of Work سازوکاری است که تولید بلاک را به انجام مقدار قابلتوجهی کار محاسباتی وابسته میکند. نتیجه این کار باید برای دیگران آسان باشد که آن را بررسی کنند، اما تولید یک نتیجه معتبر بهصورت تکراری هزینهبر است. همین عدم تقارن، در کنار اعتبارسنجی مستقل نودها و پیوند بلاکها، به شبکه کمک میکند در برابر ایجاد تاریخچههای رقیب و بازنویسی گذشته مقاومت کند.
در این مقاله، مکانیزم را از سطح هش و نانس تا انتخاب زنجیره و امنیت تاریخچه مرحلهبهمرحله بررسی میکنیم.
Proof of Work چیست؟
در سادهترین بیان، Proof of Work یعنی ارائه مدرکی که نشان دهد برای تولید آن مقدار مشخصی محاسبه انجام شده است.
در بیتکوین، ماینر یک Block Header میسازد و آن را هش میکند. هدف این است که خروجی هش، از Target تعیینشده توسط قوانین شبکه کوچکتر یا مساوی آن باشد.
بهصورت سادهشده:
Block Header
↓
SHA-256
↓
SHA-256
↓
Hash ≤ Target ?
↙ ↘
بله خیر
↓ ↓
بلاک تلاش بعدی
معتبر
این مسئله پاسخ تحلیلی سادهای ندارد. ماینر معمولاً با تغییر دادههای قابلتغییر سربرگ و امتحانکردن هشهای متعدد، بهدنبال نتیجهای میگردد که شرط Target را برآورده کند.
برای آشنایی با ساختار بلاک و ارتباط هشها با یکدیگر، مقاله بلاکچین چیست و چه نقشی در بیتکوین دارد؟ نقطه شروع مناسبی است.
PoW چه مسئلهای را حل میکند؟
در یک شبکه بدون مرکز، صرفاً اجازهدادن به هر شرکتکننده برای پیشنهاد بلاک کافی نیست. اگر ایجاد بلاک تقریباً رایگان باشد، یک بازیگر میتواند با هزینه کم تعداد زیادی تاریخچه یا بلاک رقیب ایجاد کند.
Proof of Work این هزینه را به منابع محاسباتی واقعی متصل میکند. ایجاد یک بلاک دارای PoW معتبر نیازمند تلاش محاسباتی است و ایجاد چند بلاک پشتسرهم نیز به کار بیشتری نیاز دارد.
این ویژگی دو اثر مهم دارد:
- ایجاد هویتها یا پیشنهادهای متعدد، بهتنهایی قدرت تعیینکننده ایجاد نمیکند؛ هزینه محاسباتی اهمیت پیدا میکند.
- برای رقابت با تاریخچهای که قبلاً کار زیادی روی آن انجام شده، مهاجم باید کار بیشتری انجام دهد.
این همان جایی است که PoW با مسئله Double Spending و بازنویسی تاریخچه ارتباط پیدا میکند. در وایتپیپر بیتکوین نیز ایده اصلی، استفاده از زنجیرهای از Proof of Work برای ثبت ترتیب زمانی رویدادها و پرهزینهکردن تغییر گذشته است.
البته نباید از این نتیجه گرفت که PoW بهتنهایی همه مشکلات اجماع را حل میکند. نودها همچنان باید قوانین پروتکل را مستقل اجرا کنند.
هش چه نقشی در Proof of Work دارد؟
هش یک تابع رمزنگاری است که داده ورودی را به خروجی با طول مشخص تبدیل میکند. در بیتکوین، تغییر حتی بخش کوچکی از ورودی میتواند خروجی کاملاً متفاوتی تولید کند.
این ویژگی برای PoW حیاتی است، چون ماینر نمیتواند بهسادگی با نگاهکردن به یک هش ناموفق، ورودی بعدی را از روی آن محاسبه کند. روش عملی، امتحانکردن ورودیهای متفاوت است.
در بیتکوین، Proof of Work بر روی هدر ۸۰ بایتی بلاک اعمال میشود، نه روی کل داده تراکنشها به شکل سادهشدهای که گاهی گفته میشود. تراکنشها ابتدا در ساختار Merkle Tree خلاصه میشوند و Merkle Root در هدر قرار میگیرد. بنابراین تغییر تراکنشها، Merkle Root و در نتیجه هدر را تغییر میدهد و PoW قبلی دیگر برای هدر جدید معتبر نیست.
Nonce چیست؟
Nonce یک فیلد اختصاصی در Block Header است که برای تغییر سریع ورودی هش بهکار میرود.
اگر یک مقدار نانس نتیجه مطلوب ندهد، ماینر مقدار دیگری را امتحان میکند. این روند میتواند میلیونها یا میلیاردها بار تکرار شود.
اما یک نکته مهم وجود دارد: Nonce تنها چیزی نیست که ماینر میتواند تغییر دهد. وقتی فضای نانسهای ۳۲ بیتی کافی نباشد، نرمافزار استخراج میتواند دادههای دیگری را نیز تغییر دهد؛ برای مثال با تغییر تراکنش Coinbase، مقدار ExtraNonce تغییر میکند و در نتیجه Merkle Root و هدر نیز تغییر میکنند. همچنین فیلدهایی مانند Timestamp در چارچوب قواعد پروتکل قابل تغییر هستند.
بنابراین تصویر دقیقتر این است:
تراکنشها
↓
Merkle Root
↓
Block Header
↓
تغییر Nonce / دادههای قابلتغییر
↓
Hash
↓
بررسی Target
مستندات توسعهدهندگان بیتکوین نیز به وجود فیلد Nonce و سایر فیلدهای قابلتغییر در هدر اشاره میکنند تا ماینر بتواند بدون انتظار برای تراکنشهای جدید، تلاشهای هش جدید انجام دهد.
Target و Difficulty چه تفاوتی دارند؟
این دو مفهوم به هم مرتبطاند اما یکسان نیستند.
Target یک آستانه عددی است. هش معتبر باید در محدودهای باشد که شرط Target را برآورده کند. هرچه Target پایینتر باشد، خروجیهای کمتری این شرط را برآورده میکنند و پیدا کردن یک نتیجه معتبر دشوارتر میشود.
Difficulty راهی برای بیان سختی استخراج نسبت به یک مبنای مشخص است. در بیان ساده، با افزایش Difficulty، Target متناظر کوچکتر میشود و احتمال موفقیت هر تلاش کاهش مییابد.
بنابراین:
Target پایینتر
↓
نتایج قابلقبول کمتر
↓
تلاش مورد انتظار بیشتر
↓
Difficulty بالاتر
این یک نکته مهم را روشن میکند: سختی شبکه به معنی «سختتر شدن ریاضی تابع هش» نیست. الگوریتم هش همان است؛ چیزی که تغییر میکند آستانه پذیرش نتیجه است.
چرا بلاکها بهطور متوسط حدود ۱۰ دقیقه فاصله دارند؟
پیداشدن بلاک یک فرایند احتمالاتی است. بنابراین قرار نیست هر بلاک دقیقاً در ۱۰ دقیقه پیدا شود.
بیتکوین با تنظیم دورهای Difficulty تلاش میکند میانگین نرخ تولید بلاک را نزدیک به هدف پروتکل نگه دارد. در شبکه اصلی، تنظیم Difficulty در دورههای ۲٬۰۱۶ بلاکی انجام میشود و هدف آن این است که این دوره بهطور تقریبی دو هفته طول بکشد.
اگر قدرت محاسباتی شبکه بالا برود، بدون تنظیم سختی بلاکها میتوانند سریعتر پیدا شوند. تنظیم بعدی Difficulty این اثر را تا حد زیادی خنثی میکند. برعکس، کاهش قدرت محاسباتی میتواند به تنظیمی منجر شود که پیدا کردن بلاک دوباره آسانتر شود.
پس «۱۰ دقیقه» یک زمانبندی دقیق برای هر بلاک نیست؛ یک هدف آماری برای نرخ تولید بلاک است.
چرا پیدا کردن PoW سخت است اما بررسی آن آسان؟
یکی از مهمترین ویژگیهای Proof of Work، عدم تقارن محاسباتی آن است.
ماینر برای پیدا کردن یک هش مناسب باید تعداد زیادی تلاش انجام دهد. اما وقتی یک نتیجه پیدا شد، نود دیگر لازم نیست همان تعداد تلاش را تکرار کند. کافی است هدر را دوباره هش کند و بررسی کند که نتیجه شرط Target را دارد.
به زبان ساده:
پیدا کردن جواب → تلاشهای بسیار زیاد
بررسی جواب → یک بررسی مستقیم
این عدم تقارن باعث میشود هزینه تولید بلاک با هزینه بررسی بلاک یکسان نباشد. شبکه میتواند تعداد زیادی بلاک را بررسی کند، بدون اینکه هر نود مجبور باشد کار ماینر را از ابتدا تکرار کند.
Block Header چه ارتباطی با PoW دارد؟
هدر بلاک شامل چند فیلد مهم است، از جمله:
- Version — نسخه یا اطلاعات مربوط به نسخه بلاک.
- Previous Block Hash — هش هدر بلاک قبلی.
- Merkle Root — خلاصه ساختار تراکنشهای بلاک.
- Timestamp — زمان درجشده در هدر.
- nBits — نمایش فشرده Target مورد استفاده برای PoW.
- Nonce — مقدار قابلتغییر برای جستوجوی هش.
در نتیجه، PoW به یک داده تصادفی و جدا از بلاک متصل نیست؛ به هدر بلاک متصل است. هدر نیز به تراکنشهای همان بلاک و بلاک قبلی ارتباط دارد.
همین اتصال است که بعداً هنگام بررسی تاریخچه اهمیت پیدا میکند.
ماینر دقیقاً چه چیزهایی را تغییر میدهد؟
فرایند استخراج را میتوان دقیقتر از عبارت «ماینر نانس را تغییر میدهد» دید.
ماینر ابتدا مجموعهای از تراکنشها را برای بلاک پیشنهادی انتخاب میکند. تراکنش Coinbase نیز برای دریافت پاداش در بلاک ساخته میشود. این مجموعه به Merkle Root منتهی میشود.
سپس ماینر هدر را میسازد و جستوجوی PoW را انجام میدهد. در طول این جستوجو، Nonce و در صورت نیاز سایر دادههای قابلتغییر بهروزرسانی میشوند تا فضای جدیدی از ورودیهای هش ایجاد شود.
بنابراین انتخاب تراکنشها نیز میتواند بهصورت غیرمستقیم روی فضای جستوجوی PoW اثر بگذارد؛ چون تغییر تراکنشها میتواند Merkle Root را تغییر دهد.
چرا ماینر نمیتواند یک تراکنش نامعتبر را معتبر کند؟
این نقطه برای درک معماری بیتکوین بسیار مهم است.
فرض کنید ماینری یک تراکنش نامعتبر را در بلاک خود قرار دهد و بعد برای آن بلاک Proof of Work معتبر پیدا کند. آیا آن بلاک بهخاطر PoW معتبر میشود؟ خیر.
PoW فقط نشان میدهد که برای هدر موردنظر کار محاسباتی انجام شده است. نود دریافتکننده باید جداگانه قواعد تراکنشها، ساختار بلاک، پاداش، ارتباط با زنجیره و سایر قوانین اجماع را بررسی کند.
اگر بلاک قوانین را نقض کند، نود میتواند آن را رد کند؛ حتی اگر ماینر مقدار بسیار زیادی کار محاسباتی انجام داده باشد. اعتبارسنجی مستقل Bitcoin Core دقیقاً برای جلوگیری از این تصور است که ماینرها بتوانند هر زنجیرهای را صرفاً با قدرت هش تحمیل کنند.
برای فهم عمیقتر این بخش، مقاله نود بیتکوین چیست و چرا اهمیت دارد؟ را بخوانید.
Mining و Proof of Work یکی نیستند
این دو واژه معمولاً کنار هم استفاده میشوند، اما یکی نیستند.
| موضوع | Mining | Proof of Work |
|---|---|---|
| چیست؟ | فرایند ساخت و پیشنهاد بلاک و رقابت برای دریافت پاداش | سازوکار محاسباتی اثباتشده با هش |
| ماینر چه میکند؟ | تراکنش انتخاب میکند، بلاک میسازد و برای PoW تلاش میکند | برای هدر بلاک یک نتیجه معتبر پیدا میکند |
| خروجی اصلی | بلاک پیشنهادی/منتشرشده | هش هدر که شرط Target را برآورده میکند |
| هدف امنیتی | مشارکت در تولید بلاک و رقابت اقتصادی | پرهزینهکردن تولید تاریخچه رقیب |
مقاله استخراج بیتکوین چیست؟ جزئیات خود فرایند Mining، پاداش و اقتصاد استخراج را بررسی میکند. این مقاله روی خود مکانیزم Proof of Work تمرکز دارد.
Proof of Work و Consensus یکی نیستند
گاهی گفته میشود «Proof of Work همان مکانیزم اجماع بیتکوین است». این عبارت برای توضیح مقدماتی قابلفهم است، اما از نظر فنی دقیق نیست.
PoW در تعیین زنجیرهای که بیشترین کار تجمعی را دارد نقش اساسی دارد؛ اما یک نود برای پذیرفتن بلاک فقط به مقدار PoW نگاه نمیکند. بلاک باید تمام قواعد اجماع را نیز رعایت کند.
میتوان این رابطه را چنین خلاصه کرد:
Proof of Work
↓
هزینه محاسباتی برای تولید بلاک
↓
مقایسه تاریخچههای رقیب بر اساس کار تجمعی
در کنار آن:
Node Validation
↓
بررسی مستقل قواعد بیتکوین
↓
پذیرش یا رد بلاک
در نتیجه، ماینرها قدرت محاسباتی دارند، اما این به معنی داشتن اختیار یکطرفه برای بازتعریف قواعد بیتکوین نیست.
Proof of Work چگونه بازنویسی تاریخچه را پرهزینه میکند؟
فرض کنید یک تراکنش قدیمی را تغییر دهیم.
۱. تغییر تراکنش باعث تغییر Merkle Root میشود.
۲. تغییر Merkle Root باعث تغییر Block Header میشود.
۳. با تغییر هدر، Proof of Work قبلی دیگر برای آن بلاک معتبر نیست.
۴. بنابراین مهاجم باید PoW آن بلاک را دوباره پیدا کند.
۵. بلاک بعدی به بلاک قبلی متصل است؛ پس برای ساخت یک زنجیره جایگزین معتبر، بلاکهای بعدی نیز باید دوباره ساخته و برایشان PoW پیدا شود.
۶. در همین مدت، زنجیره اصلی نیز میتواند بلاکهای جدید تولید کند.
به این ترتیب، تغییر یک نقطه در گذشته فقط «ویرایش یک داده» نیست؛ به شروع دوباره یک زنجیره محاسباتی و رقابت با کار تجمعی زنجیره موجود تبدیل میشود.
به همین دلیل است که تأییدهای بیشتر، در شرایط معمول، هزینه بازنویسی تاریخچه را افزایش میدهند.
PoW و Double Spending چه ارتباطی دارند؟
Double Spending یعنی تلاش برای خرجکردن یک واحد بیتکوین در دو مسیر متعارض.
اگر یک تراکنش در یک بلاک قرار گرفته باشد و مهاجم بخواهد تاریخچهای جایگزین بسازد که تراکنش دیگری را معتبر نشان دهد، باید زنجیرهای رقیب ایجاد کند و با زنجیره پذیرفتهشده رقابت کند.
هرچه بلاکهای بیشتری روی تاریخچه اصلی ساخته شده باشد، کار تجمعی بیشتری پشت آن قرار گرفته است. بنابراین مهاجم باید فاصله ایجادشده را جبران کند، در حالی که ماینرهای زنجیره اصلی به تولید بلاک ادامه میدهند.
این به معنی «غیرممکن بودن مطلق حمله» نیست. امنیت اقتصادی PoW به عواملی مانند توزیع قدرت هش، تعداد تأییدها، انگیزههای اقتصادی و شرایط حمله وابسته است. وایتپیپر بیتکوین نیز مدل امنیتی خود را بر این فرض بنا میکند که قدرت محاسباتی صادقانه بتواند از قدرت مهاجم جلو بزند.
Proof of Work چه چیزی نیست؟
برای جلوگیری از چند سوءبرداشت رایج، PoW را با این موارد یکی ندانیم:
- PoW خود Mining نیست. ماینینگ فرایند بزرگتری است که PoW بخشی از آن است.
- PoW اعتبارسنجی تراکنش نیست. نودها تراکنشها و بلاکها را بررسی میکنند.
- PoW بهتنهایی تمام Consensus را تشکیل نمیدهد. قواعد اجماع فقط به داشتن هش مناسب محدود نیستند.
- PoW یک معمای ریاضی با جواب قابلمحاسبه مستقیم نیست. جستوجوی تکراری بخش اصلی فرایند است.
- PoW تضمین نمیکند هیچ حملهای ممکن نیست. هدف آن تغییر دادن اقتصاد حمله و بالا بردن هزینه ایجاد تاریخچه رقیب است.
- PoW به ماینرها اجازه تغییر دلخواه قوانین را نمیدهد. بلاک نامعتبر، حتی با PoW معتبر، میتواند توسط نودها رد شود.
جمعبندی
Proof of Work را میتوان یک لایه هزینه محاسباتی روی تولید بلاکهای بیتکوین دانست.
ماینر یک Block Header میسازد و با تغییر Nonce و در صورت نیاز سایر دادههای قابلتغییر، هشهای متعددی را امتحان میکند تا به نتیجهای برسد که شرط Target را برآورده کند. پیدا کردن چنین نتیجهای پرهزینه است، اما بررسی آن برای نودها نسبتاً ساده است.
مهمتر از خود فرایند هشکردن، اتصال PoW به ساختار بلاکچین است: تغییر یک تراکنش قدیمی میتواند Merkle Root و هدر را تغییر دهد، PoW قبلی را بیاعتبار کند و مهاجم را مجبور به بازسازی بلاکهای بعدی و رقابت با کار تجمعی زنجیره موجود کند.
اما امنیت بیتکوین فقط حاصل PoW نیست. ماینرها کار محاسباتی انجام میدهند؛ نودها قواعد را بررسی میکنند؛ و زنجیرههای رقیب بر اساس کار تجمعی مقایسه میشوند. فهم همین تفکیک، بخش مهمی از درک معماری بیتکوین است.
منابع و مراجع
- Satoshi Nakamoto, Bitcoin: A Peer-to-Peer Electronic Cash System
- Bitcoin Developer Guide, Block Chain — Proof of Work
- Bitcoin.org, Bitcoin FAQ — Mining and Proof of Work
- Bitcoin Core, Validation
این مطلب با هدف آموزش و تحلیل تهیه شده است و نباید بهعنوان توصیه قطعی برای خرید، فروش یا شرطبندی تلقی شود.