5

以太坊智能钱包.Net开发包

 3 years ago
source link: http://blog.hubwiz.com/2021/03/21/eth-smartwallet-dotnet/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

以太坊SmartWallet.Net开发包适用于平台方高效完成对用户地址上 的Ether/ERC20代币的归集工作,无需向用户地址注入Ether即可完成 Ether/ERC20代币的归集。

1、开发包概述

以太坊SmartWallet.Net开发包的主要特点如下:

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

以太坊SmartWallet.Net运行于.NET Framework 4.6.1环境下,主要类以及其关系如下图所示:

uml chart

以太坊SmartWallet.Net开发包的主要代码文件清单如下:

文件路径说明 EthTool/EthTool.slnSmartWallet.NET方案文件EthTool/EthTool/EthTool.csprojSmartWallet.NET项目文件EthTool/EthTool/Kit.csSmartWallet开发包的入口类EthTool/EthTool/Erc20.csERC20合约封装类EthTool/EthTool/SmartWalletFactory.csSmartWalletFactory的封装类EthTool/Demo/Demo.csprojSmartWallet.NET演示项目文件EthTool/Demo/App.configSmartWallet.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.solERC20标准接口定义合约contracts/HappyToken.sol用于演示的ERC20代币合约contracts/SmartWalletFactory.sol智能钱包工厂合约contracts/SmartWallet.sol智能钱包合约contracts/TransferHelper.sol交易辅助函数库bin/solcsolidity编译器bin/build-contracts合约编译构建脚本

2、使用示例代码

在使用示例代码之前,首先按照实际情况修改Demo/App.config中的以下配置:

  • nodeUrl:以太坊节点RPC URL,例如 http://localhost:8545
  • ownerPrivateKey:主控私钥,长度为64,例如 4f3edf...3b1d
  • coldWallet:归集目标钱包地址,例如 0xFFcf....09f0

其他配置项无需修改,直接使用当前设置即可。

2.1 部署工厂合约

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

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

运行结果如下:

deploy-contracts.png

2.2 生成用户地址

示例代码Demo/GenerateUserAddress.cs展示了如何利用SmartWallet开发包 为用户生成平台地址。

运行结果如下:

generate-user-wallet.png

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

2.3 用户充值

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

运行结果如下:

fund-user-wallet.png

2.4 查看用户地址余额

示例代码Demo/GetUserBalanceDemo.cs展示了如何查询用户地址的 Ether/ERC20代币余额。

运行结果如下:

get-user-balance.png

2.5 归集用户地址余额

示例代码Demo/SweepUserWallet.cs展示了如何利用归集用户地址 上的以太币和ERC20代币到指定的地址。

运行结果如下:

sweep-user-wallet.png

3、Kit类的使用方法

3.1 实例化Kit

Kit是SmartWallet开发包的入口类,实例化时需要 传入以太坊节点URL和一个账号私钥。例如:

//using EthTool;

var nodeUrl = "http://localhost:8545"; //节点地址
var ownerPrivateKey = "...."; //主控私钥
var factoryAddr = "0xd13e...e0e3"; //钱包工厂合约地址
var kit = new Kit(nodeUrl, ownerPrivateKey, factoryAddr); //实例化Kit

3.2 生成用户地址

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

//using EthTool;

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

3.3 批量归集用户地址余额

使用Kit的SweepUserWallets()方法归集一组用户地址的以太币/ERC20代币余额。例如:

//using EthTool;

string[] uids = {"u010203", "u030405", "u050607"}; // 用户的平台ID
string[] tokens = { "0xdac17f958d2ee523a2206206994597c13d831ec7" }; // 要归集的代币地址集合
string coldWallet = "0x90F8bf6A479f320ead074411a4B0e7944Ea8c9C1"; // 接收归集资产的冷钱包地址
var txid = await kit.SweepUserWallets(uids, tokens, coldWallet); // 返回归集交易ID
Console.WriteLine($"sweep txid => {txid}"); // 显示归集交易ID

3.4 操作ERC20代币

使用Kit的Erc20()方法获取指定地址的ERC20代币实例, 调用标准的ERC20接口即可操作代币。例如查询USDT余额并转账:

//using System.Numerics;
//using EthTool;

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($"transfer txid => {txid}");

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK