cover

Tron智能钱包.NET开发包

汇智网 / hubwiz.com

用智能钱包代替传统的密钥对钱包,无需注入TRX即可进行TRC20代币的归集

1、开发包概述

TronSmartWallet.Net 开发包适用于采用.Net/C#开发的平台方高效完成对用户或订单地址上 的Trx/TRC20代币的归集工作,无需向用户或订单地址注入Trx即可完成 Trx/TRC20代币的归集。

TronSmartWallet.Net开发包的主要特点如下:

  • 真正的平台型非托管钱包,平台无需管理大量用户地址的密钥并且没有安全性的损失
  • 无需向用户地址注入Trx即可完成Trx/TRC20代币的归集,流程更简单,效率更高
  • 支持在单一交易内完成多个用户地址的归集

TronSmartWallet.Net运行于.Net 4.6.1环境下,主要类以及其关系如下图所示:

uml chart

TronSmartWallet.Net的主要代码文件清单如下:

代码文件说明
TronTool.slnTronSmartWallet.Net方案配置文件
TronTool/TronSmartWallet.Net库项目代码目录
TronTool/TronTool.csprojTronSmartWallet.Net项目配置文件
TronTool/Address.csTron地址表示类
TronTool/Contract.csTron智能合约封装类
TronTool/Credential.csTron区块链身份标识类,用于交易签名
TronTool/NodeClient.csTron节点协议封装类
TronTool/Trc20.csTron TRC20智能合约封装类
TronTool/SmartWalletFactory.csTron多节点客户端
TronTool/TronApi.csTron多节点客户端
TronTool/TronKit.csTron开发包入口类
TronTool/Api/Tron API数据类型定义目录
contracts/TRC20.solTRC20标准接口
contracts/SmartWalletFactory.sol智能钱包工厂合约
contracts/SmartWallet.sol智能钱包合约
contracts/HappyToken.sol用于演示的TRC20代币合约
bin/build-contract合约编译构建脚本
Demo/演示项目代码目录
Demo/Demo.csproj演示项目配置文件
Demo/Program.cs演示代码入口文件
Demo/NewAddressDemo.cs演示代码,创建新的Tron区块链地址
Demo/TrxDemo.cs演示代码,Trx转账交易及余额查询
Demo/Trc20Demo.cs演示代码,Trc20代币转账、余额查询及事件监听
Demo/DeployContractDemo.cs演示如何部署SmartWalletFactory合约
Demo/GenerateUserWalletDemo.cs演示如何为用户生成平台智能钱包
Demo/FundUserWalletDemo.cs模拟用户的充值操作
Demo/GetUserBalanceDemo.cs演示如何查询用户钱包的Trx/TRC20代币余额
Demo/SweepUserWallet.cs演示如何归集用户钱包的Trx/TRC20代币余额

2、使用示例代码

在使用示例代码前,请先根据自己情况修改Demo/App.config中的配置:

  • network: 接入的Tron网络,可选:TestNet 或 MainNet,分别表示测试链和主链
  • ownerPrivateKey:交易主账号的私钥,用于部署合约、执行归集等操作
  • coldWallet:归集目标冷钱包地址

2.1 部署工厂合约

TronSmartWallet.Net开发包利用工厂合约SmartWalletFacotry.Net管理用户 地址的生成与归集。因此首先需要部署工厂合约。

示例代码Demo/DeployContractDemo.cs展示了如何部署 SmartWalletFactory合约以及一个用于演示的TRC20代币合约。

运行结果如下:

合约部署后将在contracts/build目录生成对应合约的 .addr文件,该文件记录了 合约的部署地址,在其他演示代码中将使用该文件记录的信息。

2.2 生成用户地址

示例代码Demo/GenerateUserWalletDemo.cs展示了如何利用TronSmartWallet.Net开发包 为用户或订单生成平台地址。

运行结果如下:

注:生成用户地址不需要任何手续费。

2.3 用户充值

示例代码Demo/FundUserWalletDemo.cs利用TronSmartWallet.Net开发包模拟了用户向平台地址的充值行为。

运行结果如下:

2.4 查看用户地址余额

示例代码Demo/GetUserBalance.php展示了如何利用TronSmartWallete.Net开发包查询用户地址的 Trx/TRC20代币余额。

运行结果如下:

2.5 归集用户地址余额

示例代码Demo/SweepUserWallet.php展示了如何利用归集用户地址 上的Trx和TRC20代币到指定的冷(热)钱包地址。

运行结果如下:

3、Tron身份与地址

TronSmartWallet.Net开发包使用Credential对象来表示一个特定的Tron身份凭证, 该对象包含了账号的密钥和地址信息。

