基於Hyperledger Fabric1.4 自定義搭建自己的區塊鏈(二)

四、generateChannelArtifacts函數

       使用configtxgen工具根據configtx.yaml文件來生成創世區塊和通道相關信息,更新錨節點。

      1、生成啓動 Orderer 需要的初始化區塊,並支持檢查區塊內容;
      2、生成創建應用通道需要的配置交易,並支持檢查交易內容;
      3、生成 2 個錨節點 Peer 的更新配置交易。
      configtxgen 調用的配置文件爲 configtx.yaml ,該配置文件一般包括四個部分

       1、Profiles:一系列通道配置模板,包括 Orderer 系統通道模板和應用通道類型模板;
       2、Organization:一系列組織結構定義,被其他部分引用;
       3、Orderer:Orderer 系統通道相關配置,包括 Orderer 服務配置和參與 Ordering 服務的可用組織信息;
       4、 Application:應用通道相關配置,主要包括參與應用網絡的可用組織信息。
             調用該函數最終在 channel-artifacts 目錄下生成了四個文件,對應於上述的三個功能:

       channel.tx    genesis.block    OrgaMSPanchors.tx   OrgbMSPanchors.tx

       修改configtx.yaml文件的Profile模塊

################################################################################
#   Profile
#
#   - Different configuration profiles may be encoded here to be specified
#   as parameters to the configtxgen tool
################################################################################
Profiles:

    TwoOrgsOrdererGenesis:
        <<: *ChannelDefaults
        Orderer:
            <<: *OrdererDefaults
            Organizations:
                - *OrdererOrg
            Capabilities:
                <<: *OrdererCapabilities
        Consortiums:
            SampleConsortium:
                Organizations:
                    - *Orga
                    - *Orgb
            TestConsortium:
                Organizations:
                    - *Orga
                    
    TwoOrgsChannel:
        Consortium: SampleConsortium
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *Orga
                - *Orgb
            Capabilities:
                <<: *ApplicationCapabilities
                
    TestChannel:
        Consortium: TestConsortium
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *Orga
            Capabilities:
                <<: *ApplicationCapabilities
    
    SampleDevModeKafka:
        <<: *ChannelDefaults
        Capabilities:
            <<: *ChannelCapabilities
        Orderer:
            <<: *OrdererDefaults
            OrdererType: kafka
            Kafka:
                Brokers:
                - kafka.mikechain.com:9092

            Organizations:
            - *OrdererOrg
            Capabilities:
                <<: *OrdererCapabilities
        Application:
            <<: *ApplicationDefaults
            Organizations:
            - <<: *OrdererOrg
        Consortiums:
            SampleConsortium:
                Organizations:
                - *Orga
                - *Orgb

修改configtx.yaml文件其他組織模塊和配置模塊

Organizations:
    - &OrdererOrg
        Name: OrdererOrg
        ID: OrdererMSP
        MSPDir: crypto-config/ordererOrganizations/mikechain.com/msp
        Policies:
            Readers:
                Type: Signature
                Rule: "OR('OrdererMSP.member')"
            Writers:
                Type: Signature
                Rule: "OR('OrdererMSP.member')"
            Admins:
                Type: Signature
                Rule: "OR('OrdererMSP.admin')"

    - &Orga
        Name: OrgaMSP
        ID: OrgaMSP
        MSPDir: crypto-config/peerOrganizations/orga.mikechain.com/msp
        Policies:
            Readers:
                Type: Signature
                Rule: "OR('OrgaMSP.admin', 'OrgaMSP.peer', 'OrgaMSP.client')"
            Writers:
                Type: Signature
                Rule: "OR('OrgaMSP.admin', 'OrgaMSP.client')"
            Admins:
                Type: Signature
                Rule: "OR('OrgaMSP.admin')"
        AnchorPeers:
            - Host: peer0.orga.mikechain.com
              Port: 7051

    - &Orgb
        Name: OrgbMSP
        ID: OrgbMSP
        MSPDir: crypto-config/peerOrganizations/orgb.mikechain.com/msp
        Policies:
            Readers:
                Type: Signature
                Rule: "OR('OrgbMSP.admin', 'OrgbMSP.peer', 'OrgbMSP.client')"
            Writers:
                Type: Signature
                Rule: "OR('OrgbMSP.admin', 'OrgbMSP.client')"
            Admins:
                Type: Signature
                Rule: "OR('OrgbMSP.admin')"

        AnchorPeers:
            - Host: peer0.orgb.mikechain.com
              Port: 7051

Capabilities:
    Channel: &ChannelCapabilities 
        V1_3: true
    Orderer: &OrdererCapabilities
        V1_1: true
    Application: &ApplicationCapabilities        
        V1_3: true
        V1_2: false
        V1_1: false


Application: &ApplicationDefaults

    Organizations:

    Policies:
        Readers:
            Type: ImplicitMeta
            Rule: "ANY Readers"
        Writers:
            Type: ImplicitMeta
            Rule: "ANY Writers"
        Admins:
            Type: ImplicitMeta
            Rule: "MAJORITY Admins"

    Capabilities:
        <<: *ApplicationCapabilities

Orderer: &OrdererDefaults

    OrdererType: solo

    Addresses:
        - orderer.example.com:7050

    BatchTimeout: 2s

    BatchSize:

        MaxMessageCount: 10

        AbsoluteMaxBytes: 99 MB

        PreferredMaxBytes: 512 KB

    Kafka:
        Brokers:
            - 127.0.0.1:9092

    Organizations:

    
    Policies:
        Readers:
            Type: ImplicitMeta
            Rule: "ANY Readers"
        Writers:
            Type: ImplicitMeta
            Rule: "ANY Writers"
        Admins:
            Type: ImplicitMeta
            Rule: "MAJORITY Admins"
        
        BlockValidation:
            Type: ImplicitMeta
            Rule: "ANY Writers"

