溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

怎么使用TronTool.Java

發(fā)布時(shí)間:2021-12-29 12:02:39 來(lái)源:億速云 閱讀:360 作者:iii 欄目:互聯(lián)網(wǎng)科技

這篇文章主要介紹“怎么使用TronTool.Java”,在日常操作中,相信很多人在怎么使用TronTool.Java問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”怎么使用TronTool.Java”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

TronTool.Java開(kāi)發(fā)包適用于為Java應(yīng)用快速增加對(duì)Tron/USDT-TRC20數(shù)字資產(chǎn)的支持能力,即支持使用自有Tron區(qū)塊鏈節(jié)點(diǎn)的應(yīng)用場(chǎng)景,也支持基于Tron官方公共API服務(wù)的輕量級(jí)部署場(chǎng)景。

1、TronTool.Java開(kāi)發(fā)包概述

TronTool.Java開(kāi)發(fā)包主要包含以下特性:

  • 支持Tron區(qū)塊鏈原生Trx交易

  • 支持Tron智能合約以及TRC20代幣,例如USDT-TRC20等

  • 支持交易的離線(xiàn)簽名,避免泄露私鑰

  • 完善的Tron節(jié)點(diǎn)API封裝,支持全節(jié)點(diǎn)、Solidity節(jié)點(diǎn)和事件節(jié)點(diǎn)提供的API

  • 支持使用自有節(jié)點(diǎn)或第三方節(jié)點(diǎn),例如Tron官方提供的公共節(jié)點(diǎn)

TronTool.Java開(kāi)發(fā)包運(yùn)行在Java 8環(huán)境下,當(dāng)前版本1.0.0,主要類(lèi)/接口及關(guān)系如下圖所示:

怎么使用TronTool.Java

TronTool.Java開(kāi)發(fā)包的主要代碼文件清單如下:

<table class="table table-striped"> <thead> <tr><th>代碼文件</th><th>說(shuō)明</th></tr> </thead> <tbody> <tr><td>trontool/</td><td>TronTool庫(kù)項(xiàng)目代碼目錄</td></tr> <tr><td>trontool/build.gradle</td><td>TronTool項(xiàng)目Gradle配置</td></tr> <tr><td>trontool/src/main/java/trontool/TronKit.java</td><td>Tron開(kāi)發(fā)包入口類(lèi)</td></tr> <tr><td>trontool/src/main/java/trontool/Trc20.java</td><td>Tron TRC20智能合約封裝類(lèi)</td></tr> <tr><td>trontool/src/main/java/trontool/Contract.java</td><td>Tron智能合約封裝類(lèi)</td></tr> <tr><td>trontool/src/main/java/trontool/Credential.java</td><td>Tron區(qū)塊鏈身份標(biāo)識(shí)類(lèi),用于交易簽名</td></tr> <tr><td>trontool/src/main/java/trontool/Address.java</td><td>Tron地址表示類(lèi)</td></tr> <tr><td>trontool/src/main/java/trontool/Base58.java</td><td>Base58編解碼器</td></tr> <tr><td>trontool/src/main/java/trontool/TronApi.java</td><td>Tron節(jié)點(diǎn)API聚合封裝類(lèi)</td></tr> <tr><td>trontool/src/main/java/trontool/NodeClient.java</td><td>HTTP協(xié)議封裝類(lèi)</td></tr> <tr><td>trontool/src/main/java/trontool/api/</td><td>Tron API數(shù)據(jù)類(lèi)型定義目錄</td></tr> <tr><td>demo/</td><td>演示項(xiàng)目代碼目錄</td></tr> <tr><td>demo/build.gradle</td><td>演示項(xiàng)目Gradle配置文件</td></tr> <tr><td>demo/src/main/java/demo/NewAddressDemo.java</td><td>演示代碼,創(chuàng)建新的Tron區(qū)塊鏈地址</td></tr> <tr><td>demo/src/main/java/demo/TrxDemo.java</td><td>演示代碼,Trx轉(zhuǎn)賬交易及余額查詢(xún)</td></tr> <tr><td>demo/src/main/java/demo/Trc20Demo.java</td><td>演示代碼,Trc20代幣轉(zhuǎn)賬、余額查詢(xún)、事件監(jiān)聽(tīng)等</td></tr> <tr><td>build.gradle</td><td>根項(xiàng)目配置文件</td></tr> <tr><td>settings.gradle</td><td>根項(xiàng)目配置文件</td></tr> </tbody> </table>

2、使用TronTool.Java的示例代碼

2.1 創(chuàng)建新的Tron賬號(hào)

在終端進(jìn)入演示代碼目錄,執(zhí)行如下命令:

~$ cd ~/trontool.java/demo
~/trontool.java/demo$ gradle NewAddressDemo

執(zhí)行結(jié)果如下:

怎么使用TronTool.Java

2.2 Trx轉(zhuǎn)賬及余額查詢(xún)

在終端進(jìn)入演示代碼目錄,執(zhí)行如下命令:

~$ cd ~/trontool.java/demo
~/trontool.java/demo$ gradle TrxDemo

執(zhí)行結(jié)果如下:

怎么使用TronTool.Java

2.3 Trc20代幣轉(zhuǎn)賬、余額查詢(xún)及事件監(jiān)聽(tīng)

在終端進(jìn)入演示代碼目錄,執(zhí)行如下命令:

~$ cd ~/trontool.java/demo
~/trontool.java/demo$ gradle Trc20Demo

執(zhí)行結(jié)果如下:

怎么使用TronTool.Java

2、使用TronKit

TronKit是開(kāi)發(fā)包的入口,使用這個(gè)類(lèi)可以快速實(shí)現(xiàn)如下功能:

  • Trx轉(zhuǎn)賬與余額查詢(xún)

  • Trc20代幣轉(zhuǎn)賬、授權(quán)、余額查詢(xún)等

2.1 實(shí)例化TronKit

TronKit實(shí)例化需要傳入TronApi對(duì)象和Credential對(duì)象,這兩個(gè)參數(shù)分別封裝了Tron節(jié)點(diǎn)提供的API,以及進(jìn)行交易簽名的用戶(hù)身份信息。

例如,下面的代碼創(chuàng)建一個(gè)接入Tron主鏈的TronKit實(shí)例,并使用指定的私鑰進(jìn)行交易簽名:

//import trontool.TronKit;
//import trontool.TronApi;
//import trontool.Credential;

TronKit kit = new TronKit(
  TronApi.mainNet(),                                       //接入主鏈
  Credential.fromPrivateKey("87c12d....d435")              //使用指定私鑰
);

2.2 Trx轉(zhuǎn)賬及余額查詢(xún)

使用TronKit的sendTrx()方法進(jìn)行Trx轉(zhuǎn)賬,例如發(fā)送1000 TRX:

//import trontool.api.TransactionResult;

String to = "TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx";             //轉(zhuǎn)賬目標(biāo)地址
long amount = 1000000000;                                     //轉(zhuǎn)賬金額,單位:SUN
TransactionResult ret = kit.sendTrx(to,amount);               //提交Trx轉(zhuǎn)賬交易
System.out.printf("tx id: %s\n", ret.txId);                   //顯示交易ID    
System.out.printf("tx state: %b\n", ret.state);               //顯示交易結(jié)果

注意:需要將金額單位轉(zhuǎn)換為SUN,1 TRX = 1000000 SUN。

使用getTrxBalance()方法查詢(xún)指定地址的Trx余額,例如:

String addr = "TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx";            //要查詢(xún)的Tron地址
long balance = kit.getTrxBlanace(addr);                        //查詢(xún)Trx余額,單位:SUN
System.out.printf("balance: %d\n",balance);                    //顯示余額

2.3 TRC20代幣轉(zhuǎn)賬

使用TronKit對(duì)象的trc20()方法獲取指定TRC20代幣合約實(shí)例,然后調(diào)用合約的transfer()方法進(jìn)行TRC20代幣轉(zhuǎn)賬。例如,下面的代碼指定地址間轉(zhuǎn)賬1315300個(gè)最小單位的USDT-TRC20代幣,即 1.3153 USDT:

//import trontool.Trc20;
//import trontool.api.TransactionResult;
//import java.math.BigInteger;

String to = "TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx";                 //轉(zhuǎn)賬目標(biāo)地址
BigInteger value = new BigInteger("1315300");                     //轉(zhuǎn)賬Trc20代幣數(shù)量
String contractAddress = "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t";    //USDT-TRC20代幣合約的部署地址
Trc20 usdt = kit.trc20(contractAddress);                          //創(chuàng)建Trc20代幣合約實(shí)例
TransactionResult ret = usdt.transfer(to,value);                  //轉(zhuǎn)賬Trc20代幣
System.out.printf("tx id: %s\n",ret.txId);                        //顯示轉(zhuǎn)賬交易ID
System.out.printf("tx state: %b\n",ret.state);                    //顯示轉(zhuǎn)賬交易結(jié)果

