Fabric區塊鏈網絡應用程序須要大量的參數,用於鏈接Fabric區塊鏈網絡。一般將Fabric區塊鏈網絡應用程序所需的參數放到一個配置文件進行管理,配置文件定義Fabric SDK Go的配置和用戶自定義參數,指定了鏈接Fabric區塊鏈網絡所需的所有信息,例如Fabric區塊鏈網絡組件的主機名和端口等。Fabric SDK GO爲應用程序提供的配置文件一般使用yaml文件格式編寫,並命名爲config.yaml,配置文件會在應用程序代碼中被讀取。
Fabric SDK Go版本提供了config.yaml模板,開發者能夠參考
fabric-sdk-go/pkg/core/config/testdata/template/config.yaml,也能夠根據fabric-sdk-go/test/fixtures/config/config_e2e.yaml實例進行改寫。git
version用於定義config.yaml文件內容的版本,Fabric SDK Go會使用version匹配相應的解析規則。version: 1.0.0
github
channels部分描述已經存在的通道信息,每一個通道包含哪些orderer、peer 。
peer部分能夠定義peer節點的角色屬性,角色以下:
endorsingPeer:可選。peer節點節點必須安裝鏈碼。peer節點是否會被髮送交易提案進行背書。應用程序也可使用本屬性來決定發送鏈碼安裝請求到哪一個peer節點。默認值:true。
chaincodeQuery:可選。peer節點必須安裝鏈碼。peer節點是否會被髮送交易提案只進行查詢。應用程序還可使用本屬性來決定發送鏈碼安裝的請求到哪一個peer節點。默認值:true。
ledgerQuery:可選。是否能夠向peer節點發送不會進行鏈碼查詢的提案,如queryBlock(),queryTransaction()等。默認值:true。
eventSource:可選。peer節點是否爲SDK事件監聽器註冊的目標,全部的peer節點均可以生產事件,但一般只須要鏈接一個對事件進行監聽。默認值:true。數據庫
# 若是應用程序建立了通道,不須要本部分 channels: # 若是沒有定義channel配置或是定義的channel沒有信息,使用默認channel # 若是channel沒有定義peers,使用默認channel的peers # 若是channel沒有定義orderes,使用默認channel的orderes # 若是channel沒有定義背書策略,使用默認channel的背書策略 # 若是channel定義了背書策略,但某些背書策略缺失,缺失的背書策略會被默認channel填充 _default: # 可選,參與組織的peers列表 peers: peer1.org1.example.com: endorsingPeer: true chaincodeQuery: true ledgerQuery: true eventSource: true # 可選,應用程序使用下列選項執行通道操做,如獲取通道配置 policies: #可選,獲取通道配置區塊 queryChannelConfig: #可選,成功響應節點的最小數量 minResponses: 1 # 可選 maxTargets: 1 # 可選,查詢配置區塊的重試選項 retryOpts: # 可選,重試次數 attempts: 5 # 可選, 第一次重試的後退間隔 initialBackoff: 500ms # 可選, 重試的最大後退間隔 maxBackoff: 5s backoffFactor: 2.0 # 可選,獲取發現信息選項 discovery: maxTargets: 2 # 重試選項 retryOpts: # 可選,重試次數 attempts: 4 initialBackoff: 500ms maxBackoff: 5s backoffFactor: 2.0 # 可選,事件服務選項 eventService: # 可選 resolverStrategy指定鏈接到peer節點時選擇peer節點的決策策略 # 可選值:PreferOrg(默認), MinBlockHeight, Balanced # PreferOrg: # 基於區塊高度滯後閥值決定哪些peer節點是合適的, 雖然會在當前組織中優先選擇peer節點 # 若是當前組織中沒有合適的peer節點,會從其它組織中選取 # MinBlockHeight: # 根據區塊高度滯後閥值選擇最好的peer節點, # 全部peer節點的最大區塊高度是肯定的,區塊高度小於最大區塊高度但在滯後閥值範圍內的peer節點會被加載, # 其它peer節點不會被考慮。 # Balanced: # 使用配置的balancer選擇peer節點 resolverStrategy: PreferOrg # 可選 balancer是選擇鏈接到peer節點的負載均衡器 # 可選值: Random (default), RoundRobin balancer: Random # 可選,blockHeightLagThreshold設置區塊高度滯後閥值,用於選擇鏈接到的peer節點 # 若是一個peer節點滯後於最新的peer節點給定的區塊數,會被排除在選擇以外 # 注意:當minBlockHeightResolverMode設置爲ResolveByThreshold時,本參數纔可用 # 默認: 5 blockHeightLagThreshold: 5 # 可選,reconnectBlockHeightLagThreshold - 若是peer節點的區塊高度落後於指定的區塊數量, # 事件客戶端會從peer節點斷開,從新鏈接到一個性能更好的peer節點 # 若是peerMonitor設置爲啓用(默認),本參數纔可用 # 默認值: 10 # 注意:設置值過低會致使事件客戶端頻繁斷開或重連,影響性能 reconnectBlockHeightLagThreshold: 8 # 可選, peerMonitorPeriod是事件客戶端從鏈接節點斷開從新鏈接到另一個節點的時間 # 默認: 對於Balanced resolverStrategy禁用,爲0; 對於PreferOrg和MinBlockHeight爲5s peerMonitorPeriod: 6s #若是_default沒有定義,必選;若是_default已經定義,可選。 # 通道名稱 assetchannel: # 若是_default peers沒有定義,必選;若是_default peers已經定義,可選。 # 參與組織的peer節點列表 peers: peer0.org1.example.com: # 可選。peer節點是否會被髮送交易提議只進行查詢。peer節點必須安裝鏈碼。 # 應用程序還可使用本屬性來決定發送鏈碼安裝的請求到哪一個peer節點。默認值:true endorsingPeer: true # 可選。peer節點必須安裝鏈碼。peer節點是否會被髮送交易提案只進行查詢。 # 應用程序還可使用本屬性來決定發送鏈碼安裝的請求到哪一個peer節點。默認值:true chaincodeQuery: true # 可選。是否能夠向peer節點發送不會進行鏈碼查詢的提案,如queryBlock(), # queryTransaction()等。默認值:true。 ledgerQuery: true # 可選。peer節點是否爲SDK事件監聽器註冊的目標,全部的peer節點均可以生產事件, # 但一般只須要鏈接一個對事件進行監聽。默認值:true。 eventSource: true
organizations描述peer節點所屬的組織(org),證書頒發機構,以及組織的MSP ID。服務器
# Fabric區塊鏈網絡中參與的組織列表 organizations: org1: mspid: Org1MSP # 組織的MSP存儲位置,絕對路徑或相對cryptoconfig的路徑 cryptoPath: peerOrganizations/org1.example.com/users/{username}@org1.example.com/msp peers: - peer0.org1.example.com - peer1.org1.example.com # 可選,證書頒發機構簽發×××明,Fabric-CA是一個特殊的證書管理機構,提供REST API支持動態證書管理,如登記、撤銷、從新登記 # 下列部分只爲Fabric-CA服務器設置 certificateAuthorities: - ca.org1.example.com org2: mspid: Org2MSP # 組織的MSP存儲位置,相對於cryptoconfig的相對位置或絕對路徑 cryptoPath: peerOrganizations/org2.example.com/users/{username}@org2.example.com/msp peers: - peer0.org2.example.com certificateAuthorities: - ca.org2.example.com # Orderer組織名稱 ordererorg: # 組織的MSPID mspID: OrdererMSP # 加載用戶須要的密鑰和證書,絕對路徑或相對路徑 cryptoPath: ordererOrganizations/example.com/users/{username}@example.com/msp
orderers必須指定要鏈接的Hyperledger Fabric區塊鏈網絡中全部orderder節點的主機名和端口。orderers對象能夠包含多個orderder節點。網絡
# 發送交易請求或通道建立、更新請求到的orderers列表 # 若是定義了超過一個orderer,SDK使用哪個orderer由代碼實現時指定 orderers: # orderer節點,能夠定義多個 orderer.example.com: url: orderer.example.com:7050 # 如下屬性由gRPC庫定義,會被傳遞給gRPC客戶端構造函數 grpcOptions: ssl-target-name-override: orderer.example.com # 下列參數用於設置服務器上的keepalive策略,不兼容的設置會致使鏈接關閉 # 當keep-alive-time被設置爲0或小於激活客戶端的參數,下列參數失效 keep-alive-time: 0s keep-alive-timeout: 20s keep-alive-permit: false fail-fast: false allow-insecure: false tlsCACerts: # 證書的絕對路徑 path: ${GOPATH}/src/github.com/hyperledger/fabric-sdk-go/${CRYPTOCONFIG_FIXTURES_PATH}/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem
peers必須指定Hyperledger Fabric區塊鏈網絡中全部peer節點的主機名和端口,可能會在其它地方引用,如channels,organizations等部分。app
# peers節點列表 peers: # peer節點定義,能夠定義多個 peer0.org1.example.com: # URL用於發送背書和查詢請求 url: peer0.org1.example.com:7051 grpcOptions: ssl-target-name-override: peer0.org1.example.com keep-alive-time: 0s keep-alive-timeout: 20s keep-alive-permit: false fail-fast: false allow-insecure: false tlsCACerts: # 證書的絕對路徑 path: ${GOPATH}/src/github.com/hyperledger/fabric-sdk-go/${CRYPTOCONFIG_FIXTURES_PATH}/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem
certificateAuthorities必須在Hyperledger Fabric區塊鏈網絡中指定證書頒發機構(CA)的主機名和端口,以便用於註冊現有用戶和註冊新用戶。負載均衡
# Fabric-CA是Hyperledger Fabric提供了特殊的證書頒發機構,能夠經過REST API管理證書。 # 應用程序能夠選擇使用一個標準的證書頒發機構代替Fabric-CA,此時本部分不須要指定 certificateAuthorities: # CA機構,能夠定義多個 ca.org1.example.com: url: https://ca.org1.example.com:7054 tlsCACerts: # Comma-Separated list of paths path: ${GOPATH}/src/github.com/hyperledger/fabric-sdk-go/${CRYPTOCONFIG_FIXTURES_PATH}/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem # 客戶端和Fabric CA進行SSL握手的密鑰和證書 client: key: path: ${GOPATH}/src/github.com/hyperledger/fabric-sdk-go/${CRYPTOCONFIG_FIXTURES_PATH}/peerOrganizations/tls.example.com/users/User1@tls.example.com/tls/client.key cert: path: ${GOPATH}/src/github.com/hyperledger/fabric-sdk-go/${CRYPTOCONFIG_FIXTURES_PATH}/peerOrganizations/tls.example.com/users/User1@tls.example.com/tls/client.crt # Fabric-CA支持經過REST API進行動態用戶註冊 registrar: enrollId: admin enrollSecret: adminpw # 可選,CA機構名稱 caName: ca.org1.example.com
client部分必需定義,客戶端應用程序表明誰來和Fabric區塊鏈網絡來交互,能夠定義超時選項。dom
#客戶端定義 client: # 客戶端所屬的組織,必須是organizations定義的組織 organization: org1 #定義日誌服務 logging: level: debug #debug級別 # peer、事件服務、orderer超時的全局配置 # 本部分若是忽略,使用下列的值做爲默認值 peer: timeout: connection: 10s response: 180s discovery: greylistExpiry: 10s eventService: timeout: registrationResponse: 15s orderer: timeout: connection: 15s response: 15s global: timeout: query: 180s execute: 180s resmgmt: 180s cache: connectionIdle: 30s eventServiceIdle: 2m channelConfig: 30m channelMembership: 30s discovery: 10s selection: 10m # MSP根目錄 cryptoconfig: path: ${GOPATH}/src/github.com/hyperledger/fabric/AssetExchange/deploy/crypto-config # 某些SDK支持插件化的KV數據庫, 經過指定credentialStore屬性實現 credentialStore: # 可選,用於用戶證書材料存儲,若是全部的證書材料被嵌入到配置文件,則不須要 path: "/tmp/state-store" # 可選,指定Go SDK實現的CryptoSuite實現 cryptoStore: # 指定用於加密密鑰存儲的底層KV數據庫 path: /tmp/msp # 客戶端的BCCSP模塊配置 BCCSP: security: enabled: true default: provider: "SW" hashAlgorithm: "SHA2" softVerify: true level: 256 tlsCerts: # 可選,當鏈接到peers,orderes時使用系統證書池,默認爲false systemCertPool: true # 可選,客戶端和peers與orderes進行TLS握手的密鑰和證書 client: key: path: ${GOPATH}/src/github.com/hyperledger/fabric-sdk-go/${CRYPTOCONFIG_FIXTURES_PATH}/peerOrganizations/tls.example.com/users/User1@tls.example.com/tls/client.key cert: path: ${GOPATH}/src/github.com/hyperledger/fabric-sdk-go/${CRYPTOCONFIG_FIXTURES_PATH}/peerOrganizations/tls.example.com/users/User1@tls.example.com/tls/client.crt
資產交易平臺應用的配置文件以下:ide
# Copyright SecureKey Technologies Inc. All Rights Reserved. # # SPDX-License-Identifier: Apache-2.0 # # # The network connection profile provides client applications the information about the target # blockchain network that are necessary for the applications to interact with it. These are all # knowledge that must be acquired from out-of-band sources. This file provides such a source. name: "assetchannel" # # Describe what the target network is/does. # description: "asset exchange network" #指定版本 version: 1.0.0 #客戶端定義 client: # 客戶端所屬的組織,必須是organizations定義的組織 organization: org1 #定義日誌服務 logging: level: debug #debug級別 # MSP根目錄 cryptoconfig: path: ${GOPATH}/src/github.com/hyperledger/fabric/AssetExchange/deploy/crypto-config # 某些SDK支持插件化的KV數據庫, 經過指定credentialStore屬性實現 credentialStore: # 可選,用於用戶證書材料存儲,若是全部的證書材料被嵌入到配置文件,則不須要 path: "/tmp/state-store" # 可選,指定Go SDK實現的CryptoSuite實現 cryptoStore: # 指定用於加密密鑰存儲的底層KV數據庫 path: /tmp/msp # 客戶端的BCCSP模塊配置 BCCSP: security: enabled: true default: provider: "SW" hashAlgorithm: "SHA2" softVerify: true level: 256 tlsCerts: # 可選,當鏈接到peers,orderes時使用系統證書池,默認爲false systemCertPool: true # 可選,客戶端和peers與orderes進行TLS握手的密鑰和證書 client: key: # path: ${GOPATH}/src/github.com/hyperledger/fabric-sdk-go/${CRYPTOCONFIG_FIXTURES_PATH}/peerOrganizations/tls.example.com/users/User1@tls.example.com/tls/client.key cert: #path: ${GOPATH}/src/github.com/hyperledger/fabric-sdk-go/${CRYPTOCONFIG_FIXTURES_PATH}/peerOrganizations/tls.example.com/users/User1@tls.example.com/tls/client.crt # 若是應用程序建立了通道,不須要本部分 channels: # 若是沒有定義channel配置或是定義的channel沒有信息,使用默認channel # 若是channel沒有定義peers,使用默認channel的peers # 若是channel沒有定義orderes,使用默認channel的orderes # 若是channel沒有定義背書策略,使用默認channel的背書策略 # 若是channel定義了背書策略,但某些背書策略缺失,缺失的背書策略會被默認channel填充 #若是_default沒有定義,必選;若是_default已經定義,可選。 # 通道名稱 assetchannel: # 若是_default peers沒有定義,必選;若是_default peers已經定義,可選。 # 參與組織的peer節點列表 peers: peer0.org1.example.com: # 可選。peer節點是否會被髮送交易提議只進行查詢。peer節點必須安裝鏈碼。 # 應用程序還可使用本屬性來決定發送鏈碼安裝的請求到哪一個peer節點。默認值:true endorsingPeer: true # 可選。peer節點必須安裝鏈碼。peer節點是否會被髮送交易提案只進行查詢。 # 應用程序還可使用本屬性來決定發送鏈碼安裝的請求到哪一個peer節點。默認值:true chaincodeQuery: true # 可選。是否能夠向peer節點發送不會進行鏈碼查詢的提案,如queryBlock(), # queryTransaction()等。默認值:true。 ledgerQuery: true # 可選。peer節點是否爲SDK事件監聽器註冊的目標,全部的peer節點均可以生產事件, # 但一般只須要鏈接一個對事件進行監聽。默認值:true。 eventSource: true # 可選,應用程序使用下列選項執行通道操做,如獲取通道配置 policies: #可選,獲取通道配置區塊 queryChannelConfig: #可選,成功響應節點的最小數量 minResponses: 1 # 可選 maxTargets: 1 # 可選,查詢配置區塊的重試選項 retryOpts: # 可選,重試次數 attempts: 5 # 可選, 第一次重試的後退間隔 initialBackoff: 500ms # 可選, 重試的最大後退間隔 maxBackoff: 5s backoffFactor: 2.0 # Fabric區塊鏈網絡中參與的組織列表 organizations: org1: mspid: Org1MSP # 組織的MSP存儲位置,絕對路徑或相對cryptoconfig的路徑 cryptoPath: peerOrganizations/org1.example.com/users/{username}@org1.example.com/msp peers: - peer0.org1.example.com - peer1.org1.example.com # 可選,證書頒發機構簽發×××明,Fabric-CA是一個特殊的證書管理機構,提供REST API支持動態證書管理,如登記、撤銷、從新登記 # 下列部分只爲Fabric-CA服務器設置 certificateAuthorities: #- ca.org1.example.com # Orderer組織名稱 ordererorg: # 組織的MSPID mspID: OrdererMSP # 加載用戶須要的密鑰和證書,絕對路徑或相對路徑 cryptoPath: ordererOrganizations/example.com/users/{username}@example.com/msp # 發送交易請求或通道建立、更新請求到的orderers列表 # 若是定義了超過一個orderer,SDK使用哪個orderer由代碼實現時指定 orderers: # orderer節點,能夠定義多個 orderer.example.com: url: orderer.example.com:7050 # 如下屬性由gRPC庫定義,會被傳遞給gRPC客戶端構造函數 grpcOptions: ssl-target-name-override: orderer.example.com # 下列參數用於設置服務器上的keepalive策略,不兼容的設置會致使鏈接關閉 # 當keep-alive-time被設置爲0或小於激活客戶端的參數,下列參數失效 keep-alive-time: 0s keep-alive-timeout: 20s keep-alive-permit: false fail-fast: false allow-insecure: false tlsCACerts: # 證書的絕對路徑 # path: ${GOPATH}/src/github.com/hyperledger/fabric-sdk-go/${CRYPTOCONFIG_FIXTURES_PATH}/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem # peers節點列表 peers: # peer節點定義,能夠定義多個 peer0.org1.example.com: # URL用於發送背書和查詢請求 url: peer0.org1.example.com:7051 grpcOptions: ssl-target-name-override: peer0.org1.example.com keep-alive-time: 0s keep-alive-timeout: 20s keep-alive-permit: false fail-fast: false allow-insecure: false tlsCACerts: # 證書的絕對路徑 #path: ${GOPATH}/src/github.com/hyperledger/fabric-sdk-go/${CRYPTOCONFIG_FIXTURES_PATH}/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem