Розклад комісій за переказ 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 за байт даних транзакції, включно з підписами та полями memo).
Якщо на вашому рахунку достатньо безкоштовного денного bandwidth або застейканих під bandwidth TRX, транзакція в цьому вимірі коштує нічого. Якщо пул 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 energy. Це число походить від виконання EVM-сумісного байт-коду всередині віртуальної машини TRON: читання та записи зі сховища у мапу балансів контракту, генерація події для логу Transfer та внутрішні перевірки безпеки. Точна цифра може дещо змінюватися залежно від того, чи слоти зберігання записуються вперше (cold), чи оновлюються (warm), але 65 000 це стандартна цифра для типового переказу USDT між двома активними адресами. Переказ на отримувача, чий поточний баланс USDT нульовий, приблизно подвоюється до близько 130 000 energy, бо виділяється новий слот зберігання.
Енергія має два джерела: ваші власні застейкані TRX або орендована (делегована) енергія від третьої сторони. Стейкінг TRX дає вам пропорційну частку від загального енергетичного пулу мережі, а пул відновлюється лінійно до 100% протягом 24 годин. Точне співвідношення енергії на один застейканий TRX залежить від загальної застейканої суми по мережі і змінюється з часом. Відновлення 65 000 energy лише з вашого власного стейку вимагає заблокувати значну кількість TRX, через що й існує оренда енергії.
Що відбувається, коли енергія закінчується
Якщо транзакція потребує 65 000 energy, а на вашому рахунку доступно недостатньо, мережа не виконує тихо часткове виконання. Натомість вона перевіряє fee_limit транзакції і спалює TRX з вашого рахунку, до цього ліміту, щоб покрити нестачу енергії, а потім виконує транзакцію повністю. Якщо нестача перевищить ваш fee_limit, транзакція зазнає невдачі до того, як будь-які зміни стану будуть закомічені.
Це сценарій, якого варто уникати: платити і за вашу застейкану енергію, і за спалені TRX зверху, або, що гірше, отримати помилку транзакції через занадто низько встановлений fee_limit. Ви можете перевірити поточну вартість в TRX для покриття 65 000 energy на сторінці цін перед тим, як обирати стратегію.
Stake 2.0 змінив, як працює делегування
До Stake 2.0 (активований у мейннеті у квітні 2023 року) стейкінг та делегування були переплетені: власник ресурсу викликав freezeBalance і вказував адресу отримувача напряму, заморозка була прив'язана до цього отримувача, а модель не мала гнучкості, потрібної для ринків ресурсів.
Stake 2.0 ввів freezeBalanceV2 і відокремив дію стейкінгу від дії делегування. Тепер ви стейкаєте TRX в особистий пул енергії або bandwidth, а потім окремо делегуєте цей ресурс через delegateResource. Це означає:
- Делегування за замовчуванням відкличне і може бути перепризначене без розморожування. Є необов'язковий прапорець
lock: встановлення його у true тримає делегування щонайменше протягом мінімального періоду блокування мережі (наразі 3 дні). Без цього прапорця ви можете повернути делегування будь-коли. - 14-денний період очікування розморожування застосовується до базового стейку TRX, коли ви його виводите, а не до самого делегування.
- Платформи оренди енергії можуть прокручувати делегування по багатьох адресах отримувачів з однієї застейканої позиції.
У блокчейні, коли платформа оренди на кшталт tronenergyrent.com делегує енергію на вашу адресу, делегована сума відображається у стані вашого рахунку, видима через wallet/getaccount як acquired_delegated_frozenV2_balance_for_energy. Відповідна придатна до використання енергія з'являється у ліміті енергії вашого рахунку і одразу доступна для витрачання без жодних дій з вашого боку.
Витрати на оренду проти витрат на спалювання
Оренда оцінюється за рівнями тривалості: 1 година, 1 день, 3 дні, 30 днів. Рівень на 1 годину найдешевший у абсолютних TRX, рівень на 30 днів найдорожчий, між ними 1 день і 3 дні. Ціна відображає, як довго базовий стейк TRX платформи заблокований на вашу адресу: довші вікна означають більше зв'язаного капіталу, а отже більше списаних TRX. Поточні цифри за рівнями в TRX дивіться на сторінці цін.
Порівняно зі спалюванням оренда майже завжди виграє для відправників, які планують наперед. Спалювання повних 65 000 energy за динамічною ставкою мережі простий шлях, але залежить від того, якою саме виявиться поточна вартість спалювання, яка може різко рухатися при зміні загального попиту на енергію в мережі. Оренда дає вам фіксовану вартість у 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 з ваших власних застейканих TRXNetUsed: bandwidth, спожитий сьогодніTotalNetLimit,TotalNetWeight: загальні по мережі показники для bandwidth
Щоб побачити, скільки енергії делеговано на вашу адресу іншими, запитайте wallet/getaccount і прочитайте поле acquired_delegated_frozenV2_balance_for_energy. Для деталей за кожним делегатором, включно з будь-яким терміном блокування, використовуйте wallet/getdelegatedresourcev2.
Якщо ви будуєте систему, яка програмно надсилає перекази TRC-20, опитування цих ендпоінтів перед трансляцією дозволяє виявити стан низької енергії до того, як він спричинить несподіване спалювання TRX. Документація API описує, як інтегрувати перевірки ресурсів і впорядкування енергії в автоматизовані робочі процеси.
Чому контракти токенів відрізняються у споживанні енергії
Цифра 65 000 energy для USDT специфічна для контракту Tether за адресою TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t. Інші контракти TRC-20 будуть відрізнятися. Контракт токена з додатковою логікою (механіка fee-on-transfer, перевірки allowance для маршрутизаторів або генерація подій для кількох топіків) споживатиме більше енергії на виклик. Мінімальний контракт у стилі ERC-20 може вкластися в менше за 30 000.
Єдиний надійний спосіб дізнатися реальну вартість енергії контракту це симулювати транзакцію або подивитися на історичні записи виконання для цього конкретного контракту на блокчейн-провіднику. Не застосовуйте цифру USDT універсально до всіх токенів TRC-20.