天天看點

Bianace區塊鍊PHP對接開發包

BnbTool開發包适用于為PHP應用快速增加對 币安鍊 / Binance Chain 數字資産的支援能力,

即支援使用自有部署區塊鍊節點的應用場景,也支援基于第三方節點開放API服務的輕量級部署場景。

官方下載下傳位址:

http://sc.hubwiz.com/codebag/bnbtool/

1、開發包概述

BnbTool開發包是一個完整的币安鍊PHP開發包,可以極大地提升區塊鍊錢包、交易平台或區塊鍊應用開發過程中與币安鍊的對接實作效率。BnbTool主要包含以下特性:

  • 完善的币安鍊節點RPC API與Rest API封裝
  • 完善的Tendermint Amino編解碼器PHP實作
  • 離線管理私鑰,離線簽名交易,離順序列化/反序列化交易
  • 透明支援自有節點或第三方節點通路币安鍊,例如查詢資料或廣播交易

BnbTool軟體包運作在Php 7.1+環境下,目前版本1.0.0,主要實作類/接口及互相之間的關系如下圖所示:

Bianace區塊鍊PHP對接開發包

BnbTool的主要代碼檔案清單見官網:

2、使用示範代碼

下載下傳開發包并解壓後,進入demo目錄運作示範代碼。

2.1 CryotoDemo

CryptoDemo.php示範了如何使用BnbTool的Crypto封裝類實作币安鍊賬戶的建立與恢複,簽名的生成與驗證。

在終端執行如下指令啟動CryptoDemo:

~$ php CryptoDemo.php           

運作結果類似下圖:

Bianace區塊鍊PHP對接開發包

2.2 RpcClientDemo

RpcClientDemo.php示範了如何使用BnbTool的RpcClient調用币安鍊節點的RPC API。

在終端執行如下指令啟動RpcClientDemo:

~$ php RpcClientDemo.php           
Bianace區塊鍊PHP對接開發包

2.3 RestClientDemo

RestClientDemo.php示範了如何使用BnbTool的RestClient調用

币安鍊的Rest API。

在終端執行如下指令啟動RestClientDemo:

~$ php RestClientDemo.php           
Bianace區塊鍊PHP對接開發包

2.4 ToolKitDemo

ToolKitDemo.php示範了如何使用BnbTool的ToolKit入口類實作币安鍊賬戶的建立、轉賬、餘額查詢與曆史交易查詢。

在終端執行如下指令啟動ToolKitDemo:

~$ php ToolKitDemo.php           
Bianace區塊鍊PHP對接開發包

3、ToolKit類使用說明

ToolKit是BnbTool的入口類,利用它可以快速完成币安鍊賬戶的建立、轉賬、DEX挂單等操作。ToolKit的主要屬性與方法如下:

  • 屬性
    • keyStore:密鑰庫執行個體
    • restClient:币安鍊Rest API用戶端執行個體
  • 方法
    • newAddress():建立新賬戶并傳回生成的位址,新的私鑰/位址自動加入密鑰庫
    • importKey():導入指定的私鑰并傳回對應的位址,該私鑰/位址自動加入密鑰庫
    • transfer():執行代币轉賬交易
    • placeOrder():在DEX委托挂單
    • cancleOrder():取消DEX上的委托單
    • freezeToken():當機指定數量的代币
    • unfreezeToken():解凍指定數量的代币
    • dexList():在DEX上市交易對

3.1 ToolKit的執行個體化

執行個體化ToolKit需要傳入兩個參數:币安鍊節點Rest API服務位址,以及該節點接入的網絡。例如,使用本機的Rest API伺服器接入Binance Chain的測試網:

use BnbTool\ToolKit;

$kit = new ToolKit(
    'http://localhost:8080',            //Rest API通路基位址
    'testnet'                           //測試鍊,可選:mainnet | testnet    
  );           

ToolKit也提供了兩個靜态方法用來快速建立接入主網或測試網的執行個體:

$kit = ToolKit::mainnet();              //使用 https://dex.binance.org接入主網
$kit = ToolKit::testnet();              //使用 https://testnet-dex.binance.org接入測試網           

容易了解,

ToolKit::mainnet()

等價于如下的代碼:

new ToolKit('https://dex.binance.org','mainnet');           

3.2 賬戶建立與恢複

使用ToolKit的

newAddress()

