日志

Fabric进阶(一)—— 修改组织和通道的名称

 来源    2020-05-23    0  

组织(Org)和通道(Channel)的名称是fabric网络比较重要的两个配置参数,在fabric提供的示例中都已经设置好了这两个参数,一般组织名为"Org1"和"Org2",通道名为"mychannel"。而在实际应用开发中通常需要自定义组织和通道的名称,这里以最接近实际应用的balance-transfer为例说明如何自定义设置组织和通道名称。

前言

Fabric网络在启动前会通过二进制工具cryptogenconfigtxgen生成成员的证书目录排序创世区块以及通道配置交易,组织和通道名称会在此时被写入配置信息中去。

所以如果想自定义设置这两个参数,需要重新生成这些配置信息,以及修改其他有关的配置文件以及应用程序代码。

balance-transfer是fabric-samples中的一个示例,基于fabric Node SDK实现了一个较为完整的应用程序,这里选择的是v1.0.0版本。

一、获取工具cryptogen和configtxgen

下载cryptogenconfigtxgen这两个工具的方法在first-network示例中已经介绍,除了这种从网络直接下载的方法,还可以在fabric项目中手动编译获得。

cd ~/go/src/github/hyperledger/fabric     // 进入fabric目录
make cryptogen && make configtxgen        // 编译生成工具

工具生成于fabric/build/bin目录下,移动至.../fabric-samples/balance-transfer/artifacts/channel目录下供后续使用。

二、修改cryptogen.yaml和configtx.yaml配置文件

这两个文件存放在bartifacts/channel目录下的,作用是配合上述工具生成网络初始化的配置信息。
改动很简单,将文件中的"Org1"和"Org2"分别替换成想要设置的组织名称即可。

三、生成证书目录,创世区块和通道配置交易

artifacts/channel目录下执行以下命令生成配置信息。

rm -rf crypto-config genesis.block mychannel.tx      //删除原有配置
./cryptogen generate --config=./cryptogen.yaml 
./configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./genesis.block 
./configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./airtrip-union.tx -channelID newchannel

注:如果需要修改通道名称,只需要在此步的--channelID参数后指定channel名称(默认是mychannel),然后修改balance-transfer目录下的config.json文件,替换channelName参数即可完成通道名称的修改。

完成后会在channel目录下生成新组织名的crypto-config目录,genesis.block以及newchannel.tx

四、修改网络配置文件network-config.json

该文件路径为app/network-config.json,文件中主要设置了网络各节点的ip和port信息,以及所属的组织。
同样,需要把这个文件中所有与组织名称有关的参数进行替换,注意不要遗漏了其中相关证书路径的修改。

五、修改CA服务器配置文件

这个文件的改动过程比较复杂,因为它是在CA节点启动时在内部自动生成的,想要修改只能够先将内容复制到外部进行改动,再映射到内部达到覆盖的效果。
该文件位于CA节点的文件系统中,需要在启动CA节点后进入容器内部:

docker exec -it ca_peerOrg1            // 假设此时还未修改组织名称
cat /etc/hyperledger/fabric-ca-server/fabric-ca-server-config.yaml

打开该文件找到affiliations部分如下:

affiliations:
org1:
    - department1
    - department2
org2:
    - department1

发现这里把组织名称固定了,如果不修改,则会在用户注册时报错。首先需要在宿主机的artifacts目录下新建一个fabric-ca-server-config.yaml文件,然后将节点内部通过cat打印的整个文件内容复制上去,并且将affiliations部分的组织名修改成想要设置的名称。
这样,新的ca配置文件就在容器外部生成了,在下一步骤会将其映射到容器内部,这样可以覆盖自动生成的配置文件,从而达到修改的目的。

六、修改容器配置文件docker-compose.yaml

1.首先将docker-compose.yaml中所有需要修改的组织名称进行批量替换。

