当前位置:网站首页>TRON智能钱包PHP开发包【零TRX归集】
TRON智能钱包PHP开发包【零TRX归集】
2020-11-06 20:21:00 【区块链教程】
TronSmartWallet 开发包适用于平台方高效完成对用户或订单地址上的Trx/TRC20代币的归集工作,无需向用户或订单地址注入Trx即可完成Trx/TRC20代币的归集。官方下载地址:TronSmartWallet PHP开发包。
1、开发包概述
TronSmartWallet开发包的主要特点如下:
- 真正的平台型非托管钱包,平台无需管理大量用户地址的密钥并且没有安全性的损失
- 无需向用户地址注入Trx即可完成Trx/TRC20代币的归集,流程更简单,效率更高
- 支持在单一交易内完成多个用户地址的归集
TronSmartWallet运行于PHP 7.1+环境下,主要类以及其关系如下图所示:

TronSmartWallet的主要代码文件清单见官网说明:http://sc.hubwiz.com/codebag/tron-smartwallet/ 。
2、使用示例代码
2.1 部署工厂合约
TronSmartWallet开发包利用工厂合约SmartWalletFacotry管理用户地址的生成与归集。因此首先需要部署工厂合约。
示例代码demo/deploy-contracts.php展示了如何部署SmartWalletFactory合约以及一个用于演示的TRC20代币合约。执行如下命令运行示例代码:
php deploy-contracts.php
运行结果如下:

合约部署后将在当前目录生成 addresses.json文件,该文件记录了SmartWalletFactory合约与HappyToken合约的部署地址,在其他演示代码中将使用该文件记录的信息。
2.2 生成用户地址
示例代码demo/generate-user-address.php展示了如何利用TronSmartWallet开发包为用户或订单生成平台地址。
执行如下命令运行示例代码,为三个不同的ID分别生成对应的地址:
php generate-user-wallet.php
运行结果如下:

注:生成用户地址不需要任何手续费。
2.3 用户充值
示例代码demo/fund-user-address.php模拟了用户向平台地址的充值行为。
执行如下命令运行示例代码,向三个指定ID对应的地址分别转入Trx和token:
php fund-user-wallet.php
运行结果如下:

2.4 查看用户地址余额
示例代码demo/get-user-balance.php展示了如何查询用户地址的Trx/TRC20代币余额。
执行如下命令运行示例代码,显示三个对应于指定ID的地址的余额信息:
php get-user-balance.php
运行结果如下:

2.5 归集用户地址余额
示例代码demo/sweep-user-address.php展示了如何利用归集用户地址上的Trx和TRC20代币到指定的冷(热)钱包地址。
执行如下命令运行示例代码:
php sweep-user-wallet.php
运行结果如下:

3、Tron身份与地址
TronSmartWallet开发包使用Credential对象来表示一个特定的Tron身份凭证,该对象包含了账号的密钥和地址信息。
3.1 实例化Credential
使用静态方法create()创建一个新的以太坊账户,例如:
//use TronSmartWallet\Credential;
$credential = Credential::create(); // 创建一个新的账号
也可以使用静态方法fromPrivateKey()导入已有的私钥来实例化Credential对象,例如:
$credential = Credential::fromPrivateKey(
'4f3edf983ac6......b113bce9c46' // 要导入的私钥
);
3.2 查看账户的密钥和地址
Credential类提供了如下方法获取当前账户的私钥、公钥和地址:
- privateKey() :返回私钥16进制字符串
- publicKey() :返回公钥16进制字符串
- address() :返回Address对象
例如,下面的代码创建一个新的Tron身份凭证并显示其地址:
$credential = Credential::new();
echo 'address => ' . $credential->address() . PHP_EOL; // 显示账号地址
3.3 Tron地址转换
在Tron区块链中,地址有两种表示:16进制和base58表示,例如下面是同一个地址的两种表示:
- Base58 :TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx
- 16进制 :412539EF4F3EB733C105A957EEBB20FD60AD8C9A43
Address类包含了相应的编解码逻辑,可以方便地进行地址格式转换。例如:
//use TronSmartWallet\Address;
$a1 = Address::decode('TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx'); //解码Base58地址
echo $a1 . PHP_EOL; //输出:412539EF4F3EB733C105A957EEBB20FD60AD8C9A43
$a2 = Address::encode('412539EF4F3EB733C105A957EEBB20FD60AD8C9A43'); //编码16进制地址
echo $a2 . PHP_EOL; //输出:TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx
4、使用TronApi
TronApi 聚合了多种Tron节点提供的API,例如tron全节点、solidity节点和事件服务节点的API,TronSmartWallet利用TronApi访问Tron区块链。
实例化TronApi时,可以分别为不同类型的Tron节点指定不同的连接URL,例如:
//use TronSmartWallet\TronApi;
$api = new TronApi(
'https://api.trongrid.io', //全节点URL
'https://api.trongrid.io', //合约节点URL
'https://api.trongrid.io' //事件节点URL
);
当上述三个节点的URL相同时,可以简写为:
$api = new TronApi('https://api.trongrid.io');
如果用的是Tron官方提供的TronGrid节点,那么可以直接使用TronApi提供的两个静态函数mainNet()和testNet(),分别接入主链和shasta测试链。
例如,下面的代码是等效的:
$api = new TronApi('https://api.trongrid.io');
$api = TronApi::mainNet(); //与上面等效
$api = new TronApi('https://api.shasta.trongrid.io');
$api = TronApi::testNet(); //与上面等效
5、SmartWalletKit类的使用方法
3.1 实例化SmartWalletKit
SmartWalletKit是TronSmartWallet开发包的入口类,实例化时需要传入TronApi对象、Credential对象和工厂合约地址。例如:
//use TronSmartWallet\TronApi;
//use TronSmartWallet\Credential;
//use TronSmartWallet\SmartWalletKit;
$kit = new SmartWalletKit(
TronApi::mainNet(), // 接入Tron主网
Credential::fromPrivateKey('......'), // 以太坊账号对象
'TGuQLmDSmYEfFcQaKBqEJWNGtD4RontQBm' // 工厂合约地址
);
3.2 生成用户地址
使用SmartWalletKit的getUserWallet()方法为指定的用户生成平台地址,例如:
$userId = 'u010203'; // 用户的平台ID
$userAddress = $kit->generateUserWallet($userId); // 返回用户地址
echo 'user address => ' . $userWallet . PHP_EOL; // 显示用户地址
3.3 归集单个用户地址余额
使用SmartWalletKit的sweepUserWallet()方法归集指定用户地址的Trx/TRC20代币余额。例如:
$userId = 'u010203'; // 用户的平台ID
$txid = $kit->sweepUserWallet(
'u010203', // 用户ID
'TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx' // 接收地址
);
echo 'sweep txid => ' . $txid . PHP_EOL; // 显示归集交易ID
$success = $kit->waitForConfirmation($txid); // 等待交易确认
echo 'success => ' . $success . PHP_EOL; // 显示执行结果
3.4 批量归集用户地址余额
使用SmartWalletKit的sweepUserWallets()方法归集一组用户地址的Trx/TRC20代币余额。例如:
$txid = $kit->sweepUserWallets(
['u010203', 'u030405', 'u050607'], // 用户ID数组
'TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx' // 接收地址
);
echo 'sweep txid => ' . $txid . PHP_EOL; // 显示归集交易ID
$success = $kit->waitForConfirmation($txid); // 等待交易确认
echo 'success => ' . $success . PHP_EOL; // 显示执行结果
3.5 操作TRC20代币
使用SmartWalletKit的trc20()方法获取指定地址的TRC20代币实例,调用标准的TRC20接口即可操作代币。例如查询USDT余额并转账:
$somebody = 'TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx'; // 接收账号
$token = $kit->trc20('TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t');
echo 'balance => ' . $token->balanceOf($somebody) . PHP_EOL; // 查询USDT余额
$txid = $kit->transfer($somebody, hex('100000000')); // TRC20转账
echo 'transfer token txid => ' . $txid . PHP_EOL; // 显示交易ID
$success = $kit->waitForConfirmation($txid); // 等待交易确认
echo 'success => ' . $success . PHP_EOL; // 显示执行结果
hex($numstr)是SmartWalletKit提供的辅助方法,可以方便的将10进制字符串表示的大数转换为16进制表示。
TronSmartWallet开发包官方下载地址:http://sc.hubwiz.com/codebag/tron-smartwallet/
版权声明
本文为[区块链教程]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/3843525/blog/4705601
边栏推荐
猜你喜欢

Elasticsearch database | elasticsearch-7.5.0 application construction

JetCache埋点的骚操作,不服不行啊

drf JWT認證模組與自定製

Pattern matching: The gestalt approach一种序列的文本相似度方法

“颜值经济”的野望:华熙生物净利率六连降,收购案遭上交所问询

车的换道检测

做外包真的很难,身为外包的我也无奈叹息。

tensorflow之tf.tile\tf.slice等函数的基本用法解读

Want to do read-write separation, give you some small experience

选择站群服务器的有哪些标准呢?
随机推荐
6.7 theme resolver theme style parser (in-depth analysis of SSM and project practice)
技術總監,送給剛畢業的程式設計師們一句話——做好小事,才能成就大事
DRF JWT authentication module and self customization
业内首发车道级导航背后——详解高精定位技术演进与场景应用
GDB除錯基礎使用方法
Why do private enterprises do party building? ——Special subject study of geek state holding Party branch
iptables基礎原理和使用簡介
如何对Pandas DataFrame进行自定义排序
Introduction to Google software testing
Electron应用使用electron-builder配合electron-updater实现自动更新
[C#] (原創)一步一步教你自定義控制元件——04,ProgressBar(進度條)
Gradient understanding decline
通过深层神经网络生成音乐
嘘!异步事件这样用真的好么?
How to demote a domain controller in Windows Server 2012 and later
遞迴思想的巧妙理解
Ubuntu18.04上安裝NS-3
技術總監7年經驗,告訴大家,【拒絕】才是專業
JetCache埋点的骚操作,不服不行啊
Asp.Net Core learning notes: Introduction