وثائق المطورين
استأجر طاقة Tron مع TronWeb (Node.js): أمثلة برمجية
استأجر طاقة Tron باستخدام TronWeb في Node.js. أرسل 4 TRX، ادعِ 65,000 طاقة عبر API، وأرسل USDT بتكلفة أقل 70%. انسخ والصق الكود مع معالجة الأخطاء.
عنوان دفع API
TFqUiCu1JwLHHnBNeaaVKH7Csm4aA3YhZx
أرسل TRX إلى هذا العنوان. يتم استخدام hash معاملتك للمطالبة بتفويض الطاقة.
تكامل كامل مع Node.js باستخدام TronWeb. كل خطوة عبارة عن كتلة كود منفصلة يمكنك نسخها إلى مشروعك. المثال الكامل من البداية للنهاية موجود في الأسفل.
المتطلبات الأساسية: Node.js 18+،
tronweb مثبت ("npm install tronweb")، محفظة Tron ممولة.
التدفق
بدون مفتاح API. بدون تسجيل. يرسل الكود الخاص بك TRX على البلوكتشين إلى عنوان دفع TronEnergy، ويوقع رسالة تثبت الملكية، ثم يطالب بالتفويض. تصل الطاقة في غضون حوالي 3 ثوان. ثم يرسل الكود الخاص بك USDT باستخدام الطاقة المفوضة.
التسعير خطي: 16,250 طاقة لكل TRX. الحد الأدنى للطلب 4 TRX (65,000 طاقة — تحويل USDT واحد قياسي)، الحد الأقصى 1,000 TRX (16.25M طاقة). المبلغ الذي تُرسله يحدد بدقة مقدار الطاقة التي تعود — لا توجد طبقات أو حزم. لتحويل واحد قياسي، أرسل 4. لتحويل محفظة جديدة، أرسل 8. للعمل على دفعات، أرسل أكثر. يستخدم الكود أدناه
trxAmount متغير حتى تتمكن من تغييره في مكان واحد.
خطوة بخطوة
1. الإعداد
الإعداد
const { TronWeb } = require('tronweb'); // destructured: the default import is broken in v6
const tronWeb = new TronWeb({
fullHost: 'https://api.trongrid.io',
privateKey: process.env.TRON_PRIVATE_KEY,
});
const API = 'https://api.tronnrg.com';
const ADDR = 'TFqUiCu1JwLHHnBNeaaVKH7Csm4aA3YhZx'; // API payment address
const USDT = 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t';
2. أرسل TRX
إرسال دفعة
const TRX_AMOUNT = 4; // Linear: 16,250 energy per TRX. Min 4, max 1000.
// 4 → 65k (standard) · 8 → 130k (new wallet) · 40 → 650k (10 transfers)
const payment = await tronWeb.trx.sendTransaction(ADDR, TRX_AMOUNT * 1e6);
console.log('Payment tx:', payment.txid);
3. اطلب تفويض الطاقة
استرجاع التفويض
// Sign: proves you are the sender
const msg = `${payment.txid}:${tronWeb.defaultAddress.base58}`;
const sig = await tronWeb.trx.signMessageV2(msg);
const delegation = await fetch(`${API}/delegate`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
tx_hash: payment.txid,
delegate_to: tronWeb.defaultAddress.base58,
signature: sig,
}),
}).then(r => r.json());
if (delegation.error) {
throw new Error(delegation.message);
}
console.log('Energy delegated:', delegation.energy); // TRX_AMOUNT × 16,250
4. أرسل USDT
إرسال USDT
const contract = await tronWeb.contract().at(USDT);
const tx = await contract.transfer(
recipientAddress, Math.round(usdtAmount * 1e6)
).send({ feeLimit: 50_000_000 });
console.log('USDT sent:', tx);
معالجة الأخطاء
معالجة الأخطاء
const result = await fetch(`${API}/delegate`, { ... })
.then(r => r.json());
if (result.error) {
switch (result.error) {
case 'payment_verification_failed':
// Payment not yet indexed on-chain. Wait 3s and retry.
break;
case 'hash_already_used':
// Already claimed. Don't retry.
break;
case 'signature_mismatch':
// Sender of TRX != signer of the message. Sign with the same key.
break;
case 'delegation_failed':
// Provider could not deliver. Retry or contact support with result.ref.
break;
}
}
مثال كامل
انسخ هذا إلى ملف، اضبط متغيرات البيئة الخاصة بك، وقم بتشغيله. يرسل السكريبت TRX، يوقع الرسالة، يطلب التفويض مع إعادة محاولة، ثم يرسل USDT.
delegate-energy.js
const { TronWeb } = require('tronweb'); // destructured: default import is broken in v6
const tronWeb = new TronWeb({
fullHost: 'https://api.trongrid.io',
privateKey: process.env.TRON_PRIVATE_KEY,
});
const API = 'https://api.tronnrg.com';
const ADDR = 'TFqUiCu1JwLHHnBNeaaVKH7Csm4aA3YhZx';
const USDT = 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t';
async function claimWithRetry(txHash, delegateTo, signature, retries = 3) {
for (let i = 0; i < retries; i++) {
const res = await fetch(`${API}/delegate`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ tx_hash: txHash, delegate_to: delegateTo, signature }),
}).then(r => r.json());
if (!res.error) return res;
if (res.error !== 'payment_verification_failed') throw new Error(res.message);
await new Promise(r => setTimeout(r, 3000));
}
throw new Error('Transaction not found after retries');
}
async function main() {
const recipient = 'TRecipientWallet';
const trxAmount = 4; // min 4, max 1000 — you get trxAmount × 16,250 energy
// 1. Send TRX (linear pricing: 16,250 energy per TRX)
const payment = await tronWeb.trx.sendTransaction(ADDR, trxAmount * 1e6);
console.log('Payment:', payment.txid);
// 2. Claim delegation
// Sign: proves you are the sender
const message = `${payment.txid}:${recipient}`;
const signature = await tronWeb.trx.signMessageV2(message);
const result = await claimWithRetry(payment.txid, recipient, signature);
console.log('Delegated:', result.energy, 'energy');
console.log('Delegation tx:', result.delegations[0].tx); // verify on TronScan
console.log('Ref:', result.ref);
// 3. Send USDT
const contract = await tronWeb.contract().at(USDT);
const tx = await contract.transfer(recipient, 10 * 1e6).send();
console.log('USDT sent:', tx);
}
main().catch(console.error);
أدرج دائماً التوقيع. إنه يثبت أنك أنت المحفظة التي أرسلت TRX. بدونه، سيرفض API الطلب برسالة
missing_signature.