開発者向けドキュメント
TronEnergy API エラーコードとトラブルシューティング
TronEnergy API エラーコードの完全なリスト。説明、原因、解決策を含みます。支払い確認、署名、委任エラーに対応しています。
すべてのエラーレスポンスには 2 つのフィールドがあります:error(機械可読、安定、バージョン間で変更なし)とmessage(人間が読める形式、改善される可能性があります)。コードでは常にerrorで切り替えてください。messageをユーザーに表示してください。
エラーフォーマット
すべてのエラーレスポンスは同じ構造に従います:
エラーレスポンス
{
"error": "error_code_here",
"message": "Human-readable explanation"
}
エラーには追加フィールドが含まれる場合があります:ref(エナジー委任試行の参照ID)およびrefund(自動返金の詳細)。
バリデーションエラー
| エラーコード | HTTP | 原因 | 解決方法 |
|---|---|---|---|
invalid_tx_hash | 400 | tx_hashは64文字の16進文字列ではありません | ハッシュ形式を確認してください。正確に64文字の16進数である必要があり、プレフィックスは不要です。 |
invalid_address | 400 | delegate_toは有効なTronアドレスではありません | 呼び出し前にTronWeb.isAddress()でアドレスを検証してください。 |
missing_signature | 400 | リクエストに署名がありません | メッセージ{tx_hash}:{delegate_to}に署名してくださいtronWeb.trx.signMessageV2()TRXを送信したウォレットから署名してください。 |
invalid_signature | 401 | 署名を検証できませんでした | 正確に{tx_hash}:{delegate_to}(小文字の16進ハッシュ、コロン、正確なTronアドレス)に署名したことを確認してください。 |
signature_mismatch | 403 | 署名者アドレスが支払い送信者と一致しません | 署名はTRX支払いを送信したウォレットと同じウォレットからである必要があります。別のウォレット=却下されます。 |
支払いエラー
| エラーコード | HTTP | 原因 | 解決方法 |
|---|---|---|---|
payment_verification_failed | 404 / 400 | オンチェーン支払いを検証できませんでした。messageフィールドが具体的な原因を説明しています。 | 一般的な原因:トランザクションがまだ承認されていない(3~5秒待機して1回再試行)、受信者アドレスが間違っている、トランザクションはTRX送金ではない、4 TRXの最小値未満。 |
hash_already_used | 409 | このトランザクションハッシュは既に請求されています | 各支払いハッシュは1回のみ使用できます。新しい委任の場合は新しい支払いを送信してください。 |
サービスエラー
| エラーコード | HTTP | 原因 | 解決方法 |
|---|---|---|---|
delegation_failed | 400 / 500 | プロバイダーはエナジー委任を提供できませんでした | 支払いが検証された後に失敗が発生した場合、自動返金がキューに入ります。確認してくださいrefund オブジェクト。または再度お試しいただくか、サポートにお問い合わせください。ref ID。 |
rate_limited | 429 | このIPからのリクエストが多すぎます | 速度を落として再度お試しください。制限は毎秒20リクエストです。 |
server_error | 500 | 予期しない内部エラーが発生しました | 数秒待ってから再度お試しください。問題が続く場合は、サポートにお問い合わせください。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);