گس در اتریوم کارمزدی است که برای اجرای موفق یک قرارداد هوشمند یا تراکنش پرداخت میکنید. پایه انجام تمام عملیاتها در Ethereum همان Gas است.
گس اتریوم واحدی است که میزان تلاش محاسباتی مورد نیاز برای اجرای عملیاتهای خاص را اندازهگیری میکند. انجام هر عملیات در این پلتفرم نظیر پردازش و تایید یک تراکنش، اجرای یک قرارداد هوشمند یا اجرای یک عرضه اولیه سکه (ICO)، به مقداری Gas نیاز دارد. ماینرهای مسئول پردازش عملیاتهای مختلف، دستمزد یا همان پاداش خود را در قالب اتر، رمز ارز اختصاصی پلتفرم Ethereum، دریافت میکنند. این مقدار معادل کل گس مورد نیاز برای انجام یک عمل خاص است.
به طور خیلی خلاصه، میتوان گس را به نیرو و خون حیات جاری در رگهای اکوسیستم عظیم اتریوم تشبیه کرد. Gas به زبان ساده، برای محاسبه مقدار کارمزد مورد نیاز برای پرداخت به پلتفرم اتریوم به منظور اجرای یک عملیات پرداخت میشود. انجام هر کاری هزینه خاص خود را دارد و این هزینه با گس در اتریوم محاسبه میشود.
Gas برای تخصیص منابع ماشین مجازی اتریوم (EVM) استفاده میشود. به این ترتیب اپلیکیشنهای غیر متمرکز نظیر قراردادهای هوشمند، میتوانند خود را به شکلی ایمن، اما غیر متمرکز، اجرا کنند.
در این مطلب به طور کامل با کاربرد و نحوه محاسبه Gas در Ethereum آشنا خواهیم شد. اما برای درک این مفهوم ابتدا باید با مفاهیم دیگری، مخصوصا قراردادهای هوشمند، آشنا شوید.
چرا مکانیزمی شبیه گس اتریوم در بیت کوین وجود ندارد؟
بیت کوین ثمره چند دهه تلاش انسان برای خلق یک سیستم پولی دیجیتالی بود. به لطف آن، دست واسطهها قطع شده و خود افراد، اختیار کامل کنترل و مدیریت داراییهایشان را بر عهده گرفتند. غیر متمرکز بودن این سیستم سبب شده هیچ نهاد متمرکزی، نظیر بانک مرکزی یک کشور، روی آن کنترل و احاطه نداشته باشد. در اینجا، همه تصمیمگیریها و نحوه اداره، بر اساس رای و نظر کاربران سیستم اتخاذ میشوند و افراد به طور مستقیم در اداره آن دخالت دارند.
بیت کوین و فناوری زیربنایی آن یعنی بلاک چین، پنجرهای جدید به روی دنیا باز کرد، با این حال نمیتوان از مشکلات و محدودیتهای نخستین رمز ارز دنیا چشمپوشی کرد. با هدف از بین بردن این مشکلات، کنار زدن محدودیتها و ارائه یک سری قابلیتهای جدید، آلت کوینها متولد شدند. اکنون اتریوم، برترین آلت کوین به شمار میرود.
Bitcoin صرفا معاملات پولی را امکانپذیر کرده و در این شبکه، امکان تعیین یک سری شروط برای تراکنشها وجود ندارد. این ویژگی در توسعه Ethereum در نظر گرفته شد. به همین دلیل به گس در اتریوم نیاز داریم. به عنوان مثال، آلیس میتواند برای باب 5 واحد BTC ارسال کند، اما قادر نیست روی این تراکنش، شرطی بگذارد تا پول بعد از انجام یک سری اعمال مشخص توسط باب، به کیف پول رمز ارزی او ارسال شود.
یک سیستم پولی غیر متمرکز مبتنی بر بلاک چین، که امکان ایجاد تراکنشهای شرطی را فراهم میکند، فرآیند انتقال دارایی را کاملا یکپارچه و راحتتر خواهد کرد. البته فراهم کردن این قابلیت به برنامهنویسی سنگین و پیچیدهای نیاز دارد، اما ویتالیک بوترین همراه دوستانش توانست به این موفقیت در پروژه اتریوم دست پیدا کند. حال او برای محاسبه هزینههای مربوط به انجام اعمال مختلف در پلتفرم بلاک چینی خود، سیستم گس را در اتریوم طراحی کرد.
هدف اصلی از تولد این مفهوم، حفظ یک لایه ارزش مجزا بود، به طوری که مصرف را نسبت به هزینههای محاسباتی در پلتفرم اتریوم نشان میدهد. داشتن واحدی جداگانه به این منظور سبب شد وجه تمایزی کاربردی بین ارزش واقعی رمز ارز پلتفرم (اتر – ETH) و هزینه محاسباتی استفاده از ماشین مجازی آن (EVM)، وجود داشته باشد.
توانایی درست کردن قرارداد هوشمند (Smart Contract) در Ethereum همان چیزی است که امکان ایجاد تراکنشهای شامل شروط پیچیده را فراهم کرده است. Bitcoin از اسمارت کانترکتهای پیچیده پشتیبانی نمیکند. حتی طراحی و اجرای موارد ساده نیز در شبکه نخستین رمز ارز دنیا دشوار و پرهزینه است.
قرارداد هوشمند چیست؟
اسمارت کانترکتها کمک میکنند پول، دارایی، سهام یا هر چیز باارزش را در چارچوبی شفاف، عاری از ناسازگاری و کاملا خودکار، بدون حضور واسطهها مبادله کنیم. اگرچه در حال حاضر پلتفرمهای متعددی برای ایجاد و اجرای آنها وجود دارند، اما اتریوم بزرگترین بستر برای ساخت و مدیریت قراردادهای هوشمند محسوب میشود. برای اجرای اسمارت کانترکت در اتریوم به گس نیاز داریم. ویتالیک بوترین با خلق Ethereum نشان داد کاربرد بلاک چین بسیار بیشتر از توسعه یک مکانیزم پرداخت ساده است.
اولین مرتبه نیک سابو (Nick Szabo) در دهه 1990 میلادی این مفهوم (Smart Contract) را خلق و از آن به عنوان ابزاری برای رسمی و ایمن کردن شبکههای کامپیوتری به وسیله ترکیب پروتکلها با رابطهای کاربری استفاده کرد. البته فعالیتهای وی در حد یک ایده باقی ماند، تا این که نسل جدید بلاک چین همراه ظهور بیت کوین متولد شد. این فناوری محیطی مناسب برای پیادهسازی و استفاده از قراردادهای هوشمند فراهم کرد. تعریف آقای نیک سابو با آن چه ما امروز در دنیای کریپتوکارنسی استفاده میکنیم، متفاوت است. تعریف ما از اسمارت کانترکت، یک اپلیکیشن یا برنامه اجرا شده روی یک بلاک چین به عنوان یک توافق دیجیتالی است.
دستاورد بزرگ قراردادهای هوشمند در اتریوم (با پرداخت گس) و دیگر شبکههای بلاک چینی، توانایی ایجاد پروتکلهای تراستلس (Trustless) بوده است. به لطف چنین پروتکلی، دو یا چند طرف یک معامله قادر خواهند بود بدون شناخت و داشتن اعتماد به هم، تعهداتی را نسبت به یکدیگر انجام بدهند. طرفین میتوانند مطمئن باشند در صورت عدم تحقق شرایط از پیش مشخص شده، قرارداد هوشمند اجرا نخواهد شد. حذف واسطهها، هزینههای عملیاتی را شدیدا کاهش داد، به طوری که گس اتریوم در مقایسه با هزینهای که باید به واسطهها پرداخت کنید، بسیار پایینتر است.
پروتکل Bitcoin از اسمارت کانترکتها پشتیبانی میکند، اما همانطور که گفتیم، به قراردادهای بسیار ساده محدود شده و از طرفی ایجاد و اجرای آنها را بسیار پرهزینه میکند. اتریوم امکان ایجاد و مدیریت راحت یک Smart Contract پیچیده را با هزینهای به مراتب پایینتر میسر کرد.
قراردادهای هوشمند نحوه انجام اعمال مختلف در اتریوم (به واسطه پرداخت گس) هستند. وقتی میخواهید یک کار خاص در این پلتفرم انجام بدهید، یک اسمارت کانترکت با یک یا چند طرف (نفر) دیگر ایجاد میکنید. همانطور که گفتیم در بلاک چین، آن را یک برنامه تصور میکنیم. این برنامه متشکل از یک سری دستورالعملها است که با استفاده از زبان برنامهنویسی Solidity نوشته شدهاند. به طور ساده، انجام اولین مجموعه دستورالعملها، اجرای عملکرد بعدی را در پی خواهد داشد. بعد از آن نوبت به عملکرد بعدی میرسد. این روند تا زمان رسیدن به انتهای قرارداد ادامه پیدا میکند.
درک بهتر اسمارت کانترکت با مثالی ساده
یک ماشین وندینگ را در نظر بگیرید. هر قدم، شبیه ماشهای برای فعالسازی مرحله بعدی است. از این نظر میتوان نحوه پیشروی اعمال در یک قرارداد هوشمند اتریوم بعد از تعیین گس را به دومینو تشبیه کرد. در یک ماشین وندینگ:
- مقداری پول وارد دستگاه میکنید.
- دکمه مربوط به محصول مورد نظرتان برای دریافت را فشار میدهید.
- محصول در اختیارتان قرار میگیرد.
آیا هر مرحله بدون اجرای مرحله قبل از آن انجام میشود؟ خیر، چرا که هر یک به قبلی وابسته است. در اینجا خریدار محصول، به طور مستقیم با دستگاه ارتباط برقرار کرده و خبری از یک واسطه نیست. اما این تراکنش با پرداخت گس در اتریوم چطور انجام خواهد شد؟ تصور کنید شما در شبکه Ethereum از ماشین وندینگ چیزی خریداری کردهاید. مراحل به صورت زیر بودهاند:
- شما به ماشین مبلغی پرداخت کرده و این پرداخت در تمام نودهای شبکه نام برده ثبت میشود. سپس تراکنش در دفتر کل (بلاک چین یا همان پایگاه داده ما) آپدیت خواهد شد.
- دکمه مربوط به محصول مورد نظرتان برای دریافت را فشار میدهید. رکورد مربوط به این کار نیز در شبکه اتریوم و دفتر کل آن بهروزرسانی میشود.
- محصول در اختیارتان قرار میگیرد. این عمل در دفتر کل تمام نودها ثبت خواهد شد.
هر تراکنشی که از طریق یک اسمارت کانترکت انجام میدهید، توسط شبکه ثبت و آپدیت خواهد شد. به این ترتیب همه افراد درگیر در قرارداد، مسئول اقدامات خود هستند. هر اقدامی به راحتی قابل مشاهده است، در نتیجه توانایی انجام اعمال خصمانه از افراد سلب میشود.
دلیل استفاده از قرارداد هوشمند و به تبع آن پرداخت گس اتریوم چیست؟
ماشین وندینگ مثالی بسیار ساده بود، اما اتریوم را قادر به اجرای اسمارت کانترکتهای پیچیده خطاب کردیم. تصور کنید در پی فروش خانه خود هستید. این کار برای بسیار دلهرهآور بوده و توام با ریسک فراوان، مستلزم کاغذبازی و درگیر شدن با فرآیندهای اداری است. از نیاز به ارتباط با شرکتها و افراد متعدد نباید غافل شد، اگر بتوان آنها را پیدا کرد (بازاریابی). به همین دلیل اغلب حاضر میشوند با وجود نیاز به پرداخت هزینهای بالا، کار را به یک واسط، در اینجا یک بنگاه املاک، بسپارند. واسط انجام تمام امور را بر عهده گرفته و روی قرارداد نظارت خواهد داشت. به لطف یک قرارداد هوشمند قادر خواهیم بود بدون حضور واسطه، از مزایای حضورش در معاملات این چنینی بهره ببریم. از طرفی گس پرداخت شده در اتریوم در مقایسه با هزینههای دریافتی توسط واسطهها در دنیای واقعی بسیار پایینتر است.
نکته بسیار مهم اینجاست؛ اگرچه برای کاهش ریسک، کار را به یک بنگاه املاک، یعنی یک واسطه، سپردهاید، اما ممکن است حتی از طرف این واسطه نیز خطری شما را تهدید کند! به عبارتی ممکن است این واسطه به وسیله ساخت و پاخت با خریدار، ضررهای سنگینی به شما وارد کند! اما شفافیت و خودکار بودن اجرای اعمال در یک اسمارت کانترکت، این احتمال را نیز از بین خواهد برد.
مسئله اعتماد در دنیای کنونی، با حضور پروتکلهای تراستلس برطرف خواهد شد؛ فرد متقاضی مالکیت خانه شما را دریافت خواهد کرد، اگر مبلغ توافق شده به قرارداد هوشمند ارسال شود. تا وقتی شرایط (کد رو به روی if) ارضا نشوند، اعمال مورد نظر (کد مقابل then) اجرا نخواهند شد. نکته بسیار مهم دیگر، شفافیت امور است. بیشمار کاربر دیگر معامله را مشاهده کرده و به تایید میرسانند، به همین دلیل تحویل بدون خطا، تضمین خواهد شد.
با نگاهی به تراکنشهای پولی خود متوجه خواهید شد هر روز، بخش زیادی از داراییتان را دانسته یا ندانسته به واسطهها پرداخت میکنید. کوتاه شدن دست آنها، به نفع خریدار و فروشنده خواهد بود. اسمارت کانترکتها که در اتریوم با پرداخت گس اجرا میشوند، مزایای متعددی دارند که کنار رفتن واسطهها یکی از آنها است. آنها تبادل پول، دارایی یا هر ارزش دیگر را راحت کرده و در مبادلات و معاملات، شفافیت را به ارمغان میآورند. کد برنامهنویسی متعلق به یک اسمارت کانترکت، حاوی تمامی شرایط و ضوابط مورد توافق بین طرفهای آن است. اطلاعات مرتبط با معامله در بلاک چین، به عنوان یک دیتابیس غیر متمرکز و توزیع شده، به ثبت خواهد رسید.
مبحث قراردادهای هوشمند پیچیده و توضیح بیشتر درباره آنها از حوصله این مطلب خارج است. در یکی از مطالب قبلی وبلاگ بیت 24 به طور مفصل به بررسی این مفهوم پرداختیم. برای آشنایی با نحوه کار اسمارت کانترکتها، شناخت ویژگیهای اصلی، مزایا، کاربردها، محدودیتها و تاریخچه آنها به مطلب زیر مراجعه کنید:
- بیشتر بخوانید: قرارداد هوشمند یا اسمارت کانترکت چیست و چطور کار میکند؟
مفهوم دیگری که قبل از ورود به بحث گس در اتریوم و نحوه محاسبه آن باید درک کنیم، بحث ماشین مجازی اتریوم (EVM) است.
ماشین مجازی اتریوم چیست؟
قبل از بررسی EVM، ابتدا باید دلیل نیاز به یک ماشین مجازی در پلتفرم Ethereum را درک کنیم. مبحث قراردادهای هوشمند را به یاد آورید. خصوصیات مطلوبی که در اسمارت کانترکت خود میخواهیم چه مواردی است؟
هر چیزی که روی یک بلاک چین اجرا میشود، باید تغییرناپذیر باشد و بتواند بدون به خطر افتادن یکپارچگی آن، روی نودهای متعدد اجرا شود. به همین دلیل یک اسمارت کانترکت به سه ویژگی اساسی نیاز دارد:
- قطعی
- پایانپذیر
- منزوی (ایزوله)
ویژگی اول: قطعی
یک برنامه قطعی است، اگر در هر مرتبه اجرا روی یک داده ورودی خاص، خروجی یکسانی ارائه کند، حتی اگر روی کامپیوترهای مختلف اجرا شود. تا زمانی که ورودی یک برنامه قطعی تغییر نکند، خروجی آن ثابت خواهد بود. اتفاقات مختلف به رفتار غیر قطعی یک برنامه منجر میشوند:
- فراخوانی توابع سیستم غیر قطعی: وقتی برنامهنویس، یک تابع غیر قطعی را در برنامه خود فراخوانی میکند.
- وجود منابع داده غیر قطعی: اگر برنامه در ران تایم (حین اجرا) از یک منبع داده غیر قطعی درخواست دیتا کند، آن برنامه نیز رفتاری غیر قطعی بروز خواهد داد. تصور کنید یک نرم افزار، به ده نتیجه برتر در گوگل برای یک کوئری خاص نیاز دارد. میدانیم این فهرست به طور مداوم در حال تغییر است.
- فراخوانی پویا: منظور زمانی است که یک برنامه، برنامهای دیگر را فراخوانی میکند. از آن جایی که هدف فراخوانی تنها در زمان اجرا مشخص میشود، ماهیتش غیر قطعی است.
ویژگی دوم: پایانپذیر
در منطق ریاضی، خطایی به اسم «مسئله توقف» وجود دارد. اساسا، این ارور ناآگاهی نسبت به توانایی یا عدم توانایی یک برنامه برای اجرای وظیفهاش در یک محدوده زمانی مشخص را بیان میکند. در سال 1936، آلن تورینگ (Alan Turing) از طریق استدلال قطری کانتور به این نتیجه رسید که نمیتوان اتمام یا عدم اتمام یک برنامه در یک محدوده زمانی را (از قبل) متوجه شد.
به زبان دیگر، مسئله توقف بیان میکند در صورتی که شرح یک برنامه و ورودی متناهی متناظر با آن را داشته باشیم، آیا میتوان تشخیص داد که این برنامه متوقف میشود، یا تا ابد ادامه پیدا خواهد کرد. در نظر داشته باشید هیچ شرطی درباره زمان اتمام برنامه یا حافظه اشغال شده توسط آن وجود ندارد، یعنی ممکن است اجرا و اتمام برنامه به زمان و حافظه زیادی نیاز داشته باشد. سوال اصلی این است که آیا این برنامه سرانجام تمام خواهد شد، یا تا ابد ادامه پیدا میکند.
این موضوع در برخورد با قراردادهای هوشمند یک مشکل اساسی به شمار میرود، چرا که بر اساس تعریف اسمارت کانترکتها، آنها باید بتوانند در یک محدوده زمانی مشخص خاتمه پیدا کنند. اقداماتی در پلتفرم اتریوم صورت گرفته تا از امکان متوقف کردن قراردادها از بیرون اطمینان پیدا کرد. به این ترتیب آنها وارد یک حلقه بینهایت نشده و منابع را بیهوده تلف نخواهند کرد. این موضوع سبب میشود به اشتباه، گس اتریوم سر به فلک نکشد و تا ارقامی نجومی افزایش پیدا نکند.
- ناتمامی تورینگ (Turing Incompleteness): یک بلاک چین تورینگ ناقص، عملکرد محدودی دارد و قادر به ایجاد جهش و حلقه نیست. به همین دلیل نمیتواند وارد یک حلقه بیپایان شود.
- اندازهگیر مرحله و هزینه: یک برنامه میتواند تعداد مراحلی که پشت سر گذاشته است را ردیابی کند. میتوان هر مرحله را اجرای یک دستورالعمل در نظر گرفت. حال میتوان تعیین کرد در صورتی که تعداد مشخصی قدم برداشته شد، اجرای برنامه متوقف و از افزایش بیش از اندازه گس اتریوم جلوگیری شود. روش دیگر، اندازهگیری کارمزد است. در این شرایط قرارداد هوشمند، بر اساس یک کارمزد از پیش تعیین شده اجرا میشود. اجرای هر دستورالعمل به هزینه خاصی نیاز دارد. در صورتی که هزینه اجرای کانترکت از کارمزد پرداخت شده در ابتدا فراتر برود، اجرای آن متوقف خواهد شد.
- زمانسنج: یک تایمر از پیش تعیین شده وجود دارد. در صورتی که اجرای قرارداد تا زمان مشخص شده تمام نشود، از بیرون متوقف خواهد شد.
ویژگی سوم: منزوی
در یک بلاک چین مثل اتریوم، هر چیز یا هر فردی قادر است یک اسمارت کانترکت بارگذاری کند. به همین دلیل قراردادها ممکنه آگاهانه یا ناآگاهانه، شامل بدافزار یا باگ باشند. اگر یک کانترکت ایزوله نباشد، در صورت داشتن ویروس یا رخنه، سطح وسیعتری را آلوده کرده و عملکرد کل سیستم را مختل خواهد کرد. پس باید یک قرارداد را برای جلوگیری از تاثیرات منفی آن روی کل اکوسیستم منزوی نگه داشت.
اجرای قراداد هوشمند
اکنون که این ویژگیهای ضروری و پیش نیاز برای اجرای یک اسمارت کانترکت را درک کردید، بهتر متوجه نحوه اجرای آن خواهید شد. به طور معمول، قراردادهای هوشمند روی سیستم ماشین مجازی یا داکر اجرا میشوند. در ادامه این دو را مقایسه کرده و گزینه بهتر برای یک اکوسیستم را مشخص میکنیم. در این مقایسه داکر (فابریک) را با ماشین مجازی اتریوم (EVM) مقایسه خواهیم کرد.
ماشین مجازی | داکر | |
قطعی | قراردادها توابع غیر قطعی نداشته و دیتا فقط محدود به اطلاعات درون شبکهای است. با این حال، فراخوانی پویا را نیز شامل میشود که در ذات میتواند غیر قطعی باشد. خوشبختانه داده در دسترس قطعی است. | به خاطر نوع طراحی داکر، سیستم برای ایجاد قراردادهای هوشمند، که قطعی هستند، متکی به کاربران است. این بهترین راه حل ممکن نیست! |
پایانپذیر | اتریوم از اندازهگیر هزینه برای مشخص کردن زمان توقف کانترکتهای در حال اجرا استفاده میکند. در اینجا هر قدم در اجرای یک قرارداد، نیازمند مقداری گس اتریوم است. وقتی مجموعه هزینه مراحل از کارمزد پرداخت شده در ابتدا تجاوز کند، اجرای آن متوقف خواهد شد. | فابریک از زمانسنج استفاده میکند. از آن جایی که ممکن است زمان، به خاطر توان پردازشی متفاوت نودها، از یک گره به گره دیگر تغییر کند، ریسک افزایش زیاد گس اتریوم وجود دارد. |
منزوی | در سطح خوبی قرار دارد | متکی به فضای اسمی است و نمیتواند در سطحی مناسب، محیطی ایزوله فراهم کند. |
طبق مقایسه بالا، ماشینهای مجازی بهتر محیطی با سه ویژگی قطعیت، پایانپذیری و انزوا برای قراردادهای هوشمند فراهم میکنند. با این حال، نمیتوان از یک ویژگی منحصربهفرد داکر چشمپوشی کرد؛ داکر از نظر برنامهنویسی انعطافپذیری بالایی دارد، در حالی که برای استفاده از یک ماشین مجازی نظیر EVM، فرد باید به منظور ایجاد یک اسمارت کانترکت، یک زبان کدنویسی (در اینجا Solidity) را به طور کامل یاد بگیرد.
در پلتفرم اتریوم، ماشین مجازی اجرای اسمارت کانترکتها، EVM است. در حال حاضر، این قویترین ماشین مجازی تورینگ کامل 256 بیتی به شمار میرود. تورینگ کامل به این معنی است که در صورت در اختیار داشتن منابع کافی نظیر حافظه، هر برنامهای را تا رسیدن به جواب اجرا میکند.
گس در اتریوم چیست؟
همانطور که در ابتدا توضیح دادیم، گس در اتریوم واحدی است که میزان تلاش محاسباتی به منظور اجرای یک سری عملیات خاص را اندازهگیری میکند. بیشتر قراردادهای هوشمند اجرا شده روی ماشین مجازی اتریوم، با استفاده از زبان برنامهنویسی Solidity ایجاد شدهاند. البته بنیاد اتریوم تصمیم دارد در آینده نزدیک، آن را به Viper تغییر بدهد. اجرای هر خط کد در Solidity به مقداری Gas نیاز دارد.
تصویر زیر، بخشی از یلوپیپر (Yellowpaper) اتریوم است. به کمک آن میتوان به یک دید کلی و تقریبی درباره هزینه اجرای یک سری دستورالعمل روی EVM دست پیدا کرد. بر اساس این جدول، محدودیت گس هر تراکنش 21 هزار واحد است.
برای درک بهتر نحوه کار گس در اتریوم مثال مقابل را در نظر بگیرید. تصور کنید قصد سفر دارید. قبل از این کار، یک سری مراحل را طی میکنید:
- مقدار بنزین مورد نیازتان برای سفر را ارزیابی و تعیین میکنید.
- به پمپ بنزین رفته و آن مقدار سوخت را دریافت میکنید.
- هزینه مربوط به سوخت دریافتی را به پمپ بنزین پرداخت میکنید.
حال به پلتفرم اتریوم برمیگردیم. رانندگی و سفر، در اینجا همان اجرای عملیات، نظیر اجرای یک تابع در یک قرارداد هوشمند است. سوخت در اینجا گس است. پمپ بنزین را در اینجا باید ماینر در نظر بگیریم. هزینهای که برای تامین سوخت اجرای دستورالعملها پرداخت میکنید، به جیب ماینرها میرود. برای کمک به درک بهتر، مثال بالا را به شکلی سادهتر بیان میکنیم.
راندن یک خودرو برای X مایل، به Y لیتر سوخت نیاز دارد. انتقال X دلار به واسطه تراکنشهای بانکی نیز نیازمند Y دلار کارمزد است. در هر دو مثال، X هدف است. حال برای رسیدن به این هدف باید به مقدار Y هزینه کنیم. به شکلی مشابه، اجرای یک قرارداد هوشمند یا تراکنش در اتریوم هدف ما محسوب میشود. تصور کنید هدف، ارسال 50 واحد رمز ارز اتر است. این کار به هزینهای نیاز دارد که در هر زمان ممکن است متفاوت باشد.
تمام اعمالی که کاربران میخواهند در Ethereum اجرا کنند، بابت پوشش داده (گس ذاتی) و همچنین پوشش کل محاسبات آن، به Gas نیاز دارند.
چرا به سیستم گس در اتریوم نیاز داریم؟
پاسخ این سوال، ساده و سرراست است؛ در یک سیستم غیر متمرکز نظیر اتریوم، بدون وجود مشوق (مالی)، ماینرها دلیلی برای صرف منابع پردازشی خود به منظور اجرای یک قرارداد هوشمند، نخواهند داشت.
شبیه هر سیستم بلاک چینی مبتنی بر الگوریتم اثبات کار (PoW) دیگر، اتریوم نیز شدیدا به هش ریت ماینرهای خود وابسته است. هر چه تعداد استخراجکنندگان بیشتر باشد، هش ریت نیز در شبکه افزایش پیدا کرده و امنیت و سرعت آن بهبود خواهد یافت.
به منظور تشویق افراد بیشتر برای عضویت در اکوسیستم اتریوم به عنوان یک ماینر، باید آن را تا جای ممکن سودآور کرد. در ارتباط با Ethereum، ماینرها به دو روش قادر به کسب درآمد هستند:
- ماین کردن بلاکها و دریافت جایزه مربوط به استخراج
- تبدیل شدن به دیکتاتورهای موقت بلاکهای استخراج شده خود
اکنون درباره روش دوم بیشتر صحبت میکنیم. ماینرها مسئول قرار دادن تراکنشها در داخل بلاکها هستند. به این منظور، آنها میبایست از توان پردازشی خود برای اعتبارسنجی قراردادهای هوشمند استفاده کنند. سیستم گس اتریوم به آنها اجازه میدهد هزینه مشخصی برای این کار تعیین کنند. کارمزد به عنوان کارمزد ماینر شناخته شده و به راغب نگه داشتن کاربران برای حضور فعال در اکوسیستم و تامین هش ریت مورد نیاز آن، کمک میکند. اما آنها چقدر کارمزد میتوانند تعیین کنند؟ پیش از محاسبه، ابتدا نحوه اندازهگیری Gas را بررسی میکنیم.
گس به طور ساده در واحد Gas اندازهگیری میشود. یک تراکنش ارسال شده در شبکه Ethereum به مقداری گسسته از Gas، مثلا 100 عدد از آن، نیاز دارد. تعداد مورد نیاز، به تعداد دستورالعملهای ضروری برای اجرا روی EVM وابسته است.
مبلغ دقیق Gas بر اساس عرضه و تقاضا بین ماینرها، که میتوانند در صورت پایینتر بودن هزینه گس نسبت به آستانه دلخواهشان از پردازش یک تراکنش خودداری کنند، و کاربران نیازمند قدرت محاسباتی، تعیین میشود.
چطور Gas را به Ether تبدیل کنیم؟
هیچ قیمت ثابتی برای تبدیل وجود ندارد. ارسالکننده رمز ارز میتواند یک هزینه گس در اتریوم به دلخواه تعیین کند. از طرفی دیگر، ماینر نیز در تایید و بررسی یک تراکنش حق انتخاب دارد، پس طبیعی است موارد دارای بیشترین Gas را در اولویت قرار بدهد. هزینه گس به طور معمول در حدود 20 واحد Gwei یا 0.00000002 اتر است، اما در زمانهای افزایش ترافیک در شبکه به خاطر حجم انبوه تراکنشهای در صف انتظار، میتواند افزایش پیدا کند، چرا که هر ارسالکننده دوست دارد تراکنش وی در اولین بلاک بعدی گنجانده شود.

یکی از مفاهیم بسیار مهمی که باید در ارتباط با Gas در Ethereum درک کنید، علت نیاز به تعیین یک محدودیت برای این مقدار است.
علت تعیین محدودیت گس در اتریوم چیست؟
برای انجام یک عمل خاص در اتریوم، ارسالکننده تراکنش باید یک محدودیت گس را قبل از ارسال درخواست به شبکه مشخص کند. منظور از آن، حداکثر هزینهای است که ارسالکننده تمایل دارد برای این تراکنش پرداخت کند. حین تعیین محدودیت Gas باید به چند نکته توجه کرد:
- عملیاتهای مختلف، هزینه Gas متفاوتی دارند.
- وقتی Gas تعیین شده از سوی ارسالکننده به پایان رسید، ماینر اجرای قرارداد را متوقف خواهد کرد.
- در صورتی که بعد از اتمام موفق اجرای کانترکت، چیزی از Gas باقی مانده باشد، به حساب ایجادکننده عملیات بازگردانده میشود.
در ادامه با یک سناریوی فرضی بهتر نحوه کار سیستم گس در اتریوم را درک میکنیم. تصور کنید میخواهید در یک قرارداد هوشمند، دو عدد را با یکدیگر جمع کنیم. قرارداد به این منظور باید اقدامات زیر را انجام بدهد:
- دو عدد را در دو متغیر ذخیره کند. تصور کنید گس این کار 45 است.
- دو عدد را با یکدیگر جمع کند. تصور کنید گس این کار 10 است.
- نتیجه را در متغیری دیگر ذخیره کند. تصور کنید گس این کار 45 است.
فرض کنید ارسالکننده کانترکت، محدودیت Gas را برابر 120 قرار داده است. مجموع سوخت مورد نیاز یک ماینر برای انجام این عملیات برابر 100 است (45+10+45). فرض میکنیم 1 گس برابر 20 Gwei است. پس 0.000002 اتر به عنوان کارمزد نصیب ماینر میشود. با تفاضل سوخت مصرف شده از سوخت در دسترس (100-120) متوجه خواهیم شد 20 گس (0.0000004 اتر) باقی مانده که در نهایت به ارسالکننده برگشت داده میشود.
در تعیین محدودیت Gas در Ethereum دو سناریو را باید در نظر گرفت؛ هزینه تعیین شده توسط کاربر در مقایسه با سوخت مورد نیاز بیش از اندازه زیاد یا بیش از اندازه پایین باشد.
سناریوی اول: محدودیت گس بسیار پایین
اگر عملیاتی حین اجرا با مشکل نبود سوخت مواجه شود، دوباره به حالت اولیه برگردانده خواهد شد، گویا هیچ اتفاقی رخ نداده است. با این حال، ایجادکننده این عملیات همچنان باید به خاطر قدرت پردازشی که ماینر تا لحظه توقف صرف کرده، کارمزدش را پرداخت کند. اگرچه عملیات با موفقیت اجرا نشده است، اما همچنان به بلاک چین اضافه خواهد شد.
مثال سفر با خودرو را به یاد آورید. اگر قبل از شروع سفر، باک اتومبیل را به اندازه کافی پر از بنزین نکرده باشید، به مقصد نخواهید رسید، با این حال، پمپ بنزین در مبدا، هزینه سوخت مصرف شده تا آنجا را به شما برنمیگرداند.
در مثال جمع دو عدد داخل یک اسمارت کانترکت، مرحله اول، دوم و سوم به ترتب 45، 10 و 45 گس نیاز داشت. تصور کنید ارسالکننده قرارداد هوشمند شامل این عملیات، این مرتبه محدودیت Gas را برابر 90 قرار داده است. این در حالی است که مجموع گس مورد نیاز مراحل برابر 100 است. در این سناریو، ماینر عملیات را به اندازه سوخت در دسترس پیش برده و 0.0000018 اتر دریافت خواهد کرد. در ادامه قرارداد به حالت اول و اورجینال خود بازگشته و تراکنش به بلاک چین اضافه میشود.
سناریوی دوم: محدودیت گس بسیار بالا
اما اگر باک را بیش از سوخت واقعی مورد نیاز برای رسیدن به مقصد پر کرده باشید، چه اتفاقی رخ میدهد؟ به نظر این کار منطقیتر است، چرا که در صورت باقی ماندن گس بعد از اتمام اجرای قرارداد در اتریوم، شبکه آن را به حساب شما برگشت داده و به خاطر یک عملیات ناتمام، مجبور به پرداخت هزینه نخواهید شد. به ظاهر تعیین مبالغی بالا برای Gas برای جلوگیری از اتلاف هزینه روی عملیاتی ناتمام منطقیتر است، اما در عمل واقعیت چیز دیگری است.
ماینرها با محدودیت گس بلاک، محدود شدهاند. این مقدار برای هر بلاک برابر 6 میلیون و 700 هزار Gas است. یک تراکنش ساده (صرفا انتقال اتر از یک والت به والت دیگر)، به حداقل 21 هزار Gas نیاز دارد. ماینرها فقط میتوانند تراکنشهایی را به بلاک اضافه کنند که مجموع گس آنها برابر یا کمتر از محدودیت 6 میلیون و 700 هزار واحدی باشد.
فرض کنید تراکنش A برای انتقال ساده مقداری اتر، دارای محدودیت گس سفارشی 42,200 است. مقدار محدودیت گس دو تراکنش B و C، مجددا برای انتقال مقداری اتر، برابر 21 هزار است. برای یک ماینر، قرار دادن کدام یک در بلاک خود منطقیتر خواهد بود؟ آیا ماینر تراکنش A را قرار داده و در نهایت بخش زیادی از گس اتریوم استفاده نشده را برمیگرداند؟ یا ترجیح میدهد تراکنش B و C را داخل بلاک گنجانده و در نهایت هیچ چیز، یا شاید مقداری بسیار کم، برگرداند؟ در نظر داشته باشید کف محدودیت گس برای یک تراکنش ساده انتقال اتر از یک والت به والت دیگر 21 هزار گس است، اما همانطور که گفتیم، ارسالکننده میتواند مبلغی بالاتر در نظر بگیرد.
از نظر اقتصادی، انتخاب تراکنش B و C برای گنجاندن در بلاک گزینه بهتری است. به همین دلیل تعیین Gas بیش از انداره در Ethereum، لزوما بهترین راهکار برای سرعت دادن به عملیات نیست. بهترین کار این است که همیشه محدودیت گس را کمی بالاتر از Gas مورد نیاز برای انجام تراکنش خود قرار بدهید.

گس اتریوم بالا و پایین در برابر کارمزد بالا و پایین
تاکنون برایتان واضح شده که گس و اتر، دو چیز متفاوت محسوب میشوند. منظور از Gas، مقدار توان محاسباتی مورد نیاز است، اما ETH یا Ether به عنوان رمز ارز اختصاصی پلتفرم اتریوم، ارزی است که برای پرداخت Gas از آن استفاده میشود. با در نظر گرفتن هر آن چه تا اینجا یاد گرفتیم، چند سناریوی مختلف گس و کارمزد را بررسی خواهیم کرد.
اگر یک عملیات گس پایینی داشته باشد، ماینر آن را حتی انتخاب نخواهد کرد، چرا که گس کافی برای اتمام محاسبات ندارد. اگر یک عملیات کارمزد پایینی داشته باشد، ممکن است فقط Gas کافی برای پوشش آن داشته باشد، اما همچنان، ماینر برای برداشتن آن تقلا نخواهد کرد، چرا که عملیاتی با کارمزد پایین، از نظر اقتصادی برایش مقرون به صرفه نیست.
اگر یک عملیات گس بالایی داشته باشد، به این معنی است که ارسالکننده محدودیت گس را بیش از اندازه در نظر گرفته است. طبق مثالی که در قسمت قبل بررسی کردیم، ماینر آن را انتخاب نخواهد کرد. اگر یک عملیات کارمزد بالایی داشته باشد، ماینر به خاطر سودآور بودن، سریعا آن را انتخاب میکند.
هزینه Gas پیشنهادی بر اساس سرعت دلخواه انجام تراکنش در اتریوم، طبق وب سایت ethgasstation.info در روز انتشار مطلب (1 فروردین 1400) برابر مقدار زیر است:
- تریدر (در اسرع وقت): 131
- سریع (زیر 2 دقیقه): 127
- استاندارد (زیر 5 دقیقه): 106
سناریوهای بازگشت Gas در Ethereum
در زبان برنامهنویسی Solidity، دو فرمان وجود دارند که از بازگشت مبلغی از Gas اطمینان پیدا میکنند:
- SUICIDE: این فرمان به طور ساده قرارداد هوشمند را متوقف کرده و 24 هزار گس برمیگرداند.
- STORE: با حذف فضای حافظه، 15 هزار گس برمیگرداند.
با در نظر گرفتن این اعداد، اگر کانترکت شما 14 هزار Gas استفاده کرده و در نهایت حافظه را با فرمان STORE حذف کند، هزار Gas نیز در نهایت دریافت خواهید کرد! اما در واقعیت روند کار به این سادگی نیست.
در چنین شرایطی، ماینر هیچ چیز دریافت نخواهد کرد! منطقی نیست که ماینر پردازش عملیات شما را انجام داده و در نهایت به جای دریافت کارمزد، مبلغی نیز برگرداند! برای جلوگیری از رخ دادن چنین سناریوهایی، شرطی در نظر گرفته شده است؛ بازپرداخت انباشته شده، نمیتواند از نصف گس اتریوم استفاده شده در طول محاسبه تجاوز کند. برای درک بهتر، به مثال زیر توجه کنید.
مثال اول
فرض کنید یک قرارداد هوشمند با مصرف 14 هزار Gas داریم. محدودیت Gas نیز 20 هزار در نظر گرفته شده است. در کد کانترکت نیز فرمان STORE وجود دارد. حال بعد از اتمام اجرای قرارداد، ارسالکننده آن چقدر دریافت خواهد کرد؟ ابتدا، 6 هزار واحد گس استفاده نشده بازگردانده میشود (14,000-20,000). از نظر تئوری و بدون در نظر گرفتن شرط، باید 15 هزار گس نیز به خاطر به خاطر فرمان STORE بازگردانده شود.
اما شرط «بازپرداخت انباشته شده، نمیتواند از نصف گس اتریوم استفاده شده در طول محاسبه تجاوز کند» از این اتفاق جلوگیری کرده و مبلغ بازگردانده شده را کاهش میدهد. 15 هزار، از 14 هزار تقسیم بر 2، بیشتر است. در نهایت، 7 هزار گس دیگر نیز برگردانده خواهد شد. مجموع Gas بازپرداختی به ارسالکننده کانترکت برابر 13 هزار واحد است.
مثال دوم
تصور کنید قرارداد هوشمند فرضی ما، شامل فرمان SUICIDE، برابر 70 هزار گس استفاده میکند. طبق این فرمان، باید 24 هزار واحد به شما برگردانده شود. طبق قانون «بازپرداخت انباشته شده، نمیتواند از نصف گس اتریوم استفاده شده در طول محاسبه تجاوز کند»، 70 هزار تقسیم بر 2، از 24 هزار بیشتر است. پس Gas برگردانده شده، مساوی 24 هزار به علاوه گس باقی مانده است.
انتقادها به سیستم گس Ethereum
اگرچه این سیستم، به خاطر ایجاد یک مکانیسم روان برای تشویق کاربران به عضویت و فعالیت در شبکه غیر متمرکز اتریوم، تحسین بسیاری را برانگیخته، اما به خاطر هزینههای بالای آن برای توسعهدهندگان و ایجادکنندگان قراردادهای هوشمند، هدف انتقادهای فراوانی نیز قرار گرفته است.
دنی رایان (Danny Ryan) به عنوان یک متخصص حوزه بلاک چین، تحقیق و مقایسه جالبی در این رابطه انجام داد. وقتی در اتریوم، دو عدد را یک میلیون مرتبه با یکدیگر جمع کنیم، هزینه کارمزد 26.55 دلار میشود. تصور کنید این عملیات را به سیستم متمرکز آمازون AWS سپردهایم. این سیستم قادر است با استفاده از زبان برنامهنویسی پایتون، دو عدد را طی 0.04 ثانیه یک میلیون مرتبه جمع کند. در زمان تحقیق وی، هزینه این کار در سرور آمازون برابر 0.000000066 دلار بود. پس این عملیات در Ethereum نزدیک به 400 میلیون برابر گرانتر تمام میشود!
او در انتهای مطالعه خود به این نتیجه رسید که با دید منطقی، یک میلیون مرتبه جمع دو عدد کمی غیر طبیعی و ساختگی است. یک قرارداد هوشمند که به خوبی نوشته شده، چنین محاسبهای را به خارج از شبکه برده و بیشتر درگیر آپدیت کردن وضعیت میشود. ذخیره کردن مقدار زیادی دیتا در بلاک چین نیز یک کار معمولی نیست. بسته به عملیات، فرد ممکن است یک ارجاع رمزنگاری شده (یک هش) از دیتا را داخل شبکه نگهداری و اصل داده را در خارج از شبکه ذخیره کند.
به عقیده دنی رایان، توسعهدهندگان باید متوجه هزینههای این اعمال باشند و اپلیکیشنهای غیر متمرکز خود را بر همین اساس طراحی کنند. باید بین پیچیدگی درون و برون زنجیرهای (شبکه) تعادل برقرار کرد. به عبارتی با وجود بهره بردن از ویژگیهای سیستمهای غیر متمرکز، همچنان سرعت و بهرهروی را نزدیک به سیستمهای متمرکز نگه داشت.
تاثیر منفی افزایش گس اتریوم در خلاقیت توسعهدهندگان
یکی دیگر از مشکلات بالا بودن هزینه گس در اتریوم این است که برای توسعهدهندگان، امکان فراهم کردن قابلیت پرداختهای خرد داخل پروژههای آنها را غیر ممکن میکند. اخیرا، به خاطر افزایش ترافیک در شبکه اتریوم با توجه به بمب دیفای، کارمزدها باز هم افزایش پیدا کرده و کار از قبل دشوارتر شده است.
در حال حاضر، اپلیکیشنهای حوزه دیفای (سیستم مالی غیر متمرکز – DeFi)، به شکلی انفجاری محبوب شده و افراد زیادی از آنها استفاده میکنند. بیشتر آنها، روی اکوسیستم اتریوم سوار شدهاند. هر نفر اکنون میخواهد سهمی از ییلد فارمینگ داشته باشد. در حال حاضر، حجم دارایی قفل شده در سیستم مالی غیر متمرکز از چند ده میلیارد دلار فراتر رفته و این مبلغ همچنان در حال افزایش است.
از دیدگاه یک توسعهدهنده، زیبایی DeFi در ترکیبپذیری آن نهفته است. یک توسعهدهنده میتواند به راحتی ویژگیها و قابلیتهای مختلف در این حوزه را با یکدیگر ادغام کرده و یک اپلیکیشن کاملا جدید ارائه کند. با این حال، افزایش افسارگسیخته هزینه گس در اتریوم، ایجاد سیستمی با توانایی ایجاد پرداختهای خرد را همینطور دشوار میکند.
منابع:
- سه شنبه ۳۱ فروردین ۰۰ ۰۰:۰۵ ۷۸۳ بازديد
- ۰ ۰
- ۰ نظر