主页 > imtoken钱包官方网站 > Go语言对接USDT-TRC20【TronTool】

Go语言对接USDT-TRC20【TronTool】

imtoken钱包官方网站 2023-07-22 05:17:55

TronTool.Go开发包适用于为Go应用快速添加对Tron/USDT-TRC20数字资产的支持,即支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级服务部署场景。 官方下载地址:TronTool for Golang。

一、开发包概述

TronTool.Go开发包主要包括以下功能:

TronTool.Go开发包使用Go 1.13开发,当前版本为1.0.0,主要数据类型及关系如下图所示:

在这里插入图片描述

TronTool.Go开发包主要代码文件列表请参考官网说明:

2.使用示例代码

进入trontool目录运行示例代码。

2.1 创建新地址

示例代码 addressdemo.go 演示了如何创建新地址或导入现有私钥。

执行以下命令运行示例代码:

go run demo/addressdemo.go

执行结果如下:

在这里插入图片描述

2.2 TRX转账及余额查询

示例代码trxdemo.go演示了如何转账TRX以及查询指定Tron账户的TRX余额。

执行以下命令运行示例代码:

go run demo/trxdemo.go

执行结果如下:

在这里插入图片描述

2.3 Trc20代币转账及余额查询

示例代码trc20demo.go演示了如何查询指定TRC20代币的相关信息并进行转账。

执行以下命令运行示例代码:

go run demo/trc20demo.go

执行结果如下:

在这里插入图片描述

2.4 TRC20代币事件查询

知道名字和地址怎么查身份证号_知道usdt地址能查到余额吗_知道ip地址能知道准确地址吗

示例代码trc20eventdemo.go演示了如何查询指定TRC20代币的事件。

执行以下命令运行示例代码:

go run demo/trc20eventdemo.go

执行结果如下:

在这里插入图片描述

3.使用TronKit

TronKit是开发包的入口,使用这个类可以快速实现以下功能:

3.1 实例化TronKit

TronKit的实例化需要传入TronApi对象和Credential对象。 这两个参数分别封装了Tron节点提供的API和签署交易的用户身份信息。

例如,以下代码创建一个连接到波场主链的 TronKit 实例,并使用指定的私钥对交易进行签名:

//import "trontool/tron"
credential, _ := tron.HexKeyToCredential("8D914…71EB5F")     //导入私钥
TronKit kit = tron.NewTronKit(
  Tron.MainNetTronApi(),                                     //接入主链
  credential,                                                //使用指定身份
)

3.2 TRX转账及余额查询

使用TronKit的sendTrx()方法转账Trx,例如发送1000个TRX:

//import "fmt"
//import "trontool/tron"
to := "TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx"            //转账目标地址
var amount  int64 = 1000000000                        //转账金额,单位:SUN
ret,_  := kit.SendTrx(to,amount)                      //提交Trx转账交易
fmt.Printf("tx id: %s\n", ret.TxId)                   //显示交易ID    

知道ip地址能知道准确地址吗_知道usdt地址能查到余额吗_知道名字和地址怎么查身份证号

fmt.Printf("tx state: %b\n", ret.State) //显示交易提交结果

注:金额单位需换算为SUN,1 TRX = 1000000 SUN。

使用getTrxBalance()方法查询指定地址的TRX余额,例如:

addr := "TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx"        //要查询的Tron地址
balance := kit.GetTrxBlanace(addr)                   //查询Trx余额,单位:SUN
fmt.Printf("balance: %d\n",balance)                  //显示余额        

3.3 TRC20代币转移

使用TronKit对象的Trc20()方法获取指定的TRC20代币合约实例,然后调用合约的transfer()方法转入TRC20代币。

例如,以下代码在指定地址之间转移最小单位 1,315,300 个 TRC20-USDT 代币,即 1.3153 USDT:

//import "trontool/tron"
//import "math/big"
to := "TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx"                  //转账目标地址
value := big.NewInt(1315300)                                //转账Trc20代币数量
contractAddress := "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t"     //USDT代币地址
usdt, _ := kit.Trc20(contractAddress)                       //创建Trc20代币合约实例
ret,_ := usdt.Transfer(to, value)                           //转账Trc20代币
fmt.Printf("tx id: %s\n",ret.txId)                          //显示转账交易ID
fmt.Printf("tx state: %b\n",ret.state)                      //显示转账交易结果

3.4 TRC20代币余额查询

使用TronKit对象的Trc20()方法获取指定TRC20代币合约实例,然后调用合约的BalanceOf()方法查询指定地址的TRC20代币余额。

例如,以下代码查询指定地址的USDT代币余额:

//import "trontool/tron"
//impot "math/big"

知道名字和地址怎么查身份证号_知道ip地址能知道准确地址吗_知道usdt地址能查到余额吗

usdt,_ := kit.Trc20("TR7NhqjeK…zgjLj6t") //创建USDT-TRC20代币实例 balance,_ := usdt.BalanceOf("TDN3Q…8qwqx") //查询Trc20代币余额 fmt.Printf("balance: %s\n",balance) //显示代币余额

