四、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