zoukankan      html  css  js  c++  java
  • Hyperledger Fabric 环境搭建(2)

    上一篇https://www.cnblogs.com/xdyixia/p/11738096.html

    介绍了Hyperledger Fabric环境中各种软件安装和源码编译,这一篇介绍快速运行一个简单的Fabric网络。

    方法一:利用源码中的脚本运行docker镜像

    在Fabric的源码中提供了一个基于docker-compose运行上篇文章中的Docker镜像文件的例子。

    在$GOPATH/src/github.com/hyperledger/fabric/examples/e2e_cli目录里运行脚本
    ./network_setup.sh up

    下面是运行该脚本启动Fabric的结果

    View Code
    这个做了以下操作:
    1)编译生成Fabric公私钥、证书的程序,程序在目录:fabric/release/linux-amd64/bin
    2)基于configtx.yaml生成创世区块和通道相关信息,并保存在channel-artifacts文件夹。
    3)基于crypto-config.yaml生成公私钥和证书信息,并保存在crypto-config文件夹中。
    4)基于docker-compose-cli.yaml启动1Orderer+4Peer+1CLI的Fabric容器。
    5)在CLI启动的时候,会运行scripts/script.sh文件,这个脚本文件包含了创建Channel,加入Channel,安装Example02,运行Example02等功能。

    以上我们的整个Fabric网络已经运行搭建完成

    我们现在以安装好的Example02为例,在官方例子中,channel名字是mychannel,链码的名字是mycc。我们首先进入CLI,我们重新打开一个命令行窗口,输入:

    docker exec -it cli bash

    运行以下命令可以查询a账户的余额:

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

    可以看到余额是90:

    然后,我们试一试把a账户的余额再转20元给b账户,运行命令:

    peer chaincode invoke -o orderer.example.com:7050  --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem  -C mychannel -n mycc -c '{"Args":["invoke","a","b","20"]}'

    运行结果为:

    现在转账完毕, 我们试一试再查询一下a账户的余额,没问题的话,应该是只剩下70了。我们看看实际情况:

    果然,一切正常。最后我们要关闭Fabric网络,首先需要运行exit命令退出cli容器。关闭Fabric的命令与启动类似,命令为:

    cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli
    ./network_setup.sh down

    现在我们整个Fabric的环境已经测试完毕

    该实验参照该文实现https://www.cnblogs.com/studyzy/p/7437157.html 

    方法二:直接运行模块可执行文件的方式,不用docker

    1. 创建一个目录来存放命令执行过程中生成的相关文件

    mkdir -p /opt/hyperledger

    2. 生成fabric需要的证书文件

    首先创建存放配置文件和证书的文件夹

     mkdir -p /opt/hyperledger/fabricconfig

    cryptogen提供了一个命令可以获取cryptogen模块所需的配置文件的样式

    cryptogen showtemplate
    
    cryptogen showtemplate > crypto-config.yaml 可以直接把样式保存到文件中再进行修改

    根据模板修改后保存到crypto-config.yaml文件中。

    然后执行以下命令,生成证书文件crypto-config:

    cryptogen generate --config=crypto-config.yaml --output ./crypto-config

    发现新增文件夹crypto-config,里面存在本例相关的配置文件,可以通过tree命令查看证书文件内容。

    现在所有证书文件都生成完毕。

    3. 创始块的生成

    账本区块链用来存储账本的交易数据,但是第一个区块是例外,它用于存储配置信息,该区块被称为创始块。configtxgen模块是专门用来生成 系统的创始块Channel的创始块,并且configtxgen模块也需要一个配置文件定义相关属性。Fabric源码中提供了该配置文件的例子,我们只需修改一下即可。模板文件configtx.yaml在$GOPATH/src/github.com/hyperledger/fabric/sampleconfig/目录下。

    首先创建一个目录来存储orderer节点相关的文件:

    mkdir -p /opt/hyperledger/order

    把配置模板文件复制到刚创建的order目录

    cp -r $GOPATH/src/github.com/hyperledger/fabric/sampleconfig/configtx.yaml /opt/hyperledger/order/

    生成创始块文件

    configtxgen -profile TestTwoOrgsOrdererGenesis -outputBlock ./orderer.genesis.block

    上述命令执行完成后会在order文件夹中生成创始块文件orderer.genesis.block

    4. 账本创始块的生成

    通道,即账本,在Fabric中称为Channel,一个Channel表示一个账本,Fabric和其他区块链最大的区别是它支持多账本,每个Fabric应用至少包含一个Channel,下面创建Channel创始块,创建channel的配置文件也是configtx.yaml。

    configtxgen -profile TestTwoOrgsChannel -outputCreateChannelTx ./roberttestchannel.tx -channelID roberttestchannel

    命令执行完成之后会在order文件夹中生成roberttestchannel.tx文件,该文件用来生成channel,除此之外还需要生成相关的锚点文件,对应的执行以下两条命令:

    configtxgen -profile TestTwoOrgsChannel -outputAnchorPeersUpdate ./Org1MSPanchors.tx -channelID roberttestchannel -asOrg Org1MSP
    configtxgen -profile TestTwoOrgsChannel -outputAnchorPeersUpdate ./Org2MSPanchors.tx -channelID roberttestchannel -asOrg Org2MSP

    执行完后会在order文件夹中生成两个锚节点文件Org1MSPanchors.tx和Org2MSPanchors.tx。

     5. orderer节点的启动

    orderer节点即排序节点,负责交易的打包和区块的生成。orderer节点的配置信息通常放在环境变量或者配置文件中,本例放于配置文件中,Fabric源码提供了节点启动所需配置文件的实例,将示例文件复制到orderer的文件夹修改使用。

     cp -r $GOPATH/src/github.com/hyperledger/fabric/sampleconfig/orderer.yaml /opt/hyperledger/order

    修改配置,然后在配置文件orderer.yaml所在目录执行启动order命令

    orderer start

    orderer服务启动起来了,因此需要新开一个终端进行后续操作。

    6. peer节点的启动

    同样的,首先需要创建一个文件夹来存放peer模块的配置文件和区块数据

    mkdir -p /opt/hyperledger/peer

    将相关的模板配置文件core.yaml复制到peer文件夹下并修改内容

    cd /opt/hyperledger/peer
    cp $GOPATH/src/github.com/hyperledger/fabric/sampleconfig/core.yaml /opt/hyperledger/peer

    然后在core.yaml文件所在目录下执行以下命令启动peer节点

    export set FABRIC_CFG_PATH=/opt/hyperledger/peer/
    peer node start >> log_peer.log 2>&1 &

    7. 创建通道

    第一步:创建通道

    export set CORE_PEER_LOCALMSPID=Org1MSP
    export set CORE_PEER_MSPCONFIGPATH=/opt/hyperledger/fabricconfig/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
    
    peer channel create
    -t 50s -o orderer.example.com:7050 -c roberttestchannel -f /opt/hyperledger/order/roberttestchannel.tx

     创建完成后会在当前目录生成roberttestchannel.block文件,即为通道初始块文件。

    第二步:让已经运行的peer节点加入通道

    export set CORE_PEER_LOCALMSPID=Org1MSP
    export set CORE_PEER_ADDRESS=peer0.org1.example.com:7051
    export set CORE_PEER_MSPCONFIGPATH=/opt/hyperledger/fabricconfig/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
    peer channel join -b /opt/hyperledger/peer/roberttestchannel.block 

    第三步;更新锚节点

    export set CORE_PEER_LOCALMSPID=Org1MSP
    export set CORE_PEER_ADDRESS=peer0.org1.example.com:7051
    export set CORE_PEER_MSPCONFIGPATH=/opt/hyperledger/fabricconfig/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
    peer channel update -o orderer.example.com:7050 -c roberttestchannel -f /opt/hyperledger/order/Org1MSPanchors.tx
    
    

     8.chaincode的部署和调用

    可以使用Fabric源码自带的例子作为测试Chaincode.

    $GOPATH/src/github.com/hyperledger/fabric/examples/chaincode/go chaincode_example02

    chaincode相关测试一共有四个步骤

    第一步:部署chaincode即链代码

    第二步:实例化链代码

    第三步:通过链代码写入数据

    第四步:通过链代码查询数据

     参考:

    《区块链开发实战 Hyperledger Fabric关键技术与案例分析》

    《区块链原理、设计与应用》

    http://www.luyixian.cn/news_show_14963.aspx

    https://www.cnblogs.com/zhangmingcheng/p/10556469.html

  • 相关阅读:
    BZOJ2756:[SCOI2012]奇怪的游戏(最大流,二分)
    AtCoder Grand Contest
    BZOJ2565:最长双回文串(Manacher)
    BZOJ2160:拉拉队排练(Manacher)
    BZOJ3790:神奇项链(Manacher)
    BZOJ2342:[SHOI2011]双倍回文(Manacher)
    BZOJ4887:[TJOI2017]可乐(矩阵乘法)
    BZOJ2555:SubString(SAM,LCT)
    BZOJ1396:识别子串(SAM)
    luogu P1080 国王游戏
  • 原文地址:https://www.cnblogs.com/xdyixia/p/11765820.html
Copyright © 2011-2022 走看看