Fabric进阶(一)—— 修改组织和通道的名称
组织(Org)和通道(Channel)的名称是fabric网络比较重要的两个配置参数,在fabric提供的示例中都已经设置好了这两个参数,一般组织名为"Org1"和"Org2",通道名为"mychannel"。而在实际应用开发中通常需要自定义组织和通道的名称,这里以最接近实际应用的balance-transfer为例说明如何自定义设置组织和通道名称。
前言
Fabric网络在启动前会通过二进制工具cryptogen和configtxgen生成成员的证书目录、排序创世区块以及通道配置交易,组织和通道名称会在此时被写入配置信息中去。
所以如果想自定义设置这两个参数,需要重新生成这些配置信息,以及修改其他有关的配置文件以及应用程序代码。
balance-transfer是fabric-samples中的一个示例,基于fabric Node SDK实现了一个较为完整的应用程序,这里选择的是v1.0.0版本。
一、获取工具cryptogen和configtxgen
下载cryptogen和configtxgen这两个工具的方法在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 KEYFILE和TLS 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>
主要的操作是去自动生成证书等初始配置,以及对需要修改的配置文件进行批量替换。目前这个脚本只适用于单机单组织,稍作修改就可以应用于多机和多组织场景下。
原文链接:https://zhayujie.com/modify-orgname.html
Fabric进阶(一)—— 修改组织和通道的名称的更多相关文章
- Fabric进阶(三)—— 使用SDK动态增加组织
在fabric网络运行过程中动态追加新的组织是相当复杂的,网上的资料也十分匮乏,大多是基于first-network这样的简单示例,而且是使用启动cli容器的方法来增加组织,几乎没有针对实际应用的解决 ...
- Win10系统修改主机名、用户名称和密码、以及C盘中的用户文件夹名
写在前面 近期重新安装了Ubuntu16.04系统,同时也修改了Windows10系统的用户名.密码,还有C盘用户文件夹名称.对于Linux和windows系统来说,修改名称基本都是三部分,主机名.用 ...
- Android系统移植与调试之------->如何修改Android设备存储盘符名称与Android设备的型号
一.修改Android设备存储盘符名称 (注:TBDG1073为我的项目名称) 1.修改device/other/TBDG1073/system.prop 文件 2.修改ro.media.patiti ...
- 修改android的wifi客户端名称的两种方法
修改android的wifi客户端名称的两种方法 手机连接到无线路由时,在dhcp的客户端列表里面是这样的名称"android-89425253e5de3a2",这就是安卓 ...
- 批量修改zencart型号:品牌名称+型号格式
批量修改zencart型号:品牌名称+型号格式 将下面代码保存为zc_change_model.php,上传到网站根目录运行即可,操作前先备份数据库 <?php /*** 批量修改zencart ...
- Fabric进阶(二)—— 在已有组织中增加节点
fabric网络在创建时就已经确定了初始的节点数量,而在实际应用场景中可能会需要在某个组织中动态增加节点.这里以balance-transfer v1.0为例(2 Org,4 Peer),介绍如何在o ...
- 【干货干货】hyperledger fabric 之动态添加组织/修改配置 (Fabric-java-sdk) 下
我们接着上一节来讲: 在熟悉动态增加组织或修改配置的步骤后,我们就可以使用java的api来完成动态增加组织或修改配置了: 废话不多说,直接上干货: 1,预制条件 org3的证书以及组织3的MSP详情 ...
- Hyperledger Fabric服务器配置及修改Docker容器卷宗存储根目录/位置
Hyperledger Fabric节点服务器对存储空间的消耗还是比较大的,在我实际生产体验的过程中,每一条请求数据大概仅2K左右,但实际占用空间远不止这点,每个节点都会对Block及链进行保存维护, ...
- Liferay 6.2 改造系列之十四:修改组织的表单内容
在/portal-master/portal-impl/src/portal.properties文件中,有如下配置: # # Input a list of sections that will b ...
随机推荐
- nCOV 数据简要分析 (0326)
nCOV 数据简要分析 (0326) matlabdatacov 简介 碰巧看到了数据上传, 正在跑数据的我想着要不拟合一下看看, 然后, 就做了两个小时, 这里做一个简单的记录过程, 后续可能做在线 ...
- Android程序中Acticity间传递数据
在Android开发过程中,在不同的Acitivity之间传递数据的情况是非常常见的.我花费了一点时间来总结Acitivity之间的数据传递,记录下来. 1.简单传递键值对 这种传递方式非常简单,只需 ...
- 【JAVA基础】06 面向对象
1. 面向对象思想概述 面向过程思想概述 第一步 第二步 面向对象思想概述 找对象(第一步,第二步) 举例 买煎饼果子 洗衣服 面向对象思想特点 是一种更符合我们思想习惯的思想 可以将复杂的事情简单化 ...
- 【三剑客】awk命令
前言 awk是一种很棒的语言,它适合文本处理和报表生成. 模式扫描和处理.处理文本流. awk不仅仅是Linux系统中的一个命令,而是一种编程语言,可以用来处理数据和生成报告. 处理的数据: 可以是一 ...
- Mac自带编码转换工具iconv
iconv --help Usage: iconv [OPTION...] [-f ENCODING] [-t ENCODING] [INPUTFILE...] or: iconv -l Conver ...
- 在okhttp的callback回调中加Toast出现Cant create handler inside hread that has not called Looper.prepare()...
2019独角兽企业重金招聘Python工程师标准>>> 分析:callback中回调的response方法中还是在子线程中运行的,所以要调取Toast必须回到主线程中更新ui 解决方 ...
- vue elementui table 双击单元格实现编辑,聚焦,失去焦点,显示隐藏input和span
<el-table :data="tableData" class="tb-edit" style="width: 100%" ref ...
- document.documentElement.scrollTop指定位置失效解决办法
近期在vue的H5项目中,做指定位置定位的时候发现使用document.documentElement.scrollTop一直不生效. 解决办法是document.documentElement.sc ...
- Codeforces Round 623(Div. 2,based on VK Cup 2019-2020 - Elimination Round,Engine)D. Recommendations
VK news recommendation system daily selects interesting publications of one of n disjoint categories ...
- P3842 [TJOI2007]线段
最近多刷些dp,觉得这个算不上蓝题 在一个\(n\times n\)的平面上,在每一行中有一条线段,第\(i\)行的线段的左端点是\((i, L_i)\),右端点是\((i, R_i)\),其中\ ...