当前位置:网站首页>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
边栏推荐
猜你喜欢
词嵌入教程
谁说Cat不能做链路跟踪的,给我站出来
熬夜总结了报表自动化、数据可视化和挖掘的要点,和你想的不一样
Technical director, to just graduated programmers a word - do a good job in small things, can achieve great things
文本去重的技术方案讨论(一)
业内首发车道级导航背后——详解高精定位技术演进与场景应用
如何对Pandas DataFrame进行自定义排序
免费的专利下载教程(知网、espacenet强强联合)
连肝三个通宵,JVM77道高频面试题详细分析,就这?
Examples of unconventional aggregation
随机推荐
python过滤敏感词记录
业内首发车道级导航背后——详解高精定位技术演进与场景应用
Can't be asked again! Reentrantlock source code, drawing a look together!
做外包真的很难,身为外包的我也无奈叹息。
谁说Cat不能做链路跟踪的,给我站出来
Didi elasticsearch cluster cross version upgrade and platform reconfiguration
Sort the array in ascending order according to the frequency
Troubleshooting and summary of JVM Metaspace memory overflow
How to demote a domain controller in Windows Server 2012 and later
Kitty中的动态线程池支持Nacos,Apollo多配置中心了
Electron应用使用electron-builder配合electron-updater实现自动更新
我们编写 React 组件的最佳实践
车的换道检测
免费的专利下载教程(知网、espacenet强强联合)
nlp模型-bert从入门到精通(二)
Every day we say we need to do performance optimization. What are we optimizing?
数据产品不就是报表吗?大错特错!这分类里有大学问
快快使用ModelArts,零基础小白也能玩转AI!
条码生成软件如何隐藏部分条码文字
哇,ElasticSearch多字段权重排序居然可以这么玩