Каждый ответ об ошибке содержит два поля: error (машиночитаемый, стабильный, никогда не меняется между версиями) и message (понятный человеку, может быть улучшен со временем). Всегда используйте в коде error. Выводите message пользователю.

Формат ошибки

Все ответы об ошибках следуют одной структуре:

ошибка ответа
{ "error": "error_code_here", "message": "Human-readable explanation" }

Некоторые ошибки содержат дополнительные поля: ref (идентификатор попытки делегирования энергии) и refund (информация об автоматическом возврате средств).

Ошибки валидации

Код ошибкиHTTPПричинаРешение
invalid_tx_hash400tx_hash — это не строка из 64 символов в шестнадцатеричной системеПроверьте формат хеша. Должно быть ровно 64 шестнадцатеричных символа без префикса.
invalid_address400delegate_to — это не валидный адрес TronПеред вызовом проверьте адрес с помощью TronWeb.isAddress().
missing_signature400В запросе не указана подписьПодпишите сообщение {tx_hash}:{delegate_to} с помощью tronWeb.trx.signMessageV2() из кошелька, отправившего TRX.
invalid_signature401Подпись не удалось проверитьУбедитесь, что вы подписали ровно {tx_hash}:{delegate_to} (шестнадцатеричный хеш в нижнем регистре, двоеточие, точный адрес Tron).
signature_mismatch403Адрес подписавшего не совпадает с адресом отправителя платежаПодпись должна исходить от того же кошелька, который отправил платёж TRX. Другой кошелёк = отклонено.

Ошибки платежа

Код ошибкиHTTPПричинаРешение
payment_verification_failed404 / 400Не удалось проверить платёж в блокчейне. Поле message описывает конкретную причину.Типичные причины: транзакция ещё не подтверждена (подождите 3–5 секунд и повторите попытку), неправильный адрес получателя, транзакция не является переводом TRX, сумма ниже минимума 4 TRX.
hash_already_used409Этот хеш транзакции уже использованКаждый хеш платежа можно использовать только один раз. Отправьте новый платёж для нового делегирования энергии.

Ошибки сервиса

Код ошибкиHTTPПричинаРешение
delegation_failed400 / 500Провайдер не смог выполнить делегирование энергииЕсли сбой произошёл после проверки вашего платежа, автоматический возврат средств находится в очереди. Проверьте refund объекта. Иначе повторите попытку или свяжитесь со службой поддержки с ref ID.
rate_limited429Слишком много запросов с этого IPЗамедлитесь и повторите попытку. Лимит: 20 запросов в секунду.
server_error500Неожиданная внутренняя ошибкаПовторите попытку через несколько секунд. Если проблема сохраняется, свяжитесь со службой поддержки с ref если доступно.

Обработка ошибок в коде

рекомендуемая обработка ошибок
const result = await fetch('https://api.tronnrg.com/delegate', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ tx_hash: hash, delegate_to: addr, signature: sig }), }).then(r => r.json()); if (result.error) { switch (result.error) { case 'payment_verification_failed': // Most common: tx not yet indexed. Wait 3s and retry once. await new Promise(r => setTimeout(r, 3000)); return retry(hash, addr); case 'hash_already_used': // Already claimed. Don't retry. throw new Error('Duplicate delegation attempt'); case 'signature_mismatch': // Signer != payment sender. Sign with the same key. throw new Error('Signer does not match payment sender'); case 'delegation_failed': // Refund queued automatically if payment was verified. if (result.refund) console.log('Refund queued:', result.refund); break; default: console.error(result.error, result.message); } return; } // Success console.log('Delegated:', result.energy, 'energy'); console.log('Delegation tx:', result.delegations[0].tx); // verify on TronScan console.log('Ref:', result.ref);
Telegram WhatsApp