Hyperledger Fabric入门实战(四)——手动组建Fabric网络

我们可以自己组建一个Fabric网路, 网络结构如下:

  • 排序节点 1 个
  • 组织个数 2 个, 分别为go和cpp, 每个组织分别有两个peer节点, 用户个数为3
机构名称组织标识符组织ID
Go学科org_goOrgGoMSP
CPPorg_cppOrgCppMSP

一些理论基础:

  • 域名
    • baidu.com
    • jd.com
    • taobao.com
  • msp
    • Membership service provider (MSP)是一个提供虚拟成员操作的管理框架的组件。
    • 账号
      • 都谁有msp
        • 每个节点都有一个msp账号
        • 每个用户都有msp账号
  • 锚节点
    • 代表所属组织和其他组织进行通信的节点

1. 生成fabric证书

1.1 命令介绍

$cryptogen --help

1.2 证书的文件的生成 - yaml

  1. 配置文件的模板介绍
# ---------------------------------------------------------------------------
# "OrdererOrgs" - Definition of organizations managing orderer nodes
# ---------------------------------------------------------------------------
OrdererOrgs:	# 排序节点组织信息
  # ---------------------------------------------------------------------------
  # Orderer
  # ---------------------------------------------------------------------------
  - Name: Orderer	# 排序节点组织的名字
    Domain: example.com	# 根域名, 排序节点组织的根域名
    Specs:
      - Hostname: orderer # 访问这台orderer对应的域名为: orderer.example.com
      - Hostname: order2 # 访问这台orderer对应的域名为: order2.example.com
# ---------------------------------------------------------------------------
# "PeerOrgs" - Definition of organizations managing peer nodes
# ---------------------------------------------------------------------------
PeerOrgs:
  # ---------------------------------------------------------------------------
  # Org1
  # ---------------------------------------------------------------------------
  - Name: Org1	# 第一个组织的名字, 自己指定
    Domain: org1.example.com	# 访问第一个组织用到的根域名
    EnableNodeOUs: true			# 是否支持node.js
    Template:					# 模板, 根据默认的规则生成2个peer存储数据的节点
      Count: 2 # 1. peer0.org1.example.com 2. peer1.org1.example.com
    Users:	   # 创建的普通用户的个数
      Count: 3
      
  # ---------------------------------------------------------------------------
  # Org2: See "Org1" for full specification
  # ---------------------------------------------------------------------------
  - Name: Org2
    Domain: org2.example.com
    EnableNodeOUs: true
    Template:
      Count: 2
    Specs:
      - Hostname: hello
    Users:
      Count: 1

上边使用的域名, 在真实的生成环境中需要注册备案, 测试环境, 域名自己随便指定就可以

  1. 根据要求编写好的配置文件, 配置文件名: crypto-config.yaml
    步骤:
    (1)创建文件夹
    在这里插入图片描述
    (2)根据模版生成配置文件

在这里插入图片描述

# crypto-config.yaml
# ---------------------------------------------------------------------------
# "OrdererOrgs" - Definition of organizations managing orderer nodes
# ---------------------------------------------------------------------------
OrdererOrgs:
  # ---------------------------------------------------------------------------
  # Orderer
  # ---------------------------------------------------------------------------
  - Name: Orderer
    Domain: zjnu.com
    Specs:
      - Hostname: orderer

# ---------------------------------------------------------------------------
# "PeerOrgs" - Definition of organizations managing peer nodes
# ---------------------------------------------------------------------------
PeerOrgs:
  # ---------------------------------------------------------------------------
  # Org1
  # ---------------------------------------------------------------------------
  - Name: OrgGo
    Domain: orggo.zjnu.com
    EnableNodeOUs: true
    Template:
      Count: 2
    Users:
      Count: 3

  # ---------------------------------------------------------------------------
  # Org2: See "Org1" for full specification
  # ---------------------------------------------------------------------------
  - Name: OrgCpp
    Domain: orgcpp.zjnu.com
    EnableNodeOUs: true
    Template:
      Count: 2
    Users:
      Count: 3

  • 通过命令生成证书文件

    $ cryptogen generate --config=crypto-config.yaml
    

在这里插入图片描述

注:specs和Template的作用是一样的,区别是specs可以指定域名,而template是默认生成的。

