Hyperledger Fabric相关文件解析
生活随笔
收集整理的這篇文章主要介紹了
Hyperledger Fabric相关文件解析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1相關文件說明
這一部分涉及相關配置文件的解析,
網絡的啟動涉及到多個文件,本文按以下順序進行分析:
3.1 docker-compose-base.yaml文件詳解
先看一下文件內容:
version: '2' #docker版本services: #服務,可以包括若干個容器實例orderer.example.com: #定義一個名稱為orderer.example.com的服務container_name: orderer.example.com #當前容器名稱extends: #擴展,代表需要加載的文件或服務file: peer-base.yaml service: orderer-basevolumes: #掛載的卷 [本機路徑下的文件或目錄]:[容器中所映射到的地址]#比如本機下的channel-artifacts/genesis.block文件可以在容器中/var/hyperledger/orderer/orderer.genesis.block訪問- ../channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block- ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp:/var/hyperledger/orderer/msp- ../crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls/:/var/hyperledger/orderer/tls- orderer.example.com:/var/hyperledger/production/ordererports: #所映射的端口 [本機端口]:[容器端口]- 7050:7050peer0.org1.example.com: #定義一個名稱為peer0.org1.example.com的服務container_name: peer0.org1.example.com #當前容器名稱extends: #同上file: peer-base.yamlservice: peer-baseenvironment: #定義環境變量- CORE_PEER_ID=peer0.org1.example.com #peer節點的id- CORE_PEER_ADDRESS=peer0.org1.example.com:7051 #peer節點的訪問地址- CORE_PEER_LISTENADDRESS=0.0.0.0:7051 #peer節點的監聽地址- CORE_PEER_CHAINCODEADDRESS=peer0.org1.example.com:7052 #peer節點的鏈碼訪問地址- CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052 #peer節點的鏈碼監聽地址 指定為0.0.0.0則自動進行探測- CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org1.example.com:8051 #gossip為共識機制- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051 #gossip外部節點,表明為錨節點- CORE_PEER_LOCALMSPID=Org1MSPvolumes: #同上,掛載卷- /var/run/:/host/var/run/- ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp- ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls- peer0.org1.example.com:/var/hyperledger/productionports: #同上,端口- 7051:7051peer1.org1.example.com:container_name: peer1.org1.example.comextends:file: peer-base.yamlservice: peer-base......3.2 peer-base.yaml文件詳解
version: '2'services:peer-base: #定義一個名稱為peer-base的服務image: hyperledger/fabric-peer:$IMAGE_TAG #該服務所依賴的鏡像environment: #定義環境變量- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=${COMPOSE_PROJECT_NAME}_byfn #定義網絡工作模式,這里使用的是bridge方式- FABRIC_LOGGING_SPEC=INFO #定義日志級別為INFO#- FABRIC_LOGGING_SPEC=DEBUG- CORE_PEER_TLS_ENABLED=true #使用TLS- CORE_PEER_GOSSIP_USELEADERELECTION=true #使用選舉LEADER的方式- CORE_PEER_GOSSIP_ORGLEADER=false #不指定LEADER- CORE_PEER_PROFILE_ENABLED=true #使用profile- CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt #TLS證書路徑- CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key #TLS密鑰路徑- CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt #TLS根證書路徑working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer #工作目錄,即進入容器所在的默認位置command: peer node start #啟動容器后所運行的第一條命令:啟動Peer節點 orderer-base: #定義一個名稱為orderer-base的服務image: hyperledger/fabric-orderer:$IMAGE_TAG #該服務所依賴的鏡像environment: #環境變量- FABRIC_LOGGING_SPEC=INFO #日志級別- ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 #orderer的監聽地址- ORDERER_GENERAL_GENESISMETHOD=file # 創世區塊文件的類型為file- ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block #創世區塊在容器中的路徑- ORDERER_GENERAL_LOCALMSPID=OrdererMSP #Orderer的本地MSPid- ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp #本地Msp文件夾# enabled TLS- ORDERER_GENERAL_TLS_ENABLED=true #使用TLS- ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key #TLS私鑰路徑- ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt #TLS證書路徑- ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt] #TLS根證書路徑- ORDERER_KAFKA_TOPIC_REPLICATIONFACTOR=1 #以下為kafka集群的配置,本文中沒有使用到- ORDERER_KAFKA_VERBOSE=true- ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/var/hyperledger/orderer/tls/server.crt- ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/var/hyperledger/orderer/tls/server.key- ORDERER_GENERAL_CLUSTER_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]working_dir: /opt/gopath/src/github.com/hyperledger/fabric #工作目錄,即進入容器所在的默認位置command: orderer #啟動容器后所運行的第一條命令:啟動orderer3.3 docker-compose-cli.yaml文件詳解
version: '2'volumes: #聲明掛載的卷orderer.example.com:peer0.org1.example.com:peer1.org1.example.com:peer0.org2.example.com:peer1.org2.example.com:networks: #聲明一個名稱為byfn的網絡byfn:services:orderer.example.com: #定義一個名稱為orderer.example.com的服務extends: #擴展,代表需要加載的文件或服務 即使用了其中的配置信息file: base/docker-compose-base.yaml service: orderer.example.com container_name: orderer.example.com #當前容器名稱networks: #指定當前容器所加入的網絡,如果需要加入多個網絡,可以定義多個- byfn#以下同上peer0.org1.example.com: container_name: peer0.org1.example.comextends:file: base/docker-compose-base.yamlservice: peer0.org1.example.comnetworks:- byfnpeer1.org1.example.com:container_name: peer1.org1.example.comextends:file: base/docker-compose-base.yamlservice: peer1.org1.example.comnetworks:- byfnpeer0.org2.example.com:container_name: peer0.org2.example.comextends:file: base/docker-compose-base.yamlservice: peer0.org2.example.comnetworks:- byfnpeer1.org2.example.com:container_name: peer1.org2.example.comextends:file: base/docker-compose-base.yamlservice: peer1.org2.example.comnetworks:- byfncli: #定義一個客戶端容器,方便與各節點進行交互container_name: cli #客戶端容器名稱image: hyperledger/fabric-tools:$IMAGE_TAG #該服務所依賴的鏡像tty: true #使用偽終端stdin_open: true #標準輸入environment: #環境變量- GOPATH=/opt/gopath #指定go的路徑- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock#- FABRIC_LOGGING_SPEC=DEBUG- FABRIC_LOGGING_SPEC=INFO #日志級別- CORE_PEER_ID=cli #當前節點的Id- CORE_PEER_ADDRESS=peer0.org1.example.com:7051 #以下與peer-base.yaml相同,表示當前客戶端容器默認與peer0.org1.example.com進行交互- CORE_PEER_LOCALMSPID=Org1MSP- CORE_PEER_TLS_ENABLED=true- CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt #TLS-peer0.org1.example.com的證書路徑- CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key #TLS-peer0.org1.example.com的密鑰路徑- CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt #TLS-peer0.org1.example.com的根證書路徑- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp @#TLS-組織1中Admin的MSP路徑working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer #工作目錄,即進入容器所在的默認位置command: /bin/bash #啟動容器后所運行的第一條命令:使用bashvolumes: #掛載卷- /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-artifactsdepends_on: #依賴,需要首先按順序啟動以下容器,但是不會等待以下容器完全啟動才啟動當前容器- orderer.example.com- peer0.org1.example.com- peer1.org1.example.com- peer0.org2.example.com- peer1.org2.example.comnetworks: #指定當前容器所加入的網絡- byfn3.4 docker-compose-couch.yaml文件詳解
在fabric網絡中,可以使用默認的levelDb數據庫,或者使用CouchDb,該文件主要是對CouchDb進行相關設置。
version: '2'networks: #聲明一個名稱為byfn的網絡byfn:services:couchdb0: #定義一個couchdb0的服務container_name: couchdb0 #指定該容器名稱為couchdb0image: hyperledger/fabric-couchdb #該容器所依賴的鏡像environment: #環境變量- COUCHDB_USER= #couchdb0的用戶名,這里設置為空,表明任何人都可登陸- COUCHDB_PASSWORD= #couchdb0的登陸密碼,這里設置為空ports: #所映射的端口- "5984:5984"networks: #使用的網絡- byfnpeer0.org1.example.com: #定義一個peer0.org1.example.com的服務environment:- CORE_LEDGER_STATE_STATEDATABASE=CouchDB #指定該服務使用的標準數據庫為CouchDB- CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb0:5984 #指定該服務使用的數據庫訪問地址- CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME= #配置數據庫用戶名- CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD=#配置數據庫密碼depends_on: #表明該服務依賴于couchdb0- couchdb0couchdb1: #以下同上container_name: couchdb1image: hyperledger/fabric-couchdb......3.5 configtx.yaml文件詳解
該文件中定義了fabric網絡中的相關策略信息,內容相對比較多,這里只講解所用到的部分。
Organizations: #組織信息- &OrdererOrg #配置orderer的信息Name: OrdererOrg #定義名稱ID: OrdererMSP #定義IDMSPDir: crypto-config/ordererOrganizations/example.com/msp #指定MSP的文件目錄Policies: #定義相關策略Readers: #可讀Type: Signature Rule: "OR('OrdererMSP.member')" #具體策略:允許OrdererMSP中所有member讀操作Writers: #可寫Type: SignatureRule: "OR('OrdererMSP.member')"Admins: #adminType: SignatureRule: "OR('OrdererMSP.admin')"- &Org1 #配置組織一的信息Name: Org1MSP #定義組織一的名稱ID: Org1MSP #定義組織一的IDMSPDir: crypto-config/peerOrganizations/org1.example.com/msp #指定MSP的文件目錄Policies: #定義相關策略Readers: #可讀Type: SignatureRule: "OR('Org1MSP.admin', 'Org1MSP.peer', 'Org1MSP.client')" #Org1MSP中的admin,peer,client均可進行讀操作Writers: #可寫Type: SignatureRule: "OR('Org1MSP.admin', 'Org1MSP.client')" #Org1MSP中的admin,client均可進行讀操作Admins: #同上Type: SignatureRule: "OR('Org1MSP.admin')"AnchorPeers: #指定Org1的錨節點,只有錨節點可以與另一個組織進行通信- Host: peer0.org1.example.com #指定Org1的錨節點的地址 Port: 7051 #指定Org1的錨節點的端口- &Org2 #同上Name: Org2MSPID: Org2MSPMSPDir: crypto-config/peerOrganizations/org2.example.com/mspPolicies:Readers:Type: SignatureRule: "OR('Org2MSP.admin', 'Org2MSP.peer', 'Org2MSP.client')"Writers:Type: SignatureRule: "OR('Org2MSP.admin', 'Org2MSP.client')"Admins:Type: SignatureRule: "OR('Org2MSP.admin')"AnchorPeers:- Host: peer0.org2.example.comPort: 9051 Capabilities: #這一區域主要是定義版本的兼容情況Channel: &ChannelCapabilitiesV1_3: trueOrderer: &OrdererCapabilitiesV1_1: trueApplication: &ApplicationCapabilitiesV1_3: trueV1_2: falseV1_1: false Application: &ApplicationDefaults #同上,定義具體的策略Organizations:Policies:Readers:Type: ImplicitMetaRule: "ANY Readers"Writers:Type: ImplicitMetaRule: "ANY Writers"Admins:Type: ImplicitMetaRule: "MAJORITY Admins"Capabilities:<<: *ApplicationCapabilities ################################################################################ # Orderer: &OrdererDefaultsOrdererType: solo #定義網絡類型為soloAddresses: #定義orderer的地址- orderer.example.com:7050BatchTimeout: 2s #定義創建一個區塊的超時時間BatchSize:MaxMessageCount: 10 #區塊內最大消息數AbsoluteMaxBytes: 99 MB #區塊內消息所占的最大空間PreferredMaxBytes: 512 KBOrganizations:Policies:Readers:Type: ImplicitMetaRule: "ANY Readers"Writers:Type: ImplicitMetaRule: "ANY Writers"Admins:Type: ImplicitMetaRule: "MAJORITY Admins"BlockValidation: #區塊的驗證策略Type: ImplicitMetaRule: "ANY Writers" ################################################################################ Channel: &ChannelDefaultsPolicies:Readers: #定義誰可以調用交付區塊的APIType: ImplicitMetaRule: "ANY Readers"Writers: #定義誰可以調用廣播區塊的APIType: ImplicitMetaRule: "ANY Writers"Admins: #定義誰可以修改配置信息Type: ImplicitMetaRule: "MAJORITY Admins"Capabilities:<<: *ChannelCapabilitiesProfiles:TwoOrgsOrdererGenesis:<<: *ChannelDefaultsOrderer:<<: *OrdererDefaultsOrganizations:- *OrdererOrgCapabilities:<<: *OrdererCapabilitiesConsortiums:SampleConsortium:Organizations:- *Org1- *Org2TwoOrgsChannel:Consortium: SampleConsortium<<: *ChannelDefaultsApplication:<<: *ApplicationDefaultsOrganizations:- *Org1- *Org2Capabilities:<<: *ApplicationCapabilities轉載請注明作者與出處:https://www.cnblogs.com/cbkj-xd/ 個人網站主頁:https://ifican.top
總結
以上是生活随笔為你收集整理的Hyperledger Fabric相关文件解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: fabric 一个链码如何调用另一个链码
- 下一篇: Go语言中字符串的查找方法小结