未加星标

EOS区块链PHP开发包 ―― EosTool

字体大小 | |
[开发(php) 所属分类 开发(php) | 发布者 店小二04 | 时间 2018 | 作者 红领巾 ] 0人收藏点击收藏

EosTool的目的是消除使php开发EOS区块链应用的痛苦,例如:

通过Nodeos和Keosd的RPC接口调用其功能 离线生成EOS格式的私钥和公钥 使用本地私钥生成符合EOS要求的交易签名 将交易对象序列化为Nodeos要求的packed_trx格式

可以认为EosTool是PHP版本的 eosjs ,利用它可以完整地实现EOS官方客户端Cleos的功能, 也可以很方便地在PHP应用中增加对EOS区块链的支持能力,极大地提高开发效率。

原文链接: http://sc.hubwiz.com/codebag/eos-php-sdk/

EosTool运行在 Php 7.1+ 环境下,当前版本1.0.0,主要代码文件清单如下:

代码文件 说明 eostool/src/client/NodeClient.php 节点软件nodeos的rpc接口封装类 eostool/src/client/WalletClient.php 钱包软件keosd的rpc接口封装类 eostool/src/client/RpcOutput.php RPC返回结果封装类 eostool/src/Crypto/PrivateKey.php EOS私钥类 eostool/src/Crypto/PublicKey.php EOS公钥类 eostool/src/Crypto/Signature.php EOS签名类 eostool/src/Serializer/AbiType.php EOS的ABI类型封装类 eostool/src/Serializer/AbiTypeFactory.php ABI类型工厂类 eostool/src/Serializer/SerialBuffer.php 序列化缓冲区实现类 eostool/src/Serializer/Serializer.php 序列化器实现类 eostool/src/Signer/Signer.php 签名器接口 eostool/src/Signer/KeosdSigner.php Keosd签名器实现类 eostool/src/Signer/LocalSigner.php 本地离线签名器实现接口 eostool/src/Contract.php 合约类 eostool/src/EosTool.php 开发包入口类 eostool/tests 单元测试用例目录 eostool/phpunit.xml 单元测试配置文件 eostool/vendor 第三方依赖包 eostool/composer.json composer配置文件 2. 访问节点服务器

使用 NodeClient 类访问nodeos的rpc接口。例如,下面的代码访问本机运行的 Nodeos节点的 chain 插件的 get_info 接口:

use EosTool\Client\NodeClient; $nc = new NodeClient(); $ret = $nc->chain->getInfo(); if($ret->hasError()) throw new Exception($ret->getError()); $info = $ret->getResult();

2.1 RPC调用分组

Nodeos采用了插件化架构,不同的插件的API也归入不同的分组,EosTool采用了保持一致的 命名方法,根据api即可推断出NodeClient的调用方法:API分组对应于NodeClient的一个同名 属性,API则对应与No的Client的分组同名属性下的一个经过 camelCase 转化的方法。例如:

插件 API分组 RPC API NodeClient方法 chain_api_plugin chain get_info $nc->chain->getInfo() history_api_plugin history get_transaction $nc->history->getTransaction() net_api_plugin net status $nc->net->status() producer_api_plugin producer get_runtime_options $nc->producer->getRunTimeOptions() dbsize_api_plugin dbsize get $nc->dbsize->get()

RPC API的官方文档:https://developers.eos.io/eosio-nodeos/reference

2.2 RPC调用参数

对于Nodeos而言,有些调用需要传入额外的参数,例如chain插件的get_block接口, 使用EosTool进行调用时,将参数组织为一个关联数组即可,示例代码如下:

$payload = [ 'block_num_or_id' => 1 ]; $ret = $nc->chain->getBlock($payload); 2.3 RPC调用返回值

所有RPC调用的返回结果都是一个 RpcOutput 实例,调用其 hasError() 方法可以 判断是否调用出错,进一步可以利用 getError() 方法获取错误信息。

RPC调用的响应则可以通过 getResult() 方法获取,它是一个由原始的JSON结果 转化出的StdClass对象,因此可以方便的提取属性信息,例如:

echo 'chain id' . $info->chain_id . PHP_EOL;

2.4 访问主网/测试网节点

在创建NodeClient实例时,可以传入额外的参数执行来制定要访问的EOS主网或测试网节点。 例如,使用下面的代码访问某个主网节点:

$nc = new NodeClient(['base_uri' => 'https://api.eosnewyork.io:443/v1/']);

或者访问jungle测试网的某个节点:

$nc = new NodeClient(['base_uri' => 'https://jungle.eosio.cr:443/v1/']); 3、访问钱包服务器

新版的Keosd已经不提供RPC API文档,这可能意味着它在EOS软件栈中已经开始滑向边缘地位。 不过可以在这个地址访问老版的文档:https://developers.eos.io/eosio-nodeos/v1.1.0/reference

使用 WalletClient 类访问Keosd的rpc接口。例如,下面的代码访问本机运行的 Keosd的 list_wallets 接口:

use EosTool\Client\WalletClient; $wc = new WalletClient(); $ret = $wc->listWallets(); if($ret->hasError()) throw new Exception($ret->getError()); $wallets = $ret->getResult();

由于Keosd的API不再分组,因此RPC对应的方法直接挂在WalletClient对象上,这是一个不同之处。 与NodeClient一样的是,WalletClient的调用返回结果也是一个RpcOutput对象。

1.4版的Keosd默认使用UNIX套接字而不是HTTP提供RPC接口,这可能是考虑到绝大多数情况下 Keosd都运行在本机,使用IPC会更安全一些。因此这也是WalletClient的默认实例化选项, 在绝大多数情况下,不需要传入额外的参数来实例化WalletClient。

4. 私钥与公钥

EOS的密钥算法类似于比特币,但做了一些调整,定义了自己的格式。

使用 PrivateKey 类的静态方法 new() 生成随机私钥。例如:

use EosTool\Crypto\PrivateKey; $prv = PrivateKey::new(); echo $prv->toEos() . PHP_EOL; //类似:5Hu6nxM6s6UQ3nYkr1s1GKA17zPqpceUuWxH3JBwK8ZorMSRqGi

toEos() 方法用来将私钥对象转换为EOS的自定义格式。

4.1 公钥推导

从私钥可以推导出公钥,例如:

$pub = $prv->getPublicKey(); echo $pub->toEos() . PHP_EOL; //类似:EOS6wQ6t3n148GfzLzgxq7cC8ARDKxeaB3hQXdXn7oZYdwEyAXiSv

同样,使用 toEos() 方法将公钥转换为EOS的自定义格式。

4.2 导入EOS私钥

可以将一个EOS格式的私钥转化为EosTool的PrivateKey对象,例如,下面的 代码将指定的EOS私钥导入,并显示其对应的EOS公钥:

$prv = PrivateKey::fromEos('5Hu6nxM6s6UQ3nYkr1s1GKA17zPqpceUuWxH3JBwK8ZorMSRqGi'); echo $prv->getPublicKey()->toEos() . PHP_EOL;

4.3 权威签名

PrivateKey的 sign() 方法支持普通签名和EOS节点要求的权威签名。例如下面的代码返回一个 普通签名:

$hex = '1234567890abcdef...'; $signature = $prv->sign($hex);

传入额外的参数来获得指定数据的权威签名:

$hex = '1234567890abcdef...'; $signature = $prv->sign($hex,true);

5. 序列化

EOS要求交易在提交节点 push_transaction 之前先进行序列化,这也是在PHP中操作EOS交易 绕不过去的一个环节。

在EosTool中,使用 Serializer 类进行序列化操作。例如,下面的代码将一个EOS转账交易 序列化为可以提交给EOS节点e

本文开发(php)相关术语:php代码审计工具 php开发工程师 移动开发者大会 移动互联网开发 web开发工程师 软件开发流程 软件开发工程师

分页:12
转载请注明
本文标题:EOS区块链PHP开发包 ―― EosTool
本站链接:https://www.codesec.net/view/620768.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 开发(php) | 评论(0) | 阅读(19)