2. 创始块文件和通道文件的生成

2.1 命令介绍

$ configtxgen --help 
  # 输出创始块区块文件的路径和名字
  `-outputBlock string`
  # 指定创建的channel的名字, 如果没指定系统会提供一个默认的名字.
  `-channelID string`
  # 表示输通道文件路径和名字
  `-outputCreateChannelTx string`
  # 指定配置文件中的节点
  `-profile string`
  # 更新channel的配置信息
  `-outputAnchorPeersUpdate string`
  # 指定所属的组织名称
  `-asOrg string`
  # 要想执行这个命令, 需要一个配置文件 configtx.yaml

2.2 创始块/通道文件的生成

  • 配置文件的编写 - 复制例子中的configtx.yaml
    在这里插入图片描述

    
    ---
    ################################################################################
    #
    #   Section: Organizations
    #
    #   - This section defines the different organizational identities which will
    #   be referenced later in the configuration.
    #
    ################################################################################
    Organizations:			# 固定的不能改
        - &OrdererOrg		# 排序节点组织, 自己起个名字
            Name: OrdererOrg	# 排序节点的组织名
            ID: OrdererMSP		# 排序节点组织的ID
            MSPDir: crypto-config/ordererOrganizations/example.com/msp # 组织的msp账号信息
    
        - &Org1			# 第一个组织, 名字自己起
            Name: Org1MSP # 第一个组织的名字
            ID: Org1MSP		# 第一个组织的ID
            MSPDir: crypto-config/peerOrganizations/org1.example.com/msp
            AnchorPeers: # 锚节点
                - Host: peer0.org1.example.com  # 指定一个peer节点的域名
                  Port: 7051					# 端口不要改
    
        - &Org2
            Name: Org2MSP
            ID: Org2MSP
            MSPDir: crypto-config/peerOrganizations/org2.example.com/msp
            AnchorPeers:
                - Host: peer0.org2.example.com
                  Port: 7051
    
    ################################################################################
    #
    #   SECTION: Capabilities, 在fabric1.1之前没有, 设置的时候全部设置为true
    #   
    ################################################################################
    Capabilities:
        Global: &ChannelCapabilities
            V1_1: true
        Orderer: &OrdererCapabilities
            V1_1: true
        Application: &ApplicationCapabilities
            V1_2: true
    
    ################################################################################
    #
    #   SECTION: Application
    #
    ################################################################################
    Application: &ApplicationDefaults
        Organizations:
    
    ################################################################################
    #
    #   SECTION: Orderer
    #
    ################################################################################
    Orderer: &OrdererDefaults
        # Available types are "solo" and "kafka"
        # 共识机制 == 排序算法
        OrdererType: solo	# 排序方式
        Addresses:			# orderer节点的地址
            - orderer.example.com:7050	# 端口不要改
    
    	# BatchTimeout,MaxMessageCount,AbsoluteMaxBytes只要一个满足, 区块就会产生
        BatchTimeout: 2s	# 多长时间产生一个区块
        BatchSize:
            MaxMessageCount: 10		# 交易的最大数据量, 数量达到之后会产生区块, 建议100左右
            AbsoluteMaxBytes: 99 MB # 数据量达到这个值, 会产生一个区块, 32M/64M
            PreferredMaxBytes: 512 KB
        Kafka:
            Brokers:
                - 127.0.0.1:9092
        Organizations:
    
    ################################################################################
    #
    #   Profile
    #
    ################################################################################
    Profiles:	# 不能改
        TwoOrgsOrdererGenesis:	# 区块名字, 随便改
            Capabilities:
                <<: *ChannelCapabilities
            Orderer:
                <<: *OrdererDefaults
                Organizations:
                    - *OrdererOrg
                Capabilities:
                    <<: *OrdererCapabilities
            Consortiums:
                SampleConsortium:	# 这个名字可以改
                    Organizations:
                        - *Org1
                        - *Org2
        TwoOrgsChannel:	# 通道名字, 可以改
            Consortium: SampleConsortium	# 这个名字对应93行
            Application:
                <<: *ApplicationDefaults
                Organizations:
                    - *Org1
                    - *Org2
                Capabilities:
                    <<: *ApplicationCapabilities
    
    
  • 按照要求编写的配置文件

    # configtx.yaml
    ---
    ################################################################################
    #
    #   Section: Organizations
    #
    ################################################################################
    Organizations:
        - &OrdererOrg
            Name: OrdererOrg
            ID: OrdererMSP
            MSPDir: crypto-config/ordererOrganizations/zjnu.com/msp
    
        - &org_go
            Name: OrgGoMSP
            ID: OrgGoMSP
            MSPDir: crypto-config/peerOrganizations/orggo.zjnu.com/msp
            AnchorPeers:
                - Host: peer0.orggo.zjnu.com
                  Port: 7051
    
        - &org_cpp
            Name: OrgCppMSP
            ID: OrgCppMSP
            MSPDir: crypto-config/peerOrganizations/orgcpp.zjnu.com/msp
            AnchorPeers:
                - Host: peer0.orgcpp.zjnu.com
                  Port: 7051
    
    ################################################################################
    #
    #   SECTION: Capabilities
    #
    ################################################################################
    Capabilities:
        Global: &ChannelCapabilities
            V1_1: true
        Orderer: &OrdererCapabilities
            V1_1: true
        Application: &ApplicationCapabilities
            V1_2: true
    
    ################################################################################
    #
    #   SECTION: Application
    #
    ################################################################################
    Application: &ApplicationDefaults
        Organizations:
    
    ################################################################################
    #
    #   SECTION: Orderer
    #
    ################################################################################
    Orderer: &OrdererDefaults
        # Available types are "solo" and "kafka"
        OrdererType: solo
        Addresses:
            - orderer.itcast.com:7050
        BatchTimeout: 2s
        BatchSize:
            MaxMessageCount: 100
            AbsoluteMaxBytes: 32 MB
            PreferredMaxBytes: 512 KB
        Kafka:
            Brokers:
                - 127.0.0.1:9092
        Organizations:
    
    ################################################################################
    #
    #   Profile
    #
    ################################################################################
    Profiles:
        ZjnuOrgsOrdererGenesis:
            Capabilities:
                <<: *ChannelCapabilities
            Orderer:
                <<: *OrdererDefaults
                Organizations:
                    - *OrdererOrg
                Capabilities:
                    <<: *OrdererCapabilities
            Consortiums:
                SampleConsortium:
                    Organizations:
                        - *org_go
                        - *org_cpp
        ZjnuOrgsChannel:
            Consortium: SampleConsortium
            Application:
                <<: *ApplicationDefaults
                Organizations:
                    - *org_go
                    - *org_cpp
                Capabilities:
                    <<: *ApplicationCapabilities
    
    
  • 执行命令生成文件

    -profile 后边的参数从configtx.yaml中的Profiles 里边的配置项

    • 生成创始块文件

      $ configtxgen -profile ZjnuOrgsOrdererGenesis -outputBlock ./genesis.block
      - 在当前目录下得到一个文件: genesis.block
      
    • 生成通道文件

      $ configtxgen -profile ZjnuOrgsChannel -outputCreateChannelTx channel.tx -channelID zjnuchannel
      
    • 生成锚节点更新文件

      这个操作是可选的

      # 每个组织都对应一个锚节点的更新文件
      # go组织锚节点文件
      $ configtxgen -profile ZjnuOrgsChannel -outputAnchorPeersUpdate GoMSPanchors.tx -channelID zjnuchannel -asOrg OrgGoMSP
      # cpp组织锚节点文件
      $ configtxgen -profile ZjnuOrgsChannel -outputAnchorPeersUpdate CppMSPanchors.tx -channelID zjnuchannel -asOrg OrgCppMSP
      
      # 查看生成的文件
      $ tree -L 1
      .
      ├── channel-artifacts
      ├── channel.tx	----------> 生成的通道文件
      ├── configtx.yaml
      ├── CppMSPanchors.tx -----> 生成的cpp组织锚节点文件
      ├── crypto-config
      ├── crypto-config.yaml
      ├── genesis.block --------> 生成的创始块文件
      └── GoMSPanchors.tx	------> 生成的go组织锚节点文件
      

将genesis.block、GoMSPanchors.tx、CppMSPanchors.tx、genesis.block移动到channel-artifacts目录下。

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值