当前,区块链正在风靡一时,区块链真正的魔力是通过区块链应用于不同行业和领域而实现的众多可能性。
Hyperledger Foundation一直在创建一个属于自己的平台,其中包括一系列开源工具,库和服务,以帮助构建可扩展的,有形的区块链解决方案,特别是在企业领域。
在本教程中,我们将使用Node.js,TypeScript和一个名为iroha-helpers的特殊npm库来构建REST服务器,以便与Iroha区块链平台进行交互。
先决条件
首先,您需要在本地计算机上设置Iroha区块链平台,您可以文档中的“快速入门”指南进行设置Iroha:https : //iroha.readthedocs.io/en/main/getting_started/index.html。
在我们开始编写代码时,您需要在机器上安装了Docker,Node.js。
现在可以运行2个Docker容器:1个用于运行PostgreSQL数据库,而1个用于运行Iroha守护程序服务。
列出正在运行的Docker容器
1.建立我们的项目
我们将初始化一个新的TypeScript项目,以编写我们的Node.js REST服务器以与我们正在运行的Iroha区块链网络进行交互。
以下是设置新项目的命令:
npm init: 创建新项目,
npm install typescript:安装TypeScript,
npx tsc - -init:通过创建tsconfig.json创建TypeScript项目,
npm install express @types/express:安装Express框架的TypeScript定义。
2.安装依赖项
Hyperledger Iroha服务正在运行一个守护程序,该守护程序可以通过grpc协议发送消息来与之交互。我们可以构建一个grpc客户端以便直接与Iroha进行交互,但是Hyperledger Iroha背后的团队已经提供了一种客户端库以便与它进行交互,该语言称为iroha-helpers,我们将使用JavaScript客户端库来帮助我们与Iroha区块链服务进行交互。
我们正在使用导入iroha-helpers-ts,它本质上是iroha-helpers库的克隆,而且还进行了稍微的编辑(如果返回a,则仅返回哈希值)实际上交易已成功提交,使用原始库就可以了,或者您可以使用此编辑的版本。
除了该库,我们还将导入其他一些使用iroha-helpers库所必需的库,因为它使用grpc协议发送/接收请求:
3.构建我们的存储库
现在,我们来设置存储库的结构,便于之后开发代码时不会感觉繁乱。
存储库文件夹结构
configs-与配置REST服务器以连接到Iroha区块链服务有关的设置
控制器—接收对特定路由的请求,并调用适当的服务
拦截器-在每个请求之前都运行的代码
接口-包含整个服务中使用的各种数据模型
路由器-定义要用于每个控制器的基本路由
服务-包含我们所有的业务逻辑,这是完成向Iroha后端发送请求的逻辑
utils-实用程序功能,可帮助在整个服务中处理数据
现在我们可以构造存储库,让我们定义控制器以接收将要发送给客户端的请求。
4.编写我们的控制器
在这里,我们正在创建一个新的控制器,称为DomainController。将负责接收对/ createDomain API调用的请求,并将其路由到Iroha命令服务方法createDomain。
编写控制器文件时,要确保定义正确的路由来处理请求,调用适当的服务以进一步为请求提供服务,然后根据来自的响应将适当的HTTP状态代码返回给客户端。
5.编写我们的配置
在此文件中,我们定义了一堆常量,这些常量充当连接到Iroha服务的配置:
IROHA_PEER_ADDR —运行Iroha服务的地址。
IROHA_DEFAULT_PRIM_KEY —这是快速入门中与Iroha一起设置的默认主键,此密钥可以代替任何适当的密钥。
IROHA_ACCOUNT_ID_HEADER IROHA_ACCOUNT_KEY_HEADER —这是请求标头名称,使用这些值来签署在请求中创建并发送给Iroha的交易的值。
IROHA_QUERY_SERVICE_TIMEOUT,IROHA_COMMAND_SERVICE_TIMEOUT-发送给Iroha的查询和命令的超时值。
IROHA_COMMAND_DEFAULT_QUORUM —将事务提交到区块链所需的签名数量。
现在,我们可以看到在编写服务逻辑时如何使用它们。
6.编写我们的服务
在这里,我们正在使用iroha-helpers库来帮助我们与之交互。
这来自该库的文档(https://www.npmjs.com/package/iroha-helpers),这将要创建的命令消息定义参数。发送(COMMAND_OPTIONS)并创建和初始化新的Command服务。
接下来,我们可以为此IrohaCommandService创建一个方法,该方法使用适当的命令选项将创建域请求发送到Iroha服务。
7.编写我们的路由器
我们使用路由器为所有控制器定义基本路由。然后,我们将路由连接并配置到其相应的控制器。
采取我们在DomainController中定义的路由的一部分,并在我们的路由器文件中定义的基本路由中,用于创建域的API调用的路由当前为:/ domain / createDomain。要查看完整路线,并了解服务器最终如何启动,我们将查看app.ts文件。
8.启动我们的服务器
为了使服务器运行,我们将配置我们的基本快递服务器。
在此文件中,您发现我们将服务器配置为使用morgan,这只是一个npm库,可以帮助对日志进行颜色编码。
我们将服务器配置为接收并返回JSON的内容类型,并且将此服务器的基本路由配置为以/ api / v1开头。最后我们还将服务器配置为在端口5000上运行(如果未设置环境变量port),所以,现在与使用API调用创建域的路由示例相同,我们最终将拥有:
要立即运行服务器,我们可以运行以下命令:
在我们的package.json文件中对其进行配置,以运行以下命令:
我们使用pino来帮助记录我们的请求,并使用nodemon来使我们在对代码进行任何更改时自动重新启动服务器。
如果终端运行成功,您应该看到终端打印出以下内容:
至此,我们完成了REST服务器与Hyperledger Iroha交互的代码!
9.测试我们的REST服务器
现在,我们可以测试REST服务器,可以从命令行使用基本curl命令,但是使用Postman测试API容易得多。
我创建了一个swagger文件,该文件定义了我们在此处创建的路由。因此,您可以将此文件导入Postman,然后您将获得一个文件,该文件定义了可用于该服务的所有路由。
为了测试请求,我们设置了适当的标头,以便可以由正确的交易创建者对交易进行签名。并在请求中发送适当的正文。确保这是一个POST请求。如果它能够成功连接到Iroha,您应该得到响应,说该事务已提交到Iroha区块链网络,或者是一个错误的原因,该事务未提交(拒绝,有状态验证失败等)。
结论
我们创建了一个小型REST服务器,该服务器接收我们的HTTP,JSON请求,并通过iroha-helpers库使用gRPC消息向Iroha发送适当的请求。