TronSmartWallet 开发包适用于平台方高效完成对用户或订单地址上 的Trx/TRC20代币的归集工作,无需向用户或订单地址注入Trx即可完成 Trx/TRC20代币的归集。官方下载地址:TronSmartWallet PHP开发包。
1、开发包概述
TronSmartWallet开发包的主要特点如下:
- 真正的平台型非托管钱包,平台无需管理大量用户地址的密钥并且没有安全性的损失
- 无需向用户地址注入Trx即可完成Trx/TRC20代币的归集,流程更简单,效率更高
- 支持在单一交易内完成多个用户地址的归集
TronSmartWallet运行于PHP 7.1+环境下,主要类以及其关系如下图所示:
TronSmartWallet的主要代码文件清单如下:
文件路径 | 说明 |
---|---|
tronsmartwallet/src/SmartWalletKit.php | TronSmartWallet开发包入口类 |
tronsmartwallet/src/Contract.php | Tron智能合约封装类 |
tronsmartwallet/src/TronApi.php | Tron多节点API访问接口 |
tronsmartwallet/src/NodeClient.php | Tron节点客户端 |
tronsmartwallet/src/Credential.php | Tron身份凭证类 |
tronsmartwallet/src/Address.php | Tron地址编解码类 |
contracts/TRC20.sol | TRC20标准接口 |
contracts/SmartWalletFactory.sol | 智能钱包工厂合约 |
contracts/SmartWallet.sol | 智能钱包合约 |
contracts/HappyToken.sol | 用于演示的TRC20代币合约 |
demo/deploy-contracts.php | 演示如何部署SmartWalletFactory合约 |
demo/generate-user-wallet.php | 演示如何为用户生成平台智能钱包 |
demo/fund-user-wallet.php | 模拟用户的充值操作 |
demo/get-user-balance.php | 演示如何查询用户钱包的Trx/TRC20代币余额 |
demo/sweep-user-wallet.php | 演示如何归集用户钱包的Trx/TRC20代币余额 |
bin/build-contract | 合约编译构建脚本 |
vendor/ | 第三方依赖包 |
composer.json | composer配置文件 |
2、使用示例代码
2.1 部署工厂合约
TronSmartWallet开发包利用工厂合约SmartWalletFacotry管理用户 地址的生成与归集。因此首先需要部署工厂合约。
示例代码demo/deploy-contracts.php
展示了如何部署
SmartWalletFactory合约以及一个用于演示的TRC20代币合约。
执行如下命令运行示例代码:
1 | php deploy-contracts.php |
运行结果如下:
合约部署后将在当前目录生成 addresses.json文件,该文件记录了 SmartWalletFactory合约与HappyToken合约的部署地址,在其他演示代码 中将使用该文件记录的信息。
2.2 生成用户地址
示例代码demo/generate-user-address.php
展示了如何利用TronSmartWallet开发包
为用户或订单生成平台地址。
执行如下命令运行示例代码,为三个不同的ID分别生成对应的地址:
1 | php generate-user-wallet.php |
运行结果如下:
注:生成用户地址不需要任何手续费。
2.3 用户充值
示例代码demo/fund-user-address.php
模拟了用户向平台地址的充值行为。
执行如下命令运行示例代码,向三个指定ID对应的地址分别转入Trx和token:
1 | php fund-user-wallet.php |
运行结果如下:
2.4 查看用户地址余额
示例代码demo/get-user-balance.php
展示了如何查询用户地址的
Trx/TRC20代币余额。
执行如下命令运行示例代码,显示三个对应于指定ID的地址的余额信息:
1 | php get-user-balance.php |
运行结果如下:
2.5 归集用户地址余额
示例代码demo/sweep-user-address.php
展示了如何利用归集用户地址
上的Trx和TRC20代币到指定的冷(热)钱包地址。
执行如下命令运行示例代码:
1 | php sweep-user-wallet.php |
运行结果如下:
3、Tron身份与地址
TronSmartWallet开发包使用Credential
对象来表示一个特定的Tron身份凭证,
该对象包含了账号的密钥和地址信息。
3.1 实例化Credential
使用静态方法create()
创建一个新的以太坊账户,例如:
1 | //use TronSmartWallet\Credential; |
也可以使用静态方法fromPrivateKey()
导入已有的私钥来实例化Credential对象,例如:
1 | $credential = Credential::fromPrivateKey( |
3.2 查看账户的密钥和地址
Credential类提供了如下方法获取当前账户的私钥、公钥和地址:
- privateKey() :返回私钥16进制字符串
- publicKey() :返回公钥16进制字符串
- address() :返回Address对象
例如,下面的代码创建一个新的Tron身份凭证并显示其地址:
1 | $credential = Credential::new(); |
3.3 Tron地址转换
在Tron区块链中,地址有两种表示:16进制和base58表示,例如 下面是同一个地址的两种表示:
- Base58 :TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx
- 16进制 :412539EF4F3EB733C105A957EEBB20FD60AD8C9A43
Address
类包含了相应的编解码逻辑,可以方便地进行地址格式转换。
例如:
1 | //use TronSmartWallet\Address; |
4、使用TronApi
TronApi 聚合了多种Tron节点提供的API,例如tron全节点、solidity节点和事件服务 节点的API,TronSmartWallet利用TronApi访问Tron区块链。
实例化TronApi时,可以分别为不同类型的Tron节点指定不同的连接URL, 例如:
1 | //use TronSmartWallet\TronApi; |
当上述三个节点的URL相同时,可以简写为:
1 | $api = new TronApi('https://api.trongrid.io'); |
如果用的是Tron官方提供的TronGrid节点,那么可以直接使用TronApi 提供的两个静态函数mainNet()和testNet(),分别接入主链和shasta测试链。
例如,下面的代码是等效的:
1 | $api = new TronApi('https://api.trongrid.io'); |
5、SmartWalletKit类的使用方法
3.1 实例化SmartWalletKit
SmartWalletKit是TronSmartWallet开发包的入口类,实例化时需要 传入TronApi对象、Credential对象和工厂合约地址。例如:
1 | //use TronSmartWallet\TronApi; |
3.2 生成用户地址
使用SmartWalletKit的getUserWallet()
方法为指定的用户生成
平台地址,例如:
1 | $userId = 'u010203'; // 用户的平台ID |
3.3 归集单个用户地址余额
使用SmartWalletKit的sweepUserWallet()
方法归集指定用户地址
的Trx/TRC20代币余额。例如:
1 | $userId = 'u010203'; // 用户的平台ID |
3.4 批量归集用户地址余额
使用SmartWalletKit的sweepUserWallets()
方法归集一组用户地址
的Trx/TRC20代币余额。例如:
1 | $txid = $kit->sweepUserWallets( |
3.5 操作TRC20代币
使用SmartWalletKit的trc20()
方法获取指定地址的TRC20代币实例,
调用标准的TRC20接口即可操作代币。例如查询USDT余额并转账:
1 | $somebody = 'TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx'; // 接收账号 |
hex($numstr)
是SmartWalletKit提供的辅助方法,可以方便的将10进制字符串表示
的大数转换为16进制表示。
TronSmartWallet开发包官方下载地址:http://sc.hubwiz.com/codebag/tron-smartwallet/