تشریح کارمزدهای انتقال TRC-20: انرژی، bandwidth و آنچه واقعاً شارژ میشود
دو منبع، یک تراکنش
هر انتقال TRC-20 روی TRON دو منبع متمایز را مصرف میکند: bandwidth و انرژی. اینها به طور جداگانه شارژ میشوند، از مخزنهای جداگانه برداشت میشوند و سازوکارهای بازپرداخت کاملاً متفاوتی دارند. بیشتر توسعهدهندگان یکی یا دیگری را درک میکنند، اما تعامل بین آنها همان جایی است که هزینهها یا قابل مدیریت میمانند یا از کنترل خارج میشوند.
bandwidth هزینه بایت خام پخش یک تراکنش به شبکه را پوشش میدهد. انرژی هزینه اجرای VM برای منطق قرارداد هوشمند را پوشش میدهد. یک انتقال ساده TRX فقط به bandwidth نیاز دارد. یک انتقال TRC-20 که تابع transfer(address,uint256) قرارداد توکن را راهاندازی میکند، به هر دو نیاز دارد.
bandwidth: نیمه سادهتر
هر حساب TRON از طریق یک تخصیص پایه روزانه 600 bandwidth رایگان دریافت میکند. یک تراکنش انتقال استاندارد TRC-20 معمولاً حدود 345 بایت است که به تقریباً 345 واحد bandwidth نگاشت میشود (شبکه 1 bandwidth به ازای هر بایت داده تراکنش شامل امضاها و فیلدهای یادداشت شارژ میکند).
اگر حساب شما به اندازه کافی bandwidth رایگان روزانه یا TRX استیکشده برای bandwidth داشته باشد، تراکنش در این بعد هزینهای ندارد. اگر مخزن bandwidth خالی باشد، شبکه به طور مستقیم TRX را با نرخ 0.001 TRX به ازای هر واحد bandwidth (1000 SUN به ازای هر بایت) میسوزاند. برای یک تراکنش 345 واحدی، این 0.345 TRX سوزاندهشده از آدرس فرستنده است، بدون نیاز به استیکینگ.
600 واحد رایگان روزانه در 00:00 UTC ریست میشوند. اگر انتقالهای کمحجم انجام میدهید، به ندرت با هزینههای bandwidth برخورد میکنید. فرستندگان پرحجم معمولاً به جای سوزاندن، TRX را برای bandwidth استیک میکنند، زیرا بازده استیکینگ تراکنشهای بیشتری به ازای هر TRX نسبت به نرخ سوزاندن پوشش میدهد.
انرژی: جایی که هزینه واقعی قرار دارد
یک انتقال USDT TRC-20 تقریباً 65,000 انرژی مصرف میکند. این عدد از اجرای بایتکد سازگار با EVM داخل ماشین مجازی TRON میآید: خواندن و نوشتن ذخیرهسازی به نگاشت موجودی قرارداد، انتشار رویداد برای لاگ Transfer و بررسیهای ایمنی داخلی. رقم دقیق ممکن است بسته به اینکه اسلاتهای ذخیرهسازی برای اولین بار نوشته میشوند (سرد) یا بهروزرسانی میشوند (گرم) کمی تغییر کند، اما 65,000 رقم استاندارد برای یک انتقال معمولی USDT بین دو آدرس فعال است. انتقال به گیرندهای که موجودی USDT آن در حال حاضر صفر است تقریباً به حدود 130,000 انرژی دو برابر میشود زیرا یک اسلات ذخیرهسازی جدید تخصیص داده میشود.
انرژی دو منبع دارد: TRX استیکشده خودتان یا انرژی اجارهشده (تفویضشده) از شخص ثالث. استیک کردن TRX به شما سهمی متناسب از کل مخزن انرژی شبکه میدهد و مخزن به طور خطی ظرف 24 ساعت به طور کامل بازیابی میشود. نسبت دقیق انرژی به ازای هر TRX استیکشده به مقدار کل استیکشده در سطح شبکه بستگی دارد و در طول زمان تغییر میکند. بازیابی 65,000 انرژی فقط از استیک خودتان نیازمند مقدار قابل توجهی TRX قفلشده است، به همین دلیل اجاره انرژی وجود دارد.
چه اتفاقی میافتد وقتی انرژی تمام میشود
اگر یک تراکنش به 65,000 انرژی نیاز داشته باشد و حساب شما به اندازه کافی در دسترس نداشته باشد، شبکه بیسر و صدا یک اجرای جزئی را پردازش نمیکند. در عوض، fee_limit تراکنش را بررسی میکند و TRX را از حساب شما تا آن حد میسوزاند تا کمبود انرژی را پوشش دهد، سپس تراکنش کامل را اجرا میکند. اگر کمبود از fee_limit شما فراتر برود، تراکنش قبل از تثبیت هر گونه تغییر وضعیت ناموفق میشود.
این سناریوی است که میخواهید از آن اجتناب کنید: پرداخت هم برای انرژی استیکشده خود و هم برای TRX سوزاندهشده بالای آن، یا بدتر، ناموفق شدن کامل تراکنش زیرا fee_limit خیلی پایین تنظیم شده است. میتوانید هزینه فعلی TRX برای پوشش 65,000 انرژی را قبل از تعهد به یک استراتژی در صفحه قیمتگذاری بررسی کنید.
Stake 2.0 نحوه کار تفویض را تغییر داد
پیش از Stake 2.0 (که در آوریل ۲۰۲۳ روی شبکه اصلی فعال شد)، استیک کردن و تفویض در هم تنیده بودند: مالک منبع freezeBalance را فراخوانی میکرد و یک آدرس گیرنده را به طور مستقیم مشخص میکرد، فریز به آن گیرنده مقید بود و مدل انعطافپذیری مورد نیاز برای بازارهای منابع را نداشت.
Stake 2.0 freezeBalanceV2 را معرفی کرد و عمل استیک کردن را از عمل تفویض جدا کرد. اکنون TRX را در یک مخزن شخصی انرژی یا bandwidth استیک میکنید، سپس آن منبع را به طور جداگانه از طریق delegateResource تفویض میکنید. این یعنی:
- تفویضها به طور پیشفرض قابل لغو هستند و میتوانند بدون لغو استیک دوباره تخصیص داده شوند. یک پرچم اختیاری
lockوجود دارد: تنظیم آن به true تفویض را برای حداقل دوره قفل شبکه (در حال حاضر 3d) نگه میدارد. بدون این پرچم، میتوانید تفویض را در هر زمان پس بگیرید. - دوره انتظار آنفریز 14 روزه وقتی استیک TRX زیربنایی را برداشت میکنید روی آن اعمال میشود، نه روی خود تفویض.
- پلتفرمهای اجاره انرژی میتوانند تفویضها را در میان آدرسهای گیرنده زیادی از یک موقعیت استیکشده واحد چرخه کنند.
روی شبکه، وقتی یک پلتفرم اجاره مانند tronenergyrent.com انرژی را به آدرس شما تفویض میکند، مبلغ تفویضشده در وضعیت حساب شما منعکس میشود و از طریق wallet/getaccount به عنوان acquired_delegated_frozenV2_balance_for_energy قابل مشاهده است. انرژی قابل استفاده متناظر در برابر محدودیت انرژی حساب شما ظاهر میشود و بدون هیچ اقدامی از طرف شما بلافاصله قابل خرج شدن است.
هزینه اجاره در برابر هزینه سوزاندن
قیمت اجاره به ازای هر سطح زمانی است: 1h، 1d، 3d، 30d. سطح 1h ارزانترین از نظر TRX مطلق است، سطح 30d گرانترین است و 1d و 3d در میان قرار دارند. قیمتگذاری نشان میدهد که استیک TRX زیربنایی پلتفرم چه مدت به آدرس شما قفل میشود: بازههای طولانیتر = سرمایه بیشتر قفلشده = TRX بیشتر شارژشده. برای اعداد فعلی به ازای هر سطح به TRX، به قیمتگذاری مراجعه کنید.
در مقایسه با سوزاندن، اجاره تقریباً همیشه برای فرستندگانی که از قبل برنامهریزی میکنند برنده است. سوزاندن کل 65,000 انرژی با نرخ پویای شبکه ساده است اما در معرض هر چیزی است که هزینه فعلی سوزاندن باشد، که میتواند با تغییر تقاضای کلی انرژی شبکه به شدت حرکت کند. اجاره به شما هزینه ثابت TRX را در زمان سفارش میدهد.
ترتیب اولویت منابع در طول اجرا
وقتی یک تراکنش اجرا میشود، VM انرژی را به ترتیب خاصی برداشت میکند:
- انرژی پشتیبانیشده توسط منابع تفویضشده به آدرس شما توسط حسابهای دیگر
- انرژی از TRX استیکشده خودتان
- TRX سوزاندهشده از حساب شما برای پوشش هر کمبود باقیمانده (محدود به
fee_limit)
این ترتیب برای استراتژیهای اجاره مهم است. انرژی تفویضشده قبل از استیک خودتان مصرف میشود. بنابراین اگر هم انرژی استیکشده خود و هم انرژی اجارهشده دارید، بخش اجارهشده ابتدا برداشت میشود. وقتی بازه اجاره منقضی شود و تفویض پس گرفته شود، حساب شما به موجودی استیکشده خود بازمیگردد یا اگر آن کافی نباشد، به سوزاندن TRX.
bandwidth از همان اولویت پیروی میکند: ابتدا تخصیص رایگان روزانه، سپس bandwidth استیکشده، سپس سوزاندن TRX. هیچ جایگزینی بین منابع وجود ندارد؛ نمیتوانید از انرژی اضافی برای پوشش کمبود bandwidth استفاده کنید.
خواندن وضعیت منابع حساب شما روی شبکه
اندپوینت TRON API به نام wallet/getaccountresource یک شیء JSON با فیلدهایی که باید بدانید برمیگرداند:
EnergyLimit: کل انرژی فعلی در دسترس حساب شما از استیک خودتانEnergyUsed: انرژی مصرفشده در پنجره 24 ساعته فعلیTotalEnergyLimit: کل انرژی در سطح شبکه (مفید برای محاسبه نسبت استیک به انرژی)TotalEnergyWeight: کل وزن استیکشده برای انرژی در سطح شبکهfreeNetLimit: سهمیه رایگان روزانه bandwidth شما (معمولاً 600)NetLimit: bandwidth از TRX استیکشده خودتانNetUsed: bandwidth مصرفشده امروزTotalNetLimit،TotalNetWeight: کلهای سطح شبکه برای bandwidth
برای دیدن اینکه چه مقدار انرژی توسط دیگران به آدرس شما تفویض شده است، wallet/getaccount را پرسوجو کنید و فیلد acquired_delegated_frozenV2_balance_for_energy را بخوانید. برای جزئیات هر تفویضکننده، شامل هر گونه انقضای قفل، از wallet/getdelegatedresourcev2 استفاده کنید.
اگر در حال ساخت سیستمی هستید که انتقالهای TRC-20 را به صورت برنامهنویسی ارسال میکند، پرسوجوی این اندپوینتها قبل از پخش به شما اجازه میدهد شرایط کمانرژی را قبل از اینکه باعث سوزاندن غیرمنتظره TRX شوند تشخیص دهید. مستندات API نحوه ادغام بررسیهای منابع و سفارش انرژی در جریانهای کاری خودکار را پوشش میدهد.
چرا قراردادهای توکن در مصرف انرژی متفاوت هستند
رقم 65,000 انرژی USDT مختص قرارداد Tether در TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t است. سایر قراردادهای TRC-20 متفاوت خواهند بود. یک قرارداد توکن با منطق اضافی (سازوکار کارمزد در انتقال، بررسیهای مجوز برای مسیریابها یا انتشار رویداد برای چندین موضوع) به ازای هر فراخوانی انرژی بیشتری مصرف میکند. یک قرارداد حداقلی به سبک ERC-20 ممکن است زیر 30,000 بیاید.
تنها راه قابل اعتماد برای دانستن هزینه انرژی واقعی یک قرارداد، شبیهسازی تراکنش یا نگاه کردن به سوابق اجرای تاریخی برای آن قرارداد خاص روی یک کاوشگر بلاک است. رقم USDT را به طور جهانی برای همه توکنهای TRC-20 اعمال نکنید.