cover

TRON智能地址PHP开发包

汇智网 / hubwiz.com

用智能地址代替传统的密钥对地址,无需注入TRX即可进行TRC20代币的归集

1、开发包概述

TronSmartWallet 开发包适用于平台方高效完成对用户或订单地址上 的Trx/TRC20代币的归集工作,无需向用户或订单地址注入Trx即可完成 Trx/TRC20代币的归集。

TronSmartWallet开发包的主要特点如下:

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

TronSmartWallet运行于PHP 7.1+环境下,主要类以及其关系如下图所示:

uml chart

TronSmartWallet的主要代码文件清单如下:

文件路径说明
tronsmartwallet/src/SmartWalletKit.phpTronSmartWallet开发包入口类
tronsmartwallet/src/Contract.phpTron智能合约封装类
tronsmartwallet/src/TronApi.phpTron多节点API访问接口
tronsmartwallet/src/NodeClient.phpTron节点客户端
tronsmartwallet/src/Credential.phpTron身份凭证类
tronsmartwallet/src/Address.phpTron地址编解码类
contracts/TRC20.solTRC20标准接口
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.jsoncomposer配置文件

2、使用示例代码

2.1 部署工厂合约

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

示例代码demo/deploy-contracts.php展示了如何部署 SmartWalletFactory合约以及一个用于演示的TRC20代币合约。 执行如下命令运行示例代码:

php deploy-contracts.php

运行结果如下:

合约部署后将在当前目录生成 addresses.json文件,该文件记录了 SmartWalletFactory合约与HappyToken合约的部署地址,在其他演示代码 中将使用该文件记录的信息。

2.2 生成用户地址

示例代码demo/generate-user-wallet.php展示了如何利用TronSmartWallet开发包 为用户或订单生成平台地址。

执行如下命令运行示例代码,为三个不同的ID分别生成对应的地址:

php generate-user-wallet.php

运行结果如下:

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

2.3 用户充值

示例代码demo/fund-user-wallet.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-wallet.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.shasta.trongrid.io',       //全节点URL
  'https://api.shasta.trongrid.io',       //合约节点URL
  'https://api.shasta.trongrid.io'        //事件节点URL
);

当上述三个节点的URL相同时,可以简写为:

$api = new TronApi('https://api.shasta.trongrid.io');

如果用的是Tron官方提供的TronGrid节点,那么可以直接使用TronApi 提供的两个静态函数mainNet()和testNet(),分别接入tronrid提供的 主链节点和shasta测试链节点。

例如:

$api = TronApi::mainNet(                         //接入主链
  '25f66928-0b70-48cd-9ac6-da6f8247c663'         //trongrid apikey
);                       

$api = TronApi::testNet();                       //接入shasta测试链

注意:TronGrid要求提供APIKEY才能接入主链,可以到这里 注册后免费申请TronGrid APIKEY。

5、SmartWalletKit类的使用方法

3.1 实例化SmartWalletKit

SmartWalletKit是TronSmartWallet开发包的入口类,实例化时需要 传入TronApi对象、Credential对象和工厂合约地址。例如:

//use TronSmartWallet\TronApi;
//use TronSmartWallet\Credential;
//use TronSmartWallet\SmartWalletKit;

$kit = new SmartWalletKit(
  TronApi::mainNet('25f66928-0b70-48cd-9ac6-da6f8247c663'),       // 接入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 = $token->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进制表示。

声 明

本站所提供软件包仅用于学习和研究,请依法合规使用。

本站所提供软件包均提供完整源码,使用前请认真阅读源代码和文档以确保充分理解软件包的设计与功能实现,本站不承担 因不当使用本站所提供软件包而造成的任何法律风险或财产损失责任。

¥5000.00
查看授权信息
  • 付费成功自动开通下载
  • 三个月内代码免费升级
  • 专业人员在线技术支持
  • 支持按需定制(另付费)
下载代码包
版本发布日期地址
1.1.2 2021-3-21
下载最新版
QQ咨询
2860991437
9+