2.4 TRC20代幣余額查詢(xún)

使用TronKit對(duì)象的trc20()方法獲取指定TRC20代幣合約實(shí)例,然后調(diào)用合約的balanceOf()方法查詢(xún)指定地址的TRC20代幣余額。例如,下面的代碼查詢(xún)指定地址的USDT代幣余額:

//import trontool.Trc20;
//impot java.math.BigInteger;

Trc20 usdt = kit.trc20("TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t");        //創(chuàng)建USDT-TRC20代幣合約實(shí)例
BigInteger balance = usdt.balanceOf("TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx");  //查詢(xún)Trc20代幣余額
System.out.printf("balance: %s\n",balance);                         //顯示代幣余額

2.5 TRC20代幣事件查詢(xún)

使用TronKit對(duì)象的trc20()方法獲取指定TRC20代幣合約實(shí)例,然后調(diào)用合約的events()方法查詢(xún)指定合約觸發(fā)事件。

例如查詢(xún)USDT代幣合約最近10秒的事件:

//import trontool.Trc20;
//import trontool.api.ContractEvent;

Trc20 usdt = kit.trc20("TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t");       //創(chuàng)建Trc20代幣合約實(shí)例
long since = System.currentTimeMillis() - 10000;                    //計(jì)算檢查時(shí)間點(diǎn)
ContractEvent[] events = usdt.events(since);                        //提取合約事件
for(ContractEvent e: events){
  System.out.println("event name: %s\n",e.eventName);               //顯示事件名稱(chēng)
  System.out.println("block height: %d\n",e.blockNumber);           //顯示事件觸發(fā)的區(qū)塊高度
}

events()返回的結(jié)果是一個(gè)事件對(duì)象數(shù)組,每個(gè)成員對(duì)象的主要字段說(shuō)明如下:

  • callerContractAddress:調(diào)用合約地址,base58格式

  • transactionId:觸發(fā)合約事件的交易ID,16進(jìn)制字符串

  • result:合約事件參數(shù)列表,數(shù)組

  • resultType:合約事件參數(shù)類(lèi)型列表,數(shù)組

  • blockTimestamp:事件所在區(qū)塊時(shí)間戳,整數(shù)

  • blockNumber:事件所在區(qū)塊號(hào),整數(shù)

  • eventName:事件名稱(chēng),字符串

  • contractAddress:合約地址,base58格式

  • eventIndex:事件索引序號(hào),整數(shù)

例如,下面是一個(gè)TRC20代幣合約的Transfer事件對(duì)象的JSON表示,在event_name字段給出了事件名稱(chēng),在result字段則給出了兩種索引形式的事件參數(shù):

{
  "caller_contract_address": "TS2Hzo6KpAc8Ym2nGb3idpMtUpM2GiK2gL",
  "transaction_id": "265cf378f4943b7c77b7a294f533d4b8c718c297dd28a664848d77cd3f3a0af0",
  "result": {
    "0": "0x2539ef4f3eb733c105a957eebb20fd60ad8c9a43",      //事件參數(shù)0
    "1": "0x6f6794f3904ff51f9fa81e928afdec91f6744a50",      //事件參數(shù)1
    "2": "8",                                               //事件參數(shù)2        
    "_from": "0x2539ef4f3eb733c105a957eebb20fd60ad8c9a43",  //事件參數(shù)_from
    "_value": "8",                                          //事件參數(shù)_value
    "_to": "0x6f6794f3904ff51f9fa81e928afdec91f6744a50"     //事件參數(shù)_to
  },
  "result_type": {
    "_from": "address",                                     
    "_value": "uint256",
    "_to": "address"
  },
  "block_timestamp": 1586263455000,
  "block_number": 3539438,
  "event_name": "Transfer",                                 //事件名稱(chēng)   
  "contract_address": "TS2Hzo6KpAc8Ym2nGb3idpMtUpM2GiK2gL",
  "event_index": 0
}

3、Tron區(qū)塊鏈身份與地址表示

在TronTool.Java開(kāi)發(fā)包中,使用Credential表征Tron區(qū)塊鏈中的一個(gè)用戶(hù)身份,使用Address 表征Tron區(qū)塊鏈中的一個(gè)地址。兩者的區(qū)別在于Credential包含了用戶(hù)的私鑰信息,可以用來(lái)簽名交易,因此需要保護(hù),而Address則是可以公開(kāi)的信息。

使用Credential類(lèi)的靜態(tài)方法create()創(chuàng)建新賬戶(hù)。例如,下面的代碼創(chuàng)建一個(gè)新的賬戶(hù)并顯示其私鑰、公鑰和地址:

