گس (Gas) در اتریوم چیست؟ راهنمای جامع
انجام هر عملیات روی اتریوم کارمزدی خاص دارد که بهصورت اتریوم پرداخت میشود، اما اگر تراکنش اتریوم انجام داده باشید، حتماً با پدیدهای بهنام گس (Gas) مواجه شدهاید. در حقیقت این گس است که مشخص میکند چقدر باید کارمزد پرداخت کنیم. این مفهوم در نگاه اول و بهخصوص برای کاربران تازهوارد در حوزه ارزهای دیجیتال بسیار پیچیده به نظر میرسد، اما درک آن (حداقل از نظر تئوری) بسیار سادهتر از چیزی است که فکر میکنید. در این مطلب، با استفاده از مقالهای از وبسایت بلاکگیکز، مفهوم گس در اتریوم را بهزبان ساده توضیح میدهیم و جنبههای مختلف آن را بهصورت جامع بررسی میکنیم.
خلاصهای از گس در اتریوم
برای انجام هر تراکنش یا عملیات روی شبکه اتریوم باید با استفاده از اتر (ارز دیجیتال شبکه اتریوم) کارمزد پرداخت کنیم. از طرف دیگر، برخلاف بیت کوین که کاربرد آن محدود به پول و تراکنشهای مالی است، در اتریوم میتوانیم با استفاده از قراردادهای هوشمند، برنامههای غیرمتمرکز بسازیم. با این حال، کد برنامههای پیادهشده روی اتریوم مشابه یکدیگر نیستند و اجرای یک عملیات برای شبکه میتواند سختتر یا راحتتر از دیگر عملیاتها باشد. بنابراین به راهکاری نیاز داریم که با آن بتوانیم میزان پردازش موردنیاز و در نتیجه کارمزد هر عملیات را نسبت به سختی یا آسانی آن مشخص کنیم. این راهکار واحدی بهنام گس (سوخت) است.
فراموش نکنید گس در فرآیند خرید اتریوم یک ارز دیجیتال جداگانه نیست و در صرافیها خریدوفروش نمیشود، بلکه فقط واحدی ضمنی در پلتفرم اتریوم است که مقدار تلاش موردنیاز برای اجرای یک عملیات را مشخص میکند. میزان گس موردنیاز برای هر عملیات از قبل در شبکه اتریوم مشخص شده است، مثلاً برای هر تراکنش معمولی (ارسال اتر) باید ۲۱,۰۰۰ گس صرف شود و کاربر باید هزینه این ۲۱,۰۰۰ گس را با اتر (ارز دیجیتال شبکه اتریوم) پرداخت کند تا تراکنش او تأیید شود.
اما هزینه و قیمت گس چطور تعیین میشود؟ کاربران خودشان آن را مشخص میکنند. هر کس میتواند برای گس هزینهای دلخواه پرداخت کند. مثلاً یک نفر میتواند برای هر گس ۰.۰۰۰۰۰۰۰۰۲ اتر و فرد دیگری میتواند ۱۰ اتر پرداخت کند. با این حال، ظرفیت شبکه اتریوم محدود است و نمیتوان همه تراکنشها را در لحظه تأیید کرد. بنابراین ماینرهای اتریوم ترجیح میدهند ابتدا تراکنشهای دارای کارمزد بالاتر (قیمت گس بالاتر) را تأیید کنند و بنابراین اگر هزینه گسی که پرداخت میکنید پایین باشد، ممکن است تراکنش شما در صف بماند و هرگز تأیید نشود.
گس را میتوان مانند بنزین در دنیای واقعی در نظر گرفت. بنزین سوخت خودرو است و اگر بخواهید خودروی بنزینی شما حرکت کند، باید برای آن با پرداخت پول (اتر)، بنزین (گس) بخرید. در شبکه اتریوم هزینهای که برای گس پرداخت میکنید، به ماینرها تعلق میگیرد که وظیفه تأیید تراکنشها و حفظ امنیت شبکه را برعهده دارند.
در مورد گس با دو مفهوم اصلی سروکار داریم:
- گس لیمیت (Gas limit)
- گس پرایس (Gas price)
کارمزد شبکه اتریوم برابر است با گس پرایس ضرب در گس لیمیت.
ETH Fee = Gas limit × Gas Price
برای انجام تراکنش، کاربر ابتدا گس لیمیت را مشخص میکند. گس لیمیت یا حد گس، حداکثر میزان گسی است که فرستنده حاضر است برای پردازش تراکنش خود پرداخت کند و وقتی به تنهایی صحبت از گس میشود، منظور همان گس لیمیت است. مثلاً اگر بخواهید اتر ارسال کنید، طبق قوانین اتریوم برای این عملیات نیاز است که ۲۱,۰۰۰ گس صرف شود و بنابراین شما باید ۲۱,۰۰۰ را برای گس لیمیت در نظر بگیرید.
برای درک بهتر، گس لیمیت مانند مقدار بنزینی است که برای رسیدن به مقصد به آن نیاز دارید. مثلاً اگر برای رسیدن به مشهد از تهران نیاز به ۱۰۰ لیتر بنزین باشد، اگر ۵۰ لیتر بنزین بزنید، به مقصد نمیرسید. اگر گس لیمیت هم کمتر از حد مشخصی تعیین شود، عملیات موردنظر ما در شبکه انجام نخواهد شد. همان طور که گفتیم در صورتی که گس لیمیت کافی نباشد، عملیات انجام نخواهد شد، اما اگر مقدار اضافی وارد شود، باقیمانده به کاربر بازمیگردد.
گس پرایس هم همان طور که اشاره شد، مقدار هزینهای است که کاربر برای هر گس پرداخت میکند. هزینه گس با اتر پرداخت میشود، اما چون قیمت هر گس بسیار پایین است، آن را با واحد کوچکتر بهنام «Wei» نمایش میدهند. هر واحد Wei برابر است با ۰.۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱ اتر.
هر کس مجاز است هرچقدر دوست دارد هزینه گس یا همان گس پرایس پرداخت کند، اما اگر گس پرایس بیش از اندازه پایین باشد، ماینرها تراکنش را تأیید نمیکنند. بنابراین، مقدار مناسب گس پرایس برای انجام عملیات، نسبت به شلوغی یا خلوتی شبکه میتواند متفاوت باشد. در حال حاضر میانگین گس پرایس مناسب برای تأیید تراکنش، ۲۰ Gwei (یا ۰.۰۰۰۰۰۰۰۲ ETH) است، اما گاهی اوقات که شبکه شلوغ میشود، این عدد بهشدت افزایش مییابد.
به این مثال توجه کنید: ریحانه میخواهد مقداری اتر به یک کیف پول دیگر منتقل کند. بنابراین او باید گس لیمیت را ۲۱,۰۰۰ تعیین کند. برای هزینه هر گس هم اگر شبکه اتریوم خلوت باشد، او میتواند برای هر گس ۲۰ Gwei (هر Gwei برابر است با ۱,۰۰۰,۰۰۰,۰۰۰ Wei) پرداخت کند تا تراکنش او ظرف مدت یک ساعت تأیید شود. بنابراین، کارمزد تراکنش ریحانه برابر است با ۲۱,۰۰۰ ضرب در ۲۰ که حاصل آن ۴۲۰,۰۰۰ Gwei یا ۰.۰۰۰۴۲ اتر خواهد شد.
فراموش نکنید برای کار با شبکه اتریوم نیاز نیست با مفهوم گس آشنا باشید و کیف پولهای اتریوم بهطور خودکار هنگام تراکنش مقدار کارمزد مناسب را مشخص میکنند.
این خلاصهای بود از مفهوم گس برای کسانی که وقت زیادی برای مطالعه ندارند، اما اگر این توضیحات برای شما کافی نبوده است، به خواندن مقاله ادامه دهید.
پیشزمینه
برای آشنایی کامل با مفهوم گس، ابتدا باید اطلاعاتی درباره قرارداد هوشمند اتریوم و نحوه کار آن داشته باشید. همچنین مهم است بدانید چرا در بیت کوین از سازوکار گس استفاده نشده است.
چرا گس در بیت کوین وجود ندارد؟
اولین سوالی که برای افراد مطرح میشود این است که چرا در شبکه اتریوم چیزی بهنام گس تعریف شده است و چرا مانند بیت کوین کارمزد را مستقیماً با همان اتر تعیین نمیکنند؟ پاسخ در هدف این دو شبکه نهفته است. بیت کوین پول و انتقال آن را غیرمتمرکز کرد، اما اتریوم میخواهد علاوه بر پول، با قراردادهای هوشمند بقیه فرایندها را هم غیرمتمرکز کند.
علت ایجاد بیت کوین، پرسشهایی مشترک بین تمام افراد بود:
- آیا میتوان یک شبکه پرداختی ساخت که بدون نیاز به واسطه و دولت، ارزش (پول) را در سراسر جهان جابهجا کند؟
- آیا میتوان یک پول غیرمتمرکز ایجاد کرد که به دولت و شرکتها نیاز نداشته باشد و حق توزیع آن در دست مردم باشد؟
خالق گمنام بیت کوین، ساتوشی ناکاموتو، با معرفی پدیده انقلابی خود به این پرسشها پاسخ داد. سرانجام ما به سیستم پولی غیرمتمرکزی دست یافتیم که میتواند ارزش را مستقیماً و بدون نیاز به واسطه از شخصی به شخص دیگر منتقل کند.
با این حال، بیت کوین، مشابه با تمام بلاک چینهای نسل اول مشکلی داشت؛ این شبکه فقط تراکنشهای مالی را ممکن میکرد و هیچ راهی برای افزودن شرایطی خاص به این تراکنشها وجود نداشت. برای مثال، بهزاد میتواند ۵ بیت کوین به مجید بفرستد، اما نمیتواند وظایفی تعیین کند که فقط در صورت انجام آنها توسط مجید پول پرداخت شود.
البته در بیت کوین هم میتوان این شرایط را تعیین کرد، اما نحوه کار بسیار دشوار و زمانبر است. قراردادهای هوشمند برای حل این مسئله به کمک ما آمدند.
قرارداد هوشمند چیست؟
قرارداد هوشمند کدی است که روی بلاک چین پیادهسازی میشود تا بدون نیاز به واسطهها، شرایط یک توافقنامه بین دو طرف را بررسی و اجرا کند.
قرارداد هوشمند به شما کمک میکند تا پول، دارایی، سهام یا هر چیز باارزش دیگری را بدون نیاز به واسطه، بهشیوهای شفاف و بدون مشکل مبادله کنید. مزیت اصلی این قراردادها در این است که میتوانید برای تبادلات شرط تعیین کنید. همچنین با استفاده از قرارداد هوشمند میتوان علاوه بر پول، دیگر فرایندهای متمرکز و نیازمند اعتماد را غیرمتمرکز کرد و نیاز به اعتماد را از بین برد.
این قراردادها بر اساس دستورالعملهای خاصی که در کد آنها نوشته شده است، بهصورت خودکار اجرا میشوند. بهعبارت بهتر، انجام این قراردادها منوط به تحقق شرایطی خاص است.
ویتالیک بوترین، همبنیانگذار پلتفرمی است که سنگبنای نسل جدید بلاک چینها شد؛ اتریوم. اتریوم و بلاک چینهای مشابهی که بعد از آن به وجود آمدند، به دنیا نشان دادند که بلاک چین چگونه میتواند از یک سازوکار ساده پرداخت به چیزی بسیار معنادارتر و قدرتمندتر تبدیل شود.
قرارداد هوشمند، شیوه انجام کار در اکوسیستم اتریوم است. هنگامی که فردی بخواهد کار خاصی در شبکه اتریوم انجام دهد، قرارداد هوشمندی با یک یا چند نفر منعقد میکند.
کدهای قرارداد هوشمند اتریوم با استفاده از زبان برنامهنویسی سالیدیتی (Solidity) نوشته میشوند. سالیدیتی برمبنای منطق «اگر این… درنتیجه آن…» (IF-THIS-THEN-THAT)، یا بهاختصار IFTTT، عمل میکند. بهبیان ساده ما در کد تعیین میکنیم «اگر این شد، این کار را کن و اگر آن شد، آن کار را.»
در این قراردادها، در صورتی که اولین مجموعه از دستورالعملها انجام شود، مجموعه بعدی و سپس مجموعه بعد از آن انجام میشود. این فرایند تا جایی تکرار میشود که به پایان قرارداد برسیم.
بهترین راه برای درک این فرایند، تصور یک دستگاه فروش خودکار است که در مترو و اماکن عمومی وجود دارد. برای استفاده از دستگاه فروش خودکار، مراحل زیر را طی میکنید:
- مرحله اول: مقداری پول به دستگاه میدهید.
- مرحله دوم: دکمه مربوط به چیزی را که میخواهید، فشار میدهید.
- مرحله سوم: محصول موردنظر شما از دستگاه بیرون میآید و میتوانید آن را بردارید.
تمام مراحل را در نظر آورید و به آنها فکر کنید. آیا اگر مرحله قبلی انجام نشود، مرحله بعد انجام خواهد شد؟ بدیهی است که خیر! هر کدام از این مراحل مستقیماً به مرحله پیشین مربوط و جزئی جداییناپذیر از قراردادهای هوشمند هستند. میبینید که در کار با دستگاه فروش خودکار، شما (درخواستکننده) صرفاً با دستگاه (ارائهدهنده) کار میکنید و برای انجام عملیات، نیازی به واسطه یا شخص ثالث نیست. اما اگر همین تراکنش در شبکه اتریوم انجام شود، به چه شکل خواهد بود؟
در اتریوم این مراحل به این شکل طی میشوند:
- مرحله اول: مقداری پول (اتر) به دستگاه (قرارداد هوشمند و اتریوم) میدهید و تمام کامپیوترهای فعال در شبکه اتریوم یا همان نودها (nodes) این مرحله را ثبت میکنند. سپس بلاک چین اتریوم بهروزرسانی میشود.
- مرحله دوم: برای چیزی که میخواهید درخواست میدهید و این مرحله نیز در بلاک چین اتریوم بهروزرسانی میشود.
- مرحله سوم: نتیجه موردنظر شما توسط قرارداد هوشمند ایجاد میشود. این مرحله نیز در تمام نودها و بلاک چین ثبت میشود.
شبکه اتریوم هر تراکنشی را که از طریق قراردادهای هوشمند انجام میدهید، ثبت و بهروزرسانی میکند. با این ثبت و بهروزرسانی، مسئولیت اقدامات تمام افراد دخیل در قرارداد مشخص میشود. در این حالت، از آنجا که کل شبکه میتواند هر اقدامی را مشاهده کند، جایی برای دستکاری و خرابکاری انسانی باقی نمیماند.
گس در اتریوم چیست؟
گفتیم که در شبکه اتریوم علاوه بر تراکنش معمولی، امکان اجرای برنامه هم وجود دارد. اما آیا کد همه برنامهها یکسان است؟ آیا عملیاتهای هر برنامه یکسان است؟ آیا یک برنامه نمیتواند سنگینتر از دیگری باشد؟ آیا منطقی است که هم برای عملیاتهای سنگین و هم برای عملیاتهای سبک کارمزدی یکسان پرداخت شود؟ بنابراین ما نیاز به واحدی داریم تا با آن متوجه شویم هر عملیات نسبت به پردازش موردنیاز، مستلزم چقدر کارمزد است. همان طور که در ابتدای این مقاله توضیح داده شد، گس واحدی است که میزان تلاش محاسباتی برای انجام عملیات مشخصی را اندازهگیری میکند.
برای درک بهتر توضیحات بالا، فرض کنید هدف یک خودرو این باشد که از تهران به اصفهان برسد و هدف یک خودروی دیگر این باشد که از تهران به مشهد برسد. آیا این دو خودرو به یک میزان کار انجام میدهند؟
همان طور که اشاره کردیم، در اتریوم قراردادهای هوشمند با استفاده از زبان برنامهنویسی سالیدیتی نوشته میشوند و برای اجرای هر خط کد در سالیدیتی به میزان مشخصی گس احتیاج است.
ممکن است این سوال برای شما ایجاد شود که چه نیازی به داشتن واحد گس داریم و چرا مثلاً نمیگوییم یک عملیات خاص باید ۰.۰۱ اتر کارمزد پرداخت کند؟ پاسخ این است که شبکه اتریوم همیشه در یک وضعیت ثابت نیست. گاهی اوقات این شبکه خلوت است و بنابراین میتوانیم با پرداخت هزینه گس کمتری عملیات خود را انجام دهیم و گاهی اوقات که شبکه شلوغ میشود، باید مبلغ بیشتری کارمزد پرداخت کنیم. اگر کارمزد شبکه بهصورت مستقیم با اتر تعیین میشد، با افزایش قیمت اتریوم، رقم کارمزدها بهشدت بالا میرفت. مثلاً ممکن است کارمزد یک عملیات خاص ۰.۰۵ اتر تعیین شود و در این صورت اگر قیمت اتر ۱۰,۰۰۰ دلار بود، باید برای آن ۵۰۰ دلار کارمزد پرداخت میکردیم که به هیچ عنوان منطقی نیست.
تصویر بالا از مقاله فنی اتریوم یا همان یلوپیپر (Yellow paper) گرفته شده است. توسعهدهندگان میتوانند با استفاده از تصویر بالا متوجه شوند که برای هر عملیات چقدر گس نیاز است. بهعنوان نمونه و طبق این جدول، هر تراکنش معمولی به حداقل ۲۱,۰۰۰ گس احتیاج دارد.
بهمنظور جذب ماینرهای بیشتر، سیستم باید بهاندازه کافی برای ماینرها سودآور و جذاب باشد. در اتریوم، ماینرها دو روش برای کسب درآمد دارند:
- استخراج بلاکها و دریافت پاداش بلاک
- دریافت کارمزد برای انجام تراکنشها و اجرای قراردادهای هوشمند
مورد دوم را بیشتر بررسی خواهیم کرد:
ماینرها مسئول جایدادن تراکنشها در داخل بلاکها هستند. برای انجام این کار، آنها باید از توان محاسباتی خود برای اعتبارسنجی قراردادهای هوشمند استفاده کنند. سیستم گس به آنها اجازه میدهد تا کارمزد مشخصی برای این کار دریافت کنند. این کارمزد بهعنوان کارمزدِ ماینر شناخته میشود و آنها را تشویق میکند تا حضوری فعال در اکوسیستم اتریوم داشته باشند.
اما ماینرها تا چهاندازه میتوانند کارمزد دریافت کنند؟ پیش از محاسبه این مورد، باید نکاتی را در مورد نحوه اندازهگیری گس با هم مرور کنیم.
هر تراکنشی که به شبکه اتریوم ارسال میشود، بسته به تعداد دستورالعملهایی که باید در اتریوم اجرا شود، به میزان مشخصی گس (مثلاً ۳۰,۰۰۰ گس) احتیاج دارد. برای درک بهتر نحوه عملکرد گس در اتریوم، از یک تشبیه استفاده میکنیم. فرض کنید که در جادهای در حال سفر هستید. پیش از این سفر، این مراحل را طی میکنید:
- به پمپ بنزین میروید و مشخص میکنید که به چه مقدار بنزین در خودروی خود احتیاج دارید.
- این مقدار بنزین را در باک بنزین خود میریزید.
- به پمپ بنزین بهازای بنزینی که دریافت کردهاید، پول پرداخت میکنید.
حال همین مثال را در مورد اتریوم به کار میگیریم:
رانندگی با خودرو عملیاتی است که میخواهید انجام دهید، مثل اجرای تابعی از یک قرارداد هوشمند. بنزین همان gas (گس) است. پمپ بنزین شبیه به ماینر شما است و پولی که به پمپ بنزین پرداخت میکنید، حقالزحمه ماینر است.
هزینه گس
هیچ قیمت ثابتی برای گس وجود ندارد. تعیین قیمت گس برعهده فرستنده هر تراکنش است. از طرف دیگر، ماینر میتواند خود انتخاب کند که قصد اعتبارسنجی کدام تراکنشها را دارد و البته طبق منطق، ماینرها تراکنشهایی را انتخاب میکنند که بالاترین قیمت گس را تعیین کرده باشند. بنابراین هزینه گس ممکن است با افزایش ترافیک شبکه بیشتر شود، زیرا در این حالت، تراکنشهای بیشتری برای پردازششدن و گنجاندهشدن در بلاک بعدی با هم رقابت میکنند.
نمودار زیر، متوسط قیمت گس اتریوم را نشان میدهد. همان طور که میبینید در برخی مقاطع بهدلیل شلوغی شبکه اتریوم قیمت گس بهشدت افزایش یافته است.
متوسط قیمت گس بهطور معمول حدوداً ۲۰ گیگاوِی (Gwei) و هر گیگاوِی معادل با ۰.۰۰۰۰۰۰۰۰۱ اتریوم است.
واحد | ارزش به اتر | ارزش به وی |
---|---|---|
۱ اتر (ether) | ۱ | ۱۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰ |
۱ وی (wei) | ۰.۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱ | ۱ |
۱ کیلووی (Kwei) | ۰.۰۰۰۰۰۰۰۰۰۰۰۰۰۰۱ | ۱۰۰۰ |
۱ مگاوی (Mwei) | ۰.۰۰۰۰۰۰۰۰۰۰۰۱ | ۱۰۰۰۰۰۰ |
۱ گیگاوی (Gwei) | ۰.۰۰۰۰۰۰۰۰۱ | ۱۰۰۰۰۰۰۰۰۰ |
حدس گس یا گس لیمیت (Gas Limit) چیست؟
برای اینکه عملیاتی در شبکه اتریوم انجام شود، فرستنده تراکنش باید گس لیمیت یا حد گس را پیش از ارسال تراکنش تعیین کند. حد گس، حداکثر میزان گسی است که فرستنده حاضر است برای پردازش تراکنش خود پرداخت کند.
هنگام تعیین حد گس، نکات زیر باید در نظر گرفته شوند:
- همان طور که پیش از این نشان داده شد، عملیات مختلف هزینه گس متفاوتی دارند.
- هر زمان گس تمام شود، ماینرها از انجام عملیات دست میکشند.
- اگر مقداری گس اضافی باقی بماند، بلافاصله به آغازکننده عملیات بازگردانده میشود.
برای روشنتر شدن جریان، سناریویی فرضی در نظر میگیریم. فرض کنید قصد داریم برنامهای روی اتریوم اجرا کنیم که جمع دو عدد را محاسبه میکند و به این منظور، قرارداد باید اقدامات زیر را انجام دهد:
- ذخیرهکردن ۱۰ در یک متغیر؛ فرض میکنیم هزینه گس این عملیات ۴۵ گس است.
- اضافهکردن دو متغیر؛ فرض میکنیم این کار نیز ۱۰ گس هزینه دارد.
- ذخیرهکردن نتیجه که دوباره ۴۵ گس دیگر به هزینهها اضافه میکند.
بنابراین کل گس موردنیاز ماینر برای اجرای این محاسبات ۱۰۰ گس است، اما گس لیمیت را ۱۲۰ وارد میکنیم.
کارمزدی که به ماینر تعلق میگیرد، با فرض اینکه هزینه ۱ گس (در زمان خلوتی شبکه) برابر با ۲۰ گیگاوِی باشد (۱۰۰ × ۲۰) برابر با ۰.۰۰۰۰۰۲ اتر است. چه مقدار گس باقی میماند؟ ۲۰ گس.
پس از انجام عملیات، ۲۰ گس استفادهنشده به ما بازگردانده میشود. ۲۰ × ۲۰ وی برابر است با ۰.۰۰۰۰۰۰۴ اتر. با توجه به نکات مذکور، دو سناریوی احتمالی وجود دارد:
- حد گس مشخصشده بسیار پایین باشد.
- حد گس مشخصشده بسیار بالا باشد.
سناریوی اول: حد گس مشخصشده بسیار پایین باشد
اگر گس در میانه انجام عملیات تمام شود، وضعیت دوباره به حالت اولیه خود باز میگردد، گویی هیچ اتفاقی نیفتاده است. با این حال، آغازکننده عملیات باز هم باید کارمزد ماینرها را برای هزینههای محاسباتی و عملیات انجامشده روی بلاک چین بپردازد، حتی اگر عملیات تکمیل نشده باشد.
اگر همان مثال بنزین و سفر را در نظر بگیریم، اگر بهاندازه کافی باک بنزین خود را پر نکرده باشید، نمیتوانید به مقصد برسید، اما حتی در این صورت نیز پول بنزین را در پمپ بنزین پرداخت کردهاید.
اکنون ببینیم این جریان در قرارداد هوشمند فرضی ما چطور کار میکند. مراحل از این قرار است:
- ذخیرهکردن ۱۰ در یک متغیر؛ فرض میکنیم هزینه این عملیات ۴۵ گس است.
- اضافهکردن دو متغیر؛ فرض میکنیم این کار ۱۰ گس هزینه دارد.
- ذخیرهکردن نتیجه که دوباره ۴۵ گس دیگر هزینه خواهد داشت.
این بار ما میدانیم که گس موردنیاز برای انجام کامل تراکنش ۱۰۰ گس است، اما حد گس ۹۰ را مشخص میکنیم.
در این سناریو، ماینر بهاندازه ۹۰ گس محاسبات را انجام میدهد، اما بهدلیل کمبود گس عملیات مطابق میل ما به اتمام نمیرسد و قرارداد به حالت اولیه خود بازمیگردد.
سناریوی دوم: حد گس مشخصشده بسیار بالا باشد
با توجه به آنچه تاکنون گفته شد، اگر حد گس بسیار بالا باشد، همهچیز باید عالی پیش برود و باقیمانده گس نیز به فرستنده بازگردانده شود، اما این مسئله فقط روی کاغذ خوب به نظر میرسد و در واقعیت اینطور نیست.
ماینرها باید در محدوده حد گس یک بلاک کار کنند که فرض میکنیم ۶,۷۰۰,۰۰۰ گس است. یک تراکنش ساده (مثل انتقال اتر) به حداقل ۲۱,۰۰۰ گس احتیاج دارد و ماینرها فقط میتوانند تراکنشهایی را به بلاک چین اضافه کنند که حد گس آنها کمتر یا مساوی با حد گس بلاک باشد.
تراکنش A را فرض کنید که یک انتقال ساده اتر است و حد گس مشخصی برابر با ۴۲,۰۰۰ دارد؛ علاوه بر این، دو تراکنش B و C نیز وجود دارند که آنها نیز جابهجایی مقداری اتر هستند و هر کدام حد گسی برابر با ۲۱,۰۰۰ دارند.
از نظر ماینر، کدامیک برای گنجاندن در بلاک منطقیتر به نظر میرسند؟
- آیا آنها تراکنش A را ترجیح میدهند و میزان زیادی از گس بلااستفاده را باز میگردانند؟
- یا تراکنش B و C را انتخاب میکنند تا هزینه بسیار اندکی (یا شاید هیچ هزینهای) بازگردانند؟
قطعاً، از لحاظ اقتصادی، گزینه دوم منطقیتر بهنظر میرسد.
دقیقاً به همین دلیل بهتر است حد گس بیشازحد بالا تعیین نشود. منطقیتر این است که حد گس بهشکلی تنظیم شود که فقط اندکی بیشتر از میزان موردنیاز برای تراکنش شما باشد.
در نمودار زیر میتوانید متوسط حد گس را (در تاریخ ۱ مهر ۹۹) مشاهده کنید.
گس بالا و پایین در مقابل کارمزد بالا و پایین
تا اینجا باید برایتان روشن شده باشد که گس و اتر مفاهیمی یکسان نیستند. گس میزان توان محاسباتی موردنیاز است؛ درحالیکه اتر ارزی است که برای پرداخت گس مورداستفاده قرار میگیرد.
با دانشی که تاکنون به دست آوردهایم، بهتر است نگاهی دقیقتر به سناریوهای گس و کارمزد بیندازیم.
در اینجا لازم است دوباره یادآوری کنیم که کارمزد تراکنش و عملیات در اتریوم برابر است با گس لیمیت ضرب در هزینه گس یا همان گس پرایس.
ETH Fee = Gas limit × Gas Price
اگر یک عملیات گس لیمیت (یا همان گس) پایینی داشته باشد، ماینرها آن را اصلاً انتخاب نمیکنند، زیرا برای تکمیل محاسبات، تراکنش بهاندازه کافی گس ارائه نمیدهد.
اما اگر عملیاتی کارمزد پایینی داشته باشد، آنگاه احتمالاً بهاندازه کافی گس برای انجام محاسبات دارد؛ اما، ماینرها باز هم تمایل چندانی به انتخابکردن آن ندارند، چون عملیاتی که کارمزد پایین داشته باشد، جذابیت اقتصادی زیادی ندارد، اما اگر عملیاتی کارمزد مناسبی داشته باشد، آنگاه ماینرها میدانند که سود بسیار زیادی از آن کسب خواهند کرد و زودتر از بقیه آن را انتخاب میکنند.
بنابراین اگر گس لیمیت مناسب نباشد، عملیات دلخواه هیچگاه انجام نخواهد شد، اما این را هم باید در نظر گرفت که ممکن است گس لیمیت برای یک عملیات مناسب باشد، اما گس پرایس را آنقدر پایین در نظر بگیرید که کارمزد تراکنش پایین باشد و مدتها در صف تأیید بماند یا اصلاً تأیید نشود. بنابراین برای تأیید تراکنش در اتریوم هم باید گس لیمیت مناسب وارد کنید و هم هزینه گس مناسب پرداخت کنید.
بر اساس دادههای پلتفرم «اترگساستیشن» (Ethgasstation)، قیمت گس در زمان نگارش مقاله (مهر ۹۹) برای انواع مختلف سرعت پردازش تراکنش به شرح زیر است:
در سناریوهای بازپرداخت گس اتریوم چه اتفاقی رخ میدهد؟
در سالیدیتی، دو نوع دستور وجود دارد که شما را از بازپرداختِ گسِ بلااستفاده مطمئن میکند.
- دستور «SUICIDE» (بهمعنای خودکشی): این دستور عملاً قرارداد هوشمند را فسخ میکند. با انجام این کار شما ۲۴,۰۰۰ گس پس میگیرید.
- دستور «SSTORE»: حذف فضای ذخیرهای که ۱۵,۰۰۰ گس به شما بازمیگرداند.
بنابراین، ممکن است این طور فکر کنید که اگر قرارداد شما تا ۱۴,۰۰۰ گس استفاده و فضای ذخیرهای را پاک کند، میتوانید ۱,۰۰۰ گس (۱۵,۰۰۰-۱۴,۰۰۰) بازپس بگیرید.
اما جریان به همین سادگی نیست. اگر چنین بود، ماینرها تمام انگیزه خود را از دست میدادند. از این گذشته، ماینرها نباید برای انجام محاسبات، به شما پولی پرداخت کنند. برای جلوگیری از مواردی از این دست، شرایط خاصی در نظر گرفته شده است.
پول بازپرداختی که جمع شده، نمیتواند بیش از نیمی از میزان گس استفادهشده در هنگام انجام محاسبات باشد. برای روشنشدن این مسئله مثالی میزنیم:
فرض کنید ما قرارداد هوشمندی داریم که تا ۱۴,۰۰۰ گس مصرف میکند.
حد گسی که تنظیم کردهایم ۲۰,۰۰۰ گس است.
اگر قرارداد هوشمند شامل دستور SSTORAGE نیز باشد، آغازکننده قرارداد چه میزان گس بعد از اتمام محاسبات دریافت میکند؟
در مرحله اول، آنها ۶,۰۰۰ = ۱۴,۰۰۰ – ۲۰,۰۰۰ واحد گس بلااستفاده دریافت میکنند.
اکنون، دستور SSTORAGE نیز استفاده میشود و روی کاغذ، آغازکننده قرارداد باید ۱۵,۰۰۰ گس دیگر نیز پس بگیرد.
با این حال، میزان گس استفادهشده در قرارداد ۱۴,۰۰۰ است و از آنجا که ۱۵,۰۰۰ دلار بزرگتر از ۲ ÷ ۱۴,۰۰۰ است، میزان گس بازپرداختی برابر است با ۷,۰۰۰ = ۲ ÷ ۱۴,۰۰۰.
بنابراین، در نهایت، گس کل بازگرداندهشده به آغازکننده قرارداد برابر است با ۱۳,۰۰۰ = ۶,۰۰۰ + ۷,۰۰۰.
مثال دیگری را بررسی میکنیم:
فرض کنید این بار، قرارداد تا ۷۰,۰۰۰ گس استفاده میکند و حاوی تابع SUICIDE است.
تابع SUICIDE باید به شما ۲۴,۰۰۰ گس برگرداند که از ۲ ÷ ۷۰,۰۰۰ کمتر است.
در این وضعیت، گس بازپرداختهشده ۲۴,۰۰۰ بهعلاوه گسِ بلااستفاده خواهد بود.
انتقادات از این سازوکار
سیستم گس بهعلت سازوکار اجرایی بیدردسری که دارد و پاداش و مشوق خوبی که به ماینرها میدهد، تحسینشده است. با این حال، این سازوکار با انتقاداتی نیز روبرو شده است، از جمله اینکه برای توسعهدهندگان و آغازکنندگان قراردادهای هوشمند بیش از حد گران تمام میشود.
با توجه به این موضوع، دنی رایان (Danny Ryan) در مقالهای که در هکرنون (Hackernoon) منتشر کرد، مطالعه جالبی انجام داده است.
شرایط زیر را در نظر بگیرید:
وظیفه | گس موردنیاز | هزینه (اتر) | هزینه (دلار) | عملیات بهازای هر اتر | عملیات بهازای هر دلار | عملیات بهازای هر بلاک | بلاک برای تکمیل عملیات |
---|---|---|---|---|---|---|---|
جمع یا کسر دو عدد صحیح | ۳ | ۰.۰۰۰۰۰۰۰۹ | ۰.۰۰۰۰۲۶۵۵ | ۱۱,۱۱۱,۱۱۱.۱۱ | ۳۷۶۶۴.۷۸۳۴۳ | ۱,۵۶۶,۶۶۶.۶۶۷ | ۰.۰۰۰۰۰۰۶۳۸۲۹۷۸۳۳ |
جمع یا کسر دو عدد صحیح برای یک میلیون بار | ۳,۰۰۰,۰۰۰ | ۰.۰۹ | ۲۶.۵۵ | ۱۱.۱۱۱۱۱۱۱۱ | ۰.۰۳۷۶۶۴۷۸۳۴۳ | ۱.۵۶۶۶۶۶۶۶۷ | ۰.۶۳۸۲۹۷۸۷۲۳ |
هنگامیکه در شبکه اتریوم، دو عدد یک میلیون بار به هم اضافه شوند، کارمزد این عملیات حدوداً برابر با ۲۶.۵۵ دلار خواهد بود.
دنی رایان شبکه اتریوم را با سیستم استاندارد سرویس وب آمازون (AWS) مقایسه کرده است. او اظهار داشت که میتواند دو عدد را با استفاده از پایتون در عرض ۰.۰۴ ثانیه، به هم اضافه کند. این عملیات با نرخ ۰.۰۰۵۹ دلاری برای یک ساعت استفاده از ابر رایانشی منعطف آمازون (Amazon EC۲) برابر با ۰.۰۰۰۰۰۰۰۶۶ دلار خواهد بود. این یعنی انجام محاسبات در اتریوم ۴۰۰ برابر گرانتر است!
رایان بر اساس مطالعه خود، نتیجه گرفت:
یک میلیون بار اضافهکردن دو عدد به یکدیگر اندکی تصنعی است. قراردادی که خوب نوشته شده باشد، احتمالاً احتیاج به پیچیدگی محاسباتی برونزنجیرهای دارد و بیشتر شامل بهروزرسانی وضعیت در قرارداد میشود. ذخیره میزان زیادی داده در بلاک چین نیز کاری معمول نیست. بسته به کاری که باید انجام شود، کاربر احتیاج به یک مرجع رمزنگاریشده (هش) از دادههای درونزنجیرهای دارد و باید بقیه دادهها را خارج از بلاک چین نگهداری کند. با توجه به این نکته، ما توسعهدهندگان باید از این هزینهها آگاه باشیم و بر اساس آنها اپلیکیشنهای غیرمتمرکز (dApps) را طراحی کنیم. ما باید تعادلی بین پیچیدگی درونزنجیرهای و برونزنجیرهای ایجاد کنیم و در عین حال، قابلیتهای غیرمتمرکز بلاک چین را نیز گسترش دهیم.
سلام
وقت بخیر
الان هم گس پرایس هم گس لیمیت قابل تغییرند؟
خب چرا هر دو قابل تغییر؟ چه فرقی میکنه که کدوم رو افزایش یا کاهش بدیم؟
بلاخره قراره ضرب بشن در هم، و اگر یکی افزایش پیدا کرده باشه حاصل ضربشون هم افزایش پیدا میکنه.
لطفا راهنماییم کنید.