انجمن توسعه قرارداد هوشمند

فراز و فرود Gas Token ها

تو این پست می‌خوام داستان به وجود اومدن 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 کار ساده تری میتونه باشه

به نظرتون با دونستن این دوتا فکت که :

  1. GasPrice تو زمان های متفاوت، متفاوت هستش و بالا پایین میشه
  2. تو اتریوم مفهوم Gas-Refund وجود داره

چجوری میتونیم پول دربیاریم :thinking:

Gas رو تو قیمت پایین برای دیپلوی کردن یه قرارداد هوشمند که selfdestruct رو پیاده سازی کرده استفاده کنیم و تو قیمت بالا برای گرفتن Gas-Refund با صدا زدن تابعی که منجر به selfdestruct میشه استفاده بکنیم

خط بالا منطق کلی GasToken ها هستش (GST2,CHI)

اون ها در اصل به ازای هر توکنی که mint میکنن یه قرارداد هوشمند خیلی ساده که selfdestruct داره دیپلوی میکنن تو شبکه و به ازای سوزوندن (burn) توکن ها selfdestruct رو از قراردادی که دیپلوی شده صدا زده میشه برای دریافت Gas-Refund (اگه خواستین درباره جزئیات قرارداد هوشمندی که قرارداد هوشمند GasToken ها دیپلوی میکنن و بقیه جزئیات فنی بحث کنیم همین پایین بحث رو شروع کنید)

فرود

یکی از دلایلی که Gas-Refund تو پرتکل تعریف شده بود این بودش که کسایی که کانترکت دیپلوی میکنن ازش استفاده کنن و چیز هایی که دیگه نیاز ندارن (قطعا تو همه پروتکل ها نمیشه این کار رو کرد) حذف کنن از state اتریوم و این یه طرح تشویقی برای این کار بود
ولی تو هدفش شکست خورد و عوضش چیز هایی مثل GasToken رشد کردن که اصلا به اون منظور از این قابلیت استفاده نمیکرد و به نوعی هم باعث میشد تو لحظه هایی که fee بالاست یه عده این انگیزه رو داشته باشن که همچنان تراکنش بزنن و شبکه رو شلوغ تر بکنن :smile:

و این کار منجر شد به نوشته شدن EIP3298 تو 8 اسفند 1399 که توش پیشنهاد شده بود refunds کلا از پروتکل حذف بشه (و از اونجایی که یکی از نویسنده های این eip خود ویتالیک هستش با احتمال خوبی این کار انجام میشه و تو فورک لندن که تو مرداد انجام میشه این eip هم پیاده سازی میشه تو پرتکل)

6 Likes

مقاله بسیار جالب و به روزی بود حمید جان.

چند تا نکته جانبی هم اضافه کنم که فکر کنم برای دوستان جالب باشه:

  • gas-refund فقط در زمان selfdestruct نیست و در واقع شما هر فضای storage اسمارت کانترکت رو پاک کنید یک میزانی گس بر می گرده. این خاصیت در ابتدا برای این در پروتوکل ایجاد شد که انگیزه‌ای برای کاربران و برنامه‌نویسان باشه که فضای ذخیره اضافی رو پاک کنند٫ این فضای استفاده شده رابطه مستقیم با سایز بلاکچین داره و میدونید که حجم بلاکچین اتریوم (در حالت فول نود با آرشیو) بالای ۲ ترابایت هست. ولی در نهایت دیده شد که برنامه‌نویسان از این خاصیت استفاده نمیکنند و تنها استفاده اصلی همین GasTokenها هست که کمکی به کم کردن سایز بلاکچین نمیکنه. و جالبه که بدونید بیشترین استفاده gas token ها رو روبات‌های آربیتراژ (arbitrage) دارن٫ به این صورت که هزینه زیادی برای گس میدن و با سوزاندن تعدادی گس توکن در انتها مقداری زیادی از این هزینه رو پس می گیرند.
  • این گس فقط در آخر تراکنش برمیگرده و شما نمیتونید برای محاسبات بیشتر در همون تراکنش ازش استفاده کنید.

نکته اول به موضوع حجم بالای بلاکچین اشاره کردم که به اصطلاح بهش مشکل state bloat میگن. در ادامه این بحث هم مسايل دیگه‌ای مطرح میشه که چجوری این مشکل رو حل کنیم:

  • گرفتن اجاره برای storage: برای هر فضای اشغال شده به ازای هر بلاک یک مقدار از بالانس قرارداد بسوزه. که مشکلات زیادی برای قرارداد‌های هوشمندی که در حال حاضر روی بلاکچین هستند ایجاد میکنه
  • State و فضای اشغال شده تاریخ مصرف داشته باشه و در صورتی که در مدت طولانی کسی ازش استفاده نکنه پاک بشه٫ که مشکلات خودش رو داره.

توی این ۲ تا مقاله ویتالیک یک سری از این مسایل رو مطرح کرده و راه‌حل های احتمالی رو هم بررسی کرده که خیلی جالبه:

4 Likes

مرسی شایان بابت لینک ها :v::pray:

ممنون بابت مطلبتون
یکم فارسی سخت توضیح داده بودین فقط
مفهوم GAS Token ها رو درست متوجه نشدم
و اینکه state اتریوم رو میشه یکم ساده توضیح بدین ؟ ممنون

1 Likes

سلام، اول عذر میخوام که دیر جواب جواب میدم، پیامتون رو نديده بودم

این مطلب از ارزدیجیتال خیلی خوبه :

توی بخش حساب ها درباره این موضوع توضیح داده، اما پیشنهاد میکنم کل مطلب رو بخونید
+