სრული 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-ის გადახელა
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-ს.
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.