美文网首页小白学习区块链
Hyperledger-fabric实战0x00开发环境(Mac

Hyperledger-fabric实战0x00开发环境(Mac

作者: WallisW | 来源:发表于2018-07-25 20:21 被阅读160次

    Hyperledger-fabric是区块链中联盟链的优秀实现,所以从今天开始也想学习下fabric,顺便用一个系列将我学习的点滴记录下来。

    准备环境

    注:本fabric实战系列基于MacOS。

    1.git
    brew install git
    
    2.curl

    下载安装最新版本的curl,macOS 本身已经安装了curl

    3.Docker

    下载Docker-CE for Mac,安装好后可以确认Docker和Docker Compose的版本:

    ➜  go docker --version
    Docker version 18.03.1-ce, build 9ee9f40
    ➜  go docker-compose --version
    docker-compose version 1.21.1, build 5a3f1a3
    
    4.go

    brew安装go开发包,或者前往官网下载安装包

    brew install go
    

    并在./bash_profile配置go环境变量:

    // go安装路径
    export GOROOT=/usr/local/go
    // go工作路径
    export GOPATH=/Users/chaors/go
    export GOBIN=$GOPATH/bin
    

    建立fabric源码路径

    // 进入go工作目录创建hyperledger牡蛎
    cd $GOPATH
    mkdir -p src/github.com/hyperledger
    // 进入该目录,拉取fabric源代码
    cd $GOPATH/src/github.com/hyperledger
    git clone https://github.com/hyperledger/fabric.git
    
    5.Node & npm
    // 安装node
    brew install node
    // 查看node版本
    ➜  go node -v
    v8.11.1
    // 查看npm版本
    ➜  go npm -v
    5.6.0
    

    fabric Sample

    上面我们就已经安装了fabric需要的一些依赖环境,并将fabric拉取到了本地,进入fabric项目:

    查看fabric版本,选择稳定版本1.2.0

    ➜  go cd src/github.com/hyperledger/fabric
    ➜  fabric git:(cae2ad445) ✗ git tag
    baseimage-v0.0.11
    v0.6.0-preview
    v0.6.1-preview
    v1.0.0
    v1.0.0-alpha
    v1.0.0-alpha2
    v1.0.0-beta
    v1.0.0-rc1
    v1.0.1
    v1.0.2
    v1.0.3
    v1.0.4
    v1.0.5
    v1.0.6
    v1.1.0
    v1.1.0-alpha
    v1.1.0-preview
    v1.1.0-rc1
    v1.1.1
    v1.2.0
    v1.2.0-rc1
    
    ➜  fabric git:(cae2ad445) ✗ git checkout v1.2.0
    M   examples/e2e_cli/docker-compose-e2e.yaml
    M   examples/e2e_cli/download-dockerimages.sh
    HEAD is now at cae2ad445 Merge "Prepare release-1.2 branch for release" into release-1.2
    ➜  fabric git:(cae2ad445) ✗ git branch
    * (HEAD detached at v1.2.0)
      release-1.2
    

    我们新建一个目录,用于子存放下载的fabric Sample。

    // 新建fabric_Sample目录
    ➜  mkdir fabric_Sample
    ➜  cd fabric_Sample
    ➜  ls
    // 拷贝fabric/scripts下的bootstrap.sh脚本
    ➜  cp ../fabric/scripts/bootstrap.sh bootstrap.sh
    // 赋予脚本拷贝的可执行属性
    ➜  chmod +x bootstrap.sh
    

    在执行脚本前,为了使下载过程更快,我们需要配置下Docker加速器,我们可以利用DaoClound平台来获取Docker加速器。

    首先,打开网址注册一个账号,然后登录选择加速器:

    Docker加速器_0.png Docker加速器_1.png

    按上图方式重启Docker服务后执行脚本:

    // 执行脚本
    ➜  sudo ./bootstrap.sh
    

    成功执行后,会列出所有安装的镜像:

    bootstrap.sh执行成功.png

    最后一步,添加环境变量:

    export PATH=$Home/go/src/github.com/hyperledger/fabric_Sample/fabric-samples/bin:$PATH
    

    fabric-samples目录分析

    目录 作用
    chaincode fabric示例链码目录
    chaincode-docker-devmode 链码开发测试模式 测试模式下链码存放目录
    config 关于orderer和peer配置信息
    config/configtx.yaml 初始区块及应用通道交易配置文件的参考
    config/core.yaml peer配置信息的参考
    config/ orderer.yaml orderer配置信息的参考
    fabcar 测试Node环境所在目录,有一个小汽车的测试用例
    fabric-ca fabric基础环境提供的一个简单ca
    first-network 与网络相关的所有内容

    fabric三大核心工具

    1.根据指定的配置文件生成组织结构及身份证书的工具。

    fabric-samples/bin/cryptogen

    2.配置交易的一个工具,主要生成三种配置文件:
    1)生成orderer初始区块
    2)生成应用通道交易配置文件
    3)锚节点更新配置文件

    fabric-samples/bin/cryptogen/configtxgen

    3.在正在运行的网络联盟链中添加一个新的组织

    fabric-samples/bin/cryptogen/configtxlator

    网络环境的启动

    自动化脚本byfn.sh

    fabric提供了一个脚本来自动初始化并启动网络

    // 查看脚本命令使用方法
    ./byfn.sh --help
    
    // 1.生成相应的组织结构和身份证书,orderer初始区块配置文件,应用通道交易配置文件,锚节点更新配置文件
    ./byfn.sh generate
    
    // 2.启动网络
    ./byfn.sh up
    
    // 2.关闭网络
    ./byfn.sh down
    
    

    手动启动网络

    1.生成相应的组织结构和身份证书

    我们知道可以借助cryptogen工具来生成相应的组织结构和身份证书。

    // 显示默认的配置文件模板
    ../bin/cryptogen showtemplate
    

    我们查看默认的配置文件模板,主要内容有:

    // Orderer组织节点的定义
    OrdererOrgs:
      - Name: Orderer
        Domain: example.com
        Specs:
          - Hostname: orderer
    // 对等组织节点的定义 
    PeerOrgs:
     // 组织1
      - Name: Org1
        Domain: org1.example.com
        EnableNodeOUs: false
        Template:
           // 节点数
          Count: 1
        Users:
          // 用户数
          Count: 1
       // 组织2
      - Name: Org2
        Domain: org2.example.com
        EnableNodeOUs: false
        Template:
          Count: 1
        Users:
          Count: 1
    

    我们需要修改该配置文件,来自定义实现我们的组织结构。由于网络是在first-network目录下启动网络的,我们发现该目录下的crypto-config.yaml内容和上面默认配置文件相同。因此,我们可以通过修改并指定该文件为配置文件来实现目的。

    假设我们在默认基础上新增两个组织:组织3和组织4,其组织结构与组织2相同

    // 编辑配置文件
    vi vi crypto-config.yaml
    
    // i
    // 末尾添加
    - Name: Org3
        Domain: org3.example.com
        EnableNodeOUs: false
        Template:
          Count: 1
        Users:
          Count: 1
    - Name: Org4
        Domain: org4.example.com
        EnableNodeOUs: false
        Template:
          Count: 1
        Users:
          Count: 1
    // esc,:,wq! 
    

    然后指定该文件为配置文件生成组织结构。

    ➜  first-network git:(1745c99) ✗ ../bin/cryptogen generate --config crypto-config.yaml
    org1.example.com
    org2.example.com
    org3.example.com
    org4.example.com
    

    这里,特别注意在编辑crypto-config.yaml文件时一定不要使用tab键缩进,必须用空格键。否则会报错:

    ➜  first-network git:(1745c99) ✗ ../bin/cryptogen generate --config crypto-config.yaml
    Error reading config: Error Unmarshaling YAML: yaml: line 95: found a tab character that violates indentation%
    
    2.生成orserer创世区块

    使用configtxgen工具,同样使用--help命令查看工具使用方法。

    ../bin/configtxgen --help
    

    -chanelID 指定的通道ID(必须指定)
    -profile (TwoOrgsOrdererGenesis)configtx.yaml配置文件profiles
    -outputBlock 输出的区块地址,一般在channel-artifacts目录下

    完整的命令:

    // 生成创世区块
    ../bin/configtxgen -profile TwoOrgsOrdererGenesis -channelID mychannel -outputBlock ./channel-artifacts/genesis.block
    
    // 查看发现生成成功
    ➜  first-network git:(1745c99) ✗ ll ./channel-artifacts
    total 32
    -rw-r--r--  1 chaors  staff    12K  7 24 23:50 genesis.block
    
    3.生成应用通道配置文件

    依旧使用configtxgen工具。

    // 生成应用通道配置文件
    ../bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychanne
    
    // 查看生成的文件
    ➜  first-network git:(1745c99) ✗ ll ./channel-artifacts
    total 40
    -rw-r--r--  1 chaors  staff   346B  7 25 00:05 channel.tx
    -rw-r--r--  1 chaors  staff    12K  7 24 23:50 genesis.block
    
    4.生成锚节点更新配置文件
    ../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/org1MSPanchors.tx -channelID mychannel
    
    ➜  first-network git:(1745c99) ✗ ll ./channel-artifacts
    total 48
    -rw-r--r--  1 chaors  staff   346B  7 25 00:05 channel.tx
    -rw-r--r--  1 chaors  staff    12K  7 24 23:50 genesis.block
    -rw-r--r--  1 chaors  staff   284B  7 25 00:12 org1MSPanchors.tx
    
    5.启动网络

    这里需要使用docker-compose工具。

    // -f:启动网络时的配置文件,它描述了应该有哪些容器被启动
    // -d:不显示详细的启动过程
    // up:启动网络
    docker-compose -f docker-compose-cli.yaml up -d
    
    // 关闭网络
    docker-compose -f docker-compose-cli.yaml down
    
    

    .
    .
    .
    .

    互联网颠覆世界,区块链颠覆互联网!

    ---------------------------------------------20180725 20:21

    相关文章

      网友评论

      • Randy_ed88::clap: 写的很好,我也刚准备写点fabirc方面的文章,记录自己的学习成果。
        WallisW:@Randy_ed88 谢谢
        WallisW:@Randy_ed88 谢谢

      本文标题:Hyperledger-fabric实战0x00开发环境(Mac

      本文链接:https://www.haomeiwen.com/subject/ubhsmftx.html