2.将CA节点配置的environment部分的CA KEYFILETLS KEYFILE值最后的私钥文件名(以_sk结尾)改成crypto-config/peerOrganizations/orgname.example.com/ca目录下的私钥文件名称,其中orgname是设置的新组织名称。

这一步是因为我们重新生成了msp目录crypto-config,所以私钥路径也发生了改变,不重新设置的话CA节点会因为找不到对应文件而启动失败。

3.设置CA服务器配置文件。将上一步重新生成的CA配置文件映射到容器内部,需要在volumes部分添加一行:

- ./fabric-ca-server-config.yaml:/etc/hyperledger/fabric-ca-server/fabric-ca-server-config.yaml

七、修改应用程序代码

1.修改app/helper.js
helper.js最开始的一段全局代码中有如下语句:

for (let key in ORGS) {
    if (key.indexOf('org') === 0) {
        ...
    }
}

ORGS对象是从network-config.json中读取的所有组织信息,键分别为"orderer", "org1"和"org2"(未修改前),这一段循环的意思是对orderer除外的其他组织进行操作,但是很显然这里的if语句默认针对的是org1和org2,而我们修改了组织名称之后直接就失效了。
所以应该将if语句改为

if (key != 'orderer') {...}

2.修改启动及测试脚本
最后需要把启动脚本runApp.sh和testApp.sh中和组织名、通道名有关的变量进行修改,改完后分别启动这两个脚本就可以完成新网络的启动及测试,这时候就可以发现组织和通道的名称已经改成了我们自定义设置的内容啦!

脚本一键配置

没想到修改两个小小的参数竟然需要如此多繁琐的步骤,牵扯到这么多的配置文件,属实有点抽象。关于这个问题我写了一个能够一键执行完成以上操作的脚本,地址为https://github.com/zhayujie/fabric-tools。执行如下命令就可以设置整个项目的组织和通道名称:

./set_config.sh <orgName> <channelName>

主要的操作是去自动生成证书等初始配置,以及对需要修改的配置文件进行批量替换。目前这个脚本只适用于单机单组织,稍作修改就可以应用于多机和多组织场景下。

