تو این پست میخوام داستان به وجود اومدن Gas Token ها (به عنوان مثال GST2, CHI) رو تعریف کنم و دلیل از بین رفتن بالقوه اشون رو بررسی کنم
فراز
خب اول بریم سراغ این که Gas Token ها چی هستن و برای چی به وجود اومدن.
چند ماه پیش که GasPrice توی شبکه اتریوم بالا رفت و نتیجه اش این شد که کارمزد های 200 دلاری رو هم برای اجرای یه تابع تو بعضی از قرارداد هوشمند ها ببینیم.
یه عده این وسط بودن که میگفتن خب چرا برای جبران این هزینه از Gas Token ها استفاده نمیکنید ؟
و وقتی ازشون پرسیده میشد Gas Token ها چی هستن اکثرا همین تعریف یک خطی رو ارائه میکردن :
Gas Token یک قرارداد هوشمند پیشرفته در اتریوم است که به کاربران این امکان را می دهد که Gas را در شبکه اتریوم توکنایز کنند و بتوانند Gas را در قیمت پایین ذخیره کنند و در هنگام بالا بودن قیمت از این Gas استفاده کنند.
اولین چیزی که میتونم درباره جمله بالا بگم این هستش که خیلی گمراه کننده و شعارگونه هستش
GasPrice ,GasLimit:
(اگه درباره فرق GasLimit,GasPrice و ارتباطشون میدونید میتونید از این قسمت بپرید ولی پیشنهاد میکنم بخونید)
یکی از ادعا هایی که اتریوم میکنه این هستش که به خودش میگه « World Computer» و هر کامپیوتری برای این که بتونه یک کامپیوتر معقول و قابل استفاده باشه باید با halting problem یا مسئله توقف به نوعی دست و پنجه نرم کنه .
مسئله توقف : اگر شرح یک برنامه و ورودی متناهی متناظر با آن را داشته باشیم آیا میتوان تشخیص داد که این برنامه متوقف میشود یا تا ابد ادامه مییابد؟
جواب سوال بالا نه هستش به عنوان مثال :
int main(void) {
while (1);
}
از اونجایی که اتریوم یک ماشین تورینگ کامل هستش هرکسی هر برنامه ای که دلش بخواد رو میتونه روی اتریوم پیاده سازی بکنه . خب چی میشه اگه یه نفر بیاد کدی شبیه کدی که تو خط بالا هستش رو توی اتریوم بخواد اجرا بکنه ؟ کل شبکه میخوابه چون افتاده تو یه حلقه بی نهایت و دیگه نمیتونه کار مفیدی انجام بده
خب اتریوم چجوری با این مسئله دست و پنجه نرم کرده؟
اومده برای اجرا کردن هرچیزی روی شبکه هزینه در نظر گرفته و با این کار کسی پولش به اندازه نمیتونه باشه که روی شبکه اتریوم یه حلقه بینهایت رو اجرا کنه
اتریوم این هزینه گرفتن رو با دوتا مفهوم پیاده سازی کرده : GasPrice, GasLimit
fee = GasLimit * GasPrice
اجرا شدن هر عملیات روی EVM اتریوم یک مقدار Gas مصرف میکنه (مثلا جمع کردن٫ 3 تا Gas مصرف میکنه و برای بررسی بالانس یه آدرس اتریومی 400 تا Gas مصرف میکنه )(برای دیتا بیشتر درمورد این عدد ها میتونید eip150 رو مطالعه کنید)
وقتی یکی یه تراکنشی رو میفرسته به شبکه برای اون تراکنشش GasLimit تعیین میکنه یعنی اگه اجرا شدن این تراکنش بیشتر از این مقدار Gas نیاز داشت من دیگه نیستم Gas ای که تا الان مصرف شده نوش جونت ولی من دیگه پیاده میشم و نمیخوام بیشتر از این Gas مصرف کنی
GasPrice هم چیزی هستش که نسبت به شلوغی شبکه تغییر میکنه و ماینر ها تراکنش ها رو الان بر اساس این که کدوم GasPrice بالاتری داره توی بلاکشون قرار میدن (قیمت Gas توی شبکه نسبت به اتر بیان میشه و با توجه به رابطه fee = GasLimit * GasPrice
ما نیاز داریم برای این که بتونیم هزینه اجرا شدن یه تراکنش رو توی اتریوم بدیم باید eth داشته باشیم توی ادرسمون
Gas-Refund
توی اتریوم مفهومی داریم تحت عنوان gas-refund که وقتی کسی باعث بشه قرار داد هوشمندی فضای ذخیره سازی خودش رو پاک سازی کنه یا اگه تابع selfdestruct رو تو یه قرارداد هوشمند صدا بزنه (قرارداد هوشمند باید این قابلیت رو پیاده سازی کرده باشه، نمیشه رو هر قرارداد هوشمندی که دلمون میخواد این کار رو بکنیم) پروتکل اتریوم برای اجرا کردن این عملیات ها Gas منفی استفاده میکنه یا به زبون خودمون Gas تولید میکنه و به کسی میده که این تراکنش رو فرستاده تو شبکه و این کار رو برای تشویق کردن بقیه به این کار میکنه
دلیل اینی که این طرح تشویقی رو درنظر گرفتن تو پروتکل هم این هستش که هر پروتکل بلاکچینی واقعا خوشحال میشه که حجم چیزی که نود هاش مجبورن نگهداری کنن ازش کم باشه
شاید الان برای بعضی هاتون این سوال پیش بیاد که چی شد؟ مگه بلاکچین غیرقابل تغییر نبود و شعارش این نبود که کسی چیزی رو نمیتونه پاک کنه و …
باید بگم بله بلاکچین غیر قابل تغییر هستش و کسی چیزی رو نمیتونه پاک کنه اما چیزی رو نمیشه پاک کرد که روی بلاکچین قرار داره مثل تراکنش ها و state اتریوم روی بلاکچین نیستش و هر تراکنش روی بلاکچین باعث تغییر توی state اتریوم میشه (مثل جابه جایی که توکن رو شبکه - شما با یه تراکنش که روی بلاکچین هستش و اون تراکنش غیرقابل تغییر و حذف هستش دارید state شبکه رو تغییر میدید)
اگه قضیه زیاد براتون روشن نبود بگید بیشتر توضیح بدم
حالا که درباره این سرفصل ها میدونیم توضیح Gas Token کار ساده تری میتونه باشه
به نظرتون با دونستن این دوتا فکت که :
- GasPrice تو زمان های متفاوت، متفاوت هستش و بالا پایین میشه
- تو اتریوم مفهوم Gas-Refund وجود داره
چجوری میتونیم پول دربیاریم
Gas رو تو قیمت پایین برای دیپلوی کردن یه قرارداد هوشمند که selfdestruct رو پیاده سازی کرده استفاده کنیم و تو قیمت بالا برای گرفتن Gas-Refund با صدا زدن تابعی که منجر به selfdestruct میشه استفاده بکنیم
خط بالا منطق کلی GasToken ها هستش (GST2,CHI)
اون ها در اصل به ازای هر توکنی که mint میکنن یه قرارداد هوشمند خیلی ساده که selfdestruct داره دیپلوی میکنن تو شبکه و به ازای سوزوندن (burn) توکن ها selfdestruct رو از قراردادی که دیپلوی شده صدا زده میشه برای دریافت Gas-Refund (اگه خواستین درباره جزئیات قرارداد هوشمندی که قرارداد هوشمند GasToken ها دیپلوی میکنن و بقیه جزئیات فنی بحث کنیم همین پایین بحث رو شروع کنید)
فرود
یکی از دلایلی که Gas-Refund تو پرتکل تعریف شده بود این بودش که کسایی که کانترکت دیپلوی میکنن ازش استفاده کنن و چیز هایی که دیگه نیاز ندارن (قطعا تو همه پروتکل ها نمیشه این کار رو کرد) حذف کنن از state اتریوم و این یه طرح تشویقی برای این کار بود
ولی تو هدفش شکست خورد و عوضش چیز هایی مثل GasToken رشد کردن که اصلا به اون منظور از این قابلیت استفاده نمیکرد و به نوعی هم باعث میشد تو لحظه هایی که fee بالاست یه عده این انگیزه رو داشته باشن که همچنان تراکنش بزنن و شبکه رو شلوغ تر بکنن
و این کار منجر شد به نوشته شدن EIP3298 تو 8 اسفند 1399 که توش پیشنهاد شده بود refunds کلا از پروتکل حذف بشه (و از اونجایی که یکی از نویسنده های این eip خود ویتالیک هستش با احتمال خوبی این کار انجام میشه و تو فورک لندن که تو مرداد انجام میشه این eip هم پیاده سازی میشه تو پرتکل)