ماینرها، شیطان یا فرشته؟
این مقاله برای علاقه مندان به برنامه نویسی و قراردادهای هوشمند نوشته شده است. بنابراین اگر به این حوزه علاقه ای ندارید می تواند از خواندن آن صرف نظر کنید.
توهم لایه اجماع
اتریوم یک پلتفرم غیرمتمرکز است که بر پایه قراردادهای هوشمند کار میکند: نرمافزارهایی که دقیقاً و بدون هیچ اخلالی در کارشان، همانطور که برنامهریزی شدهاند، عمل میکنند. عملکردی بدون سانسور، کلاهبرداری یا دخالت اشخاص ثالث.
برگرفته از وبسایت اتریوم
بهعنوان توسعهدهندگان، ما لایه اجماعی را دوست داریم که به تمام مشکلات مرتبط با یک سیستمِ بهشدت پراکنده رسیدگی کند و این اجازه را به ما بدهد که نرمافزارها را بنویسیم. ماینرها در لایه اجماع جا خوش کردهاند و هر کاری را که یک ماینر باید انجام دهد را انجام میدهند. توسعهدهنده اما، بر روی لایه نرمافزاری کار میکند و با قراردادهای هوشمند سروکار دارد. نرمافزارهای بسیار خوبی که تا ابد بدون هیچ مشکلی بر روی ماشین مجازی اتریوم (EVM) کار خواهند کرد. نرمافزارهای غیرمتمرکز ما با تعداد بیشماری رایانه کار میکنند و کاملاً تکیهبر یکپارچگی خود دارد.
خود از اینکه EVM قدرت گرفته از اجماع است آگاهیم، اما نیازی هم نداریم که تا زمانی که که کار میکند، به آن رسیدگی شود. ما هیچ نگرانیای در رابطه با ماینرها نداریم. درواقع، نیازی نیست کسی از نحوه کار نیمهرساناها اطلاعی پیدا کند یا چرخه طراحی پردازندهها را بشناسد. متأسفانه این بخش زیبا و بدون اشکال بین لایهها یک توهم است. این وهم لایه اجماع به ما کمک میکند که فراموش کنیم ماینرها دوستان ما نیستند.
لایه اجماع در تمام مدت بهصورت تصادفی با اپلیکیشن غیرمتمرکز تداخل دارد؛ اما گاهی نیز میتواند بهصورت عمدی این کار را انجام دهد. لایه اجماع توسط ماینرها کنترل میشود. ماینرها برای پول کار میکنند. لایه اجماع تنها تا زمانی از نرمافزار پشتیبانی خواهد کرد که سوددهی داشته باشد. اگر ماینر ها با تداخل در اپلیکیشن پول بیشتری به جیب بزنند، بالاخره چنین کاری را خواهند کرد.
تردمیل ماینینگ
ماینرها دوستان شما نیستند اما به این معنی نیست که دشمنتان باشند. آنها نمیخواهند به شما آسیب بزنند، فقط نمیتوانند از این کار شانه خالی کنند. تمام اینها در طبیعتشان و جزو ملزومات کار آنهاست. ماینرها باید با بیرحمی تمام کار کنند تا پولی اندک عایدشان شود. آنها روی یک تردمیل ماینینگ گیر افتادهاند و دوندگان سریعتر، کنترل سرعت را بر عهدهدارند.
هر بار که ماینر ها بفهمند که چطور سریعتر یا ارزانتر هش ها را انجام دهند، میزان سختی بیشتر خواهد شد. با بالاتر رفتن سختی نیز، هر هش ارزش پایینتری پیدا میکند. نرخ هش شما ممکن است ثابت باقی بماند ولی رفتهرفته، کمتر و کمتر پول گیرتان خواهد آمد. بدین ترتیب سیستم POW ( اثبات کار)، ماینر ها را مجبور میکند تا رقابت را حفظ کنند. ماینرها تنها بهوسیله خرج مداوم، برآوردهای مدام و رقابتهای مداوم میتوانند به سود برسند. در این میان ماینرهایی که نتوانند به رقابت بپردازند، از روی تردمیل به پایین میافتند.
اگر میزان سود شما یک درصد باشد، یک درصد کاهش، سود شمارا محدود میکند. اگر هش ریت یک ماینر، حتی به میزان اندک نیز عقب بیافتد، از بسته بهصورت کامل جدا خواهند شد. اگر حواسشان را جمع نکنند، در پایان از روی تردمیل خواهند افتاد. در طرف دیگر، افزایش یک درصدی در میزان بازده، سود آنها نیز دو برابر خواهد شد. ماینری که کمی از دیگران قویتر باشد میتواند پول بسیار بیشتری را برای سرمایهگذاری روی سختافزارهای بهتر جمعآوری کند. POW یا همان اثبات کار، ماینرها را وادار میکند تا این برتریهای کوچک را پیدا و از آنها برای پایین انداختن دیگر ماینرها از تردمیل استفاده کنند.
دو راه برای بالا بردن میزان سود وجود دارد: ایجاد بازدهی بیشتر یا محدود کردن هزینهها. بازدهیها از پاداشهای بلاکها و کارمزد تراکنشها سرچشمه میگیرند. هزینهها نیز شامل برق، سختافزار، کارکنان و دفتر و … میشوند.
در حال حاضر ماینرها بر روی بدیهیات مانور میدهند: عواملی مشخص مانند برق ارزانتر یا تجهیزات سختافزاری بهتر. متأسفانه این قبیل عوامل رفتهرفته در حال کم شدن هستند. پیدا کردن برق ارزان بسیار سخت شده، کارتهای گرافیک با مشکل پنهای باند حافظهها مواجهاند و ASICها با مشکل ابعاد ترانزیستورها دستوپنجه نرم میکنند. در حال حاضر این قبیل کارها، بهترین بهبودهایی هستند که ماینرها میتوانند به تشکیلات خود وارد کنند. اما مقطعی فرا خواهد رسی که این بهینهسازیها نیز جای اجرا نداشته باشند و ماینر ها به دنبال راهکارهایی باشند که کمتر به چشم میآیند.
اینچنین بهینهسازیها کم نیستند؛ اما متأسفانه به شما آسیب خواهند رساند. دوست دارم کمی بر روی راههایی که ماینرها میتوانند بهرهوری خود را افزایش و هزینهها را کاهش دهند تمرکز کنم. راههایی که آنها بهوسیله گرفتن پول از افراد و سیستمهایی که بر روی بلاک چین کار میکنند، اقدام به، دست یافتن به اهدافشان میکنند. به یاد داشته باشید که ماینرها نمیخواهند که پول شمارا بگیرند، بلکه آنها مجبور به گرفتن پول شما هستند. از ملزومات POV، این قبیل رقابتهاست.
ماینرها چگونه میتوانند تداخل ایجاد کنند
راههای بسیاری برای دخالت ماینر ها با EVM و نرمافزارهایی که روی آن اجرا میشود، وجود دارد. ازآنجاییکه هر ماینر، توانایی کنترل بلاکهایی که ایجاد میکند را دارد، میتواند تغییراتی دروضعیت آن بلاکها نیز صورت دهد. بگذارید به چند نمونه از این روش در سطوح بالا اشارهکنیم. برای هرکدام از آنها، قصد داریم تا استراتژی تداخل، کسانی که در این میان ضرر میبینند و راهکاری که طی آن ماینر به پول میرسد را برسی کنیم.
ترتیب دهی دوباره تراکنش
تراکنشها در بلاکها پردازش میشوند، هر بلاک نیز ترتیب متعارفی دارند که در آن وضعیت هر تراکنش در حین پردازش تغییر میکند. ماینرها نیز هر تراکنش را به ترتیب در EVM وارد میکنند و با محاسبه ریشه وضعیت، تراکنش را به صدر بلاک میآورند. ماینری که بلاک را ایجاد کرده، بر روی ترتیب تراکنش بر روی همان بلاک کنترل دارد. از همین رو، ماینرها با کنترل ترتیب تراکنشها در بلاک، در تغییر وضعیتهای تراکنشها نیز دخیلاند. اینطور فرض کنید که من میخواهم که برای دوستم پول واریز کنم.
با این دستورات، یک قرارداد ساده را ایجاد میکنم: deposit، unlock و retrieve. با دستور deposit میتوانم سرمایهها را ذخیره و با دستور unlock در هر زمان که بخواهم میتوانم پنج اتریوم به کسی که قصد فرستادن اتریوم را دارم، آنها را ارسال کنم. دوست من با دستور retrieve میتواند سرمایههای آزادشده من را دریافت کند. اگر یک ماینر فرمان unlock و retrieve را در یک بلاک مشابه ببیند، میتواند ترتیب آنها را به نحوی بچیند که دستور retrieve زودتر از دستور دیگر پردازش شود. با اجرای این دستور، تمام سرمایههای آزادشده، دریافت خواهد شد. سپس دستور unlock پردازش میشود. دوست من در اینجا مجبور است که یک تراکنش دیگر را retrieve کند، و در این صورت یک کارمزد دیگر نیز پرداخت خواهد شد.
با چینش دوباره قراردادها، ماینرها میتوانند بر نتیجه یک قرارداد تأثیر بگذارند؛ که این یعنی آنها میتواند در ابعاد محدودی، وضعیEVM را کنترل نمایند. این کار میتواند در قراردادهایی که عمومیت و ابعاد بزرگتری را دارند، باعث مشکلات بزرگتری شود. هر چه تراکنشهای در دسترس یک ماینر بیشتر باشد، او کنترل بیشتری را بر وضعیت نهایی خواهد داشت.
توسعهدهندگان قراردادها، میبایست ترتیب دهیهای سختگیرانهتری را در تراکنشها بهکارگیرند یا ریسک کارمزدهای بالاتر یا دیگر ضررهای ناخواسته را به جان خود بخرند.
درج تراکنش
وقتیکه تراکنشها در یک بلاک، چینش میشوند، ماینرها بهوسیله تراکنشهایی که افراد دیگر انجام میدهند، محدود نمیشوند. آنها میتوانند تراکنشها را بسازند. ماینرها اتریوم در اختیاردارند؛ پس آنها میتوانند در کازینوهای درون زنجیرهای (آن چین) اتریوم ها را شرطبندی کنند یا در بازارهای آن چین، آنها خرید رو فروش نمایند، درست مانند همه ما. اما ازآنجاییکه آنها خود ترتیب تراکنشها را مشخص میکنند، گاهی میتوانند بدون در نظر گرفتن ترتیب و نوبت تراکنشها، تراکنشها را انجام دهند.
بگذارید دوباره یک تراکنش طراحی کنیم. این بار آلیس میخواهد یک بازی حدس زدن را انجام دهد. آلیس پنج اتریوم در قرارداد خود قرار میدهد. این اتریوم ها بهحساب فردی که نزدیکترین حدس را به عدد آلیس داشته میرود. آلیس با واردکردن هش و عدد اتریوم های موردنظر، از دستور commit استفاده میکند. بعد از دو بلاک، آلیس از دستور reveal برای نشان دادن عدد به همه استفاده میکند.
با این بازی حدس ساده، آلیس از گزند تقلب دور میماند. اما ماینر میتواند بهراحتی تقلب کند. او میتواند تا اعلام عدد توسط آلیس صبر کند. سپس او قبل از اینکه بلاک ساخته شود، میتواند جواب را ببیند. حتی اگر دیوید عدد چهار را حدس زده باشد، ماینر میتواند ترتیب جواب دیوید را تغییر دهد و مانع از پیروزی او شود.
وقتیکه یک کاربر معمولی تراکنش را ایجاد میکند، بهمنظور جایگذاری آن در بلاک، میبایست تراکنش به ماینر ارسال شود. کاربران باید قبل از اطمینان از چگونگی خروجی آن، تراکنش را تأیید کنند. ماینرها اما در طرف دیگر، میتوانند قبل از انجام تراکنش، بلاک موردنظر را ایجاد نمایند. این یعنی ماینرها از اطلاعات بیشتری نسبت به کاربران معمولی برخوردارند، بهعلاوه آنها توانایی تغییر ترتیب تراکنشها را هم دارند پس بهاینترتیب قدرت بسیار بیشتری را در سیستمهای درون زنجیرهای دارا هستند.
هر زمان که کاربران و ماینرها بهوسیله قراردادهای هوشمند، تداخل درون زنجیرهای داشته باشند، این خطر نیز وجود دارد که، ماینر بهمنظور سود خود، ترتیب تراکنشها را عوض کند. این قبیل اعمال معمولاً به گرفتن پولی است که میبایست به فرد دیگری برسد.
ارور های اجباری
ماینرها بهوسیله روشهایی که پیشتر گفته شد، میتوانند، با قراردادهای هوشمند تداخل ایجاد کنند. گاهی اوقات، آنها حتی میتوانند باعث از دست رفتن کامل یک بلاک شوند؛ این دست از کارها به ارورهای اجباری مشهور است. ارورهای اجباری زمانی ایجاد میشوند که ماینر با استفاده از تغییر وضعیت، موجب اروری شود که انتظار آن نمیرود. این کار با واردکردن تراکنشی انجام میشود که بر روی آن وضعیت تأثیر گذار خواهد بود.
بگذارید یک قرارداد ساده را در یک بازار ایجاد کنیم. من با دستور call لیستی از توکن ها را باقیمتی مشخصشده برای فروش قرار میدهم. بقیه افراد نیز میتوانند با استفاده از دستور buy اقدام به خرید توکن ها نمایند.
ماینر ها میتوانند دستور buy که توسط باب ایجادشده را ببینند و تصمیم بگیرند که آیا خود خواهان این توکن ها هست یا نه. اگر اینطور باشد، او میتواند با خرید میزان کافی باعث بروز خطا در تراکنش باب شود.
اگر باب قصد خرید 2.5 GNT را داشته باشد، ماینر میتواند کاری کند که میزان کافی (۲.۵) بهمنظور انجام تراکنش باب موجود نباشد. در این صورت تراکنش باب با اخطار مواجه خواهد شد و ماینر نیز کارمزد تراکنش را نگه خواهد داشت. در اینجا باب بهصورت ناخواسته به خرید GNT توسط ماینر کمک کرده.
این حمله در مورد نسخههای پیشین سالیدیتی بسیار بد بود. کلید واژههای قدیمی assert و throw تمامی هزینههای صرف شده را به ماینر میرساندند که درنتیجه آن کارمزدهای بالا برای عملیاتی که اصلاً انجام نگرفتهاند، دریافت میشود. با کلید واژههای جدید require و revert این هزینهها به میزان قابلتوجهی کم شده.
ارورهای اجباری این اجازه را به ماینر ها میدهند که برای عدم انجام کاری، کارمزد دریافت کنند. هنگامیکه یک تراکنش با خطا روبهرو میشود، وضعیت آن نیز کاملاً تغییر میکند. اگر یک ماینر موجب ایجاد خطا شود، نیازی به پردازش تغییرات وضعیت نیز نخواهد بود. برای یک ماینر، بهترین شرایط، ایجاد یک بلاک پر از تراکنشهایی است که با خطا مواجه شدهاند. بلاکهایی پر از کارمزد و بدون هیچگونه تغییر وضعیت.
توسعهدهندگان قرار دادهای هوشمند میتوانند با آزمایش بیشتر بر روی مکانیزمهای revert و require خود از این قبیل اعمال جلوگیری نمایند. درصورتیکه ماینرها باعث ایجاد خطا بر روی تراکنش شما شوند، میتوانند درامد بیشتری را از تراکنش بهدست آورند. بهعبارتدیگر، اگر یک دستور بر پایه وضعیتی کار کند که بتواند توسط یک فرد دیگر تغییر کند، آنگاه در معرض مواجه با خطا قرار خواهد گرفت.
سانسور
وقتیکه صحبت از ترتیب دهی به تراکنشها در یک بلاک مطرح است، ماینرها میتوانند انتخاب کنند که بهطور کامل یک تراکنش را نادیده بگیرند. در این قبیل کارها، اهداف اقتصادی و سیاسی مطرح است. کاربران هیچ تضمینی بابت اینکه ماینرها تراکنشی را در بلاک ترتیب اثر میدهند یا نه، ندارند.
اینطور فرض میکنیم که آلیس میخواهد یک قلک برای خود ایجاد کند. او یک قرارداد ساده ایجاد میکند که طی آن، تنها درصورتیکه سرمایههایش به بیش از ده هزار بلاک رسید، امکان برداشت آنها وجود خواهد داشت. آلیس آدم خوبی است و میخواهد وقتیکه از دنیا رفت، پول به شخص دیگری برسد. از همین رو اجازه میدهد تا پولش بعد از رسیدن به پنجاههزار بلاک، به ماینر برسد.
هر ماینر، این فکر را در ذهن خود دارد که تراکنش برداشت پول توسط آلیس را انجام ندهد. بهعلاوه اگر آلیس هیچگاه پول خود را برداشت نکند، در آینده پول برای ماینر باقی خواهند ماند؛ و آلیس نیز بدون تأیید ماینر حق برداشت پول را نخواهد داشت. حتی باوجوداینکه ماینرها با یکدیگر تبانی نکنند، ممکن است همه آنها تصمیمی به سانسور این تراکنش بگیرند.
این یعنی مشخص نیست که آیا یک قرارداد بهموقع به سررسید خود خواهد رسید یا اصلاً این زمان فرامیرسد یا نه! باید با سانسور غیرقابلپیشبینی ماینر قراردادها را طراحی کنید. یک قرارداد نمیتواند بگوید که یک ماینر چه هنگام قصد سانسور را دارد، پس قرارداد باید برای تأخیرهای عمدی آماده باشد.
تشدید مشکلات
هر چه پول دخیل در سیستم بیشتر باشد، تداخل ماینرها با آن نیز بیشتر خواهد شد. هر چه صرافیهای بزرگتری ساخته شوند، هر چه کازینوها پیچیدهتر شوند و هر چه ارزش بیشتری به زنجیره وارد شود، ماینرها نیز تمایلات بیشتری را برای تداخل پیدا خواهند کرد.
اجماع لایهای در زیر یک اپلیکیشن غیرمتمرکز نیست، بلکه این دو کاملاً درهمپیچیده. وقتیکه یک نرمافزار توسط ما نوشته میشود، اهمیتی به مشخصات فیزیکی سیلیکون نمیدهیم. چراکه سیلیکون قصد گرفتن پول ما را ندارد. متأسفانه EVM از طریق سیلیکون اجرا نمیشود؛ بلکه اجرای آن توسط ماینرها صورت میگیرد. بنابراین اگر ماینرها قابلاعتماد نباشند، EVM نیز اعتماد کردنی نیست.
توسعهدهندگان سالیدیتی، باید رایانهای را برنامهنویسی کند که بر ضد آنها کار کند. سیستم EVM خود بر پایه مسئله بیزانسی کار میکند. در بدترین زمان ممکن هر بخشی ازآنکه امکان خطا داشته باشد، خطا خواهد کرد. ما در حال حاضر، در وضعیت بسیار ابتدایی نسبت به فهم ارزهای دیجیتالی، ماینینگ و قراردادهای هوشمند قرار داریم. ماینرها در حال حاضر به دنبال استفاده از هزینههای کاربران نیستند. اما با رشد اتریوم، روزی از این زمان بهعنوان عصر طلایی نرمافزارهای غیرمتمرکز یاد خواهیم کرد.
ماینرها دوست یا دشمن شما نیستند. آنها نیرویی در طبیعت سیستم اجماعمان هستند. سیستمهایی که در این مورد خطا کنند، ماینرها باهوش خود را از دست خواهند داد.
متاسفیم که این مطلب نتوانسته نظر شما را جلب کند. لطفا با نظرات و پیشنهادات خود، ما را در بهبود همیشگی سایت یاری دهید.