用configtxlator+cli+sdk

最近对动态追加组织Org3MSP进行了确认(cli+sdk),以下是所有的步骤。(过程粗略,详细部分自己学习研究,只是提供思想)
cli用来生成pb文件,sdk用来做签名
1.取得e2e例子的mychannel的配置定义
CORE_PEER_LOCALMSPID="Org1MSP" 
peer channel fetch config 'mychannel.pb' -o 'orderer0.example.com:7050' -c 'mychannel'
2.取得系统channel的配置定义
CORE_PEER_LOCALMSPID="OrdererMSP" 
peer channel fetch config 'syschannel.pb' -o 'orderer0.example.com:7050' -c 'testchainid'
3.生成新组织的所有密钥
做一个新的crypto-config.yaml文件,里面只有新组织的情报
通过下面命令,生成所有密钥文件
...../hyperledger/fabric/release/linux-amd64/bin/cryptogen generate --config=./crypto-config-neworg.yaml
4.做两个OrgMSPsample.json文件,分别用于普通channel和系统channel。两个的区别在于,系统channel有AnchorPeers和版本的定义
5.对于生成的密钥进行base64编码,并填写到OrgMSPsample.json里面。共牵涉3个项目如下。
admins ->../crypto-config/peerOrganizations/org3.example.com/users/Admin@org3.example.com/msp/admincerts/Admin@org3.example.com-cert.pem
root_certs ->../crypto-config/peerOrganizations/org3.example.com/users/Admin@org3.example.com/msp/cacerts/ca.org3.example.com-cert.pem
tls_root_certs ->../crypto-config/peerOrganizations/org3.example.com/users/Admin@org3.example.com/msp/tlscacerts/tlsca.org3.example.com-cert.pem
命令:cat xxxxx | base64 | sed ":a;N;s/\n//g;ta" 
6.参照fabric/examples/configtxupdate/例子,把普通channel和系统channel的差分pb文件做好,准备给sdk使用。
7.在sdk利用上面生成的查分pb文件,对系统channel进行更新(向Consortiums追加org,用OrderMSP的Admin用户提交更新)。
9.在sdk利用上面生成的查分pb文件,对mychannel进行更新(向application追加org,,用Org1MSP的Admin用户和Org2MSP的Admin用户提交更新)
10.启动新org的peer节点
11.在cli下做下面事情,目的为了更新chaincode版本。
①取得mychannel的block(peer channel fetch)
②将新启动的peer节点追加到mychannel下面
③所有新旧peer节点都加入新chaincode
peer chaincode install -n mycc -v 2.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
※以前的意识是所有节点都安装chaincode,其实,只有需要执行chaincode的节点才会去安装chaincode,同时这个节点也是背书节点。
这样chaincode对于其他节点是保密的。没有安装chaincode的节点,不能执行chaincode,但是可以验证交易并提交到账本。
④升级channel,以下两点需要注意
a.必须要和旧版本同名(mycc)
b.策略里面把新Org3MSP加进去
c.chaincode upgrade和chaincode instantiate一样,只需要执行一次。由于会调用cc的init方法,所以init在设计的时候要考虑版本升级问题。
peer chaincode upgrade -o orderer0.example.com:7050 -C 'mychannel' -n mycc -v 2.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -P "OR ('Org1MSP.member','Org2MSP.member','Org3MSP.member')" -c '{"Args":["init","","","",""]}' 
⑤执行invoke,query操作时要制定版本号
※由于旧的版本不会自动删除,所以需要手动删除。将来1.1版本会提供[peer channel signconfigtx]来收集签名。
好麻烦的过程!!!!!!!!!!!!!

本来可以在SDK里面把上面所有的事情都做了,但是在调用configtxlator/compute/update-from-configs之后,

返回的数据是有问题的不能正常解码,导致很多东西需要手动去做,又回到了上面的状态。

-----------------------------------------------------------------------------------------------

configtxlator使用注意事项

1,make时在fabric路径下面做,然后环境变量要更新
make configtxlator
make configtxgen
make peer
环境变量要更新
export PATH=/home/ubuntu/go/src/github.com/hyperledger/fabric/release/linux-amd64/bin:$PATH

2,跑reconfig_batchsize的时候,要启动一个特别的cli
①CORE_PEER_LOCALMSPID=OrdererMSP
②-v $GOPATH/src/github.com/hyperledger/fabric/examples/e2e_cli/crypto-config/ordererOrganizations/example.com/users/Admin@example.com/msp:/var/hyperledger/orderer/msp \
③其他按照普通cli设定

-----------------------------------------------------------------------------------------------

orderer.block作为初始block存在,但是每个channel也有自己的初始block。

在e2e例子里面,join channel的时候,就是join自己的channel.

如果多个channel的话,这里就分别join很多channelX.block了。

另外在configtxlator中,也是根据[-c channelName]来取得相应channel配置和更新相应channel配置。

每个通道中各有一个账本。各个节点对于它所属的每个通道,都会保存一份该通道的账本副本

----------------------------------------------------------------------
在最新版本1.0.1中,reconfig_batchsize无法确认(beta时确认了没问题),因为根据分析,
max_message_count属于OrdererMSP的内容,如果在cli模式下,需要指定msp,这时只能指定Org1MSP或者Org2MSP,
这样就会出现下面的异常。
The identity is a member of a different MSP (expected OrdererMSP, got Org1MSP)
解除方案,
一个是在创世块中,把OrdererMSP改成Org1MSP,然后再交给orderer使用。
另一个是,等待peer channel signconfigtx的出现,获得OrdererMSP的签名。

另一种方法,更改msp

参照
https://github.com/yeasy/docker-compose-files/blob/master/hyperledger/1.0.2/scripts/func.sh
http://www.mamicode.com/info-detail-2002133.html

获取系统channel
ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
CORE_PEER_LOCALMSPID="OrdererMSP"
CORE_PEER_TLS_ROOTCERT_FILE=$ORDERER_CA
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer0.example.com/msp
peer channel fetch config 'config_block.pb' -o 'orderer0.example.com:7050' -c 'testchainid' --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

利用configtxtor修改config_block.pb内容

更新系统channel
ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
CORE_PEER_LOCALMSPID="OrdererMSP"
CORE_PEER_TLS_ROOTCERT_FILE=$ORDERER_CA
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/users/Admin@example.com/msp
peer channel update -f 'config_update_in_envelope.pb' -c 'testchainid' -o 'orderer0.example.com:7050' --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer0.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

--------------------------------------------------------------------------------------------------

运行configtxlator.js例子
fabric-sdk-node/test/integration/configtxlator.js
安装下面两个插件
sudo npm install superagent --save
sudo npm install superagent-promise --save
按照e2e环境修改下面配置文件
../fabric-sdk-node/test/integration/e2e/config.json
设定link
cd /home/ubuntu/go/src/github.com/hyperledger/fabric-sdk-node/test/integration
ln -s /home/ubuntu/go/src/github.com/hyperledger/fabric/examples/e2e_cli/crypto-config ./crypto-config
ln -s /home/ubuntu/go/src/github.com/hyperledger/fabric/examples/e2e_cli/channel-artifacts ./channel-artifacts
密钥文件的设定路径
../fabric-sdk-node/test/unit/util.js
getAdmin()、getOrdererAdmin()
启动configtxlator
configtxlator start
启动configtxlator.js
cd /home/ubuntu/go/src/github.com/hyperledger/fabric-sdk-node
node --debug-brk=5858 test/integration/configtxlator.js

fabric 关于追加新组织结构相关推荐

  1. [转载] 【Python】向json文件中追加新的对象

    参考链接: python json 13: 解析json文件中的多个json对象 [Python]向json文件中追加新的对象 def get_json(path, write_path): file ...

  2. java往字符串数组追加新数据

    //新建字符串数组 String[] vedioPics = new String[vedioPicPathList.size()]; //执行数据添加 vedioPics = insert(vedi ...

  3. 一文读懂Fabric 2.0新特性

    文章目录 前言 1. 智能合约的去中心化管理 1.1 链码新的生命周期 1.1.1 链码的安装和定义 1.1.1.1 打包链码 1.1.1.2 安装链码 1.1.1.3 同意链码的定义 1.1.1.4 ...

  4. 批量给没有扩展名的文件追加新的扩展名从而修改文件名

    概要:我们平常在整理文件的时候,有一些文件是没有扩展名的,虽然这种情况对于普通人来说基本上遇不到,但是对于有些专业人士来说的话,平常有一些接触到的一些文件很多都是没有扩展名的,那么如何给这些文件添加新 ...

  5. java给字符串数组追加字符串_java往字符串数组追加新数据

    public class Test { public static void main(String[] args) { // 原字符串数组 String[] arr = { "原字符串数据 ...

  6. python openpyxl模块追加数据_python openpyxl模块实现excel的读取,新表创建及原数据表追加新数据...

    当实际工作需要把excel表的数据读取出来,或者把一些统计数据写入excel表中时,一个设计丰富,文档便于寻找的模块就会显得特别的有吸引力,本文对openpyxl模块的一些常见用法做一些记录,方便工作 ...

  7. js在不删除原有类名追加新类名方法

    添加类名 element.classList.add(class1, class2, ...); 删除类名 element.classList.remove(class1, class2, ...); ...

  8. ----icon moon追加新字体图标----

    一.初始自定义字体为icon moon1@font-face {font-family: 'icomoon1';src: url('fonts/icomoon1.eot?9fhn24');src: u ...

  9. Fabric CA国密版本的一种替代方案--使用cryptogen工具增加新用户

    在Fabric超级账本中,如果我们想动态增加用户发行证书,一般会使用Fabric CA或者其它CA.然而在国密改造场景中,当前缺乏可用的开源的Fabric CA国密版本.因此,笔者研究了一下,发现了一 ...

最新文章

  1. 测试 远程端口 是否处于监听状态
  2. FHS(Filesystem Hierarchy Standard 文件系统层次化标准)
  3. 2020年7月美妆行业抖音小红书营销报告
  4. UWP锁、解屏后无法响应操作
  5. 中国万网被黑客黑的情景
  6. 2017-11-14【Python】爬虫练习
  7. Maven项目环境搭建实例.
  8. PN结/三极管/MOSFET理解
  9. 哈哈,没有什么能阻止得了这届父母要卷的决心
  10. 采购供应链管理系统:企业采购与供应链管理更简单、快捷
  11. 视觉 注意力机制——通道注意力、空间注意力、自注意力
  12. windows 配置中科大的 Rust 下载云,提高下载速度
  13. 基于Caffe ResNet-50网络实现图片分类(仅推理)的实验复现
  14. java中判断指定日期是星期几
  15. 16、git删除暂存区文件
  16. 2019金华正睿集训总结
  17. setCapture和releaseCapture的小应用
  18. libigl第五章-参数化
  19. 电脑计算机不显示桌面了怎么办,电脑不显示桌面黑屏了 电脑黑屏不显示桌面怎么办 - 云骑士一键重装系统...
  20. css flex换行且均匀分布

热门文章

  1. 百度和谷歌分词的差异【上】
  2. java中if语句的用法_Java中的if判断语句用法介绍
  3. APP推广小窍门:三大法宝让你吸引5000万用户
  4. c++根据文件名读取.txt文件
  5. Lucene系列(一)什么是Lucene
  6. 【慕课网实战课程笔记】Vue.js高仿饿了么外卖App
  7. 爱情呼叫转移-深度广度遍历合集
  8. Nginx 缓存服务器
  9. 第5阶段-C++提高编程资料
  10. 李梁北京大学 计算机,我国最特殊的大学,施一公任校长,剑指清华北大,却不招收本科生...