跟着文档学Fabric:获取通道配置
原文在这里。
1. 获取通道配置
peer channel fetch config config_block.pb -o $ORDERER_CONTAINER -c $CH_NAME --tls --cafile $TLS_ROOT_CA
上述命令需要在peer容器中执行
这一步得到对应通道的protobuf格式的通道配置。protobuf格式的配置文件并不适合阅读,可以使用官方提供的configtxlator来转换成JSON格式的:
configtxlator proto_decode --input config_block.pb --type common.Block --output config_block.json
排除不必要的元数据:
jq .data.data[0].payload.data.config config_block.json > config.json
config.json中就是我们所需要的通道配置。
2. 通过sdk来获取通道配置
除了上面提到的方式,还可以通过官方提供的sdk来获取通道配置。这里以fabric-sdk-go为例来介绍如何通过sdk来获取通道配置。
主要用到的是下面两个包:
- github.com/hyperledger/fabric-sdk-go/pkg/client/ledger 提供账本相关操作接口
- QueryConfigBlock: 获取当前通道使用的配置块
- github.com/hyperledger/fabric/common/tools/protolator 提供protobuf格式转换服务
- DeepMarshalJSON: 将protobuf格式的信息转换为JSON格式
代码示例如下:
blk, err := ledgerClient.QueryConfigBlock(ledger.WithTargetEndpoints(targetPeers...))
if err != nil {
panic(err.Error())
}
buffer := &bytes.Buffer{}
err = protolator.DeepMarshalJSON(buffer, blk)
if err != nil {
panic(err)
}
blockJson := make(map[string]interface{})
err = sonic.Unmarshal(buffer.Bytes(), &blockJson)
config := blockJson["data"].(map[string]interface{})["data"].([]interface{})[0].(map[string]interface{})["payload"].(map[string]interface{})["data"].(map[string]interface{})["config"]
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
Author: mengbin92
Github: mengbin92
cnblogs: 恋水无意
跟着文档学Fabric:获取通道配置的更多相关文章
- iis设置默认文档,提示web.config配置xml格式不正确
网站上传后,配置默认文档,提示web.config配置xml格式不正确,几经尝试,发现是sqlserver密码中的“&”符号惹的祸,web.config文件中不能使用该字符.分享出来,大家遇到 ...
- 没必要看源码。。把文档学通就已经牛逼了(我们大多还是在应用层,还达不到研究的程度。附class与examples大全链接)
[学霸]深圳-鑫 2017/7/11 13:54:07只是学习怎么用QT的话,不用看源码.看帮助文档就很好要学习编码风格与思路,就看看源码 [学神]武汉-朝菌 2017/7/11 13:54:39没必 ...
- Vitepress搭建组件库文档(上)—— 基本配置
在 vite 出现以前,vuepress 是搭建组件库文档不错的工具,支持以 Markdown 方式编写文档.伴随着 vite 的发展,vitepress 已经到了 1.0.0-alpha.22 版本 ...
- 数组对象元素的添加,String对象,BOM对象以及文档对象的获取
数组对象的删除有三种方法: pop(); //移除最后一个元素并返回该元素值shift(); //移除最前一个元素并返回该元素值,数组中元素自动前移splice(0,2); / ...
- 管理员技术(五): 配置文档的访问权限、 配置附加权限、绑定到LDAP验证服务、配置LDAP家目录漫游
一.配置文档的访问权限 问题: 本例要求将文件 /etc/fstab 拷贝为 /var/tmp/fstab,并调整文件 /var/tmp/fstab的权限,满足以下要求: 1> 此文件的拥有者 ...
- api接口文档生成,无需其他配置一键生成基于文本注释
<dependency> <groupId>io.github.yedaxia</groupId> <artifactId>japidocs</a ...
- Cassandra1.2文档学习(15)—— 配置数据一致性
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_config ...
- Ubuntu gitlab安装文档及邮件通知提醒配置
1.安装依赖包,运行命令 sudo apt-get install curl openssh-server ca-certificates postfix 2.由于gitlab官方源可能被“墙”,首先 ...
- ABP文档笔记 - 模块系统 及 配置中心
ABP框架 - 模块系统 ABP框架 - 启动配置 Module System Startup Configuration ABP源码分析三:ABP Module ABP源码分析四:Configura ...
- 基于XML文档的声明式事务配置
<!-- 配置事务切面 --> <aop:config> <aop:pointcut expression="execution(* com.atguigu.t ...
随机推荐
- pyshorteners 长短链接转换
import requests import pyshorteners as psn def long_to_short(url): url = psn.Shortener().chilpit.sho ...
- 工程开发 | CMake工程目录结构和多线程
CMake工程目录结构 lib: 生成的库文件 src: 源文件(.cpp .cc) include: 头文件(.h .hpp) build: 一般在这个文件夹下执行cmake ..(..之前有一个空 ...
- OS | 银行家算法C语言实现
算法简介 银行家算法(Banker's Algorithm)是一个避免死锁( Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法.它以银行借贷 ...
- 2019CCPC-江西省赛(重现赛)队伍题解
2019CCPC江西省赛(重现赛) 第一次组队(和队内dalao:hzf)参加比赛,这次比赛使用的是我的笔电,但因为我来的比较晚,没有提前磨合:比如我的64键位键盘导致hzf突然上手不习惯. Solv ...
- 【每日一题】6.Rinne Loves Edges (树形DP)
题目链接:Here 树形DP 算法讲解:Here 无向联通图其实就是树的形状,其次让我们以 s 为根使得所有的叶子节点不能到达根并且让删去边权的总和最小,那么就是典型的 树形DP 了. \(dp_i\ ...
- redis管道技术pipeline二——api
package spring.redis; import org.springframework.beans.factory.InitializingBean; import org.springfr ...
- vue学习笔记 二、环境搭建+项目创建
系列导航 vue学习笔记 一.环境搭建 vue学习笔记 二.环境搭建+项目创建 vue学习笔记 三.文件和目录结构 vue学习笔记 四.定义组件(组件基本结构) vue学习笔记 五.创建子组件实例 v ...
- freeswitch的任务引擎问题与解决方案
概述 freeswitch核心框架中有一个定时任务系统task,在开发过程中用来做一些延时操作和异步操作很方便. 我们在VOIP的呼叫流程中,经常会有一些对实时性要求没那么高的操作,或者会有阻塞流程的 ...
- python json.loads()、json.dumps()和json.dump()、json.load()区别
json.loads().json.dumps()和json.dump().json.load()分别是两组不同用法 带s的用于数据类型的转换,不带s的用于操作文件. json.loads().jso ...
- Nacos源码 (2) 核心模块
整体架构 服务管理:实现服务CRUD,域名CRUD,服务健康状态检查,服务权重管理等功能 配置管理:实现配置管CRUD,版本管理,灰度管理,监听管理,推送轨迹,聚合数据等功能 元数据管理:提供元数据C ...