چندماهی هست که تب بیتکوین و ارزهایدیجیتال خیلی بالارفته!
درضمن وقتی بحث بیتکوین مطرح میشه مطمئنا بحث ماینر نیز بهعنوان یک سختافزار خاص و ویژه جهت استخراج ارز دیجیتال نیز مطرح میشه و همونموقع هست که صحبت از مهندسین برق و الکترونیک میشه که: این سختافزار دقیقا چیهست؟ چرا ما خودمون نمیسازیم؟ و نکته مهمتر من مهندس برق و الکترونیک کجای این تجارت پرسود میتونم باشم؟ بگذارید مواردبالا را هم به زبان و دید یک مهندس برق مرورکنیم!
چهشد که این پست را نوشتم؟
همانطورکه احتمالا اطلاع دارید یا ندارید، بازار ماینینگ ارزهایدیجیتال مثل بیتکوین بیشازپیش داغ است و از دلایل آن میتوان به چند نکته اشارهکرد؛ نکته اول بالارفتن قیمت بیتکوین است؛ در یکیدو سال اخیر قیمت بیتکوین بعداز یک افتشدید(از حدود ۲۰۰۰۰هزاردلار برای یک واحد بیتکوین به معادل ۴۰۰۰دلار برای هر واحد بیتکوین) مجددا شروعبه بالارفتن کردهاست در تصویرزیر میتوانید نمودار نرخ بیتکوین از سال ۲۰۱۷ تاکنون را مشاهدهکنید.
نرخرشد بشکلی است که در یکیدوماه اخیر بیشاز دوهزاردلار به قیمت هر بیتکوین اضافهشدهاست؛ همین امر باعث میشود که افراد زیادی در سراسرجهان ترغیب بشوند تا دستبهکار استخراج بیتکوین بزنند. با این تغییرات جدید در سهماهگذشته سختی شبکه افزایش چشمگیری داشته نزدیک به ۱۰ اگزا هش(هر اگزا معادل ۱۰به توان ۱۸ است) به ظرفیت شبکه اضافهشدهاست. از بزرگی عدد مربوطه به خوبی مشخص میشود که تعداد افراد مشارکت کننده چقدر زیاد شده است.
ازطرفی در کشور شاهد افزایش وحشتناک قیمت دلار بودیم تا حدود هر دلار ۱۵هزارتومان، همین دو دلیل بهسادگی بیان میکنند که چرا اینقدر تعداد افرادی که بهدنبال استخراج بیتکوین هستند زیاد شدهاند! در بازه زمانی حدود یک ماه پیش قیمت هر بیتکوین در ایران به معادل ۱۳۲میلیون تومان نیز رسید. پس افزایش تعداد آگهیهای خریدو فروش دستگاه ماینر بیدلیل نیست!
از اونجاییکه الکترونیکیها دوستدارند هر چیزی رو خودشون بسازن، کامنتهای زیادی دریافتکردیم در این خصوص که آیا با بردهای رزبری یا اورنج پای یا حتی FPGA میشود دستگاه ماینر ساخت؟ و اگر میشود چطور میشود این کار رو انجامداد؟ همین سوالات دوستان بود که انگیزه نوشتن این پست شد.
توی این پست قرارنیست همه جزییات رو بیانکنیم، اگر واقعا بعداز خوندن این پست کنجکاو بشید مطمئنم با چند سرچ ساده در گوگل جواب بیشتر سوالاتتون رو پیدا میکنید و صدالبته شاید اگر استقبال مناسب باشه این مقاله و موضوع را هم ادامه بدیم…
فلسفه بیتکوین چیه و از کجا اومده؟
تاحالا فکرکردید چرا طلا یک فلز قیمتی است یا اینکه چرا اسکناس که تنها یک تکه کاغذ نقاشیشدهاست داری ارزش است؟ جواب بصورت ساده اینطور است، چون قرارداد کردهایم که اینطور باشه! یا به بیان سادهتر چون تقاضا وجود دارد این اشیاء دارای ارزش هستند! بیایید با یک مثال این مفهوم رو روشن کنیم. فرضکنید با مقدار زیادی طلا و جواهرات در جزیرهای دورافتادهای اسیر قبیلهای بدوی شدهاید که قصد دارند شما را قربانیکنند. آیا میتوانید با دادن وعده طلا و جواهر جان خود را نجات دهید؟ قطعا جواب منفی است چراکه برای افراد قبیله طلا هم فلزی است مثل دیگر فلزات و جواهرات هم مثل دیگر سنگهای جزیره آنچه این فلز و سنگهای قیمتی را از دیگر انواع خود جدا میکند دقیقا قراردادی است که در جامعه سر ارزشمندبودن آنها انجام دادهایم! بیتکوین هم دقیقا همین است! با این تفاوت که بیتکوین یک شی نیست و تنها چندهزار بایت داده دیجیتال است ؛ یعنی حتی حضور فیزیکی قابللمس هم ندارد! آدمها قرارداد کردهاند که این بایتها دارای ارزش باشد و بابت آن حاضرند پول پرداختکنند، این میشود که بیتکوین دارای ارزش میشود. اما سوالی که مطرح میشود این است که چرا هر چندهزار بایت یک بیتکوین حساب نمی شود ؟ دقیقا به همان دلیلی که هر فلزی طلا حساب نمیشود برای تشخص اینکه فلزی طلا است یا نه به آرایش اتمی آن نگاه میکنیم مقاومت اهمی آن را اندازه میگیریم و … برای اینکه مشخصشود هر چندهزار بایت بیتکوین هست یا خیر نیز الگوریتمهایی وجود دارد که با قراردادن بایتها در ان میتوان تشخیصداد که بایتهای شما بیتکوین هستند یا خیر بیتکوین نیست! بصورت خلاصه بیتکوین دارای ارزش هست چون: تعداد اون محدوده! و افراد مختلف توانستهاند یک توافق جمعی داشتهباشند که میتوانند از این اعداد جهت انتقال ارزشمادی استفادهکنند!
چطور بیتکوین استخراجکنیم(ماینینگ)؟
حالا که بیتکوین رو شناختیم میخواهیم ببینیم که چطور میشود بیتکوین داشت یا اصطلاحا استخراج کرد! که البته به این کار ماینینگ هم گفته میشود؛ همونطورکه قبلا گفتیم برای تایید صحت بیتکوین الگوریتم خاصی وجود دارد که بر پایهSHA256 بنا گذاشتهشدهاست. آنهایی که با این الگوریتم آشنایی دارند میدانند که این الگوریتم یه الگوریتم برگشتناپذیر است یعنی از خروجی نمیشود به ورودی رسید!
برای اینکه دقیقتر متوجهبشوید، میشود با الگوریتم CRC قیاسش کرد. شما از خروجی الگوریتم CRC نمیتوانید بایتهای ورودی رو حدسبزنید اما میدانید اگر CRC مقدارخاصی باشه بایتهای ورودی همانی است که باید باشد. این اتفاق دقیقا برای الگوریتم بیتکوین هم میافتد یعنی به شما خروجیای میدهد که شما میدانید بایتهای ورودی حتما بیتکوین است ولی از خروجی نمیتوانید به ورودی برسید. خوب حالا با این تفاسیر چطور میشه مجموعه بایتهایی رو پیدا کرد که توی این الگوریتم درست دربیاد؟ دقیقا با روش سعی و خطا! بله باید بایتهای اتفاقی درستکنیم و وارد الگوریتم صحتسنجی کنیم اگر جواب مثبت بود یعنی موفق شدیم که یک بیتکوین پیداکنیم، اگر که نه باید بایتهای اتفاقی دیگه رو جستجو کنیم و این کار رو تکرارکنیم تا بالاخره موفقبشیم یه بیتکوین بهدستبیاریم! الگوریتم موردبحث اصلا چیز پیچیده و ترسناکی نیست حتی میشه با کاغذ و خودکار الگوریتم رو پیادهسازی و محاسبه کرد. مقالهای تحتعنوان Mining Bitcoin With Pencil and Paper که این کار رو آموزش داده البته زمانی این کار مقدور بوده که ورودیها به پیچیدگی امروز نبودند. فرضکنید برای پیداکردن اعداد اول به شما پاداش بدهند؛
پیداکردن چند هزار تا عدد اول ساده است و حتی شاید چند صدتای اول رو بشه ذهنی هم حسابکرد ولی از اون بهبعد فرایند مدام پیچیدهتر و پیچیدهتر میشود. ورودیهای ساده برای پیداکردن بیتکوین به پایان رسیده و الان برای پیداکردن بیتکوین نیاز به محاسبات بسیارزیادی دارید که حتی از توان سرورهایی با چند هسته پردازشی نیز برنمیاد.
برای جزییات بیشتر درمورد سازوکار و الگوریتم بیتکوین میتوانید واژههای Hashcash و proof of work و Block hashing algorithm را جستجو کنید.
بلاکچین کجای قضیه است؟
خیلیها بلاکچین را بهعنوان یک سیستم ضدفیلتر میشناسند(امان از نسخههای تلگرام جعلی?) بعداز فیلترینگ تلگرام تبلیغات خیلیزیادی شد که قراره تلگرام بااستفادهاز بلاکچین خودش رو غیرقابل فیلتر کند! که همچنان منتظر هستیم ببینیم چطور میخواد این حرکت رو بزنه! بگذریم. مفهوم واقعی بلاکچین درواقع این نیست، اونطورکه من متوجه میشم بلاکچین سیستمی است برای نگهداری امن اطلاعات و این اطلاعات هرچیزی میتونه باشه. مهمترین خصیصه این سیستم امنبودنش هست؛ امن بهاینمعنی که اطلاعات ذخیرهشده در بلاکچین غیرقابلتغییر محسوب میشوند. اینجاست که بلاکچین وارد ماجرای بیتکوین میشود. البته بلاکچین و امنیتی که به ما میده اینقدر پراهمیت هست که در بحثهای مربوطبه امنیت اینترنت اشیاء IOT نیز واردشده، بصورت خلاصه این سیستم بصورت بلاکهای کنارهم ذخیره میشود که تاییدیه هر بلاک در بلاک بعدی وجود دارد بهعبارتی اگر قرارباشه اطلاعاتی داخل یکیاز بلاکها تغییرکنه باید همه بلاکها تغییرکنه! و چون این اطلاعات در بسیاری از کامپیوترهای شبکه وجود داره علنا کسی نمیتونه تغییراتی وارد سیستم کنه به طوری که سیستم شبکه بلاکچین نتونه عدمصحت اون را تشخیصبده!
فرضکنید شما باکلی زحمت تونستید یه بیتکوین پیداکنید، چطور میخواید اثباتکنید این بلاک رو شما پیداکردید؟ اینجا سازوکار سادهای وجود دارد، هرکسی زودتر بلاک پیداشده را ثبتکرد بلاک متعلق به او خواهدبود. در ثبت این اطلاعات از مکانیزم بلاکچین استفاده میشود تا احتمال هرگونه تقلب و دستکاری داخل اونو از بین ببرن. اگر درمورد بلاکچین کنجکاو شدید توصیه میکنم که پادکست شماره 77 رادیو گیک(از جادی عزیز) را گوش کنید درمورد بلاکچین توضیحات خوبی میده.
چطور بیتکوین استخراجکنیم؟
خوب کمکم داریم به قسمت جالب مقاله میرسیم جاهایی که داره الکترونیک وارد ماجرا میشه! همانطورکه قبلا گفتیم، برای اینکه قادرباشید یک بلاک بیتکوین استخراج کنید لازمه که الگوریتمی رو محاسبهکنید و با سعی و خطا سعیکنید که ورودی مناسب را برای الگوریتم پیداکنید؛ خوب این الگوریتم بر پایه هش sha256 بناشده یعنی اگر شما سختافزاری داشتهباشید که هرچه بیشتر قادر باشه این هش رو انجامبده یعنی میتونید تعداد بیشتری ورودی در ثانیه بهش بدید تا محاسبهکند درنتیجه زودتر به جواب موردنظر خواهید رسید. عبارت هشبرثانیه از همینجا میاد یعنی تعداد باری که قادر هستید این الگوریتم رو در واحد ثانیه انجامشبدید. میخوایم این تست رو روی بردهای مختلف انجامبدهیم، ببینیم که چقدر قادرهستیم درآمد داشتهباشیم.
برد رزبریپای
اولین تست رو با برد زربریپای مدل B+ انجاممیدیم این برد دارای پردازنده BCM2835 که یک پردازنده تکهستهای ۷۰۰مگاهرتزی است میباشد، برای انجام تست از برنامه cpuminer استفاده میکنیم که الگوریتم sha256 بااستفادهاز cpu را پیادهسازی کرده البته از ورژن بهینهشده برای پردازندههای ARM استفاده میکنیم که سورسش رو هم میتوانید توی GitHub ببینید.
همونطورکه میبینید یک پردازنده ۷۰۰مگاهرتزی ARM11 تنها قادره که ۲۰۰هزار بار این الگوریتم رو در ثانیه انجامبده خوب حالا بهتره بریم سراغ پردازندههای جدیدتر آرم مثلا از برد رزبریپای ۳ با پردازنده BCM2837 که یک پردازنده ۴هستهای Cortex-A53 است و اما نتیجه تست:
بله واقعا نباید انتظار معجزه داشت تقریبا ۶برابر سریعتر از رزبریپای B+ محاسبات رو انجام٬داد یعنی ۱۳۸۱هزاربار در ثانیه یا معادل ۱.۳مگاهش
برد اورنجپای(Orange pi)
الان خودم هم کنجکاو شدم که ببینم پردازنده H3 که یه پردازنده ۴هستهای Cortex-a7 است چطور از پس این الگوریتم برمیاد برایهمین تست رو روی برد Orange pi One تکرارکردم البته پردازنده H3 روی بردهای زیادی استفادهشده که فکرنمیکنم توی نتیجه تغییرچندانی ایجادکنه!
ظاهرا نتیجه حتی از Raspberry Pi3 هم بهتر است یعنی حدود ۱.۴مگاهش برثانیه! توی هر سه تا مقایسه از همون کدی که ابتدای این بخش معرفیکردم استفادهشده و تنها برای معماریهای مختلف مجددا کامپایلش کردم. بذارید این تست رو با پردازنده اینتل i۳ نسل۲ تکرارکنیم:
خوب نتیجه خیلی بهتر شد حدود ۱۰مگاهش برثانیه یعنی نزدیک به ۷برابر بهتر از پردازنده H3 اجازهبدید همچنان پردازنده رو قویتر کنیم یعنی بریم سراغ پردازنده i۷ نسل۴:
نزدیکبه ۴برابر نتیجه بهتر شد یعنی حدود ۳۶مگاهش برثانیه برای روشنترشدن نتایج حاصل بهتره که نتیجه تستها رو روی نمودار مشاهدهکنیم تا بشه راحت تر اختلافها رو بررسیکرد.
همونطورکه از نمودارها بهخوبی مشخصه پردازندههای مبتنیبر تکنولوژی ARM هش ریت خیلیپایینی دارند البته از همون اول هم میشد حدسزد که اصولا پردازنده و کار پردازشی برای انجام عملیات sha256 چندان رضایتبخش نباشه چراکه اگر به الگوریتم sha256 دقتکنید، خواهید دید که بیشتر نیازبه انجام عملیات منطقی داشتهباشد تا عملیات پردازشی.
اینجاست که باید از FGPA استفادهکرد (اگر از FPGA خوشتونمیاد به آموزش FPGA مراجعهکنید) حتما استفادهاز FPGA خیلیبهتر از پردازنده خواهد بود. خوب بذارید اول از چیپی که میشناسیم شروعکنیم یعنی Spartan 6slx9 محصول شرکت xilinx بعداز پیادهسازی الگوریتم sha256 برروی این چیپ نتایجزیر حاصلشد(برخلاف تستهای قبلی این یکی را از اینترنت به عاریه گرفتیم)
200MHz 5034 FF [44%] 3247 LUT6 [56%] 0 BRAM 0 DSP48A1 3.125MH/s
برای هربار اجرای sha256 نیازبه ۶۴سیکل ماشین هست که باتوجهبه فرکانس ورودی ۲۰۰مگاهرتز درنهایت ۳.۱۲۵مگاهش خواهیمداشت! البته از اونجاییکه کمتر از ۵۰درصد چیپ استفادهشده نهایتا دوتا هسته sha256 رو میشه توی این چیپ جا داد که درنهایت ۵.۲۵۶مگاهش خروجی خواهیمگرفت! عددی بهمراتب بالاتر از پردازندههایARM حتی چندهستهای با فرکانس چندبرابر!
خوب بذارید بریم سراغ یه چیپ قویتر؛ پروژه متنبازی هست که بااستفادهاز ۴عدد FPGA اسپارتان XC6SLX150 بردی را برای ماینینگ طراحیکرده به اسم USB-FPGA Module 1.15y همونطورکه احتمالا میتونید حدسبزنید عملکرد این برد بمراتب بهتر از استفاده از یک Spartan 6 XC6SLX9 است.
بااستناد به گفته سازنده(این فروم) این برد قادره تا ۸۰۰مگاهش رو در ثانیه انجامبده ! این مقدار هش در سال ۲۰۱۱معادل درآمد روزانه ۲۰۵دلار بودهاست اما امروز این مقدار هش ریت هیچ درآمدی برای شما نخواهدداشت(بهدلایلیکه اگر فرصتیبود توضیحش را خواهمداد). برای درک بهتر عملکرد FPGA بهتر است که نتیجه را به نمودار اضافهکنیم, یهجورایی بردهای رزبری و اورنجپای محو شدند.
همانطورکه در نمودار بهخوبی مشخصاست استفادهاز FPGA اختلاف فاحش و معناداری نسبتبه استفادهاز CPU نمایش میدهد. با اینحال داشتن حتی چندگیگاهش برثانیه درآمدی را در شبکه چند ده اگزا هشی بیتکوین دربرنخواهد داشت. نهتنها استفادهاز بردهای رزبریپای و اورنجپای بلکه حتی استفادهاز کامپیوترهای قوی چند ده هستهای هم توجیه اقتصادی ندارند و نمیتوان از آنها برای استخراج بیتکوین استفادهکرد. شاید چندسالپیش یعنی حدود دهسال پیش استفادهاز پردازندههای کامپیوتر برای استخراج بیتکوین معنی داشته ولی امروزه کاملا منسوخشده و بیمعنی است. درحالحاضر دستگاههای تجاری استخراج بیتکوین هش ریتی معادل چند ده تراهش دارند یعنی بیشاز یکمیلیون برابر هش ریتی که از FPGA گرفتهشده! بهعبارتی استخراج بیتکوین توسط بردهای معمولی نه منطقی هست و نه بهصرفه! اما چطور دستیافتن به چنین هش ریتی ممکناست؟ با داشتن چنین هش ریتی چقدر درآمد خواهیمداشت؟ چرا درآمد بیتکوین هر ۱۵روز کمتروکمتر میشود! سوالاتیکه مطرحشد را اگر فرصتی دستداد در مقالهای جداگانه پاسخخواهیمداد. استقبال شما و کامنتهاتون میتونه این فرصت را ایجادکنه. راستی در اخر لازمه بگم ازنظربنده و خیلیها تجارت ارزهایدیجیتال بخصوص بحث ماینینگ میتونه بازار و درامد خوبی داشتهباشه و صدالبته اینکه منِ مهندسِ برق چه تواناییهای منحصربهفردی میتونم در این بازار، غیراز سرمایهگذاری و خرید ماینر مانند افرادعادی جامعه داشتهباشم سوالکلیدی و مهمی است که مطمئنا جوابهای پراهمیتی هم میتونه داشتهباشه!
منبع:سیسوگ