时间:2023-07-09|浏览:185
以太坊SmartWallet.Net开发包适用于平台方高效完成对用户地址上的Ether/ERC20代币的归集工作,无需向用户地址注入Ether即可完成Ether/ERC20代币的归集。
以太坊SmartWallet.Net开发包的主要特点如下: - 真正的平台型非托管钱包,平台无需管理大量用户地址的密钥并且没有安全性的损失 - 无需向用户地址注入Ether即可完成以太币/ERC20代币的归集,流程更简单,效率更高 - 支持在单一交易内完成多个用户地址的归集
以太坊SmartWallet.Net运行于.NETFramework4.6.1环境下,主要类以及其关系如下图所示:
以太坊SmartWallet.Net开发包的主要代码文件清单如下: - 文件路径 - 说明 - EthTool/EthTool.sln - SmartWallet.NET方案文件 - EthTool/EthTool/EthTool.csproj - SmartWallet.NET项目文件 - EthTool/EthTool/Kit.cs - SmartWallet开发包的入口类 - EthTool/EthTool/Erc20.cs - ERC20合约封装类 - EthTool/EthTool/SmartWalletFactory.cs - SmartWalletFactory的封装类 - EthTool/Demo/Demo.csproj - SmartWallet.NET演示项目文件 - EthTool/Demo/App.config - SmartWallet.NET演示项目配置文件 - EthTool/Demo/DeployContractDemo.cs - 演示如何部署SmartWalletFactory合约 - EthTool/Demo/GenerateUserWalletDemo.cs - 演示如何为用户生成平台智能钱包 - EthTool/Demo/FundUserWalletDemo.cs - 模拟用户的充值操作 - EthTool/Demo/GetUserBalanceDemo.cs - 演示如何查询用户钱包的以太币/ERC20代币余额 - EthTool/Demo/SweepUserWalletDemo.cs - 演示如何归集用户钱包的以太币/ERC20代币余额 - contracts/AccessControl.sol - 访问控制合约 - contracts/ERC20.sol - ERC20标准接口定义合约 - contracts/HappyToken.sol - 用于演示的ERC20代币合约 - contracts/SmartWalletFactory.sol - 智能钱包工厂合约 - contracts/SmartWallet.sol - 智能钱包合约 - contracts/TransferHelper.sol - 交易辅助函数库 - bin/solc - solidity编译器 - bin/build-contracts - 合约编译构建脚本
2、使用示例代码
在使用示例代码之前,首先按照实际情况修改Demo/App.config中的以下配置: - nodeUrl:以太坊节点RPCURL,例如http://localhost:8545 - ownerPrivateKey:主控私钥,长度为64,例如4f3edf...3b1dc - oldWallet:归集目标钱包地址,例如0xFFcf....09f0
其他配置项无需修改,直接使用当前设置即可。
2.1部署工厂合约
SmartWallet开发包利用工厂合约SmartWalletFacotry管理用户地址的生成与归集。因此首先需要部署工厂合约。
示例代码Demo/DeployContractDemo.cs展示了如何部署SmartWalletFactory合约以及一个用于演示的ERC20代币合约。
运行结果如下:
2.2生成用户地址
示例代码Demo/GenerateUserAddress.cs展示了如何利用SmartWallet开发包为用户生成平台地址。
运行结果如下:
注:生成用户地址不需要任何手续费。
2.3用户充值
示例代码Demo/FundUserWalletDemo.cs模拟了用户向平台地址的充值行为。
运行结果如下:
2.4查看用户地址余额
示例代码Demo/GetUserBalanceDemo.cs展示了如何查询用户地址的Ether/ERC20代币余额。
运行结果如下:
2.5归集用户地址余额
示例代码Demo/SweepUserWallet.cs展示了如何利用归集用户地址上的以太币和ERC20代币到指定的地址。
运行结果如下:
3、Kit类的使用方法
3.1实例化Kit
Kit是SmartWallet开发包的入口类,实例化时需要传入以太坊节点URL和一个账号私钥。例如:
//usingEthTool; var nodeUrl = "http://localhost:8545";//节点地址 var ownerPrivateKey = "....";//主控私钥 var factoryAddr = "0xd13e...e0e3";//钱包工厂合约地址 var kit = new Kit(nodeUrl, ownerPrivateKey, factoryAddr);//实例化Kit
3.2生成用户地址
使用Kit的GetUserWallet方法为指定的用户生成平台地址,例如:
//usingEthTool; var uid = "u010203";//用户的平台ID var address = await kit.GetUserWallet(uid);//返回用户地址 Console.WriteLine("address => {address}");//显示用户地址
3.3批量归集用户地址余额
使用Kit的SweepUserWallets方法归集一组用户地址的以太币/ERC20代币余额。例如:
//usingEthTool; string[] uids = {"u010203", "u030405", "u050607"};//用户的平台ID string[] tokens = {"0xdac17f958d2ee523a2206206994597c13d831ec7"};//要归集的代币地址集合 string coldWallet = "0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1";//接收归集资产的冷钱包地址 var txid = await kit.SweepUserWallets(uids, tokens, coldWallet);//返回归集交易ID Console.WriteLine("sweeptxid => {txid}");//显示归集交易ID
3.4操作ERC20代币
使用Kit的Erc20方法获取指定地址的ERC20代币实例,调用标准的ERC20接口即可操作代币。例如查询USDT余额并转账:
//usingSystem.Numerics;//usingEthTool; var alice = "0xb8001c3e...e4a361ec1"; var token = kit.Erc20("0xdac17f958d2ee523a2206206994597c13d831ec7");//代币合约实例 var balance = await token.BalanceOf(alice);//查询代币余额 Console.WriteLine("balance => {balance}"); var txid = await token.Transfer(alice, new BigInteger(100000000));//代币转账 Console.WriteLine("transfertxid => {txid}");
以太坊SmartWallet.NET下载地址:http://sc.hubwiz.com/codebag/smartwallet-dotnet/