TRON智能錢包PHP開發包【零TRX歸集】

TronSmartWallet 開發包適用於平臺方高效完成對用戶或訂單地址上的Trx/TRC20代幣的歸集工作,無需向用戶或訂單地址注入Trx即可完成Trx/TRC20代幣的歸集。官方下載地址:TronSmartWallet PHP開發包

1、開發包概述

TronSmartWallet開發包的主要特點如下:

  • 真正的平臺型非託管錢包,平臺無需管理大量用戶地址的密鑰並且沒有安全性的損失
  • 無需向用戶地址注入Trx即可完成Trx/TRC20代幣的歸集,流程更簡單,效率更高
  • 支持在單一交易內完成多個用戶地址的歸集

TronSmartWallet運行於PHP 7.1+環境下,主要類以及其關係如下圖所示:

uml chart

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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章