9

TronSmartWallet PHP开发包

 3 years ago
source link: http://blog.hubwiz.com/2020/11/06/tron-smartwallet-php/
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.
neoserver,ios ssh client
区块链开发课程精选

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

1、开发包概述

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代币合约。 执行如下命令运行示例代码:

1
php deploy-contracts.php

运行结果如下:

deploy-contracts.png

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

2.2 生成用户地址

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

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

1
php generate-user-wallet.php

运行结果如下:

generate-user-wallet.png

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

2.3 用户充值

示例代码demo/fund-user-address.php模拟了用户向平台地址的充值行为。

执行如下命令运行示例代码,向三个指定ID对应的地址分别转入Trx和token:

1
php fund-user-wallet.php

运行结果如下:

fund-user-wallet.png

2.4 查看用户地址余额

示例代码demo/get-user-balance.php展示了如何查询用户地址的 Trx/TRC20代币余额。

执行如下命令运行示例代码,显示三个对应于指定ID的地址的余额信息:

1
php get-user-balance.php

运行结果如下:

get-user-balance.png

2.5 归集用户地址余额

示例代码demo/sweep-user-address.php展示了如何利用归集用户地址 上的Trx和TRC20代币到指定的冷(热)钱包地址。

执行如下命令运行示例代码:

1
php sweep-user-wallet.php

运行结果如下:

sweep-user-wallet.png

3、Tron身份与地址

TronSmartWallet开发包使用Credential对象来表示一个特定的Tron身份凭证, 该对象包含了账号的密钥和地址信息。

3.1 实例化Credential

使用静态方法create()创建一个新的以太坊账户,例如:

1
2
3
//use TronSmartWallet\Credential;

$credential = Credential::create(); // 创建一个新的账号

也可以使用静态方法fromPrivateKey()导入已有的私钥来实例化Credential对象,例如:

1
2
3
$credential = Credential::fromPrivateKey(
'4f3edf983ac6......b113bce9c46' // 要导入的私钥
);

3.2 查看账户的密钥和地址

Credential类提供了如下方法获取当前账户的私钥、公钥和地址:

  • privateKey() :返回私钥16进制字符串
  • publicKey() :返回公钥16进制字符串
  • address() :返回Address对象

例如,下面的代码创建一个新的Tron身份凭证并显示其地址:

1
2
$credential = Credential::new();
echo 'address => ' . $credential->address() . PHP_EOL; // 显示账号地址

3.3 Tron地址转换

在Tron区块链中,地址有两种表示:16进制和base58表示,例如 下面是同一个地址的两种表示:

  • Base58 :TDN3QY85Jft3RwgyatjRNmrwRmwkn8qwqx
  • 16进制 :412539EF4F3EB733C105A957EEBB20FD60AD8C9A43

Address类包含了相应的编解码逻辑,可以方便地进行地址格式转换。 例如:

1
2
3
4
5
//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, 例如:

1
2
3
4
5
6
7
//use TronSmartWallet\TronApi;

$api = new TronApi(
'https://api.trongrid.io', //全节点URL
'https://api.trongrid.io', //合约节点URL
'https://api.trongrid.io' //事件节点URL
);

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

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

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

例如,下面的代码是等效的:

1
2
3
4
5
$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对象和工厂合约地址。例如:

1
2
3
4
5
6
7
8
9
//use TronSmartWallet\TronApi;
//use TronSmartWallet\Credential;
//use TronSmartWallet\SmartWalletKit;

$kit = new SmartWalletKit(
TronApi::mainNet(), // 接入Tron主网
Credential::fromPrivateKey('......'), // 以太坊账号对象
'TGuQLmDSmYEfFcQaKBqEJWNGtD4RontQBm' // 工厂合约地址
);

3.2 生成用户地址

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

1
2
3
$userId = 'u010203';                                         // 用户的平台ID
$userAddress = $kit->generateUserWallet($userId); // 返回用户地址
echo 'user address => ' . $userWallet . PHP_EOL; // 显示用户地址

3.3 归集单个用户地址余额

使用SmartWalletKit的sweepUserWallet()方法归集指定用户地址 的Trx/TRC20代币余额。例如:

1
2
3
4
5
6
7
8
9
$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代币余额。例如:

1
2
3
4
5
6
7
8
$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余额并转账:

1
2
3
4
5
6
7
8
9
10
$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/


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK