كل استجابة خطأ لها حقلان: 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 معرّف.
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