Filecoin.PHP 开发包适用于为PHP应用快速增加对Filecoin/FIL数字资产的支持能力, 即支持使用自有Filecoin区块链节点的应用场景,也支持基于第三方公共节点的 轻量级部署场景。Filecoin.PHP官方下载地址:http://sc.hubwiz.com/codebag/filecoin-php-lib/
1、Filecoin.PHP开发包概述
Filecoin.PHP开发包主要包含以下特性:
- 支持离线生成Filecoin地址,方便管理维护
- 支持Filecoin消息的离线签名,有利于更好地保护私钥
- 自动估算Filecoin消息的GAS参数,避免手工调整
- 支持使用自有节点或第三方节点,例如使用Infura提供的公共节点
- 完善的Filecoin节点API封装,支持全部RPC API调用,例如查询地址地历史消息等
Filecoin.PHP软件包运行在 Php 7.1+ 环境下,当前版本1.0.0,主要类/接口及关系如下图所示:
Filecoin.PHP开发包的主要代码文件清单如下:
代码文件 | 说明 |
---|---|
filecoin/src/FilKit.php | Filecoin.PHP开发包入口类 |
filecoin/src/RpcClient.php | Filecoin节点RPC客户端类 |
filecoin/src/Credential.php | Filecoin区块链身份凭证类 |
filecoin/src/Address.php | Filecoin节点地址类 |
filecoin/src/Leb128.php | Leb128编解码实现类 |
filecoin/src/Base32.php | Base32编解码实现类 |
filecoin/src/Blake2b.php | Blake2b哈希实现类 |
demo/NewAddressDemo.php | 演示代码,创建新的Filecoin区块链地址 |
demo/RestoreAddressDemo.php | 演示代码,使用已有私钥重新生成Filecoin地址 |
demo/FilTransferDemo.php | 演示代码,FILE转账和余额查询 |
demo/RpcClientDemo.php | 演示代码,查询指定地址的历史交易记录 |
vendor | 第三方依赖包目录 |
composer.json | composer配置文件 |
2、使用示例代码
2.1 创建新地址
在终端进入演示代码目录,执行如下命令:
1 | ~$ cd ~/filecoin.php/demo |
执行结果如下:
2.2 利用私钥恢复地址
在终端进入演示代码目录,执行如下命令:
1 | ~$ cd ~/filecoin.php/demo |
执行结果如下:
2.3 FIL转账及余额查询
在终端进入演示代码目录,执行如下命令:
1 | ~$ cd ~/filecoin.php/demo |
执行结果如下:
2.4 RPC客户端调用示例
在终端进入演示代码目录,执行如下命令:
1 | ~$ cd ~/filecoin.php/demo |
执行结果如下:
3、使用Filecoin.PHP
FilKit是开发包的入口,使用这个类可以快速实现FIL转账、交易确认等待和余额查询等功能。
2.1 实例化FilKit
FilKit实例化需要传入RpcClient
对象和Credential
对象,这两个
参数分别封装了Filecoin节点提供的API,以及进行交易签名的用户身份信息。
例如,下面的代码创建一个接入Infura的Filecoin节点的FilKit实例,并使用 指定的私钥进行交易签名:
1 | use Filecoin\FilKit; |
在创建FilKit实例时指定的Credential对象,将作为默认身份凭证执行 后续的转账交易等操作。
- RpcClient / RPC客户端
如果使用的Filecoin节点无需身份认证,那么在创建 RpcClient时只需传入RPC URL。例如使用本机的filecoin节点:
1 | $client = new RpcClient('http://127.0.0.1/rpc/v0'); // 连接本机节点 |
如果使用的Filecoin节点启用了授权TOKEN的认证机制,那么在创建RpcClient 时需要传入授权TOKEN,例如:
1 | $client = new RpcClient( |
- Credential / 身份凭证
如果已有的私钥是16进制字符串形式,那么使用Credential
类
的静态方法fromKey()
来创建实例对象,例如:
1 | $credential = Credential::fromKey( |
2.2 FIL转账交易
使用FilKit的transfer()
方法进行FIL转账,例如发送 1.23 FIL :
1 | $to = 'f1saxri7cpyz2cm767q77u3mqumrggljrmi5iqdty'; // 转账目标地址 |
注意 :
- 转账数量应转换为最小单位计量的整数字符串,1 FIL = 10^18 最小单位。
- 支持各种类型的接收地址,例如:
f01729
:ID地址:f17uoq6tp427uzv7fztkbsnn64iwotfrristwpryy
:SECP256K1地址f24vg6ut43yw2h2jqydgbg2xq7x6f4kub3bg6as6i
:ACTOR地址f3q22fijmmlckhl56rn5nkyamkph3mcfu5ed6dheq53
:BLS地址
2.3 等待Filecoin消息确认
使用FilKit的waitForReceipt()
方法等待交易确认,例如:
1 | $receipt = $kit->waitForReceipt($cid); // 等待消息收据 |
默认的等待时间是60秒,在此时间内没有等到交易收据将提示错误。 可以传入第二个参数修改这一默认设置。例如等待10秒钟:
1 | $receipt = $kit->waitForReceipt($cid, 10); // 等待10秒钟 |
2.4 指定地址的FIL余额查询
使用getBalance()
方法查询指定地址的FIL余额,例如:
1 | $addr = 'f1saxri7cpyz2cm767q77u3mqumrggljrmi5iqdty'; // 要查询的Filecoin地址 |
注意 :返回的余额为最小单位表示,1 FIL = 10^18最小单位。
2.5 使用RPC客户端
Filecoin节点透过其RPC API接口提供了很多有用的功能,使用Filecoin.PHP 开发包的RpcClient类可以访问所有的Filecoin RPC API。
例如查询当前的链头TipSet,对应的RPC API为Filecoin.ChainHead, 使用RpcClient对象的调用代码如下:
1 | // $client = $kit->getClient(); // 从FilKit得到RpcClient实例 |
从上面代码容易理解:
Filecoin的RPC API名称去掉
Filecoin.
前缀,然后将剩余部分的首字符小写,就得到RpcClient的方法名。
如果RPC API的params数组包含多个参数,那么依次传入RpcClient的对应 方法即可。例如用Filecoin.ChainGetBlock调用查询指定的区块 时,需要传入区块的CID,使用RpcClient的调用如代码如下:
1 | $cid = [ // 要查询区块的CID |