Skip to content

Instantly share code, notes, and snippets.

@andelf
Last active March 16, 2024 04:03
Show Gist options
  • Save andelf/f05f5403e352346e04aad0deec48aad1 to your computer and use it in GitHub Desktop.
Save andelf/f05f5403e352346e04aad0deec48aad1 to your computer and use it in GitHub Desktop.
Send TRX20 token, sign offline
const TronWeb = require('tronweb');
const HttpProvider = TronWeb.providers.HttpProvider;
const fullNode = new HttpProvider("https://api.trongrid.io");
// const fullNode = new HttpProvider("http://192.168.1.162:8090");
const solidityNode = new HttpProvider("https://api.trongrid.io");
const eventServer = new HttpProvider("https://api.trongrid.io");
const privateKey = "3481E79956D4BD95F358AC96D151C976392FC4E3FC132F78A847906DE588C145";
const tronWeb = new TronWeb(fullNode, solidityNode, eventServer, privateKey);
const CONTRACT = "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"; // USDT
const ACCOUNT = "TEQH6py1Pi8YHNgi9cPMHCKLboBTUZrsYT";
async function main() {
let {
transaction,
result
} = await tronWeb.transactionBuilder.triggerSmartContract(
CONTRACT, 'transfer(address,uint256)', {
feeLimit: 1_000_000,
callValue: 0
},
[{
type: 'address',
value: ACCOUNT
}, {
type: 'uint256',
value: 1000000
}]
);
if (!result.result) {
console.error("error:", result);
return;
}
console.log("transaction =>", JSON.stringify(transaction, null, 2));
const signature = await tronWeb.trx.sign(transaction.raw_data_hex);
console.log("Signature:", signature);
transaction["signature"] = [signature];
const broadcast = await tronWeb.trx.sendRawTransaction(transaction);
console.log("result:", broadcast);
const { message }= broadcast;
if (message) {
console.log("Error:", Buffer.from(message, 'hex').toString());
}
}
main().then(() => {
console.log("ok");
})
.catch((err) => {
console.trace(err);
});
@kangchihlun
Copy link

This doesn't work on tronweb 2.0.30 .
I changed await tronWeb.trx.sign(transaction.raw_data_hex); to await tronWeb.trx.sign(transaction);
and feeLimit: 1_000_000, to feeLimit: 1000000, then ok .

@tudoanh
Copy link

tudoanh commented Jan 16, 2022

It's not offline. You are making a request to Tron API with your private key to sign.

@sc0Vu
Copy link

sc0Vu commented May 1, 2022

I think the offline signing means you sign data with local private key instead of wallet in node.

@mrtnetwork
Copy link

I think the offline signing means you sign data with local private key instead of wallet in node.

:)),I think the same, Do you have any source for this? I can't find anything

@nikes
Copy link

nikes commented Sep 29, 2022

I think the offline signing means you sign data with local private key instead of wallet in node.

:)),I think the same, Do you have any source for this? I can't find anything

Idk, but in code u sign offline, u only take from TronAPI transaction to create him, but sign is offline, broadcast is yeah push to TronAPI node too.
https://github.com/tronprotocol/tronweb/blob/master/src/lib/trx.js#L702-L761

Copy link

ghost commented May 24, 2023

const signature = await tronWeb.trx.sign(transaction.raw_data_hex); should change to const signature = await tronWeb.trx.sign(transaction); for the tronweb version 5.2.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment