🧭
区块链技术指南
  • 前言
  • 修订记录
  • 如何贡献
  • 区块链的诞生
    • 记账科技的千年演化
    • 分布式记账与区块链
    • 集大成者的比特币
    • 区块链的商业价值
    • 本章小结
  • 核心技术概览
    • 定义与原理
    • 技术的演化与分类
    • 关键问题和挑战
    • 趋势与展望
    • 认识上的误区
    • 本章小结
  • 典型应用场景
    • 应用场景概览
    • 金融服务
    • 征信管理
    • 权属管理与溯源
    • 资源共享
    • 物流与供应链
    • 物联网
    • 数字艺术品和 NFT
    • 其它场景
    • 本章小结
  • 分布式系统核心技术
    • 一致性问题
    • 共识算法
    • FLP 不可能原理
    • CAP 原理
    • ACID 原则与多阶段提交
    • Paxos 算法与 Raft 算法
    • 拜占庭问题与算法
    • 可靠性指标
    • 本章小结
  • 密码学与安全技术
    • 密码学简史
    • Hash 算法与数字摘要
    • 加解密算法
    • 消息认证码与数字签名
    • 数字证书
    • PKI 体系
    • Merkle 树结构
    • Bloom Filter 结构
    • 同态加密
    • 其它技术
    • 本章小结
  • 比特币 —— 初露锋芒的区块链
    • 比特币项目简介
    • 比特币诞生背景
    • 工作原理
    • 挖矿过程
    • 共识机制
    • 闪电网络
    • 侧链
    • 热门问题
    • 相关工具
    • 本章小结
  • 以太坊 —— 挣脱加密货币的枷锁
    • 以太坊项目简介
    • 核心概念
    • 主要设计
    • 相关工具
    • 安装客户端
    • 使用智能合约
    • 智能合约案例:投票
    • 本章小结
  • 超级账本 —— 面向企业的分布式账本
    • 超级账本项目简介
    • 社区组织结构
    • 顶级项目介绍
    • 开发必备工具
    • 贡献代码
    • 本章小结
  • Fabric 安装与部署
    • 简介
    • 本地编译组件
    • 容器方式获取
    • 本地方式启动 Fabric 网络
    • 容器方式启动 Fabric 网络
    • 本章小结
  • 管理 Fabric 网络
    • 简介
    • 使用通道
    • 管理节点
    • 管理链上代码
    • 监听网络事件
    • 自动发现网络信息
    • 使用运维服务
    • 如何升级网络版本
    • 使用 SDK
    • 注意事项与最佳实践
    • 本章小结
  • 智能合约开发
    • 简介
    • 链码概念与结构
    • 示例一:信息公证
    • 示例二:交易资产
    • 示例三:数字货币发行与管理
    • 示例四:学历认证
    • 示例五:社区能源共享
    • 小结
  • Fabric 架构与设计
    • 简介
    • 架构设计
    • 消息协议
    • 小结
  • 区块链服务平台设计
    • 简介
    • IBM Bluemix 云区块链服务
    • 微软 Azure 云区块链服务
    • 使用超级账本 Cello 搭建区块链服务
    • 本章小结
  • 性能与评测
    • 简介
    • Hyperledger Fabric v0.6
    • 小结
  • 附录
    • 术语
    • 常见问题
    • Go 语言开发相关
      • 安装与配置 Golang 环境
      • 编辑器与 IDE
      • 高效开发工具
      • 依赖管理
    • ProtoBuf 与 gRPC
    • 参考资源链接
由 GitBook 提供支持
在本页
  • 主要功能
  • 全局参数
  • 子命令
  • peers 子命令
  • config 子命令
  • endorsers 子命令
  • saveConfig 子命令

这有帮助吗?

在GitHub上编辑
  1. 管理 Fabric 网络

自动发现网络信息

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

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

为了解决这些问题,社区自 v1.2.0 版本开始在 Peer 节点上提供了 Discovery 服务,并编写了 discover 客户端工具(位于 discovery/cmd)。该工具可以访问 Peer 节点提供的 Discovery 服务,查询获取指定信息。

主要功能

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

  • 节点信息查询:使用 peers 子命令查询节点的身份、服务等信息;

  • 通道配置:使用 config 子命令查询通道的配置信息,包括成员组织、排序服务信息等;

  • 链码背书信息:使用 endorsers 子命令查询对某个链码可以进行背书的节点信息。

命令使用格式为 discover [全局参数] <子命令> [子命令参数列表]。

全局参数

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。

子命令

discover 目前支持四个子命令:peers、config、endorsers、saveConfig,可以通过 help <子命令> 来查看各子命令的功能和使用方法。

peers 子命令

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

命令格式为 peers [参数列表],支持参数如下:

* --server=SERVER:指定命令连接的 Peer 节点地址;
* --channel=CHANNEL:指定查询某个特定通道内的节点信息。

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

$ discover \
    --peerTLSCA tls/ca.crt \
    --userKey msp/keystore/f76cf3c92dac81103c82d5490c417ac0123c279f93213f65947d8cc69e11fbc5_sk \
    --userCert msp/signcerts/Admin\@org1.example.com-cert.pem \
    --MSP Org1MSP \
    --tlsCert tls/client.crt \
    --tlsKey tls/client.key \
    peers \
    --server peer0.org1.example.com:7051 \
    --channel businesschannel

[
	{
		"MSPID": "Org2MSP",
		"Endpoint": "peer1.org2.example.com:7051",
		"Identity": "-----BEGIN CERTIFICATE-----\nMIICKD...pVTw==\n-----END CERTIFICATE-----\n"
	},
	{
		"MSPID": "Org2MSP",
		"Endpoint": "peer0.org2.example.com:7051",
		"Identity": "-----BEGIN CERTIFICATE-----\nMIICKT...cGaA=\n-----END CERTIFICATE-----\n"
	},
	{
		"MSPID": "Org1MSP",
		"Endpoint": "peer0.org1.example.com:7051",
		"Identity": "-----BEGIN CERTIFICATE-----\nMIICKD...mgaA==\n-----END CERTIFICATE-----\n"
	},
	{
		"MSPID": "Org1MSP",
		"Endpoint": "peer1.org1.example.com:7051",
		"Identity": "-----BEGIN CERTIFICATE-----\nMIICKD...UO+g==\n-----END CERTIFICATE-----\n"
	}
]

结果显示 businesschannel 通道内目前包括属于 2 个组织的 4 个 Peer 节点成员:

  • Org1MSP

    • peer0.org1.example.com

    • peer1.org1.example.com

  • Org2MSP

    • peer0.org2.example.com

    • peer1.org2.example.com

config 子命令

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

命令格式为 config [<参数>],支持参数如下:

* --server=SERVER:指定命令连接的 Peer 节点地址;
* --channel=CHANNEL:指定查询某个特定通道内的配置信息。

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

$ discover \
    --peerTLSCA tls/ca.crt \
    --userKey msp/keystore/f76cf3c92dac81103c82d5490c417ac0123c279f93213f65947d8cc69e11fbc5_sk \
    --userCert msp/signcerts/Admin\@org1.example.com-cert.pem \
    --MSP Org1MSP \
    --tlsCert tls/client.crt \
    --tlsKey tls/client.key \
    config \
    --server peer0.org1.example.com:7051 \
    --channel businesschannel

{
	"msps": {
		"OrdererMSP": {
			"name": "OrdererMSP",
			"root_certs": [
				"LS0tLS...tLQo="
			],
			"admins": [
				"LS0tLS...LS0K"
			],
			"crypto_config": {
				"signature_hash_family": "SHA2",
				"identity_identifier_hash_function": "SHA256"
			},
			"tls_root_certs": [
				"LS0tLS...0tCg=="
			]
		},
		"Org1MSP": {
			"name": "Org1MSP",
			"root_certs": [
				"LS0tLS...0tCg=="
			],
			"admins": [
				"LS0tLS...LS0K"
			],
			"crypto_config": {
				"signature_hash_family": "SHA2",
				"identity_identifier_hash_function": "SHA256"
			},
			"tls_root_certs": [
				"LS0tLS...LS0K"
			],
			"fabric_node_ous": {
				"enable": true,
				"client_ou_identifier": {
					"certificate": "LS0tLS...0tCg==",
					"organizational_unit_identifier": "client"
				},
				"peer_ou_identifier": {
					"certificate": "LS0tLS...0tCg==",
					"organizational_unit_identifier": "peer"
				}
			}
		},
		"Org2MSP": {
			"name": "Org2MSP",
			"root_certs": [
				"LS0tLS...LS0K"
			],
			"admins": [
				"LS0tLS...0tCg=="
			],
			"crypto_config": {
				"signature_hash_family": "SHA2",
				"identity_identifier_hash_function": "SHA256"
			},
			"tls_root_certs": [
				"LS0tLS...LS0K"
			],
			"fabric_node_ous": {
				"enable": true,
				"client_ou_identifier": {
					"certificate": "LS0tLS...LS0K",
					"organizational_unit_identifier": "client"
				},
				"peer_ou_identifier": {
					"certificate": "LS0tLS...LS0K",
					"organizational_unit_identifier": "peer"
				}
			}
		}
	},
	"orderers": {
		"OrdererMSP": {
			"endpoint": [
				{
					"host": "orderer.example.com",
					"port": 7050
				}
			]
		}
	}
}

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

endorsers 子命令

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

命令格式为 endorsers [参数列表],支持参数如下:

* --server=SERVER:指定命令连接的 Peer 节点地址;
* --channel=CHANNEL:指定查询某个特定通道内的节点信息;
* --chaincode=CHAINCODE:指定链码名称列表;
* --collection=CC:C1,C2...:指定链码中集合信息。

例如,查询可以对链码 marblesp 的 collectionMarbles 集合进行背书的节点,可以执行如下命令:

$ discover \
    --peerTLSCA tls/ca.crt \
    --userKey msp/keystore/f76cf3c92dac81103c82d5490c417ac0123c279f93213f65947d8cc69e11fbc5_sk \
    --userCert msp/signcerts/Admin\@org1.example.com-cert.pem \
    --MSP Org1MSP \
    --tlsCert tls/client.crt \
    --tlsKey tls/client.key \
    endorsers \
    --server peer0.org1.example.com:7051 \
    --channel businesschannel \
    --chaincode marblesp \
    --collection=marblesp:collectionMarbles

[
	{
		"Chaincode": "marblesp",
		"EndorsersByGroups": {
			"G0": [
				{
					"MSPID": "Org1MSP",
					"LedgerHeight": 10,
					"Endpoint": "peer1.org1.example.com:7051",
					"Identity": "-----BEGIN CERTIFICATE-----\nMIICKD...UO+g==\n-----END CERTIFICATE-----\n"
				},
				{
					"MSPID": "Org1MSP",
					"LedgerHeight": 10,
					"Endpoint": "peer0.org1.example.com:7051",
					"Identity": "-----BEGIN CERTIFICATE-----\nMIICKD...mgaA==\n-----END CERTIFICATE-----\n"
				}
			],
			"G1": [
				{
					"MSPID": "Org2MSP",
					"LedgerHeight": 10,
					"Endpoint": "peer0.org2.example.com:7051",
					"Identity": "-----BEGIN CERTIFICATE-----\nMIICKT...cGaA=\n-----END CERTIFICATE-----\n"
				},
				{
					"MSPID": "Org2MSP",
					"LedgerHeight": 10,
					"Endpoint": "peer1.org2.example.com:7051",
					"Identity": "-----BEGIN CERTIFICATE-----\nMIICKD...pVTw==\n-----END CERTIFICATE-----\n"
				}
			]
		},
		"Layouts": [
			{
				"quantities_by_group": {
					"G0": 1
				}
			},
			{
				"quantities_by_group": {
					"G1": 1
				}
			}
		]
	}
]

结果将按组展示符合要求的背书节点的信息。

saveConfig 子命令

该命令并不与 Peer 节点打交道,它将通过参数指定的变量信息保存为本地文件。这样用户在执行后续命令时候可以指定该文件,而无需再指定各个参数值。

需要通过 --configFile=CONFIGFILE 来指定所存放的参数信息文件路径。

例如,保存指定的参数信息到本地的 discover_config.yaml 文件,可以执行如下命令:

$ discover \
    --peerTLSCA tls/ca.crt \
    --userKey msp/keystore/f76cf3c92dac81103c82d5490c417ac0123c279f93213f65947d8cc69e11fbc5_sk \
    --userCert msp/signcerts/Admin\@org1.example.com-cert.pem \
    --MSP Org1MSP \
    --tlsCert tls/client.crt \
    --tlsKey tls/client.key \
    --configFile discover_config.yaml \
    saveConfig

命令执行完成后,查看本地的 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/users/Admin@org1.example.com/tls/ca.crt
  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/f76cf3c92dac81103c82d5490c417ac0123c279f93213f65947d8cc69e11fbc5_sk

有了这个参数文件,当再使用同样的参数时就无需手动指定,直接使用 --configFile discover_config.yaml 即可。

当然,用户也可以手动编写参数文件,但直接使用 saveConfig 命令自动生成将更加方便、高效。

上一页监听网络事件下一页使用运维服务

最后更新于1年前

这有帮助吗?