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

news2024/11/19 5:49:00

客户端要往 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

© 著作权归作者所有

举报

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1367790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

.NET 6中如何使用Redis

1、安装redis Redis在windows平台上不受官方支持&#xff0c;所以想要在window安装Redis就必须去下载windows提供的安装包。安装地址&#xff1a;https://github.com/tporadowski/redis/releases 2、在NueGet安装包 3、在appsettings.json文件里面添加Redis相关配置信息 &quo…

C#之反编译之路(二)

先阅读C#之反编译之路(一)可以增加文章连续性 阅读C#之反编译之路(一) 如何快速定位代码位置 用一个小小的例子举例,用户反馈新能源车牌号无法录入,燃油车牌正常,查看日志报如下错误 拿到关键字车牌号长度错误直接反编译代码 打开dnSpy.exe→加载项目→CtrlF打开搜索框→输入…

CentOS7本地部署分布式开源监控系统Zabbix并结合内网穿透实现远程访问

前言 Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。能监视各种网络参数&#xff0c;保证服务器系统的安全运营&#xff1b;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 本地zabbix web管理界面限制在只能局域…

spring-boot项目启动类错误: 找不到或无法加载主类 com.**Application

问题&#xff1a;Springboot项目启动报错&#xff1a;错误: 找不到或无法加载主类 com.**Application 解决步骤&#xff1a; 1.File–>Project Structure 2.Modules–>选中你的项目–点击“-”移除 3.重新导入&#xff1a;点击“”号&#xff0c;选择Import Module&…

【Emgu.CV教程】4.2、无缝融合应用之IlluminationChange()函数去除高亮区域

上一篇讲的是ColorChange()函数&#xff0c;今天讲IlluminationChange()函数&#xff0c;它可以去除图片中的高亮区域。试想一下&#xff0c;下面是一张反光背心的夜间照片&#xff0c;反光条颜色特别亮&#xff0c;如果想只把反光的部分变暗一点&#xff0c;其余部分不变&…

文字识别与光学字符识别有什么区别?

随着科技的不断发展&#xff0c;文字识别和光学字符识别技术已经成为我们日常生活和工作中不可或缺的一部分。然而&#xff0c;许多人对于这两者之间的区别并不十分清楚。本文将详细探讨文字识别与光学字符识别之间的差异&#xff0c;以帮助读者更好地理解这两种技术。 文字识…

【JUC】进程和线程

目录 &#x1f4e2;什么是进程?&#x1f3a1;什么是线程?&#x1f680;进程和线程的区别?&#x1f3a2;Java 线程和操作系统的线程有啥区别&#xff1f;&#x1f396;️JDK21的虚拟线程&#x1f3af;虚拟线程和平台线程的对比 &#x1f4e2;什么是进程? 进程是程序的一次执…

Redis 过期删除策略

常见的三种过期删除策略&#xff1a; 定期删除&#xff1b;惰性删除&#xff1b;定时删除&#xff1b; 定期删除策略 每隔一段时间「随机」从数据库中取出一定数量的 key 进行检查&#xff0c;并删除其中的过期key。 定期删除的实现在 expire.c 文件下的 activeExpireCycle …

实现锚点定位功能(React/Vue)

前言 最近接到一个需求&#xff0c;修改某某页面&#xff0c;增加XXX功能&#xff0c;并实现个锚点功能。做产品就是不断优化&#xff0c;增加功能的过程。实现锚点的方式很多&#xff0c; 很多UI库也提供了组件&#xff0c;可以根据自己的需求调整一下组件库也可以实现&#…

HelpLook VS Zendesk:知识库工具的详细对比

在数字化飞速发展的时代&#xff0c;知识已成为企业最宝贵的资产。如何有效地管理和利用这些知识&#xff0c;提高企业的运营效率和创新能力&#xff0c;成为众多企业关注的焦点。而知识库工具成为了企业不可或缺的助手。 HelpLook和Zendesk是市场上两款备受关注的知识库工具&…

机器学习(四) -- 模型评估(4)

系列文章目录 机器学习&#xff08;一&#xff09; -- 概述 机器学习&#xff08;二&#xff09; -- 数据预处理&#xff08;1-3&#xff09; 机器学习&#xff08;三&#xff09; -- 特征工程&#xff08;1-2&#xff09; 机器学习&#xff08;四&#xff09; -- 模型评估…

EF Core 在实际开发中,如何分层?

前言&#xff1a;什么是分层&#xff1f; 分层就是将 EF Core 放在单独的项目中&#xff0c;其它项目如 Asp.net core webapi 项目引用它这样的好处是解耦和项目职责的清晰划分&#xff0c;并且可以重用 EF Core 项目但是也会数据库迁移变得复杂起来 Step by step 步骤 创建一…

java常用应用程序编程接口(API)——String概述及使用案例

前言&#xff1a; 开始学到api的String&#xff0c;整理下心得。打好基础&#xff0c;daydayup! API&#xff1a; API是什么&#xff1f; API&#xff08;Application Programming Interface&#xff09;又名应用程序编程接口。是别人编好的程序的合集。 为什么要使用API&…

计算机基础面试题 |17.精选计算机基础面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

详解Java中的serialVersionUID概念以及作用(附上Demo)

目录 前言1. 概念2. Demo 前言 原本实现Serializable接口的时候一直都没有serialVersionUID属性&#xff0c;直到看到涉及MybatisPlus新项目中都有该属性&#xff0c;于是做了一期学习了解&#xff0c;最后发现该属性类似深度学习训练中的种子seed&#xff0c;类似版本控制&am…

RuntimeError: CUDA error: invalid device ordinal解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

Vue.js设计与实现阅读2

Vue.js设计与实现阅读-2 1、前言2、框架设计的核心要素2、1 提升用户体验2、2 控制代码体积2、3 Tree-Shaking2、4 特性开关2、5 错误处理 1、前言 上一篇我们了解到了 命令式和声明式的区别&#xff0c;前者关注过程&#xff0c;后者关注结果了解了虚拟dom存在的意义&#x…

[C#]winform部署yolov5-onnx模型

【官方框架地址】 https://github.com/ultralytics/yolov5 【算法介绍】 Yolov5&#xff0c;全称为You Only Look Once version 5&#xff0c;是计算机视觉领域目标检测算法的一个里程碑式模型。该模型由ultralytics团队开发&#xff0c;并因其简洁高效的特点而备受关注。Yol…

异常处理:全面覆盖与精细化管理的平衡

异常处理&#xff1a;全面覆盖与精细化管理的平衡 在软件开发中&#xff0c;异常处理是保证系统稳定性和用户体验的重要环节。对于是否应当全面覆盖所有异常并设立兜底机制&#xff0c;业界存在着两种主流思路&#xff1a;全面覆盖原则和精细化处理。如何在这两者间取得平衡&a…

嵌入式Qt-动手编写并运行自己的第1个ARM-Qt程序

介绍了如何搭建在Linux开发板中搭建Qt的运行环境&#xff0c;并测试了Qt自带的例程。 本篇&#xff0c;来介绍如何自己编写一个Qt程序&#xff0c;并将编译结果放到Linux开发板中运行。 1 Windows上编写Qt程序 因为Qt是支持跨平台的&#xff0c;所以我们可以先在Windows平台…