cover

Tron协议.NET开发包

汇智网 / hubwiz.com

为.Net/C#应用快速增加Tron/USDT-TRC20数字资产支持能力,同时支持使用自己的节点或第三方服务API。

1、开发包概述

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

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

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

TronTool.Net开发包当前版本1.0.0,主要类/接口及关系如下图所示:

trontool arch

TronTool.Net开发包的主要代码文件清单如下:

代码文件说明
TronTool.slnTronTool方案配置文件
TronTool/TronTool库项目代码目录
TronTool/TronTool.csprojTronTool项目配置文件
TronTool/Address.csTron地址表示类
TronTool/Contract.csTron智能合约封装类
TronTool/Credential.csTron区块链身份标识类,用于交易签名
TronTool/NodeClient.csTron节点协议封装类
TronTool/Trc20.csTron TRC20智能合约封装类
TronTool/TronApi.csTron多节点客户端
TronTool/TronKit.csTron开发包入口类
TronTool/Api/Tron API数据类型定义目录
Demo/演示项目代码目录
Demo/Demo.csproj演示项目配置文件
Demo/Program.cs演示代码入口文件
Demo/NewAddressDemo.cs演示代码,创建新的Tron区块链地址
Demo/TrxDemo.cs演示代码,Trx转账交易及余额查询
Demo/Trc20Demo.cs演示代码,Trc20代币转账、余额查询及事件监听

2、使用示例代码

2.1 创建新地址

Demo/NewAddressDemo.cs演示了如何使用TronTool.Net创建新的Tron地址, 以及如何导入已有的私钥来重算地址。

执行结果如下:

2.2 Trx转账及余额查询

Demo/TrxDemo.cs演示了如何使用TronTool.Net查询TRX余额并进行TRX转账。

执行结果如下:

2.3 Trc20代币转账、余额查询及事件监听

Demo/Trc20Demo.cs演示了如何使用TronTool.Net进行代币转账、余额查询以及 事件监听等操作。

执行结果如下:

2、使用TronKit

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

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

2.1 实例化TronKit

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

例如,下面的代码创建一个接入Tron主链的TronKit实例,并使用 指定的私钥进行交易签名:

//using TronTool;

TronKit kit = new TronKit(
  TronApi.MainNet("25f66928-0b70-48cd-9ac6-da6f8247c663"), //接入主链,使用trongrid时需要APIKEY
  Credential.FromPrivateKey("87c12d....d435")              //使用指定私钥
);

2.2 Trx转账及余额查询

使用TronKit的SendTrx()方法进行Trx转账,例如发送1000 TRX:

//using TronTool;
//using TronTool.Api;

String to = "TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx";             //转账目标地址
long amount = 1000000000;                                     //转账金额,单位:SUN
TransactionResult ret = kit.SendTrx(to,amount);               //提交Trx转账交易
Console.WriteLine($"tx id: {ret.txId}");                      //显示交易ID    
Console.WriteLine($"tx state: {ret.state}");                  //显示交易结果

注意:需要将金额单位转换为SUN,1 TRX = 1000000 SUN。

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

String addr = "TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx";            //要查询的Tron地址
long balance = kit.GetTrxBlanace(addr);                        //查询Trx余额,单位:SUN
Console.WriteLine($"balance: {balane}");                       //显示余额

2.3 TRC20代币转账

使用TronKit对象的Trc20()方法获取指定TRC20代币合约实例,然后调用合约 的Transfer()方法进行TRC20代币转账。例如,下面的代码 指定地址间转账1315300个最小单位的USDT-TRC20代币,即 1.3153 USDT:

//using TronTool;
//using TronTool.Api;

String to = "TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx";                 //转账目标地址
BigInteger value = new BigInteger(1315300);                       //转账Trc20代币数量
String contractAddress = "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t";    //USDT-TRC20代币合约的部署地址
Trc20 usdt = kit.Trc20(contractAddress);                          //创建Trc20代币合约实例
TransactionResult ret = usdt.Transfer(to,value);                  //转账Trc20代币
Console.WriteLine($"tx id: {ret.txId}");                          //显示转账交易ID
Console.WriteLine($"tx state: {ret.state}");                      //显示转账交易结果

2.4 TRC20代币余额查询

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

//using TronTool;
//using TronTool.Api;

Trc20 usdt = kit.Trc20("TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t");        //创建USDT-TRC20代币合约实例
BigInteger balance = usdt.BalanceOf("TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx");  //查询Trc20代币余额
Console.WriteLine($"balance: {balance}");                            //显示代币余额

2.5 TRC20代币事件查询

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

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

//using TronTool;

Trc20 usdt = kit.Trc20("TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t");        //创建Trc20代币合约实例
long since = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() - 10000; //计算检查时间点
ContractEvent[] events = usdt.events(since);                         //提取合约事件
foreach(ContractEvent e in events){
  Console.WriteLine($"event name: {e.eventName}");                   //显示事件名称
  Console.WriteLine($"block height: {e.blockNumber}");               //显示事件触发的区块高度
}

3、Tron区块链身份与地址表示

在TronTool.Net开发包中,使用Credential表征Tron区块链中的一个用户身份, 使用Address表征Tron区块链中的一个地址。两者的区别在于Credential包含了用户 的私钥信息,可以用来签名交易,因此需要保护,而Address则是可以 公开的信息。

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

//using TronTool;

Credential c = Credential.Create();                           //创建新账号
Console.WriteLine($"private key: {c.GetPrivateKey()}");       //显示私钥
Console.WriteLine($"public key: {c.GetPublicKey()}");         //显示公钥
Console.WriteLine($"address: {c.GetAddress()}");              //显示地址

可以使用静态方法FromPrivateKey()导入已有的私钥来实例化Credential。 例如下面的代码导入已有私钥并显示地址:

//using TronTool;

Credential c = Credential.FromPrivateKey("7889...023a");      //导入已有私钥
Console.WriteLine($"address: {c.GetAddress()}");              //显示相应地址

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

  • base58:TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx
  • 16进制: 412539EF4F3EB733C105A957EEBB20FD60AD8C9A43

Address类包含了相应的编解码逻辑,可以方面的利用不同形式 的地址实例化Address。例如:

//using TronTool;

Address a1 = Address.FromBase58("TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx");
Console.WriteLine(a1.hex);       //输出:412539EF4F3EB733C105A957EEBB20FD60AD8C9A43

Address a2 = Address.FromHex("412539EF4F3EB733C105A957EEBB20FD60AD8C9A43");
Console.WriteLine(a2.base58);    //输出:TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx

有时我们只需要简单的在base58和16进制之间转换地址,这时并 不需要中间的Address对象,可以直接使用静态方法Encode()和Decode()。 例如:

//using TronTool;

String a1 = Address.Decode("TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx");
Console.WriteLine(a1);         //输出:412539EF4F3EB733C105A957EEBB20FD60AD8C9A43

String a2 = Address.Encode("412539EF4F3EB733C105A957EEBB20FD60AD8C9A43");
Console.WriteLine(a2);         //输出:TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx

4、使用TronApi访问Tron节点API

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

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

//using TronTool;

TronApi api = new TronApi(
  "https://api.shasta.trongrid.io",       //全节点URL
  "https://api.shasta.trongrid.io",       //合约节点URL
  "https://api.shasta.trongrid.io"        //事件节点URL
);

当上述三个节点的URL相同时,可以简写为:

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

如果用的是Tron官方提供的TronGrid节点,那么可以直接使用TronApi 提供的两个静态函数MainNet()TestNet(),分别接入trongrid提供的主链节点 和shasta测试链节点。

例如:

TronApi api = TronApi.MainNet(                    //接入主链
  "25f66928-0b70-48cd-9ac6-da6f8247c663"          //TronGrid APIKEY
);                

TronApi api = TronApi.TestNet();                 //接入测试链

注意:TronGrid要求提供APIKEY才能接入主链,可以到这里 注册后免费申请TronGrid APIKEY。

TronApi封装了Tron官方多种节点提供的API的一个子集,可以用于应用 与Tron区块链的交互。例如查询指定账户的TRX余额,可以利用Tron节点 的getaccount接口,这对应于TronApi中的GetAccount()方法:

//using TronTool;

Account account = api.GetAccount("TEgM5CPeqow...7vcBgVkD4tP");  //查询账户信息
Console.WriteLine($"balance: {account.balance}");               //显示账户余额

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

声 明

本站所提供软件包仅用于学习和研究,请依法合规使用。

本站所提供软件包均提供完整源码,使用前请认真阅读源代码和文档以确保充分理解软件包的设计与功能实现,本站不承担 因不当使用本站所提供软件包而造成的任何法律风险或财产损失责任。

¥4000.00
查看授权信息
  • 付费成功自动开通下载
  • 三个月内代码免费升级
  • 专业人员在线技术支持
  • 支持按需定制(另付费)
下载代码包
版本发布日期地址
1.0.1 2021-3-21
下载最新版
QQ咨询
2860991437
9+