Channel: &ChannelDefaults
    
    Policies:
        
        Readers:
            Type: ImplicitMeta
            Rule: "ANY Readers"
        
        Writers:
            Type: ImplicitMeta
            Rule: "ANY Writers"
        
        Admins:
            Type: ImplicitMeta
            Rule: "MAJORITY Admins"

    
    Capabilities:
        <<: *ChannelCapabilities

使用generateChannelArtifacts()函數,生成創世區塊

configtxgen -profile TwoOrgsOrdererGenesis -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block

  創建通道,生成channel.tx文件,在byfn.sh文件中設置$CHANNEL_NAME,默認爲mychannel

configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME

在byfn.sh文件中設置並創建錨節點更新給OrgaMSP

configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg OrgaMSP

在byfn.sh文件中設置並創建錨節點更新給OrgbMSP

configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg OrgbMSP

 

五、根據byfn.sh執行的參數判斷docker-compose執行的配置文件。

5.1 修改docker-compose-couch.yaml,爲每個節點配置相應的couchdb

version: '2'

networks:
  byfn:

services:
  couchdb0:
    container_name: couchdb0
    image: hyperledger/fabric-couchdb
    environment:
      - COUCHDB_USER=
      - COUCHDB_PASSWORD=
    ports:
      - "5984:5984"
    networks:
      - byfn

  peer0.orga.mikechain.com:
    environment:
      - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
      - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb0:5984
      - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME=
      - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD=
    depends_on:
      - couchdb0

  couchdb1:
    container_name: couchdb1
    image: hyperledger/fabric-couchdb
    environment:
      - COUCHDB_USER=
      - COUCHDB_PASSWORD=
    ports:
      - "6984:5984"
    networks:
      - byfn

  peer1.orga.mikechain.com:
    environment:
      - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
      - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb1:5984
      - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME=
      - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD=
    depends_on:
      - couchdb1

  couchdb2:
    container_name: couchdb2
    image: hyperledger/fabric-couchdb
    environment:
      - COUCHDB_USER=
      - COUCHDB_PASSWORD=
    ports:
      - "7984:5984"
    networks:
      - byfn

  peer0.orgb.mikechain.com:
    environment:
      - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
      - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb2:5984
      - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME=
      - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD=
    depends_on:
      - couchdb2

  couchdb3:
    container_name: couchdb3
    image: hyperledger/fabric-couchdb
    environment:
      - COUCHDB_USER=
      - COUCHDB_PASSWORD=
    ports:
      - "8984:5984"
    networks:
      - byfn

  peer1.orgb.mikechain.com:
    environment:
      - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
      - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb3:5984
      - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME=
      - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD=
    depends_on:
      - couchdb3

5.2修改docker-compose客戶端配置文件


version: '2'

volumes:
  orderer.mikechain.com:
  peer0.orga.mikechain.com:
  peer1.orga.mikechain.com:
  peer0.orgb.mikechain.com:
  peer1.orgb.mikechain.com:

networks:
  byfn:

services:

  orderer.mikechain.com:
    extends:
      file:   base/docker-compose-base.yaml
      service: orderer.mikechain.com
    container_name: orderer.mikechain.com
    networks:
      - byfn

  peer0.orga.mikechain.com:
    container_name: peer0.orga.mikechain.com
    extends:
      file:  base/docker-compose-base.yaml
      service: peer0.orga.mikechain.com
    networks:
      - byfn

  peer1.orga.mikechain.com:
    container_name: peer1.orga.mikechain.com
    extends:
      file:  base/docker-compose-base.yaml
      service: peer1.orga.mikechain.com
    networks:
      - byfn

  peer0.orgb.mikechain.com:
    container_name: peer0.orgb.mikechain.com
    extends:
      file:  base/docker-compose-base.yaml
      service: peer0.orgb.mikechain.com
    networks:
      - byfn

  peer1.orgb.mikechain.com:
    container_name: peer1.orgb.mikechain.com
    extends:
      file:  base/docker-compose-base.yaml
      service: peer1.orgb.mikechain.com
    networks:
      - byfn

  cli:
    container_name: cli
    image: hyperledger/fabric-tools:$IMAGE_TAG
    tty: true
    stdin_open: true
    environment:
      - GOPATH=/opt/gopath
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      #- FABRIC_LOGGING_SPEC=DEBUG
      - FABRIC_LOGGING_SPEC=INFO
      - CORE_PEER_ID=cli
      - CORE_PEER_ADDRESS=peer0.orga.mikechain.com:7051
      - CORE_PEER_LOCALMSPID=OrgaMSP
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/orga.mikechain.com/peers/peer0.orga.mikechain.com/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/orga.mikechain.com/peers/peer0.orga.mikechain.com/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/orga.mikechain.com/peers/peer0.orga.mikechain.com/tls/ca.crt
      - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/orga.mikechain.com/users/[email protected]/msp
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: /bin/bash
    volumes:
        - /var/run/:/host/var/run/
        - ./../chaincode/:/opt/gopath/src/github.com/chaincode
        - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
        - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
        - ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
    depends_on:
      - orderer.mikechain.com
      - peer0.orga.mikechain.com
      - peer1.orga.mikechain.com
      - peer0.orgb.mikechain.com
      - peer1.orgb.mikechain.com
    networks:
      - byfn

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章