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