相关文章
树状数组进阶 - 区间修改区间查询、二维树状数组
日志目录: ① 单点修改.区间查询 树状数组 原理 ② 区间查询.单点修改 树状数组 ③ 区间查询.区间修改 树状数组 ④ 二维树状数组 单点修改.区间查询 二维树状数组 区间修改.单点查询 二维树状数组 ...
Liferay 6.2 改造系列之十四:修改组织的表单内容
日志在/portal-master/portal-impl/src/portal.properties文件中,有如下配置: # # Input a list of sections that will b ...
1
Hyperledger Fabric服务器配置及修改Docker容器卷宗存储根目录/位置
日志Hyperledger Fabric节点服务器对存储空间的消耗还是比较大的,在我实际生产体验的过程中,每一条请求数据大概仅2K左右,但实际占用空间远不止这点,每个节点都会对Block及链进行保存维护, ...
1
树状数组进阶-区间修改+区间查询
日志树状数组进阶: 区间修改与区间查询 今天老糊涂了,树状数组忘记了,基本的只要单点修改+区间查询功能,如果要进行区间加操作,需要把树状数组进行改造. 我们首先来回顾树状数组的功能: lowbit(x&a ...
1
在VBA中修改现有的Excel连接名称
问答我需要更新excel工作簿的sql连接的连接名称.这是我的尝试.我已经能够通过执行标准替换来修改连接字符串和命令文本. Sub ConnectionString_modify() Dim i As L ...
在xquery中修改sql server xml元素名称变量
问答我需要元素的名称也是一个变量(是程序的参数) 而不是这个,哪个工作正常: DECLARE @VAR VARCHAR(5) SET @VAR = 'false' UPDATE CURVES SET CU ...
1
.net – 是否可以修改PDF表单字段名称?
问答这是情况.我有一个带有自动生成的pdf表单字段名称的PDF.问题是这些名称不是非常用户友好.它们看起来像: topmostSubform [0] .Page1 [0] .Website_Address ...
1
amazon-ec2 – 如何修改ec2实例的实例名称
问答我想修改一个亚马逊实例的"name"属性.见附件截图.我需要以编程方式执行,但在EC2 API的任何地方找不到如何设置. 如果重要,我将通过他们的API通过现场请求启动它们.我想设 ...
1
C#命名空间/文件夹:何时过于有组织/创建太多名称空间不对?
问答我喜欢在开发时保持井井有条,将相关的* .cs分组到他们自己的文件夹中: ->Project --->Enums --->Exceptions --->Extensions - ...
1
sql-server-2005 – 触发器是否有可能找到修改数据的存储过程的名称?
问答有几个存储过程通常由几个不同的系统调用,以便对我们数据库中的几个表进行维护.有些是自动化的,有些则不是. 其中一个表有一个列有时会关闭,我们不确定何时或为何发生这种情况.我想在表格上设置一个触发器,这 ...
1
修改weblogic访问路径应用名称
日志第一种:在应用WEB-INF文件夹下创建weblogic.xml文件,内容如下,其中<context-root>/abc</context-root>为路径上的应用名 < ...
1
Oracle NID工具修改数据库DBID、数据库名称、数据库实例名
日志DBID是数据库的唯一标识符,在一些特殊场合会涉及到DBID的相关内容,本篇文章的目的是演示将DB_NAME的值从ORCL修改为ORCL1. 一.查看当前的环境 [oracle@oracledb ad ...
1
RK3288 修改设备默认的蓝牙名称
日志path:device/rockchip/rk3288/bluetooth/bdroid_buildcfg.h /* * Copyright (C) 2012 The Android Open Sou ...
修改tomcat启动窗口的名称
日志场景:我们在启动tomcat的时候,一般会出现tomcat窗口,默认窗口名字是tomcat,如果我们想知道这个tomcat的端口号,我们需要查看配置文件,很麻烦有木有.如果我们可以直接把端口号设置在窗 ...
1
(转)修改IIS默认的localhost名称
日志看惯了http://localhost在本地测试的域名,想换种写法行不行,比如说想变成http://www.ceo.com,但网页访问仍然是原来http://localhost的内容,如何做到呢? 可 ...
批量修改zencart型号:品牌名称+型号格式
日志批量修改zencart型号:品牌名称+型号格式 将下面代码保存为zc_change_model.php,上传到网站根目录运行即可,操作前先备份数据库 <?php /*** 批量修改zencart ...
1
oracle – 当我尝试将列从VARCHAR2(200)修改为VARCHAR2(1000)时,为什么会出现“ORA-01429:索引组织表”?
问答它当前是数据库中的VARCHAR2(200),但需要将其提升为VARCHAR(1000),因此我尝试运行此脚本: ALTER TABLE CONTRACTOR MODIFY ( NOTE VARCHA ...
1
android – Crashlytics(Fabric)独立组织的应用程序变体(构建类型,产品风格)
问答这是自我回答的问题,以分享我的知识. 我有一个具有多种产品口味的项目,我想使用不同的组织来整合Fabric,以获得每种产品的味道. 我试图使用Android Studio Fabric插件来整合Fab ...
hyperledger-fabric – Hyperledger Fabric.是否可以将多个链代码部署到同一个通道?
问答是否可以在Hyperledger结构中将两个不同的链代码部署到同一个通道::是.并且可以将相同的链代码部署到2个或更多通道.如果使用其他名称,甚至可以将相同的链代码部署到同一个通道.
1
events – 我们在Fabric.js中有canvas修改过的事件吗?
问答在Fabric.js中,我们有Object修改过的事件,比如object:modified.我们是否有整个画布的类似事件. 实际上我正在尝试实现撤消和重做功能.我将画布保存为JSON,如果发生了某些事 ...
1