请选择 进入手机版 | 继续访问电脑版
开启辅助访问
链路首页链路财经目前收录 币种 : 4908 交易所 : 310钱包 : 17 24H 交易量 : $43,403,137,051 总市值 : $245,388,183,835
2019
06/13
08:00
分享
评论
  • 我们已经讲解完了FabCar应用的Chaincode部分。 现在我们继续前进到客户端部分。 我们在第2部分中介绍如何使用SDK与Chaincode进行交互。区块链研究实验室 | 深入了解FabCar:Hyperledger Fabric的完整应用程序示例(part2)


    FabCar客户端

    在Hyperledger Fabric结构中,客户端是与Fabric网络和部署的链代码进行交互的外部应用,该交互功能是通过(SDK)完成。 Hyperledger Fabric为各种编程语言提供SDK。官方发布的SDK是Java和Node SDK。


    由于Hyperledger Fabric是一个需授权使用的区块链平台,因此每个参与者必须获得许可(授权)才能与网络进行交互。同时客户端也需要获得操作权限。而获取方式主要是通过获得fabric网络的证书颁发机构颁发的证书来实现。


    客户端内部是用户与Fabric网络和链代码交互的逻辑。根据Hyperledled Fabric设计,客户端将与Peer和Orderer交互,分别用于认可和区块生成。所以在客户端中需要实现Peer和Orderer的相互访问。此外,当提案到达Fabric网络时,系统会指定通道名称(Id)和链代码名称(Id)。请记住,Fabric网络可以支持多个通道和多个链代码。


    最后,当客户端对链代码执行查询或调用时,请确保使用正确的函数名称和参数。整个应用程序只有在客户端和链代码这两个部分一起工作时才会生效。


    有了这个,我们将在FabCar客户端中对此进行检查。


    FabCar使用Node SDK


    由于FabCar客户端是用JavaScript编写的,因此使用的是Node SDK。

    Node SDK中有三个NPM包。你可以在这里下载:(https://github.com/hyperledger/fabric-sdk-node).


    Fabric客户端更多的是从客户端的角度出发,主要关注的是链代码的安装和实例化,并向网络提交查询和事务。


    fabric-ca-client用于Fabric CA。 Fabric CA是一个可选项,因为有些人可能会使用自己的CA。如果使用Fabric CA,此包将对其执行权力注册和角色注册。


    fabric-network提供比fabric-client更高级别的抽象,用作向网络提交查询和事务。


    在最新的FabCar代码中,使用的是fabric-network和fabric-ca-client。


    当我们检查代码时,我们可以看到这两个包是如何使用。


    FabCar客户端

    FabCar客户端位于fabric-samples / fabcar /目录中。 最新版本1.4 FabCar代码在JavaScript中重新编写。 我们看到三个文件夹:javascript /,typescript /和javascript-low-level /。 这里演示是使用javascript /。 如果您对1.4之前的代码感兴趣,可以使用javascript-low-level /。 如果两者进行比较,您可以看到JavaScript编码的有巨大的改进。


    在fabric-samples / fabcar / javascript /目录中有四个JavaScript代码。 我们将它们大致分为两类。



    用户注册Fabric网络

    在我们进行链代码交互之前,enrollAdmin.js和registerUser.js分别负责Fabric网络上的管理员注册和用户注册。管理员和用户分别得到相应的密钥对和证书。在1.4版本中,它们都是存储在本地的wallet /directory 。


    enrollAdmin.js


    我们首先使用enrollAdmin.js为管理员注册生成证书。


    1. 从fabric-ca-client和fabric-network加载所需的模块。

    2. 检索有关基础网络部署的详细信息。它用于获取Fabric CA的接入点(第20-21行)。

    3. 检查“admin”是否已经在wallet目录中。如果存在,则不需要采取其他操作。

    4. 使用注册ID和密钥将管理员用户注册到Fabric CA(与Fabric CA中定义的内容一致,请参阅docker-compose文件basic-network / docker-composer.yml中的ca.example.com服务)。

    5. 注册后得到密钥对和证书。然后将密钥对和证书存储在wallet / admin /中。


    registerUser.js


    然后我们使用registerUser.js注册user1和收录user1。这是使用我们在上面创建的管理员来执行此注册。用户注册之后可以执行查询和调用。


    1. 从fabric-network加载所需的模块。

    2. 检索有关基础网络部署的详细信息。

    3. 检查user1是否已注册。 

    4. 检查管理员是否已经注册。 如果尚未注册admin,则提示为enrollAdmin.js,无进一步操作。

    5. 创建连接到对等体的新网关,其中包含来自基础网络部署的连接详细信息。

    6. 使用上一部分中创建的admin注册user1。

    7. 现在我们可以向user1发布注册密钥。

    8. 注册的结果是user1得到密钥对和证书,然后将密钥和证书都存储在wallet / user1 /中。


    函数调用

    fabric-samples附带两个JavaScript文件:query.js和invoke.js。从名称我们可以知道它们是用于链代码调用。


    query.js


    链代码中使用query定义了两个函数:queryAllCars()和queryCar()。代码query.js用于这两个链代码函数。


    由于查询不涉及修改分类帐内容,因此可以通过检索本地世界状态数据库中请求的数据在Peer中完成请求。


    query.js的逻辑:


    1. 从fabric-network加载所需的模块。

    2. 检索有关基础网络部署的详细信息。

    3. 检查user1是否已注册(在钱包中)。如果没有,请提示registerUser.js,不需要进一步的操作。

    4. 创建连接到对等体的新网关,其中包含来自基础网络部署的连接详细信息。

    5. 使用网关检索渠道(网络)mychannel和chaincode(合同)fabcar。

    6. 使用合同API evaluateTransaction()和查询所需的参数。

    7. 结果以字符串形式显示。


    下图展示是所指定所需链代码函数和参数的位置


    使用evaluateTransaction()进行查询

    invoke.js


    链代码中使用query定义了两个函数:createCar()和changeCarOwner()。 代码invoke.js用于这两个链代码函数。


    invoke.js的逻辑:


    1. 从fabric-network加载所需的模块。

    2. 检索有关基础网络部署的详细信息。

    3. 检查user1是否已注册(在钱包中)。 如果没有,请提示registerUser.js,不需要进一步的操作。

    4. 创建连接到对等体的新网关,其中包含来自基础网络部署的连接详细信息。

    5. 使用网关检索渠道(网络)mychannel和chaincode(合同)fabcar。

    6. 使用合同API submitTransaction()和查询所需的参数。

    7. 处理完交易后断开网关。


    下图展示是所指定所需链代码函数和参数的位置


    使用submitTransaction()调用更新分类帐的事务


    客户端演示到已部署Chaincode

    最后,我们将使用客户端与链代码进行交互。


    为简单起见,我们只执行一个查询函数和一个调用函数。


    1. 使用query.js检查CAR5

    2. 使用invoke.js更改CAR5的车主

    3. 再次使用query.js检查CAR5,并查看是否正确更改了所有者

    4. 我们可以在第6部分的基础上执行此操作,因为我们还没有对CAR5进行任何操作。


    首先,我们在Fabric CA上注册管理员:



    然后,我们使用Administrator注册User1并收录User1。



    我们只需要运行这两个代码一次。 使用user1和密钥对,我们可以调用函数。 User1可在需要时随时使用。


    现在我们可以修改这两个文件来反射这个函数。


    对于query.js,我们修改evaluateTransaction()中的参数


    修改参数以查询特定的Car ID

    现在我们可以执行Client Application query.js。



    我们现在修改invoke.js中submitTransaction()中的参数,以便我们可以将CAR5的所有者更改为另一个所有者。


    修改参数以更改车主


    我们执行客户端的invoke.js,然后使用query.js检查新的所有者。


    车主所有权发生改变

    现在我们看到所有者已更改为我们在invoke.js中指定的内容。


    本章节结束,在最后一部分中,我们将了解如何使API服务器与FabCar链代码进行交互。


    原作者:KC Tam


    描下放二维码添加我,拉您进入技术交流群

    扫码

    关注我们

    获得




主题帖 163 关注 0 粉丝 0
情感指数

链路大数据分析置信度 33.4 %

TA的主题帖
主题相关
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表