Як надіслати USDT TRC-20 з мінімальними комісіями: технічний розбір
Чому перекази USDT TRC-20 узагалі чогось коштують
TRON не стягує фіксовану плату за транзакцію, як це робить Ethereum. Натомість він використовує два окремі ресурси: енергію та bandwidth. Кожна операція в блокчейні споживає один або обидва. Якщо на вашому рахунку достатньо кожного, переказ фактично безкоштовний. Якщо ні, TRX спалюються для покриття нестачі.
Для стандартного переказу USDT TRC-20 мережа вимагає приблизно 65 000 energy та 345 bandwidth. Витрата енергії походить від виконання функції transfer(address,uint256) всередині смарт-контракту TRC-20. Витрата bandwidth покриває сирі байти серіалізованої транзакції. Ці два ресурси споживаються незалежно, тож нестача одного не впливає на інший.
Bandwidth відносно легко підтримувати. Стейкінг невеликої кількості TRX виробляє достатньо bandwidth, щоб покрити 345 байтів на більшості активних гаманців. Енергія це дорога частина, бо виконання смарт-контракту споживає її швидко, і один переказ з'їдає її багато.
Що відбувається на рівні VM під час переказу TRC-20
Коли ви викликаєте transfer(address _to, uint256 _value) на контракті USDT (TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t), віртуальна машина TRON запускається, завантажує байт-код контракту і виконує сумісну з ERC-20 логіку: читає два слоти зберігання (баланси відправника та отримувача), виконує арифметику, записує два оновлені значення назад і генерує подію Transfer. Кожне з цих читань та записів зі сховища коштує енергії, а генерація події додає ще трохи. Загалом це стабільно виходить близько 65 000 energy для стандартного переказу на адресу, яка вже тримає USDT.
Якщо адреса отримувача ніколи раніше не отримувала USDT або її поточний баланс USDT дорівнює нулю, операції запису потрібно створити новий слот зберігання в контракті замість оновлення наявного. Ця єдина зміна приблизно подвоює витрату енергії: переказ на отримувача з нульовим балансом споживає близько 130 000 energy, а не 65 000. Вартість залежить виключно від стану USDT отримувача. Як часто гаманець відправника здійснює транзакції, не впливає на списання енергії.
Споживання bandwidth простіше: TRON вимірює довжину підписаної транзакції в байтах і списує її з вашого ліміту bandwidth. Якщо у вас доступно менше за 345 одиниць bandwidth, мережа спалює TRX за приблизно 1000 SUN (0.001 TRX) за байт як резервний варіант.
Три способи покрити вартість енергії
У вас є три реальні варіанти. Кожен має різну економіку залежно від того, наскільки часто ви надсилаєте.
1. Спалювання TRX на місці
Якщо на вашому гаманці немає застейканих ресурсів, мережа автоматично спалює TRX, щоб покрити і енергію, і bandwidth. Ставка спалювання за енергію коливається залежно від попиту мережі. Щоб дізнатися поточну вартість в TRX рівно за 65 000 energy, перевірте сторінку цін, а не покладайтеся на статичне число тут, бо динамічний коефіцієнт енергії регулярно коригує цю цифру.
Спалювання працює нормально для випадкових переказів. Проблема в тому, що кожен окремий переказ коштує реальних TRX, і немає вигоди від накопичення. Ви щоразу платите повну ціну.
2. Стейкінг TRX для генерації енергії
У Stake 2.0 (живий у мейннеті з квітня 2023 року) стейкінг виконується через freezeBalanceV2(uint256 frozenBalance, uint256 resourceType) з resourceType = 1 для енергії. Застейкана сума заробляє вам пропорційну частку від загального енергетичного пулу мережі. Пул повністю відновлюється за 24 години (лінійно до 100% за 24 години після повного споживання), а дохід в енергії на один TRX змінюється разом зі зміною загального стейку мережі.
Підступ у масштабі. Кількість TRX, яку потрібно застейкати, щоб надійно генерувати 65 000 energy на день (досить для одного переказу USDT), значна, бо ви конкуруєте за частку від загального ліміту енергії мережі. Для гаманців, які роблять більше кількох переказів на день, заблокований у стейкінгу капітал не має економічного сенсу порівняно з орендою, особливо враховуючи 14-денний період очікування розморожування у Stake 2.0.
Stake 2.0 також ввів можливість делегувати застейкані ресурси на іншу адресу через delegateResource, що є механізмом, на якому будуються сервіси оренди енергії.
3. Оренда енергії
Оренда енергії означає, що третя сторона делегує енергію на вашу адресу на фіксовану тривалість. Ви платите невелику комісію в TRX, енергія з'являється на вашому рахунку, ви виконуєте переказ, і делегування завершується. TRX не спалюються за фактичне виконання контракту.
Оренда оцінюється за рівнями тривалості: 1 година, 1 день, 3 дні, 30 днів. Коротші тривалості коштують менше у абсолютних TRX, бо базовий стейк TRX платформи заблокований на менший час. Довші тривалості коштують більше, бо заморозка капіталу довша. Актуальні цифри в TRX за рівнем і за кількістю енергії дивіться на сторінці цін.
Рівень на 1 годину має сенс для одного переказу, який ви хочете виконати негайно. Довші рівні існують для випадків, коли ви хочете фіксовану ціну на розширене вікно, або коли хочете уникнути повторного замовлення щоразу, як надсилаєте.
Як делегування фактично потрапляє на ваш рахунок
Коли сервіс оренди делегує енергію на вашу адресу, ви можете перевірити це в блокчейні. Запитайте wallet/getaccount для вашої адреси і подивіться на acquired_delegated_frozenV2_balance_for_energy, це загальний стейк TRX, який був делегований на ваш рахунок під енергію. Також можна використати wallet/getdelegatedresourcev2, щоб побачити деталі за кожним делегатором, включно з будь-яким терміном блокування.
Делегована енергія одразу придатна до використання. Вам не потрібно робити нічого особливого: наступного разу, коли ви запустите виклик смарт-контракту, TVM спише з вашого доступного балансу енергії, який тепер включає делеговану суму.
Одну річ варто чітко розуміти: коли ви орендуєте N енергії на фіксоване вікно, платформа делегує пул базового стейку TRX на вашу адресу, який на момент делегування перетворюється на N енергії. Ця енергія споживається один раз протягом вікна. Вона не поповнюється посеред оренди для отримувача. Обраний вами рівень тривалості лише контролює, як довго стейк TRX платформи залишатиметься заблокованим на вашу адресу, а не скільки окремих порцій енергії ви отримуєте. Тож обирайте найкоротшу тривалість, яка з запасом охоплює ваше використання, і орендуйте достатньо загальної енергії наперед, щоб покрити те, що плануєте надіслати.
Оптимізація під різні патерни надсилання
Якщо ви надсилаєте USDT спорадично (кілька разів на місяць), оренда на 1 годину за потреби майже завжди найкращий хід. Ви платите лише коли надсилаєте, і не зв'язуєте TRX у стейкінгу та не платите за простой потужності.
Якщо ви керуєте конвеєром виведення на біржі, платіжним процесором або будь-яким застосунком, який робить десятки переказів на день, плануйте потужність наперед. Оцініть свій бюджет енергії на вікно, яке хочете покрити (перекази у вікні x 65 000, плюс запас на будь-яких отримувачів з нульовим балансом по 130 000 кожен), і розмістіть одне замовлення оренди, розраховане під цей бюджет. На такому обсязі також подивіться на панель та API, щоб автоматизувати замовлення та моніторити залишок балансу програмно.
Одну річ легко пропустити: завжди підтримуйте достатньо bandwidth. Стейкінг навіть невеликої кількості TRX під bandwidth гарантує, що 345-байтова вартість кожного переказу завжди покрита без додаткового спалювання TRX. Поєднання цього з орендованою енергією означає, що ваша ефективна вартість одного переказу це лише плата за оренду, нічого більше.
Реально найдешевший шлях
Для одного випадкового переказу орендуйте 65 000 energy на 1 годину і переконайтеся, що ваш рахунок має застейканий bandwidth. Рівень на 1 годину це найдешевший шлях у TRX і зазвичай дешевший за динамічну вартість спалювання TRX для того ж переказу. Поточне число дивіться на сторінці цін.
Для частих відправників розмірте оренду під ваш реальний обсяг переказів у вікні, яке хочете покрити, оберіть найкоротшу тривалість, що охоплює це вікно, і тримайте bandwidth застейканим, щоб ніколи не платити резервне спалювання за байт.
Модель винагороджує планування. Знайте свою частоту надсилання, оберіть тривалість оренди, яка їй відповідає, і розмірте бюджет енергії під реальне навантаження, а не купуйте найдовший рівень за звичкою.