هفته گذشته کاربران از ما پرسیدند که آیا روش آسانی برای میزان گس استفاده شده توسط آدرس اتریوم مخصوصی را میتوان به دست آورد یا خیر. با بررسی این پرسش متوجه شدیم که نه تنها هیچ راهکاری برای این مشکل وجود ندارد، بلکه این درخواست برای استفاده از ترمینال (Terminal) به نوعی ضروری است. با توجه به این موضوع تصمیم گرفتیم که تجربه خود از کار با برنامه اینترنتی برای باخبر شدن از گس و کارمزد استفاده شده را با شما به اشتراک بگذاریم.
اتریوم کربن فوت پرینت (ETH Carbon Footprint)
اسم این برنامه اتریوم کربن فوت پرینت میباشد که برای دانلود کردن نیز موجود است.
آدرس اتریوم مورد نظر و چند اطلاعات مربوط دیگر را در این برنامه وارد کنید تا سابقه استفاده از گس و کارمزد تراکنش های آدرس مورد نظر در شبکه اصلی محاسبه شود.
فرآیند توسعه این برنامه بسیار آسان بوده است. در این برنامه از ویژگی API Studio بر روی ترمینال استفاده شده است تا طبق تصاویر زیر، دو کوئری SQL ایجاد شود.
نحوه کار
با توجه به اینکه باید این کوئری را به روی تمام رسیدهای آدرس اعمال کنید و نتایج را با یکدیگر جمع کنید، اعمال مستقیم این کوئری ها بر روی هر نود بسیار طول خواهد کشید. استفاده از API Studio امکان میدهد تا تمام گس و کارمزد تراکنش ها در چند ثانیه دریافت شود. با استفاده از کش ها (حافظه نهان) ترمینال که تمام اطلاعات بلاک چین را در PostgreSQL ذخیره میکند و دسترسی سریع به نودهای Web3 و db را در API Studio امکان پذیر میسازد میتوانیم اطلاعات مورد نظر را به سرعت پردازش کنیم.
در ادامه مقاله به نحوه کار کوئری خواهیم پرداخت. اگر علاقه ای به مطالعه راهنما ندارید و میخواهید خودتان این فرآیند را انجام دهید API مورد نظر یعنی GasAndFeesByAccount را دریافت و به پروژه ترمینال خود اضافه کنید.
شاید در نگاه اول، این کوئری مقداری پیچیده به نظر برسد، اما اگر به منطق اجرای آن دقت کنیم متوجه خواهیم شد که بسیار ساده میباشد. در ادامه، نحوه کار کوئری استفاده گس را توضیح خواهیم داد اما لازم است توجه کنید که اجرای این دو کوئری بسیار مشابه است و راهنمای زیر را برای کوئری کارمزد نیز میتوان به کار برد.
این کوئری یک تابع ناهمگام است و خروجی آن توسط متغیر gasOut ارجاع داده میشود. این کوئری همانند یک کوئری SQL سنتی با اختلاف اندک میباشد که توسط چارچوب knex.js معرفی شده است. به خاطر داشته باشید که بحث دوم در رابطه با روش db.from یک آرایه (array) میباشد. المان های این آرایه از پست پارامترها حاصل میشود. این المان ها، علامت سوال های کوئری را به ترتیب جایگزین میکند. برای مثال، علامت سوال در WHERE t.”from”=lower(?) با مقدار المان اول در آرایه (آدرس) جایگزین میشود.
ابتدا تمام پارامترهای ضروری (آدرس، کران های بالا و پایین، شبکه) درخواست میشود. از اینجا با اولین کوئری شروع میکنیم. برای درک بهتر، کوئری SQL را از پایین به بالا توضیح خواهیم داد. وارد شبکه مورد نظر خود میشویم تا دیتابیس اتریومی که میخواهیم اطلاعات آن را مورد بررسی قرار دهیم مشخص کنیم. وبسایت اتریوم کربن فوت پرینت با ethereum_main کدنویسی شده است. سپس کران بلاک را تعریف میکنیم. کران های بلاک در پست پارامترها مشخص میشود و به ترتیب به آنها متغیرهای کران بالا و کران پایین میگویند. سپس برای ساده تر شدن، آدرس اتریوم را از به صورت حروف کوچک در میآوریم. آدرس ها در Postgres با حروف کوچک ذخیره میشوند.
سه خط اول کوئری، پیاده سازی آن را با توجه به مولفه هایی که از پست پارامترهای قبلی تعریف میکند. ابتدا حرف t را برای اشاره به جدول تراکنش های عمومی (public_transactions table) قرار میدهیم. این هش ها با استفاده از LEFT JOIN و با ورودی خود در جدول رسید عمومی هماهنگ میباشد. مجموع مقادیر فوق به ما مقدار کل گس استفاده شده توسط آدرس مورد نظر را میدهد. برای به دست آوردن کارمزدها نیز همین اقدامات باید انجام شود به علاوه اینکه مقدار گس در قیمت گس ضرب میشود.
خودتان امتحان کنید
میتوانید این API را برای پروژه ترمینال خود استفاده کنید. میتوانید تغییرات یا کاربردهای دیگری نیز به آن اضافه کنید.