همه ما چیزهایی در مورد بیت کوین شنیدهایم؛ مواردی مثل این که این ارز دیجیتال به هیچ دولتی وابسته نیست برای مدیریت حسابها و تایید تراکنشها، نیازی به بانکها ندارد. حتی نمیدانیم چه کسی آن را اختراع کرده است.
هدف ما در این مقاله این است که با ارائه مثالی ساده و ملموس، نحوه استخراج بیتکوین و فرآیند اثبات کار را توضیح دهیم.
سیستم پشتیبانی رمزارزها دقیقا مانند سایر پرداختهای دیجیتالی است که با استفاده از نرمافزارها، امکان ارسال و دریافت ارزها را به شما میدهد و شما را درگیر نحوه انجام این فرآیندها نمیکند.
ولی این سیستم یک تفاوت اصلی با سایر روشها دارد و این است که برای تایید تراکنشها، نیازی به بانک نیست. در عوض سیستمی متشکل از شبکههای تاییدکننده غیرمتمرکزی است که با استفاده از روشهای ریاضی در رمزنگاری، ساخته شدهاند.
نکتهی مهمی که در اینجا حائز اهمیت است، این است که اگرچه ما در این مقاله به توضیح این مسائل، همراه با جزییات میپردازیم، اما کسی که میخواهد فقط از این رمزارزها استفاده کند، به این جزییات و توضیحات نیازی ندارد.
دقیقا مانند جزییات اتفاقهایی که در سیستم درونی بانکها زمان استفاده از کارتهای بانکی و اعتباری رخ میدهند و شما برای استفاده از کارتهای بانکی خود نیازی به دانستن آنها ندارید.
امضاهای دیجیتال (Digital Signitures)و دفتر حساب عمومی یا لجر (Ledger)
برای شروع از شما میخواهم که لحظهای به رمزارزها فکر نکنید. ما میخواهیم با مفاهیم سادهتری مانند دفتر دیجیتال حسابها (لجر یا Digital Ledger) و امضاهای دیجیتال شروع کنیم.
شما و دوستانتان معمولا برای پرداخت سهم خود از هزینه شام یا دیگر فعالیتها بین یکدیگر پول جابهجا میکنید، استفاده از پول نقد گزینه آسان و بهتری است، بنابراین شما یک دفتر حساب مشترک میسازید، تا کلیه هزینهها و تراکنشهایی را که میخواهید در آینده انجام دهید را در آن ثبت و ضبط کنید.
اطلاعاتی مانند، علی 20 هزار تومان به کوروش میدهد، کوروش 50 هزار تومان به من میدهد و.... این دفتر مانند یک وبسایت، بین شما و دوستانتان مشترک است و اطلاعات آن برای همه شما قابل مشاهده است و هرکس بخواهد میتواند اطلاعات جدیدی به آن اضافه کند.
شما در آخر هر ماه، دور هم جمع شده و این دفتر را بررسی میکنید و حسابها را چک میکنید. اگر از میزان پولی که باید پرداخت میکردهاید، پول بیشتری داده بودید، این میزان مازاد را از دفتر برداشت میکنید و اگر از میزانی که سهم شما بوده، کمتر پرداخت کردهاید، آن را به دفتر پرداخت میکنید و از این طریق کلیه حسابها تسویه میشود.
ولی حالا مشکلی که در مورد یک دفتر حساب عمومی وجود دارد، این است که هرکسی میتواند مواردی را به این دفتر اضافه کند. مثلا آرش، بدون اینکه از علی اجازه و تاییدی بگیرد، در دفتر بنویسد که "علی به آرش 100 هزار تومان پرداخت کرد".
حالا با توجه به مثالی که گفته شد، چطورمیتوانیم تصمیم بگیریم که همهی تراکنشهای ثبتشده در دفتر، واقعی هستند و بر اساس چیزی هستند که ارسالکنندهی آنها، قصد انجام آن را داشتهاست؟ در اینجا، نمونهای از موارد استفاده از رمزنگاری یا کریپتوگرافی، وارد بحث میشود و عبارت است از امضاهای دیجیتال.
مانند سایرامضاهای دستی و رایج، این امضاها مانند یک نشانه خاص عمل میکنند و در دفتر حسابها، باید در کنار هر تراکنش، امضای دیجیتال ارسال کننده پول وجود داشته باشد، تا از این طریق، صحت این تراکنش توسط ارسال کننده آن تایید شود.
مثلا تراکنش زیر را در نظر بگیرید:
"علی به آرش 100 هزار تومان پرداخت کرد" «امضا دیجیتال علی به عنوان ارسال کننده پول»
این امضا در کنار هر خط از تراکنشها، نشاندهنده این است که ارسالکننده، این تراکنش را دیده و تایید کردهاست. همچنین این امضا باید به گونهای باشد، که سایر افراد نتوانند آن را جعل کنند.
در نگاه اول، ممکن است، ایده یک امضای دیجیتال غیرممکن به نظر برسد، زیرا که هر دادهای که به عنوان یک امضای دیجیتال استفاده میشود، قابلیت این را دارد که توسط کامپیوتر کپی شده و به راحتی جعل شود.
بنابراین، این سوال به وجود میآید که چطور میتوان از جعل کردن امضای دیجیتال پیشگیری کرد؟
کلید خصوصی و کلید عمومی
برای جلوگیری از جعل امضاهای دیجیتال، برای هر شخص، یک جفت کلید خصوصی یا شخصی (کلید مخفی) (Private/Secret Key) و کلید عمومی (Public Key) صادر میشود. هر کدام از این کلیدها، مجموعهای از بیتها یا عددهای صفر و یک هستند.
کلید مخفی، همانطور که از نامش معلوم است، باید مخفی و خصوصی نگه داشتهشود. در دنیای واقعی، امضاهای رایج همواره ثابت هستند و با توجه به سند و متنی که امضا میشود، تغییر نمیکنند. اما امضاهای دیجیتال با توجه به هر متن و هر پیامی متغیر هستند و عوض میشوند.
اگر کوچکترین تغییری در متن هر پیام و تراکنشی ایجاد شود، امضای دیجیتال آن نیز تغییر میکند. در واقع برای تولید یک امضای دیجیتال، از یک تابع که متشکل از دو متغیر پیام و کلید مخفی است، استفاده میشود و خروجی این تابع، امضای دیجیتال (Signature) است.
Sign (Message, Secret key) = Signature
متغیر کلید شخصی در این تابع، باعث میشود که فقط خود شما بتوانید این امضا را تولید کنید و متغیر پیام یا message نیز باعث میشود که امضای تولید شده، فقط منحصر به یک پیام باشد و قابلیت کپی کردن برای پیامهای دیگر را نداشته باشد.
در کنار تابع تولید امضا، تابع دیگری به نام تابع تایید verify وجود دارد. وظیفه این تابع، تایید کردن امضای دیجتال است و در این قسمت از کلید عمومی استفاده میشود. این تابع از سه متغیر پیام ، امضا و کلید عمومی تشکیل میشود.
خروجی این تابع دو حالت دارد، که عبارتند از (True) درست یا غلط (False). این خروجی، نشاندهندهی این است که امضای تولید شده، توسط کلید خصوصی صادر شدهاست که با کلید عمومی که برای تایید از آن استفاده میکنید، همخوانی دارد.
Verify (Message, Signature, Private Key) = T/F
امنیت کلید شخصی در ارز دیجیتال
ایده اصلی این توابع این است که دسترسی به یک امضا مورد تایید، بدون داشتن کلید مخفی، غیرممکن است. مخصوصا، هیچ استراتژی بهتر از حدس زدن و چک کردن امضاهای شانسی نیست و میتوان این کار را با استفاده از کلیدهای عمومی که برای همه قابل دستیابی است، انجام داد.
هر امضای دیجیتال متشکل از 256 بیت است. هر بیت از دو عدد صفر یا یک تشکیل میشود. بنابراین تعداد امضاهای دیجیتالی که برای هر کلید عمومی، میتواند وجود داشته باشد، برابر است با 2256. این عدد به صورت غیرقابل تصوری بزرگ است. بنابراین احتمال این که شخصی بتواند بدون داشتن کلید شخصی، یک امضای مورد تایید را تولید کند، برابر با صفر است.
در نتیجه، زمانی که خروجی تابع تایید، برابر درست یا True است، میتوان مطمئن بود که این امضا توسط کلید مخفی که با کلید عمومی همخوانی دارد، تولید شده است.
Verify (Message, 256 bit signature, Private Key)= True
استفاده از امضای دیجیتال برای هر کدام از تراکنشها، روش بسیار خوبی است، اما این روش یک مشکل دارد. مثلا تراکنش "علی 100 تومان به کیارش داد" را تصور کنید. درست است که کیارش نمیتواند امضای علی را برای یک تراکنش جدید کپی کند، اما او میتواند چندین بار این تراکنش را کپی کند.
برای حل این مشکل، برای هرکدام از تراکنشات یک شناسه مخصوص در نظر میگیرند و از این طریق امضای دیجیتال آن نیز متفاوت خواهد بود. بنابراین اگر علی چندین بار به کیارش 100 تومان پرداخت کند، هر کدام از این تراکنشها، دارای امضای دیجیتال متفاوتی در دفتر حسابها خواهد بود.
اعتمادسازی و لجر در ارزهای دیجیتال
خب، تا اینجا امضا دیجیتال در پروتکل اولیه خود، یکی از مهمترین چالشهای مربوط به اعتماد و اطمینان را برطرف کرده است. اما همچنان برای اجرای سیستم دفتر حسابها بین خود و دوستانتان ، نیاز به یک سیستمی دارید که بر اساس اطمینان در تسویه بدهی است.
به این معنی که شما به این موضوع اطمینان دارید که هر کدام از افراد در آخر ماه حساب خود را تسویه خواهند کرد. اما اگر یکی از دوستان شما، میزان زیادی بدهی به دفتر حساب داشته باشد و در پایان ماه برای تسویه حضور نداشته باشد؟
برای حل این مشکل میتوانیم با استفاده از یک روش هوشمندانه کاری کنیم که در پایان هر ماه نیازی به تسویه نقدی نباشد. به این معنی که افراد قادر نباشند، بیشتر از میزانی که پول وارد حساب دفتر حساب (لجر) کردهاند را خرج کنند.
مثلا در ابتدا هر فرد 100 هزار تومان را به صورت نقدی وارد دفتر حساب میکند. این تراکنش اولیه، برای هر کدام از افراد در دفتر حساب (لجر) ثبت میشود. مثلا "علی 100 هزار تومان وارد کرد" و به همین صورت برای سایر افراد نوشته میشود. حالا هیچکدام از افراد نباید قادر باشند تا میزان بیشتری از پولی که وارد کرده اند را خرج کنند. مثلا اگر تراکنشات به این صورت باشند که :
علی 50 هزار تومان به کیارش داد.
علی 50 هزار تومان به محمد داد.
تراکنش بعدی "علی 20 هزار تومان به شما داد" است. این تراکنش نادرست است و در سیستم خطا ایجاد میکند؛ زیرا میزان پولی که علی خرج کرده است از پول اولیه او بیشتر است.
بنابراین نکته مهمی که در اینجا وجود دارد، این است که تایید کردن یک تراکنش، نیاز به دانستن کلیه تراکنشها انجام شده قبل از آن را دارد. این موضوع در ارزهای دیجیتال نیز به همین گونه است.
موضوع جالبی که وجود دارد این است که در این مرحله، نیاز به ارتباط مستقیم بین دفتر حسابها و پول فیزیکی از بین میرود. از لحاظ تئوری، اگر همه افراد در جهان در این دفتر حساب وجود داشته باشند، شما میتوانید در طول کل عمر خود، تمام تراکنشهای مالی خود را بدون نیاز به پول فیزیکی در این دفتر حساب وارد کنید.
برای توضیح بیشتر این موضوع، فرض کنید که دفتر حساب، یک ارزِ مخصوص به خود دارد به اسم دلار دفتر. حالا فرض کنید که شما به شخصی در دنیای واقعی ده دلار رایج میدهید تا او در دفتر تراکنشی را ثبت کند و به شما 10 دلار دفتر بدهد.
این اولین چیز مهمی است که باید در مورد بیتکوین یا هر رمزارز دیگری متوجه شوید؛ در واقع بیتکوین یا هر رمزارز دیگر یک نوع دفتر حساب (لجر) است و تاریخچه تراکنشها در اصل؛ خود ارز است.
البته بیتکوین مانند مثالی که برای دفتر حساب زدیم نیست که افراد برای ورود به آن مقدار مشخصی پول نقد وارد کنند، و در مورد نحوه ورود پول به دفتر حساب برای بیتکوین توضیح خواهم داد.
نحوه عملکرد مکانیزم توافقی در شبکه بلاکچین و ثبت تراکنشها
یک تفاوت اساسی بین سیستمی که برای دلار دفتر حساب گفتیم و نحوه عملکرد رمزارزها وجود دارد. تا اینجا توضیح دادیم که این دفتر حساب یک حالت عمومی دارد و میتواند مثلا در یک وبسایت وجود داشته باشد و افراد قادر هستند تراکنشهای جدید به آن اضافه کنند.
اما این موضوع باعث میشود تا نیاز به اعتمادسازی نسبت به یک سایت مرکزی وجود داشته باشد و مسائلی مانند این که چه کسی میزبان وبسایت است؟ یا چه کسی قوانین مربوط به اضافه کردن تراکنشهای جدید را تایید کند، مطرح میشوند.
برای حل این مشکل، به هرکدام از افرادی که در این دفتر حساب وجود دارند، یک کپی از دفتر حساب داده میشود و زمانی که هرکس بخواهد یک تراکنش به دفتر حساب اضافه کند، مثلا "آرش به علی 100 دلارِ دفتر میدهد" باید این تراکنش را به اطلاع همه برساند، تا همه این تراکنش جدید را به دفتر حساب شخصی خود اضافه کنند.
حالا واقعا خود را حال گوش دادن به پخش شدن اخبار مربوط به تراکنشهای جدید تصور کنید. چگونه میتوانید مطمئن شوید که سایر افراد نیز همان تراکنشها را با ترتیبی که شما ثبت میکنید، ثبت و ضبط میکنند. این در واقع، قلب موضوع است و یک پازل بسیار جالب.
آیا میتوانیم پروتکلی (دستورالعمل) را ایجاد کنیم که به وسیله آن نحوه تایید یا رد کردن تراکنشهای جدید و ترتیب آن مشخص شود، به طوری که مطمئن شویم، سایر افرادی که از این پروتکل پیروی (استفاده) میکنند، دارای دفتر حساب شخصی هستند که دقیقا شبیه به یکدیگر است. این مشکلی است که در وایتپیپر اصلی بیتکوین حل شدهاست.
راهحلی که بیتکوین ارائه میدهد، عبارت است از اعتماد کردن به هر دفتر حسابی که دارای بیشترین میزان محاسبات است. برای توضیح این موضوع دقیقهای را استفاده میکنم. این موضوع درارتباط با چیزی است به نام توابع هشِ کریپتوگرافی.
ایده اصلی این است که اگر برای مبنا اعتماد کردن از میزان محاسبات انجام شده، استفاده کنید، میتوانید کاری کنید که تولید کردن تراکنشهای جعلی و دفتر حسابهای متناقض، نیازمند انجام محاسبات بسیار دست نیافتنی و غیرممکن باشد.
لازم است دوباره یاد آوری کنم که این مسائل، جزییات بسیار زیادی است که شما برای استفاده از بیتکوین نیازی به آنها ندارید، اما مطالب و ایدههای بسیار جالبی هستند و با فهمیدن آنها میتوانید بفهمید که قلب بیتکوین و سایر رمز ارزها چگونه کار میکند.
تابع هش در بیتکوین و فرآیند اثبات کار یا Proof of work
تابع هش، یکی از مهمترین اجزا شبکه بلاکچین است. زنجیره بلوکها با استفاده از این تابع در فرآیند مکانیزم توافقی، به یکدیگر متصل میشوند. ورودی این تابع میتواند هر پیام یا فایلی باشد، مهم نیست.
خروجی این تابع رشتهای از بیتها است که طول مشخصی دارند، مثلا 256 بیت. به این خروجی هش یا خلاصه پیام گفته میشود. در اینجا هدف این است که این خروجی، شانسی به نظر بیاید که البته شانسی نیست و همیشه یک خروجی یکسان برای یک ورودی خاص میدهد.
اما ایده این است که اگر کوچکترین تغییری در ورودی تابع هش ایجاد کنید، خروجی آن به صورت کامل تغییر خواهد کرد. برای مثال برای تابع هش که در اینجا مثال میزنیم، هیچکدام از خروجیها که با تغییر ورودی تغییر میکند، قابل پیشبینی نیست و این تابع یک تابع هش معمولی نیست، بلکه یک تابع هش کریپتوگرافیک است.
به این معنی که محاسبه این تابع به صورت معکوس، غیرممکن است. اگر من مجموعهای از 256 اعداد صفر و یک به شما بدهم و از شما بخواهم که با توجه به این بیتها، ورودی تابع هش مشخصی را محاسبه کنید، بهترین راهحل برای شما روش حدس زدن ورودیها و آزمون و خطا است.
تعداد ورودیهایی که شما باید برای این خروجی مشخص حدس بزنید، عبارت است از 2256 که عدد بسیار بزرگی است.
ممکن است فکر کنید که قادر هستید با استفاده از مهندسی معکوس، ورودی را محاسبه کنید، اما هیچکس تا به حال قادر به انجام این کار نبوده است. بسیار جالب است که هیچ اثبات محکم و قطعی مبتنی بر سخت بودن محاسبه این تابع به صورت معکوس وجود ندارد اما بسیاری از روشهای امنیتی مدرن بر اساس توابع هش کریپتوگرافیک کار میکنند و دارای این ویژگی هستند.
اگر شما به الگوریتمهایی که جستجوگر شما برای یک اتصال امن به یوتوب یا حساب بانکی شما استفاده میکند، نگاه کنید، به احتمال زیاد تابع SHA256 را در آنجا مشاهده خواهید کرد.
در این نقطه، تمرکز ما بر این است که چگونه این تابع میتواند اثبات کند که یک لیست مشخص از تراکنشها، مربوط به میزان زیادی از محاسبات هستند.
SHA-256 = proof of work
تصور کنید شخصی یک لیست از تراکنشها را به شما نشان دهد و بگوید که که عددی پیدا کرده است که اگر این عدد را در انتهای این لیست قرار بدهید و آن را وارد تابع SHA256 کنید، 30 عدد از اولین بیتهایی که در خروجی که به شما میدهد، برابر با صفر خواهند بود.
فکر میکنید پیدا کردن این عدد برای آنها چقدر سخت بوده است؟
برای یک پیام شانسی، احتمال اینکه 30 عدد از اولین بیتهای خروجی تابع هش برابر با صفر باشند، عبارت است از 1 تقسیم بر 230 یا 1 تقسیم بر بیش از یک میلیارد. و به خاطر این که SHA256 یک تابع هش کریپتوگرافیک است، تنها راه پیدا کردن همچین عددی، حدس زدن و چک کردن آن است.
بنابراین این فرد برای پیدا کردن همچین عددی، یک میلیارد عدد شانسی را امتحان کرده است. و زمانی که شما این عدد را پیدا میکنید، با جایگذاری آن در تابع هش، سریعا به خروجی با 30 عدد صفر در اولین بیتها میرسید. ب
نابراین شما بدون انجام تلاشی که آن شخص انجام داده است، میتوانید بفهمید که برای اینکه به این عدد خاص دست پیدا کند، چقدر کار کرده است. به این موضوع، اثبات کار یا Proof of work گفته میشود و نکته مهم این است که همه این کارها (POW) به صورت ذاتی به لیست تراکنشها، گره خورده است.
اگر یکی از این تراکنشها کوچکترین تغییری کند، خروجی تابع به صورت کامل تغییر خواهد کرد و برای این که به اثبات کار یا همان عددی دست پیدا کنیم که خروجی لیست جدید، دوباره دارای 30 بیت اولیهی صفر باشد، باید یک میلیارد عدد شانسی را آزمون و خطا کنیم.
زنجیره بلوکی و مکانیزم توافقی اثبات کارPOW
حالا دوباره دفتر حسابی که برای خودمان درست کرده بودیم را در نظر بگیرید. همه افراد در حال گزارش کردن تراکنشها هستند و ما میخواهیم صبر کنیم تا آنها بر سر دفتر حسابی که درست و دقیق است، توافق کنند.
ایده اصلی پشت وایتپیپر بیتکوین این است که همه افراد اعتماد کنند که کدام دفتر حساب، دارای بیشترین کار انجام شده است. برای این که این هدف محقق شود، باید اول دفتر حسابها را در چند بلوک مختلف مرتب و منظم کنیم.
هرکدام از این بلوکها دارای لیست تراکنشهایی به همراه اثبات کار هستند. هرکدام از این اثبات کارها یا POW یک عدد خاص است که خروجی تابع هش آن که همان SHA256 است، با تعدادی صفر شروع میشود.
برای الان، در نظر بگیرید که 60 بیت اول خروجی صفر است اما بعدا در این مورد بیشتر توضیح خواهم داد، که چطور تعداد صفرهای اولیه را انتخاب کنیم.
همانطور که درستی و صحت یک تراکنش فقط با امضای ارسالکننده آن تایید میشود، برای تایید بلوکها نیز از اثبات کار استفاده میشود. همچنین برای این که این بلوکها به صورت استاندارد مرتب شوند، ورودی هر کدام از بلوکها باید خروجی هش بلوک قبلی باشد.
بنابراین، اگر شما یک بلوک را تغییر دهید یا ترتیب دو بلوک را عوض کنید، خروجی هش آننیز تغییر کرده و کل بلوکها تغییر خواهند کرد. در نتیجه شما مجبور خواهید بود دوباره کل کار را انجام داده و اعداد مخصوص را پیدا کنید، تا از این طریق همهی بلوکها دارای خروجی هش، با 60 عدد صفر در اولین بیتها باشند.
به دلیل این که همه بلوکها، به یکدیگر متصل هستند، به جای این که این سیستم را دفتر حساب نامگذاری کنیم به آن زنجیره بلوکها یا بلاکچین میگوییم.
حالا همه افراد قادر هستند تا سازنده این بلوکها باشند. این یعنی، آنها به تراکنشهای جدید که توسط سایر افراد پخش میشود، گوش داده و آنها را جمعآوری کرده و به یک بلوک تبدیل میکنند. سپس میزان مشخصی از کار را انجام میدهند، تا عدد مخصوصی که باعث میشود خروجی هش بلوک گفته شده با 60 عدد صفر شروع شود را، پیدا کنند.
پس از پیدا کردن این عدد، بلوک ساخته شده را گزارش و پخش میکنند. پاداشی که افراد برای ساختن بلوکها دریافت میکنند، عبارت است از یک تراکنش جدید که به بالای لیست تراکنشها در هر بلوک اضافه میشود و آن تراکنش عبارت است از:
" سازنده بلوک 10 دلارِ دفتر (Ledger Dollar or LD) دریافت میکند"
10 دلار فقط یک مثال است و این پاداش از هوا به وجود میآید و هیچکدام از افراد موجود در دفتر حساب آن را پرداخت نمیکنند و به این 10 دلار، پاداش بلوک گفته میشود. با توجه به قوانینی که در مورد اضافه کردن تراکنشها به دفتر گفتیم، پاداش بلوک یک استثنا است.
این پاداش از سمت هیچ شخصی نیست و نیازی به امضا ندارد و همچنین به این معنا است که تعداد کل دلارهای موجود در سیستم با اضافه شدن هر بلوک، بیشتر میشود. به فرآیند ساختن بلوکها، استخراج کردن یا Mining گفته میشود و این اسم به خاطر حجم زیادی از کاری است که باید انجام شود.
استخراج کردن، بیتهای جدیدی از رمزارز را به سیستم اقتصادی اضافه میکند. دقت در واقع کاری که ماینرها انجام میدهند، عبارت است از گوش دادن به تراکنشها، ساختن بلوکها و گزارش و پخش کردن این بلوکها و دریافت پاداش در ازای انجام این کارها.
از دیدگاه ماینرها، هر بلوک مانند یک قرعهکشی کوچک است که افراد با بالاترین سرعتی که میتوانند در حال حدس زدن اعداد شانسی هستند، تا این که یک فرد خوششانس، به عددی که باعث میشود هش بلوک با تعداد مشخصی صفر شروع شود، دست پیدا میکند و برای این موضوع پاداش دریافت میکند.
سایر افرادی که میخواهند پرداخت انجام دهند، به جای گوش دادن به تراکنشها، به بلوکهایی که توسط ماینرها پخش و گزارش میشود، گوش میدهند و کپیهای شخصی خود از بلوکچین را به روزرسانی میکنند.
نکتهی کلیدی این است که اگر شما دو عدد بلوکچین متمایز با سابقه تراکنشهای متناقض را ببینید، آن بلوکچینی که دارای طول بیشتری است و کار بیشتری در آن انجام شده است را انتخاب میکنید و اگر تعداد بلوک ها مساوی بود، صبر کنید تا بلوک جدیدی تولید شده و به یکی از آنها اضافه شود و آن را طولانیتر کند و سپس و آن بلوکچین را انتخاب کنید.
چرا مکانیزم توافقی اثبات POW کار دارای امنیت بالایی است؟
اگرچه که هیچ قدرت و اختیار مرکزی وجود ندارد و هرکس یک کپی شخصی از بلوکچین را برای خود دارد، اگر همهی افراد به بلوکچینی که دارای بیشترین طول است و دارای بیشترین کارِ انجام شده است، اعتماد کنند، به یک روشی میرسیم که همگی میتوانیم به یک توافق غیرمتمرکز دست پیدا کنیم.
برای فهمیدن این که چرا یک توافق غیرمتمرکز باعث با ارزش شدن یک سیستم میشود و این که در چه نقطهای به درست بودن یک پرداخت انجام شده، اعتماد کنید، باید متوجه شوید که چطور میتوان با استفاده از سیستم بلوکچین، شخصی را فریب داد و کلاهبرداری کرد.
فرض کنید که آرش قصد دارد از طریق ساختن یک بلوک جعلی، علی را فریب دهد. آرش میتواند بلوکی را به علی ارسال کند که در آن تراکنش "آرش به علی 100 دلار میدهد" وجود دارد. اما آرش این بلوک را برای سایر افراد موجود در شبکه ارسال نمیکند و از این طریق، سایر افراد هنوز فکر میکنند که آرش، آن 100 دلار را دارد.
برای انجام این کار، آرش مجبور است که یک اثبات کار معتبر را قبل از سایر افراد پیدا کند و این اتفاق ممکن است. احتمال دارد آرش این قرعهکشی کوچک را قبل از سایر افراد، برنده شود.
اما علی همچنان در حال شنیدن گزارش بلوکهای جدید از سایر افراد است و آرش برای این که علی همچنان به معتبر بودن بلوکهای او باور داشته باشد، باید به تنهایی اقدام به تولید زنجیره بلوکهایی کند که از زنجیرهای که سایر افراد در حال ساختن آن هستند، متفاوت است.
به یاد بیاورید که طبق پروتکل ، علی به زنجیرهای از بلوکها اعتماد دارد که بلندتر است. آرش تا زمانی میتواند به کار خود ادامه دهد که بتواند با سرعت بیشتری نسبت به سایر افراد در شبکه، اقدام به تولید بلوکها کند.
اما تا زمانی که آرش دارای حدود 50% از منابع انجام محاسبات مربوط به بلوکها نباشد، احتمال این که او بتواند با سرعت بیشتری نسبت به سایر افراد روی هم رفته اقدام به تولید بلوکها کند، بسیار پایین است.
بنابراین پس از مدتی، زنجیره جعلی بلوکهایی که آرش به علی ارسال کرده است از زنجیره بلوکهای سایر افراد کوتاهتر میشود و علی دیگر آن را قبول نخواهد کرد. این یعنی، شما لزوما نباید به هر بلوکی که میبینید، سریعا اعتماد کنید.
بلکه شما باید منتظر شوید تا چند بلاک دیگر به آن اضافه شود. اگر زنجیرهی بلوکهای بلندتری از آن پیدا نکردید، این یعنی میتوانید اعتماد کنید که این بلوک از زنجیرهای است که سایر افراد نیز از آن استفاده میکنند و معتبر است.
از این طریق، ما همهی ایدههای اصلی مربوط به دفتر حساب یا رمزارز را برآورده کردهایم. این سیستم دفتر حساب توزیع شده که بر اساس اثبات کارPOW است، تقریبا مانند پروتکل بیتکوین و سایر رمزارزها کار میکند. تنها تعدادی از جزییات باقی میماند و نیاز به شفاف سازی دارند.
تعداد واحدهای بیتکوینی که ایجاد میشوند از کجا به وجود میآیند؟
تمام پولهای موجود در شبکه بیتکوین، در نهایت از پاداش بلوکها به وجود میآیند. در ابتدا این پاداش در ازای هر بلوک جدید، برابر با 50 بیتکوین بود. برای مشاهدهی آمار بلوکها، میتوانید به وبسایت Block explorer مراجعه کنید.
در قسمت سرچ اگر بلوکهای اولیه را جستجو کنید، مشاهده خواهید کرد که پاداش تراکنشها برای هر بلوک برای ماینرها برابر با 50 بیتکوین بوده است. اما حدودا پس از 210 هزار بلوک جدید که تقریبا هر 4 سال یکبار تولید میشوند، پاداش استخراج کردن بیتکوین نصف میشود و در حال حاضر، این پاداش برابر با 12.5 بیتکوین به ازای هر بلوک جدید است.
به دلیل این که این پاداش در طول زمان به صورت تصاعد هندسی کاهش پیدا میکند، تعداد کلی بیتکوینهایی که در نهایت به وجود میآید، برابر 21 میلیون واحد خواهد بود. اگر چه به این معنا نیست که درآمد ماینرها متوقف خواهد شد. ماینرها علاوه بر پاداش بلوکها، میتوانند از کارمزد تراکنشها نیز درآمد کسب کنند.
محدودیت بلاکچین بیتکوین
پیشتر گفتیم که اثبات کار عبارت است از پیدا کردن عددی که با استفاده از آن، خروجی هش بلوک، با 60 عدد صفر شروع شود. اما روشی که پروتکل بیتکوین با آن کار میکند، عبارت است از تغییر دورهای تعداد صفرها، به گونهای که پیدا کردن هر بلوک جدید، به صورت متوسط 10 دقیقه طول بکشد.
بنابراین هرچقدر که تعداد ماینرهای موجود در شبکه بیشتر میشود، این چالش سختتر و سختتر میشود، به گونهای که، این قرعهکشی مینیاتوری در هر 10 دقیقه، تنها یک برنده خواهد داشت. سایر رمزارزهای جدید دارای زمان کوتاهتری برای تولید بلوکهای جدید دارند.
- اتریوم 15 ثانیه؛
- ریپل 3.5 ثانیه؛
- لایتکوین 2.5 دقیقه؛
در بیتکوین هر بلوک میتواند تعداد 2400 تراکنش را در خود جای دهد و از نظر بسیاری از منتقدین این تعداد به صورت غیرضروری محدود است. برای مقایسه، ویزا به صورت میانگین در هر ثانیه تعداد 1700 تراکنش را انجام میدهد و آنها قادر هستند تعداد حداکثر 24 هزار تراکنش را در هر ثانیه مدیریت کنند.
آرام بودن فرایند پردازش تراکنشها در بیتکوین، باعث افزایش کارمزد تراکنشها میشود؛ زیرا که این عاملی است که باعث میشود ماینرها، انتخاب کنند که کدام تراکنشها در یک بلوک جدید ذخیرهسازی شوند.
سخن آخر
اگرچه در این مقاله توضیحات زیادی در مورد نحوه عملکرد بلاکچین و سیستم بیتکوین داده شد، اما همهی موضوعات گفته شده، تنها بخشی از دنیا و موضوعات گسترده موجود در رمزارزها هستند. هنوز بسیاری از مسائل و موضوعات بسیار مهمی هستند که من در این مقاله حتی به آنها اشاره هم نکردم. موضوعاتی مانند :
- درختهای مرکل یا درختهای هش؛
- جایگزینهای اثبات کار؛
- برنامهنویسی در بیتکوین؛
تا اینجا سعی کردم اطلاعات مفیدی در مورد مفاهیم اساسی رمزارزها را به کسانی که علاقه دارند تا این موضوع را به صورت تخصصیتر دنبال کنند، ارائه دهم. با توجه به حجم زیادی از پول و سرمایههایی که در حال وارد شدن به بازار رمزارزها است، برای افرادی میخواهند وارد این بازار و تکنولوژی جدید بشوند، دانستن مفاهیم بنیادی در این زمینه بسیار مفید است.