区块链研究实验室|Hyperledger Fabric的CA操作指南-part3

  • 时间:
  • 浏览:44
  • 来源:区块链技术网

步骤8:启动所有组件

脚本8_bringUpContainers.sh

docker-composeup-dpeer1-org1peer2-org1peer1-org2peer2-org2sleep5configtxgen-profileOrgsOrdererGenesis-outputBlock/tmp/hyperledger/org0/orderer/genesis.block-channelIDsyschannelsleep5configtxgen-profileOrgsChannel-outputCreateChannelTx/tmp/hyperledger/org0/orderer/channel.tx-channelIDmychannelsleep5docker-composeup-dorderer1-org0cli-org1cli-org2

我们的目标是提出所有组件,包括orderer1-org0,peer1-org1,peer2-org1,peer1-org2和peer2-org2。另外,我们有两个CLI,一个用于peer组织,用于以后的操作。

同时,orderer1-org0根据docker-compose.yaml需要生成块文件(genesis.block)。因此,我们使用configtxgen在本地生成此代码(第4行),并将结果放置在org0/目录中,该目录已映射到orderer1-org0。我们还生成通道配置事务channel.tx,并将其保存在org0/目录中(第6行)。

当一切正常时,我们会看到所有这些容器都在运行。

从现在开始,我们已经完成了组件级别。剩下的部分纯粹是Hyperledger Fabric的操作。

第9步:创建通道并将peer加入通道

我们按照标准方式创建和连接通道。

首先,我们打开两个CLI:cli-org1和cli-org2。在这两个CLI中,为org1和org2设置了环境变量。缺省的目标peer分别是peer1-org1和peer1-org2。如果两个CLI中需要peer2,我们只设置变量。

对于org1终端,

dockerexec-itcli-org1bash#

对于org2终端,

dockerexec-itcli-org2bash#

首先,我们需要复制通道配置事务(channel.tx)。当前位于org0/orderer/目录中(请参阅步骤8)。将其复制到org1/peer1/assets/。请注意,在现实生活中它可能是带外处理的,但是对于我们的教程,我们只是在org0/和org1/之间的映射卷之间进行复制。

在本地主机中

cd/tmp/hyperledgercporg0/orderer/channel.txorg1/peer1/assets/

使用org1终端创建通道生成区块

在org1终端

peerchannelcreate-cmychannel-f/tmp/hyperledger/org1/peer1/assets/channel.tx-oorderer1-org0:7050--outputBlock/tmp/hyperledger/org1/peer1/assets/mychannel.block--tls--cafile/tmp/hyperledger/org1/peer1/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem

结果是保存在org1/peer1/assets /中的区块文件mychannel.block。

使用org1终端加入peer1-org1和peer2-org1。请注意,我们暂时设置了变量,以将peer命令定位为peer2-org1。

peerchanneljoin-b/tmp/hyperledger/org1/peer1/assets/mychannel.blockCORE_PEER_ADDRESS=peer2-org1:7051peerchanneljoin-b/tmp/hyperledger/org1/peer1/assets/mychannel.block

我们需要将此mychannel.block复制到cli-org2。同样,我们正在使用映射的卷。

在本地主机中

cd/tmp/hyperledgercporg1/peer1/assets/mychannel.blockorg2/peer1/assets/

类似地,使用org2终端连接peer1-org2和peer2-org2。

在org2终端,

peerchanneljoin-b/tmp/hyperledger/org2/peer1/assets/mychannel.blockCORE_PEER_ADDRESS=peer2-org2:7051peerchanneljoin-b/tmp/hyperledger/org2/peer1/assets/mychannel.block

要检查是否所有peer都已成功加入通道,我们可以检查

在org1终端,

peerchannelgetinfo-cmychannelCORE_PEER_ADDRESS=peer2-org1:7051peerchannelgetinfo-cmychannel

在org2终端中,

peerchannelgetinfo-cmychannelCORE_PEER_ADDRESS=peer2-org2:7051peerchannelgetinfo-cmychannel

我们应该返回上面四个命令的相同结果,这意味着所有peer都具有相同的分类帐(区块链)。

这样,所有peer都加入了该渠道,我们可以开始研究链码了。

步骤10:在所有peer节点中安装Chaincode ABAC

我们安装了chaincode/abac/go-to-peers。链码目录映射到docker compose文件中的cli-org1和cli-org2。

在org1终端,

peerchaincodeinstall-nmycc-v1.0-pgithub.com/hyperledger/fabric-samples/chaincode/abac/goCORE_PEER_ADDRESS=peer2-org1:7051peerchaincodeinstall-nmycc-v1.0-pgithub.com/hyperledger/fabric-samples/chaincode/abac/go

在org2终端中,

peerchaincodeinstall-nmycc-v1.0-pgithub.com/hyperledger/fabric-samples/chaincode/abac/goCORE_PEER_ADDRESS=peer2-org2:7051peerchaincodeinstall-nmycc-v1.0-pgithub.com/hyperledger/fabric-samples/chaincode/abac/go

步骤11:使用Org1和Org2实例化Chaincode

在所有peer都安装了chaincode之后,我们现在实例化chaincode。

在实例化链码之前,我们先来看一下链码/abac/go/abac.go中的基于属性的访问控制(ABAC)。在Init()部分,

在第42行中,链码将提取客户机(建议发送者)证书,并查看证书中是否包含abac.init:true属性。如果不是,则返回错误。

我们首先从org1实例化。请记住,admin-org1没有属性abac.init:true。

在org1终端中,

peerchaincodeinstantiate-Cmychannel-nmycc-v1.0-c'{"Args":["init","a","100","b","200"]}'-oorderer1-org0:7050--tls--cafile/tmp/hyperledger/org1/peer1/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem

此错误消息显示由于缺少属性,实例化失败。

现在我们从org2实例化。请记住,admin-org2具有此属性(请参阅步骤7)。

在org2终端,

peerchaincodeinstantiate-Cmychannel-nmycc-v1.0-c'{"Args":["init","a","100","b","200"]}'-oorderer1-org0:7050--tls--cafile/tmp/hyperledger/org2/peer1/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem

我们没有看到错误,并且实例化已完成。在本教程的最后一步,我们将与chaincode函数进行交互。

步骤12:调用和查询Chaincode

我们首先查询a的当前值,根据链码设计和实例化链码时设置的参数,该值应为100。

在org1终端中,

peerchaincodequery-Cmychannel-nmycc-c'{"Args":["query","a"]}'CORE_PEER_ADDRESS=peer2-org1:7051peerchaincodequery-Cmychannel-nmycc-c'{"Args":["query","a"]}'

在org2终端中,

peerchaincodequery-Cmychannel-nmycc-c'{"Args":["query","a"]}'CORE_PEER_ADDRESS=peer2-org2:7051peerchaincodequery-Cmychannel-nmycc-c'{"Args":["query","a"]}'

现在在org1终端中调用chaincode函数

peerchaincodeinvoke-Cmychannel-nmycc-c'{"Args":["invoke","a","b","10"]}'--tls--cafile/tmp/hyperledger/org1/peer1/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem

注意:也可以在org2终端上调用链码。只需使用正确的路径(即org2而不是org1)更改TLS证书。

调用chaincode函数后,我们在所有对等方中再次查询a的值。所有应更新为90。

在org1终端中,

peerchaincodequery-Cmychannel-nmycc-c'{"Args":["query","a"]}'CORE_PEER_ADDRESS=peer2-org1:7051peerchaincodequery-Cmychannel-nmycc-c'{"Args":["query","a"]}'

在org2终端中,

peerchaincodequery-Cmychannel-nmycc-c'{"Args":["query","a"]}'CORE_PEER_ADDRESS=peer2-org2:7051peerchaincodequery-Cmychannel-nmycc-c'{"Args":["query","a"]}'

我们得到正确的结果。网络运行正常。

教程到此结束。

结论

我们已经建立了一个典型的Fabric网络,其中Fabric CA Server生成了所有加密材料。通过精心设计和适当的过程,我们让所有实体从每个组织的CA获取身份证书,而所有网络组件都从单个TLS CA为该网络中的所有组织获取TLS服务器证书。我们还使用具有智能的链码来检查身份,以显示如何基于证书内的属性来控制访问。

相关文章阅读:

区块链研究实验室|Hyperledger Fabric的CA操作指南-part1

----------------------------------------

译者:链三丰

译文出处:http://bitoken.world

----------------------------------------

猜你喜欢

区块链研究实验室 | 深入了解FabCar:Hyperledger Fabric的完整应用程序示例(part1)

概述HyperledgerFabric附带了许多应用示例,其中FabCar是一个完整的端到端应用程序。完整的区块链应用程序有两部分代码:在Fabric网络内部署和执行的Chai

2021-11-29

深入了解FabCar:Hyperledger Fabric的完整应用程序示例(part2)

这是本系列的第2部分。在第1部分中,我们介绍了Fabcar是什么以及应用程序架构。在本部分中,我们将介绍链代码,了解它的结构并使用CLI模拟链代码函数的流。区块链研究实验室|深

2021-11-29

深入了解FabCar:Hyperledger Fabric的完整应用程序示例(part3)

我们已经讲解完了FabCar应用的Chaincode部分。现在我们继续前进到客户端部分。我们在第2部分中介绍如何使用SDK与Chaincode进行交互。区块链研究实验室|深入了

2021-11-29

区块链研究实验室|使用Hyperledger Composer和React.js构建保险应用程序-part2

在本节中,我们将介绍如何通过RESTfulAPI将HyperledgeFabric网络与Web应用程序集成,并使用react.js作为前端。本教程中构建的Web应用程序仅是保单

2021-11-29

区块链研究实验室|使用Hyperledger Composer和React.js构建保险应用程序-part3

接下来,我们要创建将用于显示和实现添加新资产的功能的组件。在组件中创建新组件AddAsset.js:importReact,{Component}from'react';imp

2021-11-29