cover

币安链PHP开发包

汇智网 / hubwiz.com

帮助PHP应用快速对接币安链(Binance Chain),支持BNB等数字资产转账与去中心化交易,支持使用自己的节点或第三方节点。

1、开发包概述

BnbTool开发包适用于为PHP应用快速增加对 币安链 / Binance Chain 数字资产的支持能力, 即支持使用自有部署区块链节点的应用场景,也支持基于第三方节点开放API服务的轻量级部署场景。

BnbTool开发包是一个完整的币安链PHP开发包,可以极大地提升区块链钱包、交易平台 或区块链应用开发过程中与币安链的对接实现效率。BnbTool主要包含以下特性:

  • 完善的币安链节点RPC API与Rest API封装
  • 完善的Tendermint Amino编解码器PHP实现
  • 离线管理私钥,离线签名交易,离线序列化/反序列化交易
  • 透明支持自有节点或第三方节点访问币安链,例如查询数据或广播交易

BnbTool软件包运行在Php 7.1+环境下,当前版本1.0.0,主要实现类/接口及相互之间 的关系如下图所示:

bnbtool uml

BnbTool的主要代码文件清单如下:

代码文件说明
bnb.php/src/ToolKit.phpBnbTool的入口类
bnb.php/src/RpcClient.php币安链的RPC API协议封装类
bnb.php/src/RestClient.php币安链的REST API协议封装类
bnb.php/src/Cryoto.php密码学处理封装类
bnb.php/src/IKeyStore.php密钥库接口定义
bnb.php/src/KeyStoreItem.php密钥库记录类
bnb.php/src/KeyStoreMemory.php内存密钥库实现类
bnb.php/src/Utils.php辅助工具类
bnb.php/src/codec/Encoder.phpAmino编码器实现类
bnb.php/src/codec/Decoder.phpAmino解码器实现类
bnb.php/src/codec/ConcreteType.phpAmino实体基类
bnb.php/src/codec/VarBool.phpAmino布尔类型
bnb.php/src/codec/VarInt.phpAmino整数类型
bnb.php/src/codec/VarString.phpAmino字符串类型
bnb.php/src/codec/Common.phpAmino Codec辅助类
bnb.php/src/rpc/Token.php代币类,用于RPC响应结果的Amino解码
bnb.php/src/rpc/TokenItem.php代币清单中的成员类,用于RPC响应结果的Amino解码
bnb.php/src/rpc/TradingPair.php交易对封装类,用于RPC响应结果的Amino解码
bnb.php/src/rpc/TokenBalance.php代币余额类,用于RPC响应结果的Amino解码
bnb.php/src/rpc/OrderBook.phpDEX委托账本类,用于RPC响应结果的Amino解码
bnb.php/src/rpc/OrderBookLevel.phpDEX委托账本层级类,用于RPC响应结果的Amino解码
bnb.php/src/rpc/OpenOrder.php敞口委托单类,用于RPC响应结果的Amino解码
bnb.php/src/rpc/BaseAccount.php账户基本信息类,用于RPC响应结果的Amino解码
bnb.php/src/rpc/AppAccount.php账户扩展信息类,用于RPC响应结果的Amino解码
bnb.php/src/tx/ICanonical.php用于签名交易类的接口定义
bnb.php/src/tx/IMsgCanonical.php用于签名消息类的接口定义
bnb.php/src/tx/StdTxCanonical.php交易类,用于签名
bnb.php/src/tx/SendCanonical.php转账消息类,用于签名
bnb.php/src/tx/NewOrderCanonical.php委托下单消息类,用于签名
bnb.php/src/tx/CancelOrderCanonical.php取消下单消息类,用于签名
bnb.php/src/tx/DexListCanonical.phpDEX交易对上市消息类,用于签名
bnb.php/src/tx/TokenFreezeCanonical.php冻结代币消息类,用于签名
bnb.php/src/tx/TokenUnfreezeCanonical.php取消代币冻结消息类,用于签名
bnb.php/src/tx/StdTx.php交易类,用于Amino编码
bnb.php/src/tx/Send.php转账消息类,用于Amino编码
bnb.php/src/tx/NewOrder.php委托下单消息类,用于Amino编码
bnb.php/src/tx/CancelOrder.php取消下单消息类,用于Amino编码
bnb.php/src/tx/DexList.phpDEX交易对上市消息类,用于Amino编码
bnb.php/src/tx/TokenFreeze.php冻结代币消息类,用于Amino编码
bnb.php/src/tx/TokenUnfreeze.php取消代币冻结消息类,用于Amino编码
bnb.php/src/tx/StdSignature.php代币面值类,用于Amino编码
bnb.php/src/tx/Token.php代币面值类,用于Amino编码
bnb.php/src/tx/Input.php交易输入类,用于Amino编码
bnb.php/src/tx/Output.php交易输出类,用于Amino编码
demo/CryptoDemo.php币安链账户私钥创建、导入、地址生成的演示代码
demo/RpcClientDemo.php币安链Rpc API调用的演示代码
demo/RestClientDemo.php币安链Rest API调用的演示代码
demo/ToolKitDemo.phpBnbTool使用的演示代码,如转账、余额查询、交易查询等
vendor第三方依赖包目录
composer.jsoncomposer配置文件

2、使用演示代码

下载开发包并解压后,进入demo目录运行演示代码。

2.1 CryotoDemo

CryptoDemo.php演示了如何使用BnbTool的Crypto封装类实现 币安链账户的创建与恢复,签名的生成与验证。

在终端执行如下命令启动CryptoDemo:

~$ php CryptoDemo.php

运行结果类似下图:

2.2 RpcClientDemo

RpcClientDemo.php演示了如何使用BnbTool的RpcClient调用 币安链节点的RPC API。

在终端执行如下命令启动RpcClientDemo:

~$ php RpcClientDemo.php

运行结果类似下图:

2.3 RestClientDemo

RestClientDemo.php演示了如何使用BnbTool的RestClient调用 币安链的Rest API。

在终端执行如下命令启动RestClientDemo:

~$ php RestClientDemo.php

运行结果类似下图:

2.4 ToolKitDemo

ToolKitDemo.php演示了如何使用BnbTool的ToolKit入口类实现 币安链账户的创建、转账、余额查询与历史交易查询。

在终端执行如下命令启动ToolKitDemo:

~$ php ToolKitDemo.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():查询指定地址的账户

使用ToolKit的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 转账交易

使用ToolKit的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()方法支持分页处理,例如,下面的代码使用offsetlimit选项声明需要返回从100#开始的20个交易:

$ret = $kit->restClient->getTransactions(
    'tbnb1hfw...x3kh9d7p5ryya',       //要查询的账户地址          
    [
      'offset'=>100,                  //记录起始位置
      'limit'=>20                     //返回记录数量
    ]
  );

getTransactions()对应于Rest API中的 /v1/api/transactions , 可以参考该文档了解更多可用的查询过滤参数。

¥3500.00
查看授权信息
  • 付费成功自动开通下载
  • 三个月内代码免费升级
  • 专业人员在线技术支持
  • 支持按需定制(另付费)
下载代码包
版本发布日期地址
1.0.0 2019-12-19
下载最新版
QQ咨询
2860991437
9+