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

Формат помилки

Усі відповіді про помилки відповідають одній структурі:

помилкова відповідь
{ "error": "error_code_here", "message": "Human-readable explanation" }

Деякі помилки включають додаткові поля: ref (ID посилання для спроби делегування) та 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Цей хеш tx уже було використаноКожен хеш платежу можна використати лише один раз. Відправте новий платіж для нового делегування.

Помилки сервісу

Код помилки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