1、tron.js 公共方法封装
import { log } from "async";
var Inval = null; // 定时器-获取钱包地址
var contract = null; // 合约
var contractDecimals = 18;
var contractAddr = 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t'; //合约地址
var myAddr = ''; // 我的钱包地址
// 获取签名
export function getSign(message, callback) {
var HexStr = tronWeb.toHex(message);
tronWeb.trx.sign(HexStr).then(res => {
//成功
callback(res)
}).catch(error=>{
uni.showToast({
title: error,
icon: 'none'
})
callback(error)
})
}
// 验证签名
export function verifyMessage(message, signature, callback) {
tronWeb.trx.verifyMessageV2(message,signature).then(res => {
//成功
if(res == myAddr){
console.log('返回结果:',true);
callback(true)
}else{
callback(false)
}
}).catch(error=>{
uni.showToast({
title: error,
icon: 'none'
})
callback(error)
})
}
// 1.获取钱包地址
export function getWalletAddress(callback) {
setTimeout(()=>{
let addr = window.tronWeb.defaultAddress.base58 ? window.tronWeb.defaultAddress.base58 : '';
//当获取到地址的时候就关掉定时器
if (addr) {
myAddr = addr;
callback(addr)
}else{
Inval = setInterval(() => {
let addr = window.tronWeb.defaultAddress.base58 ? window.tronWeb.defaultAddress.base58 : '';
console.log('addr2',addr)
if(addr){
window.clearInterval(Inval);
myAddr = addr;
callback(addr)
}
}, 1000);
}
},500)
}
// 2.获取钱包USDT余额
export function getwalletBalance(callback) {
let abi = [{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_upgradedAddress","type":"address"}],"name":"deprecate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"deprecated","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_evilUser","type":"address"}],"name":"addBlackList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"upgradedAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"maximumFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"_totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_maker","type":"address"}],"name":"getBlackListStatus","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_subtractedValue","type":"uint256"}],"name":"decreaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"who","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_value","type":"uint256"}],"name":"calcFee","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"who","type":"address"}],"name":"oldBalanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newBasisPoints","type":"uint256"},{"name":"newMaxFee","type":"uint256"}],"name":"setParams","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"issue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_addedValue","type":"uint256"}],"name":"increaseApproval","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"amount","type":"uint256"}],"name":"redeem","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"basisPointsRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isBlackListed","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_clearedUser","type":"address"}],"name":"removeBlackList","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"MAX_UINT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_blackListedUser","type":"address"}],"name":"destroyBlackFunds","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_initialSupply","type":"uint256"},{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_decimals","type":"uint8"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_blackListedUser","type":"address"},{"indexed":false,"name":"_balance","type":"uint256"}],"name":"DestroyedBlackFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"Issue","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"amount","type":"uint256"}],"name":"Redeem","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"newAddress","type":"address"}],"name":"Deprecate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_user","type":"address"}],"name":"AddedBlackList","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_user","type":"address"}],"name":"RemovedBlackList","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"feeBasisPoints","type":"uint256"},{"indexed":false,"name":"maxFee","type":"uint256"}],"name":"Params","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}];
contract = tronWeb.contract(abi,contractAddr);
try {
contract.methods.balanceOf(myAddr).call().then(function(balance) {
let a = tronWeb.toBigNumber(balance);
let b = a.div('1e18').toFixed();
callback(b)
})
} catch (error) {
console.log(error)
}
}
// 3.USDT转账
export function startTransfer(toAddr, num, callback) {
// let strNum = num * Math.pow(10, contractDecimals);
// strNum += '';
contract.methods.transfer(toAddr, num).send().then(res => {
// 转账成功
let data = {
code:1,
msg:res
}
callback(data)
}).catch(error=>{
let data = {
code:0,
msg:error
}
callback(data)
})
}
/**
* 舍去指定小数位(不进行四舍五入)
*/
export function toFixed(num, decimal) {
num = num.toString();
let index = num.indexOf('.');
if (index !== -1) {
num = num.substring(0, decimal + index + 1)
} else {
num = num.substring(0)
}
return parseFloat(num).toFixed(decimal)
}
2、main.js引入
import { getSign,verifyMessage,getWalletAddress,getwalletBalance,startTransfer,toFixed } from '@/utils/tron.js' //Tron
Object.assign(Vue.prototype, {
'$getSign':getSign,
'$verifyMessage':verifyMessage,
'$getWalletAddress':getWalletAddress,
'$getwalletBalance':getwalletBalance,
'$startTransfer':startTransfer,
'$toFixed':toFixed,
})
3、获取:钱包地址 USDT、TRX 余额
getbalance-API,查询函数,查询账户trx余额,返回的trx以sun为单位。
// 获取钱包地址-余额
this.$getWalletAddress((addr) => {
this.myAddr = addr;
console.log('钱包地址:',this.myAddr);
if(this.myAddr){
tronWeb.trx.getBalance(this.myAddr).then(balance=>{
let num = balance/1000000; // TRX:返回值单位(SUN) 需/1000000
let myTrxBalance = this.$toFixed(num,6);
console.log('TRX余额:',myTrxBalance);
})
this.$getwalletBalance((balance) => {
let num = balance/1000000
let myUsdtBalance = this.$toFixed(num,6);
console.log('USDT余额:',myUsdtBalance);
})
}
})
4、获取能量,宽带余额
getaccountresource-API,查询账户的资源信息(带宽,能量)
freeNetLimit 免费带宽总量
freeNetUsed 已使用的免费带宽
EnergyLimit 质押获取的总能量
EnergyUsed 已使用的能量
能量单位:K, 需要/1000 展示
if(this.myAddr){
tronWeb.trx.getAccountResources(this.myAddr).then(res=>{
let myEnergy = 0;
let myBandwidth = 0;
if(!res.EnergyLimit && !res.EnergyUsed){
myEnergy = 0;
}else{
if(res.EnergyUsed){
myEnergy = (res.EnergyLimit - res.EnergyUsed)/1000;
}else{
myEnergy = res.EnergyLimit/1000;
}
}
if(res.freeNetUsed){
myBandwidth = res.freeNetLimit - res.freeNetUsed;
}else{
myBandwidth = res.freeNetLimit
}
console.log('能量:',myEnergy);
console.log('宽带:',myBandwidth);
})
}
5、转出TRX
sendtransaction-API,发送 TRX 到另一个地址, 如果提供私钥,将创建,签名并广播该交易。
address 收币地址
num 转出数量单位(SUN)*1000000
let num = this.num*1000000
tronWeb.trx.sendTransaction(address, num).then(result=>{
if(result.result){
console.log('转账成功',result)
// result.txid
}else{
uni.showToast({
title: result.code,
icon: 'none'
});
}
}).catch(err=>{
uni.showToast({
title: err,
icon: 'none'
});
})
6、转出USDT
gettransaction-API,根据txid查询交易。
let str = this.leftNum*1000000
this.$startTransfer(this.address,str,res => {
if(res.code == 1){
console.log('使用哈希查询交易是否成功',res);
tronWeb.trx.getTransaction(res.msg).then(data=>{
let ret = data.ret[0]
if(ret.contractRet == 'SUCCESS'){
console.log('转账成功',data)
// data.txID
}else{
uni.showToast({
title: ret.contractRet,
icon: 'none'
});
}
}).catch(err=>{
uni.showToast({
title: err,
icon: 'none'
});
})
}else{
console.log('转账失败',res.msg);
uni.showToast({
title: res.msg.message,
icon: 'none'
});
}
})
7、出售能量
delegateResource-API,在质押和获取资源之后,可以通过这个接口把资源代理到多个接收者。可选的lock参数可以指定是否该代理在3天内能否被撤销。(v5.1.0新增接口)
sendrawtransaction-API,将已签名的交易广播到网络。
1trx ≈ 16能量
amount 需要被代理的TRX数量,单位(SUN),必须大于1
得到公式 amount = 1/16*1000000
receiveAddress 接收能量的钱包地址
address 转出TRX的钱包地址
let amount = this.num/16*1000000
// 1.先代理
tronWeb.transactionBuilder.delegateResource(amount, receiveAddress, 'ENERGY', this.myAddr, false).then(transaction=>{
console.log('transaction',transaction);
// 2.签名
tronWeb.trx.sign(transaction).then(signedtxn=>{
console.log('signedtxn',signedtxn);
// 3.广播
tronWeb.trx.sendRawTransaction(signedtxn).then(result=>{
if(result.result){
console.log('转出成功',result.txid)
}
}).catch(err=>{
uni.showToast({
title: err,
icon: 'none'
});
})
}).catch(err=>{
uni.showToast({
title: err,
icon: 'none'
});
})
}).catch(err=>{
uni.showToast({
title: err,
icon: 'none'
});
})
8、质押TRX 获得 能量
freezeBalanceV2-API,用来质押和获取资源的接口,可以指定资源类型为带宽或者能量。(v5.1.0新增接口)
sendrawtransaction-API,将已签名的交易广播到网络。
1trx ≈ 16能量
amount 需要被代理的TRX数量,单位(SUN)
myAddr 质押TRX的钱包地址
let amount = this.ZYnum*1000000
// 1.质押
tronWeb.transactionBuilder.freezeBalanceV2(amount, 'ENERGY', myAddr).then(transaction=>{
console.log('transaction',transaction);
// 2.签名
tronWeb.trx.sign(transaction).then(signedtxn=>{
console.log('signedtxn',signedtxn);
// 3.广播
tronWeb.trx.sendRawTransaction(signedtxn).then(receipt=>{
if(receipt.result){
console.log('质押成功',receipt.txid)
}
}).catch(err=>{
uni.showToast({
title: err,
icon: 'none'
});
})
}).catch(err=>{
uni.showToast({
title: err,
icon: 'none'
});
})
}).catch(err=>{
uni.showToast({
title: err,
icon: 'none'
});
})