//import trontool.Credential;

Credential c = Credential.create();                           //創(chuàng)建新賬號(hào)
System.out.printf("private key: %s\n",c.getPrivateKey());     //顯示私鑰
System.out.printf("public key: %s\n",c.getPublicKey());       //顯示公鑰
System.out.printf("address: %s\n",c.getAddress());            //顯示地址

可以使用靜態(tài)方法fromPrivateKey()導(dǎo)入已有的私鑰來(lái)實(shí)例化Credential。例如下面的代碼導(dǎo)入已有私鑰并顯示地址:

//import trontool.Credential;

Credential c = Credential.fromPrivateKey("7889...023a");      //導(dǎo)入已有私鑰
System.out.printf("address: %s\n",c.getAddress());            //顯示相應(yīng)地址

在Tron區(qū)塊鏈中,地址有兩種表示:16進(jìn)制和base58表示,例如下面是同一個(gè)地址的兩種表示:

  • base58:TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx

  • 16進(jìn)制: 412539EF4F3EB733C105A957EEBB20FD60AD8C9A43

Address類(lèi)包含了相應(yīng)的編解碼邏輯,可以方面的利用不同形式的地址實(shí)例化Address。例如:

//import trontool.Address;

Address a1 = Address.fromBase58("TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx");
System.out.println(a1.hex);       //輸出:412539EF4F3EB733C105A957EEBB20FD60AD8C9A43

Address a2 = Address.fromHex("412539EF4F3EB733C105A957EEBB20FD60AD8C9A43");
System.out.println(a2.base58);    //輸出:TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx

有時(shí)我們只需要簡(jiǎn)單的在base58和16進(jìn)制之間轉(zhuǎn)換地址,這時(shí)并不需要中間的Address對(duì)象,可以直接使用靜態(tài)方法encode()和decode()。例如:

//import trontool.Address;

String a1 = Address.decode("TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx");
System.out.println(a1);         //輸出:412539EF4F3EB733C105A957EEBB20FD60AD8C9A43

String a2 = Address.encode("412539EF4F3EB733C105A957EEBB20FD60AD8C9A43");
System.out.println(a2);         //輸出:TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx

4、使用TronApi訪(fǎng)問(wèn)Tron節(jié)點(diǎn)API

使用TronApi訪(fǎng)問(wèn)Tron的各種節(jié)點(diǎn)API。TronApi聚合了多種Tron節(jié)點(diǎn)提供的API,例如tron全節(jié)點(diǎn)、solidity節(jié)點(diǎn)和事件服務(wù)節(jié)點(diǎn)的API。

實(shí)例化TronApi時(shí),可以分別為不同類(lèi)型的Tron節(jié)點(diǎn)指定不同的連接URL,例如:

//import trontool.TronApi;

TronApi api = new TronApi(
  "https://api.trongrid.io",       //全節(jié)點(diǎn)URL
  "https://api.trongrid.io",       //合約節(jié)點(diǎn)URL
  "https://api.trongrid.io"        //事件節(jié)點(diǎn)URL
);

當(dāng)上述三個(gè)節(jié)點(diǎn)的URL相同時(shí),可以簡(jiǎn)寫(xiě)為:

TronAPi api = new TronApi("https://api.trongrid.io");

如果用的是Tron官方提供的TronGrid節(jié)點(diǎn),那么可以直接使用TronApi提供的兩個(gè)靜態(tài)函數(shù)mainNet()和testNet(),分別接入主鏈和shasta測(cè)試鏈。

例如,下面的代碼是等效的:

TronApi api = new TronApi("https://api.trongrid.io");
TronApi api = TronApi.mainNet();                 //與上面等效

TronApi api = new TronApi("https://api.shasta.trongrid.io");
TronApi api = TronApi.testNet();                 //與上面等效

TronApi封裝了Tron官方多種節(jié)點(diǎn)提供的API的一個(gè)子集,可以用于應(yīng)用與Tron區(qū)塊鏈的交互。例如查詢(xún)指定賬戶(hù)的TRX余額,可以利用Tron節(jié)點(diǎn)的getaccount接口,這對(duì)應(yīng)于TronApi中的getAccount()方法:

//import trontool.api.Account

Account account = api.getAccount("TEgM5CPeqow...7vcBgVkD4tP");  //查詢(xún)賬戶(hù)信息
System.out.printf("balance: %d\n",account.balance);             //顯示賬戶(hù)余額

到此,關(guān)于“怎么使用TronTool.Java”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI