import { TronWeb } from "tronweb";
async function executeTronDeposit(
depositAction: any,
senderAddress: string,
privateKey: string
) {
const { call_data, to_address, amount, token, network } = depositAction;
const tronWeb = new TronWeb({
fullNode: network.node_url,
solidityNode: network.node_url,
privateKey,
});
const amountInBaseUnits = Math.floor(
amount * Math.pow(10, token.decimals)
);
// Build the TRC-20 transfer via smart contract
const { transaction: initialTransaction } =
await tronWeb.transactionBuilder.triggerSmartContract(
token.contract,
"transfer(address,uint256)",
{
feeLimit: 100_000_000, // 100 TRX fee limit
},
[
{ type: "address", value: to_address },
{ type: "uint256", value: amountInBaseUnits },
],
senderAddress
);
// Append call_data as hex data
const hexData = Buffer.from(call_data).toString("hex");
const transaction = await tronWeb.transactionBuilder.addUpdateData(
initialTransaction,
hexData,
"hex"
);
// Sign and broadcast
const signedTransaction = await tronWeb.trx.sign(transaction);
const result = await tronWeb.trx.sendRawTransaction(signedTransaction);
if (result.result) {
return signedTransaction.txID;
}
throw new Error("Transaction broadcast failed");
}