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

客户端要往 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 serviceFlags:--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 certificateCommands:help [<command>...]Show help.peers [<flags>]Discover peersconfig [<flags>]Discover channel configendorsers [<flags>]Discover chaincode endorserssaveConfigSave 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.crtkeypath: /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/tls/client.keypeercacertpath: /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pemtimeout: 0s
signerconfig:mspid: Org1MSPidentitypath: /etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pemkeypath: /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.rhkb.cn/news/234374.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Centos7 手动更改系统时间

文章目录 1.更改系统时间2.写入系统时间3.查看是否写入成功 1.更改系统时间 date -s "2017-12-18 09:40:00"2.写入系统时间 hwclock -w3.查看是否写入成功 timedatectl

RT-Thread:SPI万能驱动 SFUD 驱动Flash W25Q64,通过 STM32CubeMX 配置 STM32 SPI 驱动

关键词&#xff1a;SFUD,FLASH,W25Q64&#xff0c;W25Q128&#xff0c;STM32F407 说明&#xff1a;RT-Thread 系统 使用 SPI万能驱动 SFUD 驱动 Flash W25Q64&#xff0c;通过 STM32CubeMX 配置 STM32 SPI 驱动。 提示&#xff1a;SFUD添加后的存储位置 1.打开RT-Thread Sett…

497 蓝桥杯 成绩分析 简单

497 蓝桥杯 成绩分析 简单 //C风格解法1&#xff0c;*max_element&#xff08;&#xff09;与*min_element&#xff08;&#xff09;求最值 //时间复杂度O(n)&#xff0c;通过率100% #include <bits/stdc.h> using namespace std;using ll long long; const int N 1e4 …

线扫相机品牌汇总(国外+国内)

线扫相机品牌汇总(国外+国内) 行者 ​ 热爱生活 22 人赞同了该文章 线扫相机也叫做线阵相机,和面阵相机一样,都是重要的工业相机。 线扫相机正如其名字那样,拍照时像扫描一样,相机和被拍照物体有相对匀速运动。 Perhaps the most common example of line scan imagin…

谷粒商城项目|微服务架构的一些与思考解决跨域问题

1.微服务架构的组成每部分的作用 2.还有其他的微服务架构模式吗 3.微服务服务交互的方式 1&#xff09;grpc 2&#xff09;rest api 4.微服务网关与API网关&#xff1f; 5.注册中心比较&#xff08;Nacos与Eureka&#xff09; Nacos Nacos 是阿里巴巴开源的项目&#xff0c;N…

黑马程序员JavaWeb开发|案例:tlias智能学习辅助系统(上)准备工作、部门管理

一、准备工作 1.明确需求 根据产品经理绘制的页面原型&#xff0c;对部门和员工进行相应的增删改查操作。 2.环境搭建 将使用相同配置的不同项目作为Module放入同一Project&#xff0c;以提高相同配置的复用性。 准备数据库表&#xff08;dept, emp&#xff09; 资料中包含…

Objective-C中使用STL标准库Queue队列

1.修改.m文件为mm 2.导入queue头 #include<queue> 3.使用&#xff1a; #import <Foundation/Foundation.h> #include <cmath> #include <queue> using namespace std;int main(int argc, const char * argv[]) {autoreleasepool {NSLog("C标准…

POSIX API与网络协议栈

本文介绍linux中与tcp网络通信相关的POSIX API&#xff0c;在每次调用的时候&#xff0c;网络协议栈会进行的操作与记录。 POSIX API Posix API&#xff0c;提供了统一的接口&#xff0c;使程序能得以在不同的系统上运行。简单来说不同的操作系统进行同一个活动&#xff0c;比…

【金猿案例展】黑龙江省粮食质量安全监测和技术中心——荣联助力黑龙江粮食仓储智能化升级...

‍ 荣联科技集团案例 本项目案例由荣联科技集团投递并参与“数据猿年度金猿策划活动——2023大数据产业年度创新服务企业榜单/奖项”评选。 大数据产业创新服务媒体 ——聚焦数据 改变商业 近年来&#xff0c;国家粮食和物资储备信息化工作取得了长足发展&#xff0c;但与新时…

IO进程线程 day7 进程间通信

