用智能地址代替传统的密钥对地址,无需注入TRX即可进行TRC20代币的归集
TronSmartWallet.Net 开发包适用于采用.Net/C#开发的平台方高效完成对用户或订单地址上 的Trx/TRC20代币的归集工作,无需向用户或订单地址注入Trx即可完成 Trx/TRC20代币的归集。
TronSmartWallet.Net开发包的主要特点如下:
TronSmartWallet.Net运行于.Net 4.6.1环境下,主要类以及其关系如下图所示:
TronSmartWallet.Net的主要代码文件清单如下:
代码文件 | 说明 |
---|---|
TronTool.sln | TronSmartWallet.Net方案配置文件 |
TronTool/ | TronSmartWallet.Net库项目代码目录 |
TronTool/TronTool.csproj | TronSmartWallet.Net项目配置文件 |
TronTool/Address.cs | Tron地址表示类 |
TronTool/Contract.cs | Tron智能合约封装类 |
TronTool/Credential.cs | Tron区块链身份标识类,用于交易签名 |
TronTool/NodeClient.cs | Tron节点协议封装类 |
TronTool/Trc20.cs | Tron TRC20智能合约封装类 |
TronTool/SmartWalletFactory.cs | Tron多节点客户端 |
TronTool/TronApi.cs | Tron多节点客户端 |
TronTool/TronKit.cs | Tron开发包入口类 |
TronTool/Api/ | Tron API数据类型定义目录 |
contracts/TRC20.sol | TRC20标准接口 |
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代币余额 |
在使用示例代码前,请先根据自己情况修改Demo/App.config
中的配置:
TronSmartWallet.Net开发包利用工厂合约SmartWalletFacotry.Net管理用户 地址的生成与归集。因此首先需要部署工厂合约。
示例代码Demo/DeployContractDemo.cs
展示了如何部署
SmartWalletFactory合约以及一个用于演示的TRC20代币合约。
运行结果如下:
合约部署后将在contracts/build目录生成对应合约的 .addr文件,该文件记录了 合约的部署地址,在其他演示代码中将使用该文件记录的信息。
示例代码Demo/GenerateUserWalletDemo.cs
展示了如何利用TronSmartWallet.Net开发包
为用户或订单生成平台地址。
运行结果如下:
注:生成用户地址不需要任何手续费。
示例代码Demo/FundUserWalletDemo.cs
利用TronSmartWallet.Net开发包模拟了用户向平台地址的充值行为。
运行结果如下:
示例代码Demo/GetUserBalance.php
展示了如何利用TronSmartWallete.Net开发包查询用户地址的
Trx/TRC20代币余额。
运行结果如下:
示例代码Demo/SweepUserWallet.php
展示了如何利用归集用户地址
上的Trx和TRC20代币到指定的冷(热)钱包地址。
运行结果如下:
TronSmartWallet.Net开发包使用Credential
对象来表示一个特定的Tron身份凭证,
该对象包含了账号的密钥和地址信息。
使用静态方法create()
创建一个新的以太坊账户,例如:
//using TronTool;
Credential credential = Credential.Create(); // 创建一个新的账号
也可以使用静态方法FromPrivateKey()
导入已有的私钥来实例化Credential对象,例如:
var credential = Credential.FromPrivateKey(
'4f3edf983ac6......b113bce9c46' // 要导入的私钥
);
Credential类提供了如下方法获取当前账户的私钥、公钥和地址:
例如,下面的代码创建一个新的Tron身份凭证并显示其地址:
var credential = Credential.Create();
Console.WriteLine($"address:{credential.GetAddress().Base58()}"); // 显示账号地址
在Tron区块链中,地址有两种表示:16进制和base58表示,例如 下面是同一个地址的两种表示:
Address
类包含了相应的编解码逻辑,可以方便地进行地址格式转换。
例如:
//using TronTool;
String a1 = Address.Decode('TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx'); //解码Base58地址
Console.WriteLine(a1); //输出:412539EF4F3EB733C105A957EEBB20FD60AD8C9A43
String a2 = Address.Encode('412539EF4F3EB733C105A957EEBB20FD60AD8C9A43'); //编码16进制地址
Console.WriteLine(a2); //输出:TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx
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(); //与上面等效
TronKit是TronSmartWallet.Net开发包的入口类,实例化时需要 传入TronApi对象、Credential对象和工厂合约地址。例如:
//using TronTool;
TronKit kit = new TronKit(
TronApi.MainNet(), // 接入Tron主网
Credential.FromPrivateKey('......'), // 以太坊账号对象
'TGuQLmDSmYEfFcQaKBqEJWNGtD4RontQBm' // 工厂合约地址
);
使用TronKit的GetUserWallet()
方法为指定的用户生成
平台地址,例如:
//using TronTool;
String userId = "u010203"; // 用户的平台ID
String userWallet = kit.GetUserWallet(userId); // 返回用户地址
Console.WriteLine($"address => {userWallet}"); // 显示用户地址
使用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}"); // 显示交易收据
使用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}"); //显示余额
使用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
本站所提供软件包仅用于学习和研究,请依法合规使用。
本站所提供软件包均提供完整源码,使用前请认真阅读源代码和文档以确保充分理解软件包的设计与功能实现,本站不承担 因不当使用本站所提供软件包而造成的任何法律风险或财产损失责任。