🧭
区块链技术指南
  • 前言
  • 修订记录
  • 如何贡献
  • 区块链的诞生
    • 记账科技的千年演化
    • 分布式记账与区块链
    • 集大成者的比特币
    • 区块链的商业价值
    • 本章小结
  • 核心技术概览
    • 定义与原理
    • 技术的演化与分类
    • 关键问题和挑战
    • 趋势与展望
    • 认识上的误区
    • 本章小结
  • 典型应用场景
    • 应用场景概览
    • 金融服务
    • 征信管理
    • 权属管理与溯源
    • 资源共享
    • 物流与供应链
    • 物联网
    • 数字艺术品和 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 提供支持
在本页

这有帮助吗?

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

监听网络事件

用户可能注意到,发往网络的请求是异步处理模式,这就意味着客户端无法获知提交的交易是否最终接受。Fabric 在 Peer 节点上提供了事件 gRPC 服务,用户可以通过客户端来监听。

下面通过 eventsclient 工具来监听网络中的事件。

首先通过如下命令安装 eventsclient 工具。

$ cd $GOPATH/src/hyperledger/fabric/examples/events/eventsclient
$ go install && go clean

该工具自动封装对 Peer 事件的 gRPC 请求,支持的选项主要包括如下几个:

  • -server "localhost:7053":监听服务地址,一般指定为 Peer 节点的 7053 端口;

  • -channelID string:监听指定通道信息,默认为 testchainid;

  • -seek int:指定从哪个区块开始监听。-2代表从初始区块(默认),-1代表从当前最新区块;

  • -filtered=true:只获取过滤的区块内容,不显示完整内容。

  • -quiet:不打印区块内容,只显示区块号;

  • -tls:是否启用 TLS,默认关闭;

  • -rootCert string:启用 TLS 时指定信任的根 CA 证书路径;

  • -mTls:是否开启双向验证(即服务端也同时验证客户端身份),默认关闭。

  • -clientCert string::启用 TLS 时候客户端证书路径;

  • -clientKey string:启用 TLS 时候客户端私钥路径;

典型地,用户可以通过环境变量指定所需的参数值,使用如下命令启动监听。

$ eventsclient \
   -server=${PEER_URL} \
   -channelID=${APP_CHANNEL} \
   -filtered=true \
   -tls=true \
   -clientKey=${TLS_CLIENT_KEY} \
   -clientCert=${TLS_CLIENT_CERT} \
   -rootCert=${TLS_CA_CERT}

启动后,该工具会持续监听来自指定通道的事件,并打印出来。

例如,监听 businesschannel 通道内区块信息,并对结果进行过滤输出,命令和结果如下所示。

$ CORE_PEER_LOCALMSPID=Org1MSP \
CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp \
eventsclient \
  -server=peer0.org1.example.com:7051 \
  -channelID=businesschannel \
  -filtered=true \
  -tls=true \
  -clientKey=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin@Org1.example.com/tls/client.key \
  -clientCert=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin@Org1.example.com/tls/client.crt \
  -rootCert=/etc/hyperledger/fabric/crypto-config/peerOrganizations/org1.example.com/users/Admin@Org1.example.com/tls/ca.crt

UTC [eventsclient] readEventsStream -> INFO 001 Received filtered block:
{
  "channel_id": "businesschannel",
  "filtered_transactions": [
    {
      "tx_validation_code": "VALID",
      "txid": "",
      "type": "CONFIG"
    }
  ],
  "number": "0"
}
UTC [eventsclient] readEventsStream -> INFO 002 Received filtered block:
{
  "channel_id": "businesschannel",
  "filtered_transactions": [
    {
      "tx_validation_code": "VALID",
      "txid": "",
      "type": "CONFIG"
    }
  ],
  "number": "1"
}
UTC [eventsclient] readEventsStream -> INFO 003 Received filtered block:
{
  "channel_id": "businesschannel",
  "filtered_transactions": [
    {
      "tx_validation_code": "VALID",
      "txid": "",
      "type": "CONFIG"
    }
  ],
  "number": "2"
}
UTC [eventsclient] readEventsStream -> INFO 004 Received filtered block:
{
  "channel_id": "businesschannel",
  "filtered_transactions": [
    {
      "transaction_actions": {
        "chaincode_actions": []
      },
      "tx_validation_code": "VALID",
      "txid": "2832892094f612237b06950b77a6afc13ca9226176e99c2a8577cf4be2074c0a",
      "type": "ENDORSER_TRANSACTION"
    }
  ],
  "number": "3"
}
UTC [eventsclient] readEventsStream -> INFO 005 Received filtered block:
{
  "channel_id": "businesschannel",
  "filtered_transactions": [
    {
      "transaction_actions": {
        "chaincode_actions": []
      },
      "tx_validation_code": "VALID",
      "txid": "fec547335060bb324e8e4a08067c7fa24092e1295cb62dffb14a93bc77b2fbcf",
      "type": "ENDORSER_TRANSACTION"
    }
  ],
  "number": "4"
}
...
上一页管理链上代码下一页自动发现网络信息

最后更新于1年前

这有帮助吗?