Go语言对接USDT

Wesley13
• 阅读 1795

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

1、开发包概述

TronTool.Go开发包主要包含以下特性:

  • 支持Tron区块链原生Trx交易
  • 支持Tron智能合约以及TRC20代币,例如USDT-TRC20等
  • 支持交易的离线签名,避免泄露私钥
  • 完善的Tron节点API封装,支持全节点、Solidity节点和事件节点提供的API
  • 支持使用自有节点或第三方节点,例如Tron官方提供的公共节点

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

Go语言对接USDT

TronTool.Go开发包的主要代码文件清单参见官网说明:http://sc.hubwiz.com/codebag/tron-go-lib/

2、使用示例代码

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

2.1 创建新地址

示例代码 addressdemo.go 演示如何创建一个新地址,或者导入已有的私钥。

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

go run demo/addressdemo.go

执行结果如下:

Go语言对接USDT

2.2 TRX转账及余额查询

示例代码 trxdemo.go 演示如何进行TRX转账并查询指定Tron账号的TRX余额。

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

go run demo/trxdemo.go

执行结果如下:

Go语言对接USDT

2.3 Trc20代币转账及余额查询

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

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

go run demo/trc20demo.go

执行结果如下:

Go语言对接USDT

2.4 TRC20代币事件查询

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

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

go run demo/trc20eventdemo.go

执行结果如下:

Go语言对接USDT

3、使用TronKit

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

  • Trx转账与余额查询
  • Trc20代币转账、授权、余额查询等

3.1 实例化TronKit

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

例如,下面的代码创建一个接入Tron主链的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    
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代币转账。

例如,下面的代码在指定地址间转账1315300个最小单位的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"

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区块链身份与地址表示

在开发包中,使用Credential表征Tron区块链中的一个用户身份,它与地址的区别在于, Credential包含了用户的私钥信息,可以用来签名交易,而地址则是可以公开的信息。

4.1 创建新账号身份

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

//import "fmt"
//import "trontool/tron"

c,_ := tron.NewCredential()                                      //创建新身份
fmt.Printf("private key: %s\n",c. PrivateKeyHex());              //显示私钥
fmt.Printf("public key: %s\n",c. PublicKeyHex());                //显示公钥
fmt.Printf("address: %s\n",c.AddressBase58());                   //显示地址      

需要指出的是,对于任何新创建的账号,Tron要求向其注入0.1 TRX进行激活后才可以使用。具体说明请参考How to create an account

4.2 使用已有的私钥创建身份

可以使用包方法HexKeyToCredential()导入已有的私钥来实例化Credential。

例如下面的代码导入已有私钥并显示地址:

//Import "fmt"
//import "trontool/tron"

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

4.3 Tron地址的两种表示

在Tron区块链中,地址有两种表示:16进制和base58表示,例如下面是同一个地址的两种表示:

  • base58:TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx
  • 16进制: 412539EF4F3EB733C105A957EEBB20FD60AD8C9A43

tron包中提供了相应的编解码方法,可以在两种格式之间进行转化。例如:

//import "fmt"
//import "trontool/tron"

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

a2,_ := := tron.EncodeHexAddress("412539EF4F3EB733C105A957EEBB20FD60AD8C9A43")
fmt.Println(a2)                  //输出:TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx

5、使用TronApi

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

5.1 TronApi的实例化

实例化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测试链:

  • MainNetTronApi():接入主链
  • TestNetTronApi():接入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封装了Tron官方多种节点提供的API的一个子集,提供了常用的访问Tron区块链的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开发包官方下载:http://sc.hubwiz.com/codebag/tron-go-lib/

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Easter79 Easter79
3年前
Tron区块链Java对接开发包【支持USDT
TronTool.Java开发包适用于为Java应用快速增加对Tron/USDTTRC20数字资产的支持能力,即支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。官方下载地址:http://sc.hubwiz.com/codebag/tronjavalib/(https://www.oschina.ne
Easter79 Easter79
3年前
Tron区块链PHP对接开发包【支持USDT
TronTool开发包适用于为PHP应用快速增加对Tron/USDTTRC20数字资产的支持能力,即支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。TronTool官方下载地址:http://sc.hubwiz.com/codebag/tronphplib/(https://www.oschina.n
Wesley13 Wesley13
3年前
Uniswap协议对接PHP开发包【Uniswap.php】
Uniswap.php开发包适用于为PHP应用快速增加对Uniswap协议的支持能力。即支持使用自有部署以太坊区块链节点的应用场景,也支持使用第三方节点的轻量级部署场景。官方下载地址:Uniswap.php对接开发包(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fsc.hubw
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Stella981 Stella981
3年前
BnbTool
BnbTool开发包适用于为PHP应用快速增加对币安链/BinanceChain数字资产的支持能力,即支持使用自有部署区块链节点的应用场景,也支持基于第三方节点开放API服务的轻量级部署场景。官方下载地址:http://sc.hubwiz.com/codebag/bnbtool/(https://www.oschina.ne
Stella981 Stella981
3年前
PHP应用对接Justswap专用开发包【JustSwap.PHP】
JustSwap.php开发包适用于为PHP应用快速增加对JustSwap协议的支持能力。即支持使用自有部署Tron区块链节点的应用场景,也支持使用第三方节点的轻量级部署场景,官方下载地址:JustSwap对接PHP开发包(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fsc.h
Stella981 Stella981
3年前
Go编程语言前景怎么样?参加培训好就业吗
Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C代码的速度,而且更加安全、支持并行进程。不仅可以开发web,可以开发底层,目前知乎就是用golang开发。区块链首选语言就是go,以太坊,超级账本都是基于go语言,还有go语言版本的btcd.!(https://oscimg.oschina.net/oscne
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究