Fabric--configtxlator转换配置添加组织到channel
configtxlator转换配置/添加Org组织到channel
设置环境
进入到fabric-samples/first-network
目录中, 执行.byfn.sh -m down
关闭网络,清理之前的任何环境
$ cd $HOME/hyfa/fabric-samples/first-network/
$ sudo ./byfn.sh -m down
重新生成默认的BYFN构件
$ sudo ./byfn.sh -m generate
启用网络
$ sudo ./byfn.sh -m up
添加组织Org3
使用eyfn.sh
脚本将Org3引入网络
$ sudo ./eyfn.sh up
从输出中可以看到添加的Org3加密资料,配置更新正在创建和签名,然后链接代码被安装以允许Org3执行分类账查询
如果执行成功, 会有如下输出
========= All GOOD, EYFN test execution completed =========== _____ _ _ ____
| ____| | \ | | | _ \
| _| | \| | | | | |
| |___ | |\ | | |_| |
|_____| |_| \_| |____/
进入CLI容器
$ sudo docker exec -it cli bash
导出 ORDERER_CA
与 CHANNEL_NAME
变量:
export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem && export CHANNEL_NAME=mychannel
检查环境变量是否正确设置:
echo $ORDERER_CA && echo $CHANNEL_NAME
如果重新启动了CLI容器,则必须重新导出两个环境变量
查询
peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
查询结果: Query Result: 80
调用,实现从a到b转账
peer chaincode invoke -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}'
查询
peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
查询结果: Query Result: 70
手动实现配置:
如果使用了eyfn.sh
脚本,则需要将网络关闭.删除所有容器并撤销添加Org3所做的操作
在 fabric-samples/first-network/
目录中执行如下命令:
$ sudo ./eyfn.sh down
$ sudo ./byfn.sh -m down
$ sudo ./byfn.sh -m generate
$ sudo ./byfn.sh -m up
生成Org3加密材料
从 frist-network
目录转至 org3-artifacts
目录中
% cd org3-artifacts
生成加密材料
$ sudo ../../bin/cryptogen generate --config=./org3-crypto.yaml
为Org3 CA以及与此新Org绑定的两个对等生成密钥和证书
新生成的文件被保存在当前目录下新生成的文件夹 crypto-config
中
使用 configtxgen
工具以JSON输出Org3特定的配置材料到指定的文件中
$ export FABRIC_CFG_PATH=$PWD
$ sudo ../../bin/configtxgen -printOrg Org3MSP > ../channel-artifacts/org3.json
该文件包含Org3的策略定义,以及以Base 64格式提供的三个重要证书:admin用户证书(稍后将用作Org3的管理员),CA根证书和TLS根证书证书
后面会将这个JSON文件附加到通道配置中
$ cd ../
$ sudo cp -r crypto-config/ordererOrganizations org3-artifacts/crypto-config/
将Orderer Org的MSP材料移植到Org3 crypto-config
目录中
更新通道配置
进入CLI容器
$ sudo docker exec -it cli bash
安装jq工具
jq可以将所需要的数据格式转换成任意的数据格式
jq工具允许脚本与
configtxlator
工具返回的JSON文件进行交互
apt update && apt install -y jq
参数说明:
-y: 忽略安装时的提示
导出 ORDERER_CA
与 CHANNEL_NAME
变量:
export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem && export CHANNEL_NAME=mychannel
检查环境变量是否正确设置:
echo $ORDERER_CA && echo $CHANNEL_NAME
如果重新启动了CLI容器,则必须重新导出两个环境变量
获取配置
获取 mychannel
通道的最新配置块, 可以防止重复或替换配置更改, 有助于确保并发性, 防止删除两个组织
peer channel fetch config config_block.pb -o orderer.example.com:7050 -c $CHANNEL_NAME --tls --cafile $ORDERER_CA
上述命令将二进制protobuf通道配置块保存到 config_block.pb
, (文件名及扩展名命名无限制)
转换配置为JSON
利用 configtxlator
工具将此通道配置块解码为JSON格式, 删除所有与想要改变的内容无关的标题,元数据,创建者签名等等
通过 jq
工具来完成
configtxlator proto_decode --input config_block.pb --type common.Block | jq .data.data[0].payload.data.config > config.json
.data.data[0],payload.data.config域内数据代表了完整的通道配置信息
查看config.json
文件中的内容
more config.json
使用jq将Org3配置定义追加org3.json
到通道的应用程序组字段,并命名输出modified_config.json
jq -s '.[0] * {"channel_group":{"groups":{"Application":{"groups": {"Org3MSP":.[1]}}}}}' config.json ./channel-artifacts/org3.json > modified_config.json
将 config.json
中的内容输出为 config.pb
configtxlator proto_encode --input config.json --type common.Config --output config.pb
将 modified_config.json
中的内容输出为 modified_config.pb
configtxlator proto_encode --input modified_config.json --type common.Config --output modified_config.pb
利用这两个配置文件, 使用configtxlator
计算出更新配置时的更新量信息。该命令将输出一个新的二进制文件,命名为org3_update.pb
:
configtxlator compute_update --channel_id $CHANNEL_NAME --original config.pb --updated modified_config.pb --output org3_update.pb
将 org3_update.pb
中的内容解码为可编辑的JSON格式并将其称为org3_update.json
configtxlator proto_decode --input org3_update.pb --type common.ConfigUpdate | jq . > org3_update.json
对通道配置进行更新时, 还需要封装为 org3_update_in_envelope
结构的配置更新交易. 因此, 需要将 org3_update
结构数据进行补全
echo '{"payload":{"header":{"channel_header":{"channel_id":"mychannel", "type":2}},"data":{"config_update":'$(cat org3_update.json)'}}}' | jq . > org3_update_in_envelope.json
将其转换为Fabric所需的二进制交易配置文件。命名为最终更新对象org3_update_in_envelope.pb
configtxlator proto_encode --input org3_update_in_envelope.json --type common.Envelope --output org3_update_in_envelope.pb
签署并提交配置更新
peer channel signconfigtx -f org3_update_in_envelope.pb
导出Org2环境变量:
export CORE_PEER_LOCALMSPID="Org2MSP"export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crtexport CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/mspexport CORE_PEER_ADDRESS=peer0.org2.example.com:7051
更新通道
peer channel update -f org3_update_in_envelope.pb -c $CHANNEL_NAME -o orderer.example.com:7050 --tls --cafile $ORDERER_CA
命令执行后会有如下输出: Successfully submitted channel update
新终端中(终端2)中输出日志
打开一个新的终端(终端2)执行如下命令:
$ sudo docker logs -f peer0.org1.example.com
将Org3加入到通道
打开一个新的终端(终端3), 从 first-network
中启动Org3 docker compose
$ cd hyfa/fabric-samples/first-network/
$ sudo docker-compose -f docker-compose-org3.yaml up -d
进入Org3特定的CLI容器中:
$ sudo docker exec -it Org3cli bash
导出环境变量:
export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem && export CHANNEL_NAME=mychannel
检查变量 :
echo $ORDERER_CA && echo $CHANNEL_NAME
检索该块:
peer channel fetch 0 mychannel.block -o orderer.example.com:7050 -c $CHANNEL_NAME --tls --cafile $ORDERER_CA
发出命令并通过创世区块:
peer channel join -b mychannel.block
导出TLS与ADDRESS变量并重新发布
export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org3.example.com/peers/peer1.org3.example.com/tls/ca.crt && export CORE_PEER_ADDRESS=peer1.org3.example.com:7051peer channel join -b mychannel.block
升级并调用Chaincode
在Org3的CLI中执行(终端3):
peer chaincode install -n mycc -v 2.0 -p github.com/chaincode/chaincode_example02/go/
终端1中执行
使用Org2管理员身份提交了频道更新通话(在终端1中执行):
export CORE_PEER_LOCALMSPID="Org2MSP"export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crtexport CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/mspexport CORE_PEER_ADDRESS=peer0.org2.example.com:7051
安装
peer chaincode install -n mycc -v 2.0 -p github.com/chaincode/chaincode_example02/go/
切换为Org1身份:
export CORE_PEER_LOCALMSPID="Org1MSP"export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crtexport CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/mspexport CORE_PEER_ADDRESS=peer0.org1.example.com:7051
再次安装:
peer chaincode install -n mycc -v 2.0 -p github.com/chaincode/chaincode_example02/go/
发送电话:
peer chaincode upgrade -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -v 2.0 -c '{"Args":["init","a","90","b","210"]}' -P "OR ('Org1MSP.peer','Org2MSP.peer','Org3MSP.peer')"
如果报如下错误:
Error: Error getting broadcast client: failed to load config for OrdererClient: unable to load orderer.tls.rootcert.file: open /etc/hyperledger/fabric/-C: no such file or directory
则需要检查 echo $ORDERER_CA && echo $CHANNEL_NAME 变量是否正确设置export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem && export CHANNEL_NAME=mychannel
通过v
标志指定新版本。可以看到Org3添加到背书政策中
与实例化调用一样,链式代码升级需要使用该init
方法
终端3中执行
升级调用将新的块 - 块6 - 添加到频道的分类账中,并允许Org3同行在认可阶段执行交易。跳回Org3 CLI容器(终端3)并发出一个查询值a
:
peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
在终端1与终端3中通过,正确显示查询结果: Query Result: 90
调用,实现从a到b转账(终端3):
peer chaincode invoke -o orderer.example.com:7050 --tls $CORE_PEER_TLS_ENABLED --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}'
查询:
peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
在终端1与终端3中通过,正确显示查询结果: Query Result: 80
Fabric--configtxlator转换配置添加组织到channel相关推荐
- HyperLedger Fabric - 超级账本(6)转换配置添加组织到channel
configtxlator转换配置/添加Org组织到channel 设置环境 进入到fabric-samples/first-network目录中, 执行.byfn.sh -m down关闭网络,清理 ...
- yuv格式转换是那个组织定义的_AI 如何赋能摄像机?这场沙龙为你解锁“软件定义”新概念...
在数字经济的发展中,数据基础设施将发挥关键支撑作用,机器视觉是数据基础设施非常重要的一环.当前 65% 的行业数字化信息来自视频,可见机器视觉与生活.娱乐.通信.生产.安全的深度结合下,一个千亿美元的 ...
- 在 Hyperledger Fabric v1.4 下添加 PBFT 共识算法
在文章的开篇,首先对如下两篇文章的博主表示感谢,感谢他们对学习资源的共享. https://www.yezhem.com/index.php/archives/52/ https://blog.csd ...
- 操作系统(八)进程状态的转换以及进程组织方式
2.1.2 进程状态的转换以及进程组织方式 目录 2.1.2 进程状态的转换以及进程组织方式 2.1.2.1 进程的状态 2.1.2.2 进程的组织方式 2.1.2.1 进程的状态 因为进程的执行在时 ...
- 为 pom.xml 添加组织,法律和开发人员信息
转载请声明出处:http://blog.csdn.net/luhuajcdd/article/details/7966489 为 pom.xml 添加组织,法律和开发人员信息: Xml代码 <? ...
- Zabbix-server安装后的故障处理及Zabbix-agent的配置添加过程
Zabbix-server安装后的故障处理及Zabbix-agent的配置添加过程 故障处理 第一种情况:在其他参数(Iptables.SeLinux等)配置正确的情况下,如果Web界面出现提示信息, ...
- 动态NAT地址转换配置实验(中兴)
动态NAT地址转换配置实验 一.实验目的 二.实验内容 三.实验流程 四.查看和验证 五.实验总结 一.实验目的 1.掌握中兴动态NAT技术的基本原理和作用,及其数据的转发过程: 2.掌握动态NAT技 ...
- uni-app APP图标配置 添加图片一闪而过
uni-app APP图标配置 添加图片一闪而过问题 场景 点击浏览上传图标,点击自动生成所有图标并替换. 出现弹框闪现无法添加图片 解决方案: 由于没有生产图片的原因:上传的原图必须是png格式,不 ...
- 比较完整的NAT(网络地址转换)配置
NAT原理和配置 一.NAT的基本原理 1.为何会出现NAT这种技术 有限的IPV4公有地址数量耗尽,为了满足人们对互联网的需求,NAT ( Network Address Translation,网 ...
最新文章
- 话里话外:按单制造(MTO II)企业的资源瓶颈是怎么形成的?
- 简述PHP中有哪些运算符,PHP运算符简述
- Android之elevation实现阴影效果
- js数组截取前5个_我不能没有的5个Vue.js库
- 二十五、JAVA多线程(五、线程生命周期)
- 使用ecstore-sdk开发包制作易开店和启明星模板
- [Visio 2007]解决 “类图”调整宽度后,换行的文字溢出的问题(如何调整“类图”的高度?)
- 去中介化的租房EOS DAPP,实现租客与房东互赢
- Python 基础 1.0
- 学画画软件app推荐_可以学画画的APP有哪些?
- 也许是国内最全“智能音箱”评测,教你如何选 AI 音箱?
- 书论52 姜夔《续书谱》
- 蒙特卡罗MCNP学习汇总(二)--几何体基础,构建几何体
- 灰度共生矩阵的原理及实现(特征提取)-OpenCV
- Discuz论坛系统
- 联想服务器u盘安装win7系统安装教程,联想笔记本U盘重装win7系统步骤详细图文教程...
- Android代码混淆处理,android代码混淆解决方案
- 【OpenGL ES】OpenGL ES简介
- LabVIEW公式节点
- 公网SSH远程Ubuntu:安装cpolar内网穿透映射22端口 2/3
热门文章
- 阿里云华北区挂了。。。
- 网络管理:3分钟排障秘技,一招胜过十年功 | 文末有彩蛋
- 成功解决type object ‘h5py.h5.H5PYConfig‘ has no attribute ‘__reduce_cython__‘
- Anaconda:成功解决Anaconda下载时速度超慢(conda下载慢)的几种方法图文教程
- 成功解决SyntaxError: (unicode error) ‘unicodeescape‘ codec can‘t decode bytes in position 0-1: malformed
- 成功解决label_error >= 0 label_error < static_cast<int>(nclass) MultiClassEvaluation: label must be i
- ML之FE:对爬取的某平台二手房数据进行数据分析以及特征工程处理
- BC之SC:区块链之智能合约——与传统合约的比较以及智能合约模型部署原理、运行原理相关配图
- 成功解决 from ._conv import register_converters as _register_converters
- TF之LSTM:基于Tensorflow框架采用PTB数据集建立LSTM网络的自然语言建模