OUT_OF_ENERGY: что означает ошибка и как её исправить
Вашей транзакции не хватило энергии во время выполнения, поэтому сеть остановила её и пометила как FAILED. Ничего не переведено, но TRX, сожжённые по ходу, потеряны. Исправить это можно примерно за минуту: получите 65 000 энергии на адрес и отправьте перевод снова.Где вы её видите
Одна и та же ошибка выглядит по-разному в зависимости от того, где вы на неё смотрите.TronScan
На странице транзакции — красный статус FAILED с результатом OUT OF ENERGY, а раздел перевода токенов пуст.Ваш кошелёк
Trust Wallet, TronLink и другие обычно пишут, что транзакция не удалась или что не хватает энергии либо TRX для оплаты комиссии сети.Ваш код
В ответе tronweb или HTTP API внутри receipt будет result: 'OUT_OF_ENERGY', а result самой транзакции — FAILED.Квитанция транзакции — json{"ret": [{ "contractRet": "OUT_OF_ENERGY" }],"receipt": {"energy_usage": 0,"energy_fee": 5000000,"energy_usage_total": 50000,"net_usage": 345,"result": "OUT_OF_ENERGY"}}
energy_usage со значением 0 означает, что у адреса не было своей энергии и каждую единицу пришлось оплачивать сжиганием TRX. energy_fee указано в sun: 5 000 000 sun — это 5 TRX, сожжённых на перевод, который так и не состоялся; на этом всё и остановилось, потому что таков был лимит комиссии — energy_usage_total со значением 50 000 — это меньше тех 65 000, что были нужны для перевода.Три причины — от самой частой к самой редкой
На адресе совсем нет энергии
Бесплатной суточной нормы энергии не бывает — она появляется на адресе только от застейканных TRX или через делегирование. Без неё каждый перевод USDT оплачивается сжиганием TRX, и если баланса TRX или лимита комиссии не хватает на все 65 000 энергии, транзакция обрывается на полпути.Получатель оказался новым адресом
Перевод на адрес, где нет USDT, требует около 131 000 энергии вместо 65 000 — контракту нужно создать новую запись о балансе. Так ведёт себя большинство депозитных адресов бирж, поэтому переводы на биржу падают чаще.Слишком низкий лимит комиссии
Лимит комиссии (fee limit) ограничивает, сколько TRX может сжечь транзакция. Кошельки часто подставляют по умолчанию лимит, который был с запасом год назад, а теперь уже нет, и транзакция останавливается, как только упирается в него.Что делать прямо сейчас
Убедитесь, что дело в энергии
Проверьте адрес: сервис покажет, сколько энергии на нём сейчас и сколько нужно для перевода.Получите энергию
Арендуйте 65 000 энергии на час за 3,03 TRX — или 131 000, если у получателя ещё нет USDT.Дождитесь делегирования
Оно происходит за 3–10 секунд и видно на вкладке «Ресурсы» адреса на TronScan.Отправьте снова
Повторите тот же перевод. Когда энергия на месте, сеть расходует делегированную энергию, а не сжигает TRX.Как поймать ошибку до того, как она обойдётся в TRX
Оценка перед отправкой — javascript// 1. What the transfer will cost, in Energyconst {energy_used: needed} = await tronWeb.transactionBuilder.estimateEnergy(usdtContract,'transfer(address,uint256)',{},[{type: 'address', value: recipient}, {type: 'uint256', value: amount}],sender,);// 2. What the address has right nowconst res = await tronWeb.trx.getAccountResources(sender);const available = (res.EnergyLimit ?? 0) - (res.EnergyUsed ?? 0);// 3. Top up before signing, never after OUT_OF_ENERGYif (available < needed) {throw new Error(`Need ${needed - available} more Energy — rent it first`);}
Частые вопросы
Что означает OUT_OF_ENERGY?
Это значит, что транзакция начала выполняться, израсходовала всю энергию адреса и все TRX, которые разрешал сжечь лимит комиссии, но так и не завершилась. Сеть пометила её как FAILED. Перевод не состоялся, но энергия и сожжённые TRX всё равно потрачены.
Мне вернут сожжённые TRX?
Нет. TRON сжигает эти TRX в оплату вычислений, которые сеть уже выполнила, и неудавшаяся транзакция — не исключение. Никто — ни кошелёк, ни сервис, ни валидаторы — не может их вернуть. Единственный способ избежать потерь — получить энергию до отправки.
Мои USDT отправились?
Нет. Неудавшаяся транзакция не меняет балансы: ваши USDT никуда не ушли, а получатель ничего не получил. Проверьте хеш на TronScan — у неудавшегося перевода красный статус FAILED и нет движения токенов.
Почему вчера такой же перевод прошёл?
Энергия от застейканных TRX восстанавливается в течение 24 часов, поэтому адресу может хватать на один перевод в день, а на второй — уже нет. Стоимость зависит и от получателя: 65 000 энергии, если у него уже есть USDT, и около 131 000, если нет.
Повышение лимита комиссии помогает — стоит ли так делать?
Ошибка пропадёт, но перевод не станет дешёвым: более высокий лимит комиссии просто позволяет сети сжечь больше TRX — около 6,85 TRX за обычный перевод. Аренда энергии даёт тот же результат за 3,03 TRX.
Как не допустить этого снова?
Проверяйте адрес перед отправкой и арендуйте энергию, когда её не хватает. Для кошельков, которые отправляют переводы весь день, есть автопополнение: оно покупает энергию, как только её становится меньше порога, так что ни один перевод не начинается без неё.