帮助PHP应用快速对接币安链(Binance Chain),支持BNB等数字资产转账与去中心化交易,支持使用自己的节点或第三方节点。
BnbTool开发包适用于为PHP应用快速增加对 币安链 / Binance Chain 数字资产的支持能力, 即支持使用自有部署区块链节点的应用场景,也支持基于第三方节点开放API服务的轻量级部署场景。
BnbTool开发包是一个完整的币安链PHP开发包,可以极大地提升区块链钱包、交易平台 或区块链应用开发过程中与币安链的对接实现效率。BnbTool主要包含以下特性:
BnbTool软件包运行在Php 7.1+环境下,当前版本1.0.0,主要实现类/接口及相互之间 的关系如下图所示:
BnbTool的主要代码文件清单如下:
代码文件 | 说明 |
---|---|
bnb.php/src/ToolKit.php | BnbTool的入口类 |
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.php | Amino编码器实现类 |
bnb.php/src/codec/Decoder.php | Amino解码器实现类 |
bnb.php/src/codec/ConcreteType.php | Amino实体基类 |
bnb.php/src/codec/VarBool.php | Amino布尔类型 |
bnb.php/src/codec/VarInt.php | Amino整数类型 |
bnb.php/src/codec/VarString.php | Amino字符串类型 |
bnb.php/src/codec/Common.php | Amino 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.php | DEX委托账本类,用于RPC响应结果的Amino解码 |
bnb.php/src/rpc/OrderBookLevel.php | DEX委托账本层级类,用于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.php | DEX交易对上市消息类,用于签名 |
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.php | DEX交易对上市消息类,用于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.php | BnbTool使用的演示代码,如转账、余额查询、交易查询等 |
vendor | 第三方依赖包目录 |
composer.json | composer配置文件 |
下载开发包并解压后,进入demo目录运行演示代码。
CryptoDemo.php演示了如何使用BnbTool的Crypto封装类实现 币安链账户的创建与恢复,签名的生成与验证。
在终端执行如下命令启动CryptoDemo:
~$ php CryptoDemo.php
运行结果类似下图:
RpcClientDemo.php演示了如何使用BnbTool的RpcClient调用 币安链节点的RPC API。
在终端执行如下命令启动RpcClientDemo:
~$ php RpcClientDemo.php
运行结果类似下图:
RestClientDemo.php演示了如何使用BnbTool的RestClient调用 币安链的Rest API。
在终端执行如下命令启动RestClientDemo:
~$ php RestClientDemo.php
运行结果类似下图:
ToolKitDemo.php演示了如何使用BnbTool的ToolKit入口类实现 币安链账户的创建、转账、余额查询与历史交易查询。
在终端执行如下命令启动ToolKitDemo:
~$ php ToolKitDemo.php
运行结果类似下图:
ToolKit是BnbTool的入口类,利用它可以快速完成币安链账户的创建、 转账、DEX挂单等操作。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');
使用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; //显示恢复的地址
ToolKit使用密钥库来保存账户信息,密钥库遵从IKeyStore接口的4个方法:
使用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"; //显示账户地址
使用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的密钥库中已有该发起账号的私钥。
由于币安链的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"; //显示币种符号与可用余额
}
类似的,使用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 ,
可以参考该文档了解更多可用的查询过滤参数。
本站所提供软件包仅用于学习和研究,请依法合规使用。
本站所提供软件包均提供完整源码,使用前请认真阅读源代码和文档以确保充分理解软件包的设计与功能实现,本站不承担 因不当使用本站所提供软件包而造成的任何法律风险或财产损失责任。