3.1 实例化Credential

使用静态方法create()创建一个新的以太坊账户,例如:

//using TronTool;

Credential credential = Credential.Create();                          // 创建一个新的账号

也可以使用静态方法FromPrivateKey()导入已有的私钥来实例化Credential对象,例如:

var credential = Credential.FromPrivateKey(
  '4f3edf983ac6......b113bce9c46'                       // 要导入的私钥
);

3.2 查看账户的密钥和地址

Credential类提供了如下方法获取当前账户的私钥、公钥和地址:

  • GetPrivateKey() :返回私钥16进制字符串
  • GetPublicKey() :返回公钥16进制字符串
  • GetAddress() :返回Address对象

例如,下面的代码创建一个新的Tron身份凭证并显示其地址:

var credential = Credential.Create();
Console.WriteLine($"address:{credential.GetAddress().Base58()}"); // 显示账号地址

3.3 Tron地址转换

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

  • Base58 :TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx
  • 16进制 :412539EF4F3EB733C105A957EEBB20FD60AD8C9A43

Address类包含了相应的编解码逻辑,可以方便地进行地址格式转换。 例如:

//using TronTool;

String a1 = Address.Decode('TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx');         //解码Base58地址
Console.WriteLine(a1);          //输出:412539EF4F3EB733C105A957EEBB20FD60AD8C9A43
String a2 = Address.Encode('412539EF4F3EB733C105A957EEBB20FD60AD8C9A43'); //编码16进制地址
Console.WriteLine(a2);          //输出:TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx

4、使用TronApi

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

实例化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相同时,可以简写为:

var api = new TronApi('https://api.trongrid.io');

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

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

var api = new TronApi('https://api.trongrid.io');
var api = TronApi.MainNet();                       //与上面等效

var api = new TronApi('https://api.shasta.trongrid.io');
var api = TronApi.TestNet();                       //与上面等效

5、TronKit类的使用方法

5.1 实例化TronKit

TronKit是TronSmartWallet.Net开发包的入口类,实例化时需要 传入TronApi对象、Credential对象和工厂合约地址。例如:

//using TronTool;

TronKit kit = new TronKit(
  TronApi.MainNet(),                                             // 接入Tron主网
  Credential.FromPrivateKey('......'),                           // 以太坊账号对象
  'TGuQLmDSmYEfFcQaKBqEJWNGtD4RontQBm'                           // 工厂合约地址
);

5.2 生成用户地址

使用TronKit的GetUserWallet()方法为指定的用户生成 平台地址,例如:

//using TronTool;

String userId = "u010203";                                      // 用户的平台ID
String userWallet = kit.GetUserWallet(userId);                  // 返回用户地址
Console.WriteLine($"address => {userWallet}");                  // 显示用户地址

5.3 批量归集用户地址余额

使用TronKit的SweepUserWallets()方法归集一组用户地址 的Trx/TRC20代币余额。例如:

//using TronTool;

String[] uids = {"u010203", "u030405", "u050607"};           // 用户ID数组  
String[] tokens = { "TDioVpvyMifJFUEqPH7xDm5QCMuSaiWXcD" };  // 代币地址数组
var ret = kit.SweepUserWallets( 
  uids, tokens,
  'TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx'                       // 接收地址  
);           
Console.WriteLine($"tx id => {ret.txId}");                   // 显示归集交易ID

var info = kit.WaitForTransactionInfo(ret.txId);                // 等待交易确认
Console.WriteLine($"tx receipt => {info.receipt}");          // 显示交易收据

5.4 Trx转账及余额查询

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

//using TronTool;

String to = "TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx";             //转账目标地址
long amount = 1000000000;                                     //转账金额,单位:SUN
var 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}");                       //显示余额

5.5 操作TRC20代币

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

//using TronTool;

String to = "TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx";                 //转账目标地址
BigInteger value = new BigInteger(1315300);                       //转账Trc20代币数量
String contractAddress = "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t";    //USDT-TRC20代币合约的部署地址
Trc20 usdt = kit.Trc20(contractAddress);                          //创建Trc20代币合约实例
var ret = usdt.Transfer(to,value);                                //转账Trc20代币
Console.WriteLine($"tx id: {ret.txId}");                          //显示转账交易ID
¥7500.00
查看授权信息
  • 付费成功自动开通下载
  • 三个月内代码免费升级
  • 专业人员在线技术支持
  • 支持按需定制(另付费)
下载代码包
版本发布日期地址
1.0.0 2021-2-22
下载最新版
QQ咨询
2860991437
9+