Tron:Web开发

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新增接口)

sign-API,为交易签名

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新增接口)

sign-API,为交易签名

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'
	});
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PHP Tron-Web库是一个用于与Tron区块链进行交互的PHP库,它提供了一组简单易用的API,可以轻松地查询区块链数据、发送交易、调用智能合约等。下面是一些使用Tron-Web库的示例代码: 1. 连接到Tron节点 ```php require_once('path/to/tron-web/vendor/autoload.php'); use \Tron\Web; $tronWeb = new Web('https://api.trongrid.io'); ``` 2. 获取账户信息 ```php $address = 'TJWZjQ4cX4wVfU1v3q2LXZL6yU6J6E3hXk'; $account = $tronWeb->getAccount($address); echo 'Balance: ' . $account['balance'] . PHP_EOL; echo 'Bandwidth: ' . $account['asset']['netUsed'] . PHP_EOL; echo 'Energy: ' . $account['asset']['energyUsed'] . PHP_EOL; ``` 3. 发送TRX交易 ```php $from = 'TJWZjQ4cX4wVfU1v3q2LXZL6yU6J6E3hXk'; $to = 'TWbYiJfDr1NpQrMwzgBQfG5m3F6cJ8Xn6D'; $amount = 100; $result = $tronWeb->sendTransaction([ 'to' => $to, 'from' => $from, 'amount' => $amount ]); ``` 4. 调用智能合约函数 ```php $abi = '[{"constant":false,"inputs":[{"name":"_value","type":"uint256"}],"name":"setValue","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getValue","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]'; $address = 'TB6sNiKbCGZ5pFpXvKXWV5P7n6uG6sLxL7'; $contract = $tronWeb->contract($abi, $address); $contract->functions->setValue(123)->send(); $result = $contract->functions->getValue()->call(); ``` 在这些示例代码中,我们首先导入了Tron-Web库,并创建了一个TronWeb实例。然后,我们使用TronWeb实例来连接到Tron节点,获取账户信息,发送TRX交易和调用智能合约函数。需要注意的是,我们需要为每个智能合约定义其ABI,以便正确地编码和解码函数调用的参数和返回值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值