Cada respuesta de error tiene dos campos: error (legible para máquinas, estable, nunca cambia entre versiones) y message (legible para humanos, puede mejorar con el tiempo). Siempre compara error en tu código. Muestra message a los usuarios.

Formato de error

Todas las respuestas de error siguen la misma estructura:

respuesta de error
{ "error": "error_code_here", "message": "Human-readable explanation" }

Algunos errores incluyen campos adicionales: ref (un ID de referencia del intento de delegación) y refund (detalles sobre un reembolso automático).

Errores de Validación

Código de ErrorHTTPCausaResolución
invalid_tx_hash400tx_hash no es una cadena hexadecimal de 64 caracteresVerifica el formato del hash. Debe tener exactamente 64 caracteres hexadecimales, sin prefijo.
invalid_address400delegate_to no es una dirección Tron válidaValida la dirección con TronWeb.isAddress() antes de hacer la llamada.
missing_signature400No se proporcionó firma en la solicitudFirma el mensaje {tx_hash}:{delegate_to} con tronWeb.trx.signMessageV2() desde la billetera que envió los TRX.
invalid_signature401La firma no pudo ser verificadaAsegúrate de firmar exactamente {tx_hash}:{delegate_to} (hash hexadecimal minúsculo, dos puntos, dirección Tron exacta).
signature_mismatch403La dirección del firmante no coincide con la del remitente del pagoLa firma debe provenir de la misma billetera que envió el pago en TRX. Billetera diferente = rechazado.

Errores de Pago

Código de ErrorHTTPCausaResolución
payment_verification_failed404 / 400El pago en cadena no pudo ser verificado. El campo message describe la causa específica.Causas comunes: transacción no confirmada aún (espera 3-5 segundos e intenta de nuevo), dirección de destinatario incorrecta, la transacción no es una transferencia de TRX, por debajo del mínimo de 4 TRX.
hash_already_used409Este hash de transacción ya ha sido utilizadoCada hash de pago solo puede usarse una vez. Envía un nuevo pago para una nueva delegación.

Errores de Servicio

Código de ErrorHTTPCausaResolución
delegation_failed400 / 500El proveedor no pudo entregar la delegación de energíaSi el fallo ocurrió después de que tu pago fue verificado, un reembolso automático está en cola. Verifica el refund objeto. En caso contrario, reintentas o contacta con soporte con el ref ID.
rate_limited429Demasiadas solicitudes desde esta IPVe más lentamente e reintentas. El límite es 20 solicitudes por segundo.
server_error500Error interno inesperadoReintentas después de unos segundos. Si persiste, contacta con soporte con el ref si está disponible.

Manejo de Errores en Código

gestión de errores recomendada
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