天天看點

TronSmartWallet:無需注入Trx即可歸集的智能錢包開發包

TronSmartWallet 開發包适用于平台方高效完成對使用者或訂單位址上的Trx/TRC20代币的歸集工作,無需向使用者或訂單位址注入Trx即可完成Trx/TRC20代币的歸集。官方下載下傳位址: TronSmartWallet PHP開發包

1、開發包概述

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

  • 真正的平台型非托管錢包,平台無需管理大量使用者位址的密鑰并且沒有安全性的損失
  • 無需向使用者位址注入Trx即可完成Trx/TRC20代币的歸集,流程更簡單,效率更高
  • 支援在單一交易内完成多個使用者位址的歸集

TronSmartWallet運作于PHP 7.1+環境下,主要類以及其關系如下圖所示:

TronSmartWallet:無需注入Trx即可歸集的智能錢包開發包

TronSmartWallet的主要代碼檔案清單見官網說明:

http://sc.hubwiz.com/codebag/tron-smartwallet/

2、使用示例代碼

2.1 部署工廠合約

TronSmartWallet開發包利用工廠合約SmartWalletFacotry管理使用者位址的生成與歸集。是以首先需要部署工廠合約。

示例代碼

demo/deploy-contracts.php

展示了如何部署SmartWalletFactory合約以及一個用于示範的TRC20代币合約。執行如下指令運作示例代碼:

php deploy-contracts.php           

運作結果如下:

TronSmartWallet:無需注入Trx即可歸集的智能錢包開發包

合約部署後将在目前目錄生成 addresses.json檔案,該檔案記錄了SmartWalletFactory合約與HappyToken合約的部署位址,在其他示範代碼中将使用該檔案記錄的資訊。

2.2 生成使用者位址

demo/generate-user-address.php

展示了如何利用TronSmartWallet開發包為使用者或訂單生成平台位址。

執行如下指令運作示例代碼,為三個不同的ID分别生成對應的位址:

php generate-user-wallet.php           
TronSmartWallet:無需注入Trx即可歸集的智能錢包開發包

注:生成使用者位址不需要任何手續費。

2.3 使用者充值

demo/fund-user-address.php

模拟了使用者向平台位址的充值行為。

執行如下指令運作示例代碼,向三個指定ID對應的位址分别轉入Trx和token:

php fund-user-wallet.php           
TronSmartWallet:無需注入Trx即可歸集的智能錢包開發包

2.4 檢視使用者位址餘額

demo/get-user-balance.php

展示了如何查詢使用者位址的Trx/TRC20代币餘額。

執行如下指令運作示例代碼,顯示三個對應于指定ID的位址的餘額資訊:

php get-user-balance.php           
TronSmartWallet:無需注入Trx即可歸集的智能錢包開發包

2.5 歸集使用者位址餘額

demo/sweep-user-address.php

展示了如何利用歸集使用者位址上的Trx和TRC20代币到指定的冷(熱)錢包位址。

執行如下指令運作示例代碼:

php sweep-user-wallet.php           
TronSmartWallet:無需注入Trx即可歸集的智能錢包開發包

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 歸集單個使用者位址餘額

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 批量歸集使用者位址餘額

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代币

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開發包官方下載下傳位址: