当前位置: 首页 > 科技 > 人工智能 > Hyperledger Fabric的CA操作指南-part3_腾讯新闻

Hyperledger Fabric的CA操作指南-part3_腾讯新闻

天乐
2020-08-12 18:07:16 第一视角

步骤8:启动所有组件

脚本8_bringUpContainers.sh

docker-compose up -d peer1-org1 peer2-org1 peer1-org2 peer2-org2

sleep 5

configtxgen -profile OrgsOrdererGenesis -outputBlock /tmp/hyperledger/org0/orderer/genesis.block -channelID syschannel

sleep 5

configtxgen -profile OrgsChannel -outputCreateChannelTx /tmp/hyperledger/org0/orderer/channel.tx -channelID mychannel

sleep 5

docker-compose up -d orderer1-org0 cli-org1 cli-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终端,

docker exec -it cli-org1 bash

#

对于org2终端,

docker exec -it cli-org2 bash

#

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

在本地主机中

cd /tmp/hyperledger

cp org0/orderer/channel.tx org1/peer1/assets/

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

在org1终端

peer channel create -c mychannel -f /tmp/hyperledger/org1/peer1/assets/channel.tx -o orderer1-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。

peer channel join -b /tmp/hyperledger/org1/peer1/assets/mychannel.block

CORE_PEER_ADDRESS=peer2-org1:7051 peer channel join -b /tmp/hyperledger/org1/peer1/assets/mychannel.block

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

在本地主机中

cd /tmp/hyperledger

cp org1/peer1/assets/mychannel.block org2/peer1/assets/

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

在org2终端,

peer channel join -b /tmp/hyperledger/org2/peer1/assets/mychannel.block

CORE_PEER_ADDRESS=peer2-org2:7051 peer channel join -b /tmp/hyperledger/org2/peer1/assets/mychannel.block

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

在org1终端,

peer channel getinfo -c mychannel

CORE_PEER_ADDRESS=peer2-org1:7051 peer channel getinfo -c mychannel

在org2终端中,

peer channel getinfo -c mychannel

CORE_PEER_ADDRESS=peer2-org2:7051 peer channel getinfo -c mychannel

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

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

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

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

在org1终端,

peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric-samples/chaincode/abac/go

CORE_PEER_ADDRESS=peer2-org1:7051 peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric-samples/chaincode/abac/go

在org2终端中,

peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric-samples/chaincode/abac/go

CORE_PEER_ADDRESS=peer2-org2:7051 peer chaincode install -n mycc -v 1.0 -p github.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终端中,

peer chaincode instantiate -C mychannel -n mycc -v 1.0 -c'{"Args":["init","a","100","b","200"]}' -o orderer1-org0:7050 --tls--cafile /tmp/hyperledger/org1/peer1/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem

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

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

在org2终端,

peer chaincode instantiate -C mychannel -n mycc -v 1.0 -c'{"Args":["init","a","100","b","200"]}' -o orderer1-org0:7050--tls --cafile /tmp/hyperledger/org2/peer1/tls-msp/tlscacerts/tls-0-0-0-0-7052.pem

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

步骤12:调用和查询Chaincode

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

在org1终端中,

peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

CORE_PEER_ADDRESS=peer2-org1:7051 peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

在org2终端中,

peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

CORE_PEER_ADDRESS=peer2-org2:7051 peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

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

peer chaincode invoke -C mychannel -n mycc -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终端中,

peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

CORE_PEER_ADDRESS=peer2-org1:7051 peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

在org2终端中,

peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

CORE_PEER_ADDRESS=peer2-org2:7051 peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

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

教程到此结束。

结论

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

相关文章阅读:

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

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

译者:链三丰

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

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

提示:支持键盘“← →”键翻页
为你推荐
加载更多
意见反馈
返回顶部