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 ...
随机推荐
- UDP广播的客户端和服务器端的代码设计
实验环境 linux 注意: 使用UDP广播,是客户端发送广播消息,服务器端接收消息.实际上是客户端探测局域网中可用服务器的一种手段.客户端发送,服务器端接收,千万不能弄混淆!!! 为了避免混淆,本文 ...
- 顺序表的C语言实现
在现实应用中,有两种实现线性表数据元素存储功能的方法,分别是顺序存储结构和链式存储结构.顺序表操作是最简单的操作线性表的方法.下面的代码实现了顺序表的几种简单的操作.代码如下 //start from ...
- electron-vue 运行项目时会报Electron Security Warning (Node.js Integration with Remote Content)警告
使用electron-vue时,运行项目总会出现如下警告: 解决方法:在src/renderer/main.js中加入: process.env['ELECTRON_DISABLE_SECURITY_ ...
- 前端福利,用 JS 就能实现抖音养号等诸多功能
我是风筝,公众号「古时的风筝」,一个不只有技术的技术公众号,一个在程序圈混迹多年,主业 Java,另外 Python.React 也玩儿的 6 的斜杠开发者. Spring Cloud 系列文章已经完 ...
- 一文教你快速搞懂 FOC ramp function 斜坡函数的作用和实现
文章目录 定义 程序的实现 matlab 程序 C语言程序 定义 x(t)={0,t<0At,t≥0 x(t) = \begin{cases} 0,t<0\\ At,t \ge 0\\ \ ...
- shell bash终端中输出的颜色和格式详解(超详细)
文章目录 1) 格式 1.1 Set 1.2 Reset 2)8/16 Colors 2.1 前景(文字) 2.2 背景 3)88/256颜色 3.1 前景(文字) 3.2 背景色 4)组合属性 5) ...
- [hdu4598]二分图判定,差分约束
题意: 给一个图,问能否给每个点分配一个实数值,使得存在一个数实数T,所有点满足:|value(i)| < T 且 u,v之间有边<=> |value(u)-value(v)| &g ...
- Semaphore和AQS
Semaphore意思的信号量,它的作用是控制访问特定资源的线程数量 构造方法: public Semaphore(int permits) public Semaphore(int permits, ...
- Python 的缩进是不是反人类的设计?
前些天,我写了<Python为什么使用缩进来划分代码块?>,文中详细梳理了 Python 采用缩进语法的 8 大原因.我极其喜欢这种简洁优雅的风格,所以对它赞美有加. 然而文章发出去后,非 ...
- Zookeeper入门一篇就够了
谈点分布式 什么是分布式呢? 起初,我们的应用流量比较小,所有东西全部部署在一个服务器,比如全部丢给一个tomcat来处理,顶多做一个tomcat的多节点部署多分,再挂一台Nginx做一下负载均衡就O ...