وثائق المطورين
رموز أخطاء TronEnergy API والاستكشاف
قائمة كاملة برموز أخطاء TronEnergy API مع الأوصاف والأسباب والخطوات الحل. تغطي أخطاء التحقق من الدفع والتوقيع والتفويض.
كل استجابة خطأ لها حقلان: error (قابل للقراءة الآلية، مستقر، لا يتغير بين الإصدارات) و message (قابل للقراءة البشرية، قد يتحسن مع الوقت). عوّل دائماً على error في الكود. اعرض message للمستخدمين.
صيغة الخطأ
جميع استجابات الخطأ تتبع نفس الهيكل:
استجابة الخطأ
{
"error": "error_code_here",
"message": "Human-readable explanation"
}
تتضمن بعض الأخطاء حقولاً إضافية: ref (معرّف مرجعي لمحاولة تفويض الطاقة) و refund (تفاصيل عن استرجاع تلقائي للأموال).
أخطاء التحقق
| كود الخطأ | HTTP | السبب | الحل |
|---|---|---|---|
invalid_tx_hash | 400 | tx_hash ليس سلسلة سادسة عشرية بـ 64 حرفاً | تحقق من صيغة الهاش. يجب أن تكون 64 حرفاً سادساً عشرياً بالضبط، بدون بادئة. |
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} بالضبط (هاش سادس عشري صغير، نقطتان، عنوان Tron دقيق). |
signature_mismatch | 403 | عنوان الموقّع لا يطابق مرسل الدفع | يجب أن يأتي التوقيع من نفس المحفظة التي أرسلت دفعة TRX. محفظة مختلفة = مرفوضة. |
أخطاء الدفع
| كود الخطأ | HTTP | السبب | الحل |
|---|---|---|---|
payment_verification_failed | 404 / 400 | لم يتمكن من التحقق من الدفع على السلسلة. الحقل message يصف السبب المحدد. | الأسباب الشائعة: المعاملة لم تؤكد بعد (انتظر 3-5 ثوان وحاول مرة أخرى)، عنوان المستقبل خاطئ، المعاملة ليست تحويل TRX، أقل من الحد الأدنى 4 TRX. |
hash_already_used | 409 | تم المطالبة بهاش المعاملة هذا بالفعل | لا يمكن استخدام كل هاش دفع إلا مرة واحدة. أرسل دفعة جديدة لتفويض طاقة جديد. |
أخطاء الخدمة
| كود الخطأ | HTTP | السبب | الحل |
|---|---|---|---|
delegation_failed | 400 / 500 | لم يتمكن المزود من تقديم تفويض الطاقة | إذا حدث الفشل بعد التحقق من دفعتك، سيتم استرجاع تلقائي للأموال. تحقق من refund كائن. وإلا أعد المحاولة أو تواصل مع الدعم مع ref معرّف. |
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);