原創地址: https://blog.csdn.net/sail331x/article/details/112053891
準備說明
1、準備一個trc20的合約 參考波場(Tron)發行trc20代幣(Shasta測驗網路)
2、Java版本的可以參考 波場(Tron)trc20轉賬(java版本)
3、原始碼下載 tronweb版本轉賬-trc20
4、參考檔案 波場檔案
5、運行環境 記得添加tronweb依賴
效果展示
因為我不怎么熟悉vue,寫出來的代碼規范如果不好,請見諒

tronweb操作合約
1、初始化tronWeb物件,如果你在初始化的時候就添加了私鑰,那么在呼叫合約的時候,payable相關的方法就可以直接用send,后面會有說明
## nile測驗網路
tronWeb = new TronWeb(
'https://api.nileex.io/',
'https://api.nileex.io/',
'https://event.nileex.io/',
// privateKey 添加了這個私鑰 那么轉賬啥的就可以快捷轉賬
);
2、查詢trx數量
/**
* 獲取指定地址的trx數量
* @param address
* @returns {Promise<number>}
*/
balanceOf = async function (address) {
let balance = await tronWeb.trx.getBalance(address);
return Number(tronWeb.fromSun(balance).toString());
};
3、trc20合約物件初始化
引入Trc20Token.js檔案
let trc20Token = new Trc20Token(this.trc20.transaction.contract)
4、發起離線trc20交易 呼叫方式參考 Tron.vue的方法
a、創建交易
b、交易簽名
c、廣播交易
/**
* 發起交易
* @param toAddress
* @param amount
* @param remark
* @return {Promise<void>}
*/
transfer = async function(fromAddress,privateKey,toAddress,amount,remark){
const parameter = [{type:'address',value:toAddress},{type:'uint256',value:amount}]
const transaction = await this.tronWeb.transactionBuilder.triggerSmartContract(this.hexAddress, "transfer(address,uint256)", {},
parameter,this.tronWeb.address.toHex(fromAddress))
transaction.transaction.data = remark
let signedTx = await this.tronWeb.trx.sign(transaction.transaction,privateKey)
await this.tronWeb.trx.sendRawTransaction(signedTx);
return signedTx.txID
}
如果你在初始化tronWeb的時候添加了privateKey,那么就可以直接使用下面的方法進行快捷轉賬 呼叫方式參考 Tron.vue的方法
/**
* 發起交易 這個要是tronWeb中設定私鑰
* @param toAddress
* @param amount
* @return {Promise<*>}
*/
easyTransfer = async function(toAddress,amount){
let contract = await this.tronWeb.contract().at(this.hexAddress);
let txid = await contract.transfer(toAddress,amount).send();
return txid
}
關鍵代碼展示
Trc20Token.js
import tronUtils from "@/js/tron/TronUtils";
class Trc20Token{
constructor(_contractAddr) {
this.hexAddress = tronUtils.addressToHex(_contractAddr);
this.tronWeb = tronUtils.getTronWeb()
}
getContract = function(){
return this.hexAddress;
}
/**
* 獲取余額
* @param address
* @return BigNumber
*/
balanceOf = async function(address){
let contract = await this.tronWeb.contract().at(this.hexAddress);
let balance = await contract.balanceOf(address).call();
return balance
}
/**
* 發起交易
* @param toAddress
* @param amount
* @param remark
* @return {Promise<void>}
*/
transfer = async function(fromAddress,privateKey,toAddress,amount,remark){
const parameter = [{type:'address',value:toAddress},{type:'uint256',value:amount}]
const transaction = await this.tronWeb.transactionBuilder.triggerSmartContract(this.hexAddress, "transfer(address,uint256)", {},
parameter,this.tronWeb.address.toHex(fromAddress))
transaction.transaction.data = remark
let signedTx = await this.tronWeb.trx.sign(transaction.transaction,privateKey)
await this.tronWeb.trx.sendRawTransaction(signedTx);
return signedTx.txID
}
/**
* 發起交易 這個要是tronWeb中設定私鑰
* @param toAddress
* @param amount
* @return {Promise<*>}
*/
easyTransfer = async function(toAddress,amount){
let contract = await this.tronWeb.contract().at(this.hexAddress);
let txid = await contract.transfer(toAddress,amount).send();
return txid
}
}
export default Trc20Token;
TronUtils.js
// eslint-disable-next-line no-unused-vars
const TronWeb = require("tronweb")
//私鑰
const privateKey='xxxxx'
const type = 'nile';
let tronWeb = null;
if(type === "nile"){
tronWeb = new TronWeb(
'https://api.nileex.io/',
'https://api.nileex.io/',
'https://event.nileex.io/',
// privateKey 添加了這個私鑰 那么轉賬啥的就可以快捷轉賬
);
}else if(type === 'shasta'){
tronWeb = new TronWeb(
'https://api.shasta.trongrid.io',
'https://api.shasta.trongrid.io',
'https://api.shasta.trongrid.io',
// privateKey
);
}
class TronUtils {
constructor() {
console.log("可以修改tronWeb的構造方法,把私鑰放開:"+privateKey)
}
/**
* 獲取環境型別
* @return {string}
*/
getNetType = function(){
return type
};
/**
* 獲取指定地址的trx數量
* @param address
* @returns {Promise<number>}
*/
balanceOf = async function (address) {
let balance = await tronWeb.trx.getBalance(address);
return Number(tronWeb.fromSun(balance).toString());
};
/**
* 獲取當前地址
* @returns {Promise<unknown>}
*/
getAddress = function () {
return tronWeb.address.getAddress();
};
/**
* 轉換為hex地址
* @param addr
* @returns {*}
*/
addressToHex = function (addr) {
return tronWeb.address.toHex(addr);
};
/**
* hex地址轉成T開頭的地址
* @param hexAddr
* @returns {*}
*/
addressFromHex = function (hexAddr) {
return tronWeb.address.fromHex(hexAddr);
};
/**
* 創建tron地址
*/
createAccount = function () {
return tronWeb.createAccount();
};
getTronWeb = function(){
return tronWeb;
}
}
const tronUtils = new TronUtils();
export default tronUtils
寫在后面
需要寫合約的朋友,可以聯系我哦~ wx: zhongxh886
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/243356.html
標籤:區塊鏈
