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/