1.使用消息队列完成两个进程之间相互通信 2.信号通信相关代码的重新实现 &#xff08;1&#xff09;signal函数的实例 #include <head.h>//定义信号处理函数 void handler(int signum) {if(signum SIGINT) //表明要处理2号信号{printf("用户按下了ctrl c键…

将Llama2上下文长度扩展100倍;效率更高的SeTformer;LLM准确度基本不变加速1.56×;FreeTalker

本文首发于公众号&#xff1a;机器感知 将Llama2上下文长度扩展100倍&#xff1b;效率更高的SeTformer&#xff1b;LLM准确度基本不变加速1.56&#xff1b;FreeTalker Latte: Latent Diffusion Transformer for Video Generation 本文使用Latent Diffusion Transformer(Latte…

pod探针2:

就绪探针演示&#xff1a; 演示探针失败 存活探针&#xff08;livenessProde&#xff09;&#xff1a;探测容器是否是否运行正常&#xff0c;如果探测失败则kubelet杀掉容器&#xff08;不是Pod&#xff09;&#xff0c;容器会根据重启策略决定是否重启 就绪探针&#xff08;re…

tcp/ip协议2实现的插图,数据结构6 (24 - 章)

(142) 142 二四1 TCP传输控制协议 tcpstat统计量与tcp 函数调用链 (143) 143 二四2 TCP传输控制协议 宏定义与常量值–上 (144) 144 二四3 TCP传输控制协议 宏定义与常量值–下 (145) 145 二四4 TCP传输控制协议 结构tcphdr,tcpiphdr (146) 146 二四5 TCP传输控制协议 结构 tcp…

【SkyWant.[2304]】路由器操作系统,移动【Netkeeper】使用教程校园网

目录 步骤一&#xff1a;正确连接网线&#xff0c;插电开机正确连接网线&#xff1a; 认识系统灯&#xff1a; 插电开机&#xff1a; 步骤二&#xff1a;开机之后&#xff0c;系统的基本设置 1.进入设置界面&#xff1a; 2.设置辅助热点wifi&#xff1a; 3.设置日常…

互斥、自旋、读写锁的应用场景

互斥、自旋、读写锁的应用场景 锁&#x1f512;1、互斥锁、自旋锁2、读写锁&#xff1a;读写的优先级3、乐观锁和悲观锁总结&#xff1a; 锁&#x1f512; ​ 多线程访问共享资源的生活&#xff0c;避免不了资源竞争而导致错乱的问题&#xff0c;所以我们通常为了解决这一问题…

竞赛保研 基于深度学习的人脸识别系统

前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的人脸识别系统 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng-senior/…

【开源GPT项目 - 在问】让知识无界,智能触手可及

Chatanywhere: chatAnywhere 在问 | 让知识无界&#xff0c;智能触手可及 项目简介 这是一个免费的在线聊天工具&#xff0c;旨在让用户更方便地享受科技带来的便利。用户可以使用我们的工具来获取答案、寻求建议、进行翻译和计算等等。这是由一位个人开发者创建的&#xff…

thinkadmin安装步骤

一,先cmd运行安装命令 ### 创建项目( 需要在英文目录下面执行 ) composer create-project zoujingli/thinkadmin二,在confing中的database.php配置数据库 三,将仓库的data复制到app目录下 https://gitee.com/zoujingli/think-plugs-data 四,在cmd运行命令安装数据库 //…

计算机网络 - 路由器查表过程模拟 C++(2024)

1.题目描述 参考计算机网络教材 140 页 4.3 节内容&#xff0c;编程模拟路由器查找路由表的过程&#xff0c;用&#xff08;目的地址 掩码 下一跳&#xff09; 的 IP 路由表以及目的地址作为输入&#xff0c;为目的地址查找路由表&#xff0c;找出正确的下一跳并输出结果。 1.…

使用SpirngBoot时部分编译报错解决方案:

1. 类文件具有错误的版本 61.0, 应为 52.0 请删除该文件或确保该文件位于正确的类路径子目录中。 报错截图&#xff1a; 解决方案&#xff1a; 找到springboot的java版本看是多少版本&#xff0c;springboot 3.0以上的版本需要最低JDK17的版本&#xff0c;所以查看你自己…