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