3.5 TRC20代币事件查询

使用TronKit对象的Trc20()方法获取指定TRC20代币合约实例,然后调用合约的GetEvents()方法查询指定合约的触发事件。

例如查询USDT代币合约最近10秒的事件:

//import "trontool/tron"
//import "time"
//import "fmt"
usdt,_ := kit.Trc20("TR7Nhqje…zgjLj6t")                    //创建Trc20代币合约实例
since := time.Now().Unix()*1000 - 10000                    //计算检查时间点
events,_ := usdt.GetEvents(since)                          //提取合约事件
for _,event := range events {
  fmt.Printf("event name: %s\n",e.EventName)              //显示事件名称
  fmt.Printf("block height: %d\n",e.BlockNumber)          //显示事件触发区块高度
}

4. Tron 区块链身份和地址表示

在开发包中知道usdt地址能查到余额吗,Credential 用于表示 Tron 区块链中的用户身份。 它和地址的区别在于,Credential 包含了用户的私钥信息知道usdt地址能查到余额吗,可以用来签署交易,而地址是可以公开的信息。

4.1 创建新账户身份

使用 tron 包的 NewCredential() 方法创建一个新帐户。 例如,以下代码创建一个新帐户并显示其私钥、公钥和地址:

//import "fmt"
//import "trontool/tron"
c,_ := tron.NewCredential()                                      //创建新身份
fmt.Printf("private key: %s\n",c. PrivateKeyHex());              //显示私钥

知道名字和地址怎么查身份证号_知道usdt地址能查到余额吗_知道ip地址能知道准确地址吗

fmt.Printf("public key: %s\n",c. PublicKeyHex()); //显示公钥 fmt.Printf("address: %s\n",c.AddressBase58()); //显示地址

需要指出的是,对于任何新创建的账户,Tron 都需要注入 0.1 TRX 激活后才能使用。 请参考具体说明。

4.2 使用现有私钥创建身份

可以使用包方法 HexKeyToCredential() 导入现有私钥来实例化凭证。

例如,以下代码导入现有私钥并​​显示地址:

//Import "fmt"
//import "trontool/tron"
c,_ := tron.HexKeyToCredential("7889...023a")                   //导入已有私钥
fmt.Printf("address: %s\n",c. AddressBase58())                  //显示相应地址

4.3 波场地址的两种表示

在 Tron 区块链中,地址有两种表示形式:十六进制和 base58 表示形式。 例如,以下是同一地址的两种表示形式:

tron包中提供了相应的codec方法,可以实现两种格式之间的相互转换。 例如:

//import "fmt"
//import "trontool/tron"
a1,_  := tron.DecodeBase58Address("TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx");
fmt.Println(a1)                  //输出:412539EF4F3EB733C105A957EEBB20FD60AD8C9A43
a2,_ := := tron.EncodeHexAddress("412539EF4F3EB733C105A957EEBB20FD60AD8C9A43")
fmt.Println(a2)                  //输出:TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx

5. 使用 Tron API

使用 TronApi 实例访问 Tron 的各种节点 API。 TronApi聚合了各种Tron节点提供的API,例如tron全节点、solidity节点、事件服务节点的API。

5.1 TronApi 实例化

知道usdt地址能查到余额吗_知道ip地址能知道准确地址吗_知道名字和地址怎么查身份证号

在实例化 TronApi 时,可以为不同类型的 Tron 节点指定不同的连接 URL,例如:

//import "trontool/tron"
tronApi := tron.NewTronApi(
  "https://api.trongrid.io",       //全节点URL
  "https://api.trongrid.io",       //合约节点URL
  "https://api.trongrid.io",       //事件节点URL
)

如果你使用的是Tron官方提供的TronGrid节点,可以直接使用tron包提供的两种方法分别接入主链和shasta测试链:

例如,以下代码是等效的:

urlM := "https://api.trongrid.io"
tronApiM1 := tron.NewTronApi( urlM, urlM, urlM)
tronApiM2 := Tron.MainNetTronApi()                 //与上面等效
urlT := "https://api.shasta.trongrid.io"
tronApiT1 = tron.NewTronApi(urlT, urlT, urlT)
tronApiT2 =tron.TestNetTronApi()                   //与上面等效

5.2 接入多节点API

TronApi封装了波场官方各个节点提供的API的子集,提供了对访问波场区块链常用API的封装。

例如查询指定账户的TRX余额,可以使用Tron节点的getaccount接口,对应TronApi中的getAccount()方法:

//import "fmt"
//import "trontool/tron"
account,_ := tronApi.getAccount("TEgM5CPeqow...7vcBgVkD4tP")  //查询账户信息
fmt.Printf("balance: %d\n", account.Balance)                     //显示账户余额      

5.3 扩展 TronAPI

TronApi 依赖于 NodeCllient 来访问 Tron 的节点 API。 因此,如果您需要扩展TronApi以支持更多的Tron节点API,您可以参考TronApi已有的代码,结合TRON提供的节点API的技术资料来实现。

Tron区块链Go开发包官方下载: