TronWeb dan foydalanib to'liq Node.js integratsiyasi. Har bir qadam o'zgarmas kod bloki bo'lib, uni loyihangizga nusxa olishingiz mumkin. To'liq oxiriga qadar misol pastda joylashgan.
Talab qilinadigan narsalar: Node.js 18+, tronweb o'rnatilgan (npm install tronweb), Tron hamyoni mablag'ga ega.
Oqim
API kalit yo'q. Ro'yxatdan o'tish yo'q. Sizning kod TronEnergy to'lov manzilga zanjirda TRX yubor, egasida ega ekanligini isbotlaydigan xabarga imzo qo'z, so'ng delegatsiyasini talab qil. Energiya taxminan 3 soniyada keladi. Keyin sizning kod delegatsiya qilingan energiyani ishlatib USDT yubor.
Narx chiziqli: 1 TRX uchun 16,250 Energiya. Minimal buyurtma 4 TRX (65,000 Energiya — bitta standart USDT o'tkazma), maksimal 1,000 TRX (16.25M Energiya). Yuborganingiz miqdori aniq qancha Energiya kelishini belgilaydi — qatlamlar yoki paketlar yo'q. Bitta standart o'tkazma uchun 4 yuboring. Yangi hamyon o'tkazmasi uchun 8 yuboring. Batch ishlari uchun ko'proq yuboring. Pastda keltirilgan kod trxAmount o'zgaruvchini ishlatadi shunda uni bir joyda o'zgartirishingiz mumkin.
Bosma-Bosma
1. O'rnatish
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 yuboring
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. Delegatsiyani talab qilish
// 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 yuborish
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);
Xatolarni boshqarish
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;
}
}
To'liq misol
Buni faylga nusxalab oling, atrof-muhitingiz o'zgaruvchilarini o'rnatib, uni ishga tushiring. Skript TRX yuboradi, xabarni imzolaydi, qayta urinish bilan delegatsiyani talab qiladi, keyin USDT yuboradi.
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);
Har doim imzoni kiriting. U TRX yuborgan hamyon ekaningizni isbotlaydi. Uni qo'lmasdan, API so'rovni rad etadi: missing_signature.