Hyperledger Fabric 自动发现网络信息 discover 工具使用

2024-01-09 06:29:35

客户端要往 Fabric 网络中发送请求,首先需要知道网络的相关信息,如网络中成员组织信息、背书节点的地址、链码安装信息等。

在 Fabric v1.2.0 版本之前,这些信息需要调用者手动指定,容易出错;另外,当网络中信息变更后(如节点上下线)还需要再次更新。

为了解决这些问题,社区自 v1.2.0 版本开始在 Peer 节点上提供 Discovery gRPC 服务,并编写了 discover 客户端工具(入口位于 discovery/cmd),查询 Discovery 服务获取指定信息(如通道内的邻居节点、可对某链码进行背书的节点组)。


主要功能

discover 工具目前提供如下查询功能:

●节点信息,使用 peers 子命令查询通道内各节点的 MSP ID、服务地址和证书等信息。

●通道配置,使用 config 子命令查询通道的配置信息,包括通道内成员组织的身份信息、排序服务信息等。

●链码背书信息,使用 endorsers 子命令查询对某个链码可以进行背书的节点信息。命令使用格式为:discover [全局参数]< 子命令 >[子命令参数列表]。注意,节点信息和链码背书信息查询功能在默认情况下只支持组织管理员,如果希望普通成员也可以查询,需要开启 Peer 配置 peer.discovery.orgMembersAllowedAccess=true。

usage: discover [<flags>] <command> [<args> ...]

Command line client for fabric discovery service

Flags:
  --help                   Show context-sensitive help (also try --help-long and --help-man).
  --configFile=CONFIGFILE  Specifies the config file to load the configuration from
  --peerTLSCA=PEERTLSCA    Sets the TLS CA certificate file path that verifies the TLS peer's certificate
  --tlsCert=TLSCERT        (Optional) Sets the client TLS certificate file path that is used when the peer enforces client authentication
  --tlsKey=TLSKEY          (Optional) Sets the client TLS key file path that is used when the peer enforces client authentication
  --userKey=USERKEY        Sets the user's key file path that is used to sign messages sent to the peer
  --userCert=USERCERT      Sets the user's certificate file path that is used to authenticate the messages sent to the peer
  --MSP=MSP                Sets the MSP ID of the user, which represents the CA(s) that issued its user certificate

Commands:
  help [<command>...]
    Show help.

  peers [<flags>]
    Discover peers

  config [<flags>]
    Discover channel config

  endorsers [<flags>]
    Discover chaincode endorsers

  saveConfig
    Save the config passed by flags into the file specified by --configFile

全局参数

discover 支持的全局参数和相关说明如下:

●--help,输出帮助信息。

●--configFile=CONFIGFILE,指定从配置文件中载入参数配置,无须从命令行指定参数。

●--peerTLSCA=PEERTLSCA,指定校验 Peer 端 TLS 的 CA 证书。

●--tlsCert=TLSCERT,指定客户端使用的 TLS 证书(可选,当 Peer 校验客户端 TLS 时)。

●--tlsKey=TLSKEY,指定客户端使用的 TLS 私钥(可选,当 Peer 校验客户端 TLS 时)。

●--userKey=USERKEY,客户端签名私钥。

●--userCert=USERCERT,客户端签名证书。

●--MSP=MSP,指定客户端的 MSP ID。


peers 子命令

显示通道中的 Peer 节点信息,包括它们的 MSP ID、gRPC 服务监听地址和身份证书。

例如,通过 peer0.org1.example.com 节点查询 businesschannel 通道内的 Peer 节点信息:

discover peers --channel businesschannel --peerTLSCA /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem --userKey /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin\@org1.example.com/msp/keystore/priv_sk --userCert /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin\@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem --MSP Org1MSP --tlsCert /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin\@org1.example.com/tls/client.crt --tlsKey /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin\@org1.example.com/tls/client.key --server peer0.org1.example.com:7051

结果如下:

[
	{
		"MSPID": "Org1MSP",
		"LedgerHeight": 9,
		"Endpoint": "peer0.org1.example.com:7051",
		"Identity": "-----BEGIN CERTIFICATE-----\nMIICKDCCAc+gAwIBAgIRAIc6sjio0hnYI+sBuebcN9gwCgYIKoZIzj0EAwIwczEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzEuZXhhbXBsZS5jb20wHhcNMjIwMjE3MTAzMDAwWhcNMzIwMjE1MTAzMDAw\nWjBqMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN\nU2FuIEZyYW5jaXNjbzENMAsGA1UECxMEcGVlcjEfMB0GA1UEAxMWcGVlcjAub3Jn\nMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABEHhWvyNC5Pp\noJmF9pZzdVkKrLcjhS3ePhEIW/53NrnqZUB5QT6NRvo+rxqpIxAjMMZTTg2OewJd\ng/crbYls2GyjTTBLMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1Ud\nIwQkMCKAIGk9e22kEiVLy3ReWOlHBJklL9JCedP2QWQP/12fsPLuMAoGCCqGSM49\nBAMCA0cAMEQCICVqogpr/tI+sNTy8EYbkuuek4gw5Y/bNNI5cTZJpefKAiB8Zr2o\nx1r62J3DV5qmF2jEAVRV8duwliiAkKW4q1xcNA==\n-----END CERTIFICATE-----\n",
		"Chaincodes": [
			"hyperledger-fabric-contract-java-demo",
			"_lifecycle"
		]
	},
	{
		"MSPID": "Org1MSP",
		"LedgerHeight": 9,
		"Endpoint": "peer1.org1.example.com:8051",
		"Identity": "-----BEGIN CERTIFICATE-----\nMIICKDCCAc6gAwIBAgIQYSi1/xYV9ghavadHl49VMDAKBggqhkjOPQQDAjBzMQsw\nCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy\nYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu\nb3JnMS5leGFtcGxlLmNvbTAeFw0yMjAyMTcxMDMwMDBaFw0zMjAyMTUxMDMwMDBa\nMGoxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T\nYW4gRnJhbmNpc2NvMQ0wCwYDVQQLEwRwZWVyMR8wHQYDVQQDExZwZWVyMS5vcmcx\nLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEp42mYDwJKY11\nntYoyWAwXtIyJiWH/9EB93jVPsFALzicKbibE1vSZlGl1mkb7M5wYCtfai11Bqqz\nUFEz7e+DsqNNMEswDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0j\nBCQwIoAgaT17baQSJUvLdF5Y6UcEmSUv0kJ50/ZBZA//XZ+w8u4wCgYIKoZIzj0E\nAwIDSAAwRQIhAP+WvJIfhdpG/zkc1GrlTwZOppc0JZL9Nl0MfhJ4TMpiAiAfJ8kF\njJeEYOonkKeZcRG77WoeB/+32BCUJNsSIwYyKA==\n-----END CERTIFICATE-----\n",
		"Chaincodes": [
			"hyperledger-fabric-contract-java-demo",
			"_lifecycle"
		]
	},
	{
		"MSPID": "Org2MSP",
		"LedgerHeight": 9,
		"Endpoint": "peer0.org2.example.com:7051",
		"Identity": "-----BEGIN CERTIFICATE-----\nMIICKTCCAc+gAwIBAgIRAJnk+wcTIbag0SNs4f2TAeIwCgYIKoZIzj0EAwIwczEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzIuZXhhbXBsZS5jb20wHhcNMjIwMjE3MTAzMDAwWhcNMzIwMjE1MTAzMDAw\nWjBqMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN\nU2FuIEZyYW5jaXNjbzENMAsGA1UECxMEcGVlcjEfMB0GA1UEAxMWcGVlcjAub3Jn\nMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKtm2wfuhEqm\nht8CqbV1CKAe7YRAao5ySPMCCswpXuX3Amw65L0pFLELhhFHvqoTmwTZOLNHeHCl\nJoDQgoM5DUyjTTBLMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1Ud\nIwQkMCKAINRek9OkgUPYeL4655/hNDSGXlXS/7qqtIzG+9yf2LG2MAoGCCqGSM49\nBAMCA0gAMEUCIQCB9+ASmx0BgYaN30Zeq+z3Gtj/q1yqrae2bD0dJspbMwIgcAFC\nx9CQ52jYET7PbIqJOGPksb8amAPUAJXBOIxVJ7U=\n-----END CERTIFICATE-----\n",
		"Chaincodes": [
			"hyperledger-fabric-contract-java-demo",
			"_lifecycle"
		]
	},
	{
		"MSPID": "Org2MSP",
		"LedgerHeight": 9,
		"Endpoint": "peer1.org2.example.com:8051",
		"Identity": "-----BEGIN CERTIFICATE-----\nMIICKDCCAc+gAwIBAgIRAMV4swH5jaaH+rQ13cBAzcwwCgYIKoZIzj0EAwIwczEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzIuZXhhbXBsZS5jb20wHhcNMjIwMjE3MTAzMDAwWhcNMzIwMjE1MTAzMDAw\nWjBqMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN\nU2FuIEZyYW5jaXNjbzENMAsGA1UECxMEcGVlcjEfMB0GA1UEAxMWcGVlcjEub3Jn\nMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJQ2FIGAqO2J\ngR9LzplbIGt2OXCHklyoQzl/o8OubrAy0hc88KqCFJQeH9gynDDrZM8eSyrlNWTO\nf6ZXcoMMRbejTTBLMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1Ud\nIwQkMCKAINRek9OkgUPYeL4655/hNDSGXlXS/7qqtIzG+9yf2LG2MAoGCCqGSM49\nBAMCA0cAMEQCICAY5hjEBFmhjJgOPNZx7oJIh5YlhPPMPuVnofwXR4ZCAiAVnOzZ\nGzUNe7WFYhT4L2l7xLPl51FjigMoLYjG2Jt+ng==\n-----END CERTIFICATE-----\n",
		"Chaincodes": [
			"hyperledger-fabric-contract-java-demo",
			"_lifecycle"
		]
	}
]


config 子命令

显示网络中的通道配置信息,包括各个组织的 MSP 信息和排序节点信息。

例如,通过 peer0.org1.example.com 节点查询 businesschannel 通道内的配置信息,可以执行如下命令:

discover config --channel businesschannel --peerTLSCA /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem --userKey /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin\@org1.example.com/msp/keystore/priv_sk --userCert /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin\@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem --MSP Org1MSP --tlsCert /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin\@org1.example.com/tls/client.crt --tlsKey /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin\@org1.example.com/tls/client.key --server peer0.org1.example.com:7051

结果将显示通道内的各个 MSP 的信息和排序服务信息:

{
	"msps": {
		"OrdererMSP": {
			"name": "OrdererMSP",
			"root_certs": [
				"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNQVENDQWVTZ0F3SUJBZ0lSQU53NEdYbDlIMmE0S2hKdzM4TzlhWHd3Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHlNakF5TVRjeE1ETXdNREJhRncwek1qQXlNVFV4TURNd01EQmFNR2t4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJRd0VnWURWUVFLRXd0bGVHRnRjR3hsTG1OdmJURVhNQlVHQTFVRUF4TU9ZMkV1WlhoaGJYQnNaUzVqCmIyMHdXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CQndOQ0FBUzdMSWppODVNTVVscGo0bTd6ZW1RZU9TS2EKTnBFWHA3bEF1R3Ryb3ZSMUIwMTVBRzZ4aTFCcCtCRVJNUjZTZXpVV2pGRDlKWHJqWHVJRXc0R0o5YjZZbzIwdwphekFPQmdOVkhROEJBZjhFQkFNQ0FhWXdIUVlEVlIwbEJCWXdGQVlJS3dZQkJRVUhBd0lHQ0NzR0FRVUZCd01CCk1BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0tRWURWUjBPQkNJRUlJSlJGclVMcnQxdk5GQmJORG5OR2RZSkNGSmEKMkdVK0VLbVpEd1ZkVzBLNU1Bb0dDQ3FHU000OUJBTUNBMGNBTUVRQ0lCdnZ6ekhtVW5aUExiWStNYWdDcGhGOApINjJRcnpmSkxnTHZXQmFaaW5LeEFpQlZxQkZWMVBValFoS09RbEVnbzcxeE1HVXlLNHEvbHAwNGF2empXVjY0CmRRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo="
			],
			"crypto_config": {
				"signature_hash_family": "SHA2",
				"identity_identifier_hash_function": "SHA256"
			},
			"tls_root_certs": [
				"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNSRENDQWVxZ0F3SUJBZ0lSQUs4eXNvYjliUmNJRGJyVjJVZjdFTDh3Q2dZSUtvWkl6ajBFQXdJd2JERUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJvd0dBWURWUVFERXhGMGJITmpZUzVsCmVHRnRjR3hsTG1OdmJUQWVGdzB5TWpBeU1UY3hNRE13TURCYUZ3MHpNakF5TVRVeE1ETXdNREJhTUd3eEN6QUoKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaApibU5wYzJOdk1SUXdFZ1lEVlFRS0V3dGxlR0Z0Y0d4bExtTnZiVEVhTUJnR0ExVUVBeE1SZEd4elkyRXVaWGhoCmJYQnNaUzVqYjIwd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFSSlRjKzArcU9RNjU2WkEwanoKVEZWNnRVSkloaWJJbjhxekY5dzduNlpOZkMvaUVjUGI5NmJaMFA2UTZjWGw4SGpySG1qOG9BOVhVUW9LNVc3UgpBU0NlbzIwd2F6QU9CZ05WSFE4QkFmOEVCQU1DQWFZd0hRWURWUjBsQkJZd0ZBWUlLd1lCQlFVSEF3SUdDQ3NHCkFRVUZCd01CTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3S1FZRFZSME9CQ0lFSU5iQ0ZOcy9wUXRQSllZU1RvYkYKRjdnTThIa0o5SFhlL3dGeXFMbHh1YU1yTUFvR0NDcUdTTTQ5QkFNQ0EwZ0FNRVVDSVFDMG9Pdjh6YU95T1JYTApzVFp2VnFUclIrNzBvcTVzRGZNNHNsSStyTE5nM0FJZ01SZjRpUFY2MDFwa2E3ZnpUOUdpTHZmN0hsUWRDZnhDClN3ZC9xRFh4ZElVPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg=="
			],
			"fabric_node_ous": {
				"enable": true,
				"client_ou_identifier": {
					"certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNQVENDQWVTZ0F3SUJBZ0lSQU53NEdYbDlIMmE0S2hKdzM4TzlhWHd3Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHlNakF5TVRjeE1ETXdNREJhRncwek1qQXlNVFV4TURNd01EQmFNR2t4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJRd0VnWURWUVFLRXd0bGVHRnRjR3hsTG1OdmJURVhNQlVHQTFVRUF4TU9ZMkV1WlhoaGJYQnNaUzVqCmIyMHdXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CQndOQ0FBUzdMSWppODVNTVVscGo0bTd6ZW1RZU9TS2EKTnBFWHA3bEF1R3Ryb3ZSMUIwMTVBRzZ4aTFCcCtCRVJNUjZTZXpVV2pGRDlKWHJqWHVJRXc0R0o5YjZZbzIwdwphekFPQmdOVkhROEJBZjhFQkFNQ0FhWXdIUVlEVlIwbEJCWXdGQVlJS3dZQkJRVUhBd0lHQ0NzR0FRVUZCd01CCk1BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0tRWURWUjBPQkNJRUlJSlJGclVMcnQxdk5GQmJORG5OR2RZSkNGSmEKMkdVK0VLbVpEd1ZkVzBLNU1Bb0dDQ3FHU000OUJBTUNBMGNBTUVRQ0lCdnZ6ekhtVW5aUExiWStNYWdDcGhGOApINjJRcnpmSkxnTHZXQmFaaW5LeEFpQlZxQkZWMVBValFoS09RbEVnbzcxeE1HVXlLNHEvbHAwNGF2empXVjY0CmRRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=",
					"organizational_unit_identifier": "client"
				},
				"peer_ou_identifier": {
					"certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNQVENDQWVTZ0F3SUJBZ0lSQU53NEdYbDlIMmE0S2hKdzM4TzlhWHd3Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHlNakF5TVRjeE1ETXdNREJhRncwek1qQXlNVFV4TURNd01EQmFNR2t4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJRd0VnWURWUVFLRXd0bGVHRnRjR3hsTG1OdmJURVhNQlVHQTFVRUF4TU9ZMkV1WlhoaGJYQnNaUzVqCmIyMHdXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CQndOQ0FBUzdMSWppODVNTVVscGo0bTd6ZW1RZU9TS2EKTnBFWHA3bEF1R3Ryb3ZSMUIwMTVBRzZ4aTFCcCtCRVJNUjZTZXpVV2pGRDlKWHJqWHVJRXc0R0o5YjZZbzIwdwphekFPQmdOVkhROEJBZjhFQkFNQ0FhWXdIUVlEVlIwbEJCWXdGQVlJS3dZQkJRVUhBd0lHQ0NzR0FRVUZCd01CCk1BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0tRWURWUjBPQkNJRUlJSlJGclVMcnQxdk5GQmJORG5OR2RZSkNGSmEKMkdVK0VLbVpEd1ZkVzBLNU1Bb0dDQ3FHU000OUJBTUNBMGNBTUVRQ0lCdnZ6ekhtVW5aUExiWStNYWdDcGhGOApINjJRcnpmSkxnTHZXQmFaaW5LeEFpQlZxQkZWMVBValFoS09RbEVnbzcxeE1HVXlLNHEvbHAwNGF2empXVjY0CmRRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=",
					"organizational_unit_identifier": "peer"
				},
				"admin_ou_identifier": {
					"certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNQVENDQWVTZ0F3SUJBZ0lSQU53NEdYbDlIMmE0S2hKdzM4TzlhWHd3Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHlNakF5TVRjeE1ETXdNREJhRncwek1qQXlNVFV4TURNd01EQmFNR2t4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJRd0VnWURWUVFLRXd0bGVHRnRjR3hsTG1OdmJURVhNQlVHQTFVRUF4TU9ZMkV1WlhoaGJYQnNaUzVqCmIyMHdXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CQndOQ0FBUzdMSWppODVNTVVscGo0bTd6ZW1RZU9TS2EKTnBFWHA3bEF1R3Ryb3ZSMUIwMTVBRzZ4aTFCcCtCRVJNUjZTZXpVV2pGRDlKWHJqWHVJRXc0R0o5YjZZbzIwdwphekFPQmdOVkhROEJBZjhFQkFNQ0FhWXdIUVlEVlIwbEJCWXdGQVlJS3dZQkJRVUhBd0lHQ0NzR0FRVUZCd01CCk1BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0tRWURWUjBPQkNJRUlJSlJGclVMcnQxdk5GQmJORG5OR2RZSkNGSmEKMkdVK0VLbVpEd1ZkVzBLNU1Bb0dDQ3FHU000OUJBTUNBMGNBTUVRQ0lCdnZ6ekhtVW5aUExiWStNYWdDcGhGOApINjJRcnpmSkxnTHZXQmFaaW5LeEFpQlZxQkZWMVBValFoS09RbEVnbzcxeE1HVXlLNHEvbHAwNGF2empXVjY0CmRRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=",
					"organizational_unit_identifier": "admin"
				},
				"orderer_ou_identifier": {
					"certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNQVENDQWVTZ0F3SUJBZ0lSQU53NEdYbDlIMmE0S2hKdzM4TzlhWHd3Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHlNakF5TVRjeE1ETXdNREJhRncwek1qQXlNVFV4TURNd01EQmFNR2t4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJRd0VnWURWUVFLRXd0bGVHRnRjR3hsTG1OdmJURVhNQlVHQTFVRUF4TU9ZMkV1WlhoaGJYQnNaUzVqCmIyMHdXVEFUQmdjcWhrak9QUUlCQmdncWhrak9QUU1CQndOQ0FBUzdMSWppODVNTVVscGo0bTd6ZW1RZU9TS2EKTnBFWHA3bEF1R3Ryb3ZSMUIwMTVBRzZ4aTFCcCtCRVJNUjZTZXpVV2pGRDlKWHJqWHVJRXc0R0o5YjZZbzIwdwphekFPQmdOVkhROEJBZjhFQkFNQ0FhWXdIUVlEVlIwbEJCWXdGQVlJS3dZQkJRVUhBd0lHQ0NzR0FRVUZCd01CCk1BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0tRWURWUjBPQkNJRUlJSlJGclVMcnQxdk5GQmJORG5OR2RZSkNGSmEKMkdVK0VLbVpEd1ZkVzBLNU1Bb0dDQ3FHU000OUJBTUNBMGNBTUVRQ0lCdnZ6ekhtVW5aUExiWStNYWdDcGhGOApINjJRcnpmSkxnTHZXQmFaaW5LeEFpQlZxQkZWMVBValFoS09RbEVnbzcxeE1HVXlLNHEvbHAwNGF2empXVjY0CmRRPT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=",
					"organizational_unit_identifier": "orderer"
				}
			}
		},
		"Org1MSP": {
			"name": "Org1MSP",
			"root_certs": [
				"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNVekNDQWZpZ0F3SUJBZ0lSQU9wamxIMFRsLzlteXYrSWZzRGVSSnN3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05Nakl3TWpFM01UQXpNREF3V2hjTk16SXdNakUxTVRBek1EQXcKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkVoVGc2cFRtZ214QnExM0VvRmx5SGozeWd5em9ydWZQb1J3MjlXUVdUNFluMFhTZnNmT1RUZHZRKzJlRThxSgo5WHNVenFmKzVkc2Y4dDF4SFpmR2wxU2piVEJyTUE0R0ExVWREd0VCL3dRRUF3SUJwakFkQmdOVkhTVUVGakFVCkJnZ3JCZ0VGQlFjREFnWUlLd1lCQlFVSEF3RXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QXBCZ05WSFE0RUlnUWcKYVQxN2JhUVNKVXZMZEY1WTZVY0VtU1V2MGtKNTAvWkJaQS8vWFordzh1NHdDZ1lJS29aSXpqMEVBd0lEU1FBdwpSZ0loQU5lRzUzL3hxMHZHTXpaaVVwWG9RZGwySGZFeU9pVXl3bG43c3AvY0hTOGxBaUVBa3dWN09GckhOTnZECkJUT2szVnVneWxwcytOdWxXTGpOU0hXWTB2NTZaZDA9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K"
			],
			"crypto_config": {
				"signature_hash_family": "SHA2",
				"identity_identifier_hash_function": "SHA256"
			},
			"tls_root_certs": [
				"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNWekNDQWYyZ0F3SUJBZ0lRTGUwVEFISlZGaW0zUXB0OGJQSUhFREFLQmdncWhrak9QUVFEQWpCMk1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTVM1bGVHRnRjR3hsTG1OdmJURWZNQjBHQTFVRUF4TVdkR3h6ClkyRXViM0puTVM1bGVHRnRjR3hsTG1OdmJUQWVGdzB5TWpBeU1UY3hNRE13TURCYUZ3MHpNakF5TVRVeE1ETXcKTURCYU1IWXhDekFKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSApFdzFUWVc0Z1JuSmhibU5wYzJOdk1Sa3dGd1lEVlFRS0V4QnZjbWN4TG1WNFlXMXdiR1V1WTI5dE1SOHdIUVlEClZRUURFeFowYkhOallTNXZjbWN4TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMEQKQVFjRFFnQUV0OWg1T3VpZlVZekdyN21YcnFSQUJMRDVXTWVJQnUzKzlCcFJsOUhtbnRaSnR1a2JpS0IwbDdkdApvcTROYmVHM1NSRmNvUDFodlI5L1NuZjF2Ny81LzZOdE1Hc3dEZ1lEVlIwUEFRSC9CQVFEQWdHbU1CMEdBMVVkCkpRUVdNQlFHQ0NzR0FRVUZCd01DQmdnckJnRUZCUWNEQVRBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUNrR0ExVWQKRGdRaUJDQjhXckdseUQydUVuZmJjcW50SnBxUzFDTXZ5aHRUYlFpOUVYb0ZIdFBkUnpBS0JnZ3Foa2pPUFFRRApBZ05JQURCRkFpRUFvZzVPY29jVGs1eGFmU2hmMjAzUzJSU2JXNm1xZldhWXZFWC80RjdEUnlBQ0lDaExueHNTCjZPMGJJZm1BbUVQaERFV0E4TTM2M1RkbWpQQTBCbCtXb2lwTQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg=="
			],
			"fabric_node_ous": {
				"enable": true,
				"client_ou_identifier": {
					"certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNVekNDQWZpZ0F3SUJBZ0lSQU9wamxIMFRsLzlteXYrSWZzRGVSSnN3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05Nakl3TWpFM01UQXpNREF3V2hjTk16SXdNakUxTVRBek1EQXcKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkVoVGc2cFRtZ214QnExM0VvRmx5SGozeWd5em9ydWZQb1J3MjlXUVdUNFluMFhTZnNmT1RUZHZRKzJlRThxSgo5WHNVenFmKzVkc2Y4dDF4SFpmR2wxU2piVEJyTUE0R0ExVWREd0VCL3dRRUF3SUJwakFkQmdOVkhTVUVGakFVCkJnZ3JCZ0VGQlFjREFnWUlLd1lCQlFVSEF3RXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QXBCZ05WSFE0RUlnUWcKYVQxN2JhUVNKVXZMZEY1WTZVY0VtU1V2MGtKNTAvWkJaQS8vWFordzh1NHdDZ1lJS29aSXpqMEVBd0lEU1FBdwpSZ0loQU5lRzUzL3hxMHZHTXpaaVVwWG9RZGwySGZFeU9pVXl3bG43c3AvY0hTOGxBaUVBa3dWN09GckhOTnZECkJUT2szVnVneWxwcytOdWxXTGpOU0hXWTB2NTZaZDA9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K",
					"organizational_unit_identifier": "client"
				},
				"peer_ou_identifier": {
					"certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNVekNDQWZpZ0F3SUJBZ0lSQU9wamxIMFRsLzlteXYrSWZzRGVSSnN3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05Nakl3TWpFM01UQXpNREF3V2hjTk16SXdNakUxTVRBek1EQXcKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkVoVGc2cFRtZ214QnExM0VvRmx5SGozeWd5em9ydWZQb1J3MjlXUVdUNFluMFhTZnNmT1RUZHZRKzJlRThxSgo5WHNVenFmKzVkc2Y4dDF4SFpmR2wxU2piVEJyTUE0R0ExVWREd0VCL3dRRUF3SUJwakFkQmdOVkhTVUVGakFVCkJnZ3JCZ0VGQlFjREFnWUlLd1lCQlFVSEF3RXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QXBCZ05WSFE0RUlnUWcKYVQxN2JhUVNKVXZMZEY1WTZVY0VtU1V2MGtKNTAvWkJaQS8vWFordzh1NHdDZ1lJS29aSXpqMEVBd0lEU1FBdwpSZ0loQU5lRzUzL3hxMHZHTXpaaVVwWG9RZGwySGZFeU9pVXl3bG43c3AvY0hTOGxBaUVBa3dWN09GckhOTnZECkJUT2szVnVneWxwcytOdWxXTGpOU0hXWTB2NTZaZDA9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K",
					"organizational_unit_identifier": "peer"
				},
				"admin_ou_identifier": {
					"certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNVekNDQWZpZ0F3SUJBZ0lSQU9wamxIMFRsLzlteXYrSWZzRGVSSnN3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05Nakl3TWpFM01UQXpNREF3V2hjTk16SXdNakUxTVRBek1EQXcKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkVoVGc2cFRtZ214QnExM0VvRmx5SGozeWd5em9ydWZQb1J3MjlXUVdUNFluMFhTZnNmT1RUZHZRKzJlRThxSgo5WHNVenFmKzVkc2Y4dDF4SFpmR2wxU2piVEJyTUE0R0ExVWREd0VCL3dRRUF3SUJwakFkQmdOVkhTVUVGakFVCkJnZ3JCZ0VGQlFjREFnWUlLd1lCQlFVSEF3RXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QXBCZ05WSFE0RUlnUWcKYVQxN2JhUVNKVXZMZEY1WTZVY0VtU1V2MGtKNTAvWkJaQS8vWFordzh1NHdDZ1lJS29aSXpqMEVBd0lEU1FBdwpSZ0loQU5lRzUzL3hxMHZHTXpaaVVwWG9RZGwySGZFeU9pVXl3bG43c3AvY0hTOGxBaUVBa3dWN09GckhOTnZECkJUT2szVnVneWxwcytOdWxXTGpOU0hXWTB2NTZaZDA9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K",
					"organizational_unit_identifier": "admin"
				},
				"orderer_ou_identifier": {
					"certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNVekNDQWZpZ0F3SUJBZ0lSQU9wamxIMFRsLzlteXYrSWZzRGVSSnN3Q2dZSUtvWkl6ajBFQXdJd2N6RUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhHVEFYQmdOVkJBb1RFRzl5WnpFdVpYaGhiWEJzWlM1amIyMHhIREFhQmdOVkJBTVRFMk5oCkxtOXlaekV1WlhoaGJYQnNaUzVqYjIwd0hoY05Nakl3TWpFM01UQXpNREF3V2hjTk16SXdNakUxTVRBek1EQXcKV2pCek1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQk1LUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnhNTgpVMkZ1SUVaeVlXNWphWE5qYnpFWk1CY0dBMVVFQ2hNUWIzSm5NUzVsZUdGdGNHeGxMbU52YlRFY01Cb0dBMVVFCkF4TVRZMkV1YjNKbk1TNWxlR0Z0Y0d4bExtTnZiVEJaTUJNR0J5cUdTTTQ5QWdFR0NDcUdTTTQ5QXdFSEEwSUEKQkVoVGc2cFRtZ214QnExM0VvRmx5SGozeWd5em9ydWZQb1J3MjlXUVdUNFluMFhTZnNmT1RUZHZRKzJlRThxSgo5WHNVenFmKzVkc2Y4dDF4SFpmR2wxU2piVEJyTUE0R0ExVWREd0VCL3dRRUF3SUJwakFkQmdOVkhTVUVGakFVCkJnZ3JCZ0VGQlFjREFnWUlLd1lCQlFVSEF3RXdEd1lEVlIwVEFRSC9CQVV3QXdFQi96QXBCZ05WSFE0RUlnUWcKYVQxN2JhUVNKVXZMZEY1WTZVY0VtU1V2MGtKNTAvWkJaQS8vWFordzh1NHdDZ1lJS29aSXpqMEVBd0lEU1FBdwpSZ0loQU5lRzUzL3hxMHZHTXpaaVVwWG9RZGwySGZFeU9pVXl3bG43c3AvY0hTOGxBaUVBa3dWN09GckhOTnZECkJUT2szVnVneWxwcytOdWxXTGpOU0hXWTB2NTZaZDA9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K",
					"organizational_unit_identifier": "orderer"
				}
			}
		},
		"Org2MSP": {
			"name": "Org2MSP",
			"root_certs": [
				"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNVVENDQWZlZ0F3SUJBZ0lRWDhHQkcvWDg0V29LdmtOeUNaZnU5ekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHlNakF5TVRjeE1ETXdNREJhRncwek1qQXlNVFV4TURNd01EQmEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKRWs1RnpVQTFYYmtKZk5jRnJQSUxvLytKejhMSXdhcFM3U2FneUhBQ0ZhQTRuK0djcVk0Q3d0SDg3WnRmQnNMYgpvaUh5THVDam8reDhnNnAyREN5MXNxTnRNR3N3RGdZRFZSMFBBUUgvQkFRREFnR21NQjBHQTFVZEpRUVdNQlFHCkNDc0dBUVVGQndNQ0JnZ3JCZ0VGQlFjREFUQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDRFUKWHBQVHBJRkQySGkrT3VlZjRUUTBobDVWMHYrNnFyU014dnZjbjlpeHRqQUtCZ2dxaGtqT1BRUURBZ05JQURCRgpBaUVBNVo5Z0tqODFKVHg2U0wzR2hYWm12V0FtYTIzclE1OUpHTXRBR0IyQURjd0NJRlFoM3JCOGdkM0ZKM0hnCkdSVEgwakZlTGtGMURHdEdRRWJ0Vys2ektMZVUKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo="
			],
			"crypto_config": {
				"signature_hash_family": "SHA2",
				"identity_identifier_hash_function": "SHA256"
			},
			"tls_root_certs": [
				"LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNWekNDQWYyZ0F3SUJBZ0lRUityNWtGYnF6WUR2cFhJNzFPd0JYVEFLQmdncWhrak9QUVFEQWpCMk1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWZNQjBHQTFVRUF4TVdkR3h6ClkyRXViM0puTWk1bGVHRnRjR3hsTG1OdmJUQWVGdzB5TWpBeU1UY3hNRE13TURCYUZ3MHpNakF5TVRVeE1ETXcKTURCYU1IWXhDekFKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSApFdzFUWVc0Z1JuSmhibU5wYzJOdk1Sa3dGd1lEVlFRS0V4QnZjbWN5TG1WNFlXMXdiR1V1WTI5dE1SOHdIUVlEClZRUURFeFowYkhOallTNXZjbWN5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJS29aSXpqMEQKQVFjRFFnQUVUWlBZRkxmSUJMUUFkcDVmZ0NxSnZ3SjMyeDY5OG1LWEhibEY2cUR4bFVvMG5GUnRmbkhTU2NLZQplNXdmREtlM0pHS3pWek1RSDJQUlFTSVVHRGVKNWFOdE1Hc3dEZ1lEVlIwUEFRSC9CQVFEQWdHbU1CMEdBMVVkCkpRUVdNQlFHQ0NzR0FRVUZCd01DQmdnckJnRUZCUWNEQVRBUEJnTlZIUk1CQWY4RUJUQURBUUgvTUNrR0ExVWQKRGdRaUJDQm5CN25MTy9yczNHeWpQM09KaXAvYks3OHBDMURjSWtVQUg5T29IWjM4V1RBS0JnZ3Foa2pPUFFRRApBZ05JQURCRkFpQTQwUWNNYzlTdGZONnVVcFhhdGJQWUpyV21TekErdmdVS3MyS1hxQTNxa3dJaEFLeGh4UGVICkhicXRRK2x0bUFHT3JxUTd1RHM5Q0NtWS9WVFNDYmg4Z2E4RAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg=="
			],
			"fabric_node_ous": {
				"enable": true,
				"client_ou_identifier": {
					"certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNVVENDQWZlZ0F3SUJBZ0lRWDhHQkcvWDg0V29LdmtOeUNaZnU5ekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHlNakF5TVRjeE1ETXdNREJhRncwek1qQXlNVFV4TURNd01EQmEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKRWs1RnpVQTFYYmtKZk5jRnJQSUxvLytKejhMSXdhcFM3U2FneUhBQ0ZhQTRuK0djcVk0Q3d0SDg3WnRmQnNMYgpvaUh5THVDam8reDhnNnAyREN5MXNxTnRNR3N3RGdZRFZSMFBBUUgvQkFRREFnR21NQjBHQTFVZEpRUVdNQlFHCkNDc0dBUVVGQndNQ0JnZ3JCZ0VGQlFjREFUQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDRFUKWHBQVHBJRkQySGkrT3VlZjRUUTBobDVWMHYrNnFyU014dnZjbjlpeHRqQUtCZ2dxaGtqT1BRUURBZ05JQURCRgpBaUVBNVo5Z0tqODFKVHg2U0wzR2hYWm12V0FtYTIzclE1OUpHTXRBR0IyQURjd0NJRlFoM3JCOGdkM0ZKM0hnCkdSVEgwakZlTGtGMURHdEdRRWJ0Vys2ektMZVUKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=",
					"organizational_unit_identifier": "client"
				},
				"peer_ou_identifier": {
					"certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNVVENDQWZlZ0F3SUJBZ0lRWDhHQkcvWDg0V29LdmtOeUNaZnU5ekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHlNakF5TVRjeE1ETXdNREJhRncwek1qQXlNVFV4TURNd01EQmEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKRWs1RnpVQTFYYmtKZk5jRnJQSUxvLytKejhMSXdhcFM3U2FneUhBQ0ZhQTRuK0djcVk0Q3d0SDg3WnRmQnNMYgpvaUh5THVDam8reDhnNnAyREN5MXNxTnRNR3N3RGdZRFZSMFBBUUgvQkFRREFnR21NQjBHQTFVZEpRUVdNQlFHCkNDc0dBUVVGQndNQ0JnZ3JCZ0VGQlFjREFUQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDRFUKWHBQVHBJRkQySGkrT3VlZjRUUTBobDVWMHYrNnFyU014dnZjbjlpeHRqQUtCZ2dxaGtqT1BRUURBZ05JQURCRgpBaUVBNVo5Z0tqODFKVHg2U0wzR2hYWm12V0FtYTIzclE1OUpHTXRBR0IyQURjd0NJRlFoM3JCOGdkM0ZKM0hnCkdSVEgwakZlTGtGMURHdEdRRWJ0Vys2ektMZVUKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=",
					"organizational_unit_identifier": "peer"
				},
				"admin_ou_identifier": {
					"certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNVVENDQWZlZ0F3SUJBZ0lRWDhHQkcvWDg0V29LdmtOeUNaZnU5ekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHlNakF5TVRjeE1ETXdNREJhRncwek1qQXlNVFV4TURNd01EQmEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKRWs1RnpVQTFYYmtKZk5jRnJQSUxvLytKejhMSXdhcFM3U2FneUhBQ0ZhQTRuK0djcVk0Q3d0SDg3WnRmQnNMYgpvaUh5THVDam8reDhnNnAyREN5MXNxTnRNR3N3RGdZRFZSMFBBUUgvQkFRREFnR21NQjBHQTFVZEpRUVdNQlFHCkNDc0dBUVVGQndNQ0JnZ3JCZ0VGQlFjREFUQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDRFUKWHBQVHBJRkQySGkrT3VlZjRUUTBobDVWMHYrNnFyU014dnZjbjlpeHRqQUtCZ2dxaGtqT1BRUURBZ05JQURCRgpBaUVBNVo5Z0tqODFKVHg2U0wzR2hYWm12V0FtYTIzclE1OUpHTXRBR0IyQURjd0NJRlFoM3JCOGdkM0ZKM0hnCkdSVEgwakZlTGtGMURHdEdRRWJ0Vys2ektMZVUKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=",
					"organizational_unit_identifier": "admin"
				},
				"orderer_ou_identifier": {
					"certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNVVENDQWZlZ0F3SUJBZ0lRWDhHQkcvWDg0V29LdmtOeUNaZnU5ekFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHlNakF5TVRjeE1ETXdNREJhRncwek1qQXlNVFV4TURNd01EQmEKTUhNeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVJrd0Z3WURWUVFLRXhCdmNtY3lMbVY0WVcxd2JHVXVZMjl0TVJ3d0dnWURWUVFECkV4TmpZUzV2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUUKRWs1RnpVQTFYYmtKZk5jRnJQSUxvLytKejhMSXdhcFM3U2FneUhBQ0ZhQTRuK0djcVk0Q3d0SDg3WnRmQnNMYgpvaUh5THVDam8reDhnNnAyREN5MXNxTnRNR3N3RGdZRFZSMFBBUUgvQkFRREFnR21NQjBHQTFVZEpRUVdNQlFHCkNDc0dBUVVGQndNQ0JnZ3JCZ0VGQlFjREFUQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01Da0dBMVVkRGdRaUJDRFUKWHBQVHBJRkQySGkrT3VlZjRUUTBobDVWMHYrNnFyU014dnZjbjlpeHRqQUtCZ2dxaGtqT1BRUURBZ05JQURCRgpBaUVBNVo5Z0tqODFKVHg2U0wzR2hYWm12V0FtYTIzclE1OUpHTXRBR0IyQURjd0NJRlFoM3JCOGdkM0ZKM0hnCkdSVEgwakZlTGtGMURHdEdRRWJ0Vys2ektMZVUKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=",
					"organizational_unit_identifier": "orderer"
				}
			}
		}
	},
	"orderers": {
		"OrdererMSP": {
			"endpoint": [
				{
					"host": "orderer0.example.com",
					"port": 7050
				},
				{
					"host": "orderer1.example.com",
					"port": 8050
				},
				{
					"host": "orderer2.example.com",
					"port": 9050
				}
			]
		}
	}
}

endorsers 子命令

显示网络中的背书节点信息,包括它们的 MSP ID、账本高度、服务地址和身份证书等。

discover --configFile discover_config.yaml endorsers --channel businesschannel --chaincode hyperledger-fabric-contract-java-demo --server peer0.org1.example.com:7051

结果如下:

[
	{
		"Chaincode": "hyperledger-fabric-contract-java-demo",
		"EndorsersByGroups": {
			"G0": [
				{
					"MSPID": "Org1MSP",
					"LedgerHeight": 9,
					"Endpoint": "peer1.org1.example.com:8051",
					"Identity": "-----BEGIN CERTIFICATE-----\nMIICKDCCAc6gAwIBAgIQYSi1/xYV9ghavadHl49VMDAKBggqhkjOPQQDAjBzMQsw\nCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy\nYW5jaXNjbzEZMBcGA1UEChMQb3JnMS5leGFtcGxlLmNvbTEcMBoGA1UEAxMTY2Eu\nb3JnMS5leGFtcGxlLmNvbTAeFw0yMjAyMTcxMDMwMDBaFw0zMjAyMTUxMDMwMDBa\nMGoxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1T\nYW4gRnJhbmNpc2NvMQ0wCwYDVQQLEwRwZWVyMR8wHQYDVQQDExZwZWVyMS5vcmcx\nLmV4YW1wbGUuY29tMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEp42mYDwJKY11\nntYoyWAwXtIyJiWH/9EB93jVPsFALzicKbibE1vSZlGl1mkb7M5wYCtfai11Bqqz\nUFEz7e+DsqNNMEswDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB/wQCMAAwKwYDVR0j\nBCQwIoAgaT17baQSJUvLdF5Y6UcEmSUv0kJ50/ZBZA//XZ+w8u4wCgYIKoZIzj0E\nAwIDSAAwRQIhAP+WvJIfhdpG/zkc1GrlTwZOppc0JZL9Nl0MfhJ4TMpiAiAfJ8kF\njJeEYOonkKeZcRG77WoeB/+32BCUJNsSIwYyKA==\n-----END CERTIFICATE-----\n"
				},
				{
					"MSPID": "Org1MSP",
					"LedgerHeight": 9,
					"Endpoint": "peer0.org1.example.com:7051",
					"Identity": "-----BEGIN CERTIFICATE-----\nMIICKDCCAc+gAwIBAgIRAIc6sjio0hnYI+sBuebcN9gwCgYIKoZIzj0EAwIwczEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xGTAXBgNVBAoTEG9yZzEuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzEuZXhhbXBsZS5jb20wHhcNMjIwMjE3MTAzMDAwWhcNMzIwMjE1MTAzMDAw\nWjBqMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN\nU2FuIEZyYW5jaXNjbzENMAsGA1UECxMEcGVlcjEfMB0GA1UEAxMWcGVlcjAub3Jn\nMS5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABEHhWvyNC5Pp\noJmF9pZzdVkKrLcjhS3ePhEIW/53NrnqZUB5QT6NRvo+rxqpIxAjMMZTTg2OewJd\ng/crbYls2GyjTTBLMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1Ud\nIwQkMCKAIGk9e22kEiVLy3ReWOlHBJklL9JCedP2QWQP/12fsPLuMAoGCCqGSM49\nBAMCA0cAMEQCICVqogpr/tI+sNTy8EYbkuuek4gw5Y/bNNI5cTZJpefKAiB8Zr2o\nx1r62J3DV5qmF2jEAVRV8duwliiAkKW4q1xcNA==\n-----END CERTIFICATE-----\n"
				}
			],
			"G1": [
				{
					"MSPID": "Org2MSP",
					"LedgerHeight": 9,
					"Endpoint": "peer0.org2.example.com:7051",
					"Identity": "-----BEGIN CERTIFICATE-----\nMIICKTCCAc+gAwIBAgIRAJnk+wcTIbag0SNs4f2TAeIwCgYIKoZIzj0EAwIwczEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzIuZXhhbXBsZS5jb20wHhcNMjIwMjE3MTAzMDAwWhcNMzIwMjE1MTAzMDAw\nWjBqMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN\nU2FuIEZyYW5jaXNjbzENMAsGA1UECxMEcGVlcjEfMB0GA1UEAxMWcGVlcjAub3Jn\nMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABKtm2wfuhEqm\nht8CqbV1CKAe7YRAao5ySPMCCswpXuX3Amw65L0pFLELhhFHvqoTmwTZOLNHeHCl\nJoDQgoM5DUyjTTBLMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1Ud\nIwQkMCKAINRek9OkgUPYeL4655/hNDSGXlXS/7qqtIzG+9yf2LG2MAoGCCqGSM49\nBAMCA0gAMEUCIQCB9+ASmx0BgYaN30Zeq+z3Gtj/q1yqrae2bD0dJspbMwIgcAFC\nx9CQ52jYET7PbIqJOGPksb8amAPUAJXBOIxVJ7U=\n-----END CERTIFICATE-----\n"
				},
				{
					"MSPID": "Org2MSP",
					"LedgerHeight": 9,
					"Endpoint": "peer1.org2.example.com:8051",
					"Identity": "-----BEGIN CERTIFICATE-----\nMIICKDCCAc+gAwIBAgIRAMV4swH5jaaH+rQ13cBAzcwwCgYIKoZIzj0EAwIwczEL\nMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG\ncmFuY2lzY28xGTAXBgNVBAoTEG9yZzIuZXhhbXBsZS5jb20xHDAaBgNVBAMTE2Nh\nLm9yZzIuZXhhbXBsZS5jb20wHhcNMjIwMjE3MTAzMDAwWhcNMzIwMjE1MTAzMDAw\nWjBqMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMN\nU2FuIEZyYW5jaXNjbzENMAsGA1UECxMEcGVlcjEfMB0GA1UEAxMWcGVlcjEub3Jn\nMi5leGFtcGxlLmNvbTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJQ2FIGAqO2J\ngR9LzplbIGt2OXCHklyoQzl/o8OubrAy0hc88KqCFJQeH9gynDDrZM8eSyrlNWTO\nf6ZXcoMMRbejTTBLMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMCsGA1Ud\nIwQkMCKAINRek9OkgUPYeL4655/hNDSGXlXS/7qqtIzG+9yf2LG2MAoGCCqGSM49\nBAMCA0cAMEQCICAY5hjEBFmhjJgOPNZx7oJIh5YlhPPMPuVnofwXR4ZCAiAVnOzZ\nGzUNe7WFYhT4L2l7xLPl51FjigMoLYjG2Jt+ng==\n-----END CERTIFICATE-----\n"
				}
			]
		},
		"Layouts": [
			{
				"quantities_by_group": {
					"G0": 1,
					"G1": 1
				}
			}
		]
	}
]

saveConfig 子命令

该命令并不与 Peer 节点打交道,它将由参数指定的变量信息保存为本地文件。这样用户在执行后续命令时可以指定该文件,而无须再指定各个参数值。需要通过 --conf igFile=CONFIGFILE 来指定所存放的参数信息文件路径。例如,保存指定的参数信息到本地的 discover_config.yaml 文件,可以执行如下命令:

discover saveConfig --configFile discover_config.yaml --peerTLSCA /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem --userKey /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin\@org1.example.com/msp/keystore/priv_sk --userCert /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin\@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem --MSP Org1MSP --tlsCert /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin\@org1.example.com/tls/client.crt --tlsKey /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin\@org1.example.com/tls/client.key

discover_config.yaml 文件:

version: 0
tlsconfig:
  certpath: /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/client.crt
  keypath: /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/client.key
  peercacertpath: /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem
  timeout: 0s
signerconfig:
  mspid: Org1MSP
  identitypath: /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem
  keypath: /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/priv_sk

有了这个参数文件,当再使用同样的参数时就无须手动指定,直接使用 --configFile discover_config.yaml 即可。当然,用户也可以手动编写参数文件,但直接使用 saveConfig 命令自动生成将更加方便、高效。

fabrichyperledgerz3jns

? 著作权归作者所有

举报

文章来源:https://blog.csdn.net/y19910825/article/details/135468926
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。