TronTool.Net开发包适用于为.Net/C#应用快速增加对Tron/USDT-TRC20数字资产的支持能力,即支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。官方下载地址:TronTool.NET。
1、开发包概述 TronTool.Net开发包主要包含以下特性:
- 支持Tron区块链原生Trx交易
- 支持Tron智能合约以及TRC20代币,例如USDT-TRC20等
- 支持交易的离线签名,避免泄露私钥
- 完善的Tron节点API封装,支持全节点、Solidity节点和事件节点提供的API
- 支持使用自有节点或第三方节点,例如Tron官方提供的公共节点
文章图片
TronTool.Net开发包的主要代码文件清单如下:
代码文件 | 说明 |
---|---|
TronTool.sln | TronTool方案配置文件 |
TronTool/ | TronTool库项目代码目录 |
TronTool/TronTool.csproj | TronTool项目配置文件 |
TronTool/Address.cs | Tron地址表示类 |
TronTool/Contract.cs | Tron智能合约封装类 |
TronTool/Credential.cs | Tron区块链身份标识类,用于交易签名 |
TronTool/NodeClient.cs | Tron节点协议封装类 |
TronTool/Trc20.cs | Tron TRC20智能合约封装类 |
TronTool/TronApi.cs | Tron多节点客户端 |
TronTool/TronKit.cs | Tron开发包入口类 |
TronTool/Api/ | Tron API数据类型定义目录 |
Demo/ | 演示项目代码目录 |
Demo/Demo.csproj | 演示项目配置文件 |
Demo/Program.cs | 演示代码入口文件 |
Demo/NewAddressDemo.cs | 演示代码,创建新的Tron区块链地址 |
Demo/TrxDemo.cs | 演示代码,Trx转账交易及余额查询 |
Demo/Trc20Demo.cs | 演示代码,Trc20代币转账、余额查询及事件监听 |
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代币转账、授权、余额查询等
TronKit实例化需要传入
TronApi
对象和Credential
对象,这两个参数分别封装了Tron节点提供的API,以及进行交易签名的用户身份信息。例如,下面的代码创建一个接入Tron主链的TronKit实例,并使用指定的私钥进行交易签名:
//using TronTool;
TronKit kit = new TronKit(
TronApi.MainNet(),//接入主链
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 = https://www.it610.com/article/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
//using TronTool;
Address a1 = Address.FromBase58("TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx");
Console.WriteLine(a1.hex);
//输出:412539EF4F3EB733C105A957EEBB20FD60AD8C9A43Address a2 = Address.FromHex("412539EF4F3EB733C105A957EEBB20FD60AD8C9A43");
Console.WriteLine(a2.base58);
//输出:TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx
有时我们只需要简单的在base58和16进制之间转换地址,这时并
不需要中间的Address对象,可以直接使用静态方法Encode()和Decode()。
例如:
//using TronTool;
String a1 = Address.Decode("TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx");
Console.WriteLine(a1);
//输出:412539EF4F3EB733C105A957EEBB20FD60AD8C9A43String 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.trongrid.io",//全节点URL
"https://api.trongrid.io",//合约节点URL
"https://api.trongrid.io"//事件节点URL
);
当上述三个节点的URL相同时,可以简写为:
TronAPi api = new TronApi("https://api.trongrid.io");
如果用的是Tron官方提供的TronGrid节点,那么可以直接使用TronApi提供的两个静态函数
MainNet()
和TestNet()
,分别接入主链和shasta测试链。例如,下面的代码是等效的:
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官方多种节点提供的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的 技术资料进行实现。
【Tron/USDT-TRC20 .NET/C#开发包【TronTool.NET】】TronTool.NET下载地址:http://sc.hubwiz.com/codebag/tron-dotnet-lib/
推荐阅读
- 推动NFT走出监管困境,BSN推出支持NFT基础设施网络
- 腾讯|SaaS的收入模型有哪些(终于有人讲明白了)
- 就业方向上什么才是最重要的(--- 来自程序猿的迷茫。(C++?Java?or算法?))
- 区块链中加密货币的含义
- 波场万倍潜力币HYL23号21:09分 正式上线JustSwap
- 《瀚兰房地产开发区块链应用及案例分享》BSN培训精华回顾
- 对联盟链而言,跨链协议为什么重要()
- 区块链能够应用在哪些行业
- BSN区块链服务网络中密钥托管模式和公钥上传模式有啥区别()
- 币圈人物传|币圈大佬今何在 唯有一诺正当时