方法建立新賬戶,該方法将生成随機私鑰并傳回該私鑰對應的位址,同時将私鑰資訊存入ToolKit的密鑰庫。例如下面的代碼建立一個新的币安鍊賬戶并顯示該賬戶的位址:

$address = $kit->newAddress();            //建立新賬戶并傳回位址
echo "new address: $address" . PHP_EOL;   //顯示新賬戶的位址           

也可以使用

importKey()

方法導入已有的私鑰,該方法将傳回所導入私鑰對應的位址。例如下面代碼導入指定的私鑰并顯示該賬戶的位址:

$prv = '49bd38a8...5af84709670fd';        //要導入ToolKit的私鑰
$address = $kit->importKey($prv);         //導入私鑰并傳回位址
echo "restored: $address" . PHP_EOL;      //顯示恢複的位址           

3.3 使用密鑰庫

ToolKit使用密鑰庫來儲存賬戶資訊,密鑰庫遵從IKeyStore接口的4個方法:

  • add():添加賬戶資訊
  • getAll():傳回所有賬戶的清單
  • getByKey():查詢指定私鑰的賬戶
  • getByAddress():查詢指定位址的賬戶

keyStore

屬性就可以通路目前使用的密鑰庫對象。例如,下面的代碼清單顯示目前密鑰庫中的所有賬戶:

$items = $kit->keyStore->getAll();        //傳回密鑰庫全部賬戶
foreach($items as $item){                 //逐行顯示賬戶私鑰和位址
  echo "key:{$item->key}, address: {$item->address}" . PHP_EOL;
}           

可以使用密鑰的

getByKey()

方法查詢指定密鑰的賬戶位址,例如:

$prv = '49bd38a8...5af84709670fd';        //要查詢的私鑰
$item = $kit->keyStore->getByKey($prv);   //傳回該私鑰對應的賬戶記錄
if(!is_null($item))                       //如果找到的話
  echo "address => {$item->address}\n";   //顯示賬戶位址           

3.4 轉賬交易

tranfer()

方法執行代币轉賬交易。例如下面的代碼在兩個指定賬号間轉賬1.234個BNB代币,并附備注資訊:

$kit->importKey('....');                  //導入轉賬發起賬号的私鑰  

$ret = $kit->transfer(
    'tbnb1hfw...x3kh9d7p5ryya',           //轉賬發起賬号
    'tbnb1l5f...xcyt0ec40avsp',           //轉賬接收賬号
    'BNB',                                //代币符号
    1.234,                                //代币數量
    'rent'                                //備注資訊
  )
echo "tx hash => {$ret[0]->hash}\n";      //顯示交易哈希           

注意,由于交易需要發起賬号簽名,是以在調用

transfer()

方法之前,務必保證ToolKit的密鑰庫中已有該發起賬号的私鑰。

3.5 查詢賬戶餘額

由于币安鍊的Rest API更容易使用,ToolKit使用RestClient而不是RpcClient來與币安鍊互動,可以通過ToolKit的

restClient

屬性來通路預建立的RestClient執行個體。

例如,下面的代碼使用RestClient的

getAccount()

方法來查詢

指定賬戶的所有種類代币的餘額并逐行顯示:

$ret = $kit->restClient->getAccount('tbnb1hfw...x3kh9d7p5ryya');  //查詢賬戶資訊
foreach($ret->balances as $b){                                    //周遊全部币種
  echo "symbol: {$b->symbol}, free: {$b->free}\n";                //顯示币種符号與可用餘額  
}           

3.6 查詢賬戶的曆史交易

類似的,使用RestClient的

getTransactions()

方法,可以查詢指定賬戶的曆史交易。例如下面的代碼:

$ret = $kit->restClient->getTransactions('tbnb1hfw...x37p5ryya'); //查詢曆史交易
foreach($ret->tx as $tx){                                         //周遊全部交易             
  echo json_encode($tx) . PHP_EOL;                                //顯示交易内容
}           

getTransactions()

方法支援分頁處理,例如,下面的代碼使用

offset

limit

選項聲明需要傳回從100#開始的20個交易:

$ret = $kit->restClient->getTransactions(
    'tbnb1hfw...x3kh9d7p5ryya',       //要查詢的賬戶位址          
    [
      'offset'=>100,                  //記錄起始位置
      'limit'=>20                     //傳回記錄數量
    ]
  );           

getTransactions()

對應于Rest API中的

/v1/api/transactions

,可以參考該文檔了解更多可用的查詢過濾參數。