首先这不是一篇介绍fabric 的基础文章,所以需要读者对fabric 有一定的了解。由于篇幅有限这里就不在进行基础内容的说明。如果读者是初次学习fabric的相关知识,建议大家去IBM fabric 的官方网站去进行学习。这里列出fabric 1.4的链接。链接如下
https://hyperledger-fabric.readthedocs.io/en/release-1.4
这里简单介绍下我的学习思路。这里不得不吐槽下,去年年初刚接触fabric 的时候直接就去看源码的愚蠢。花时间收效还比较小。所以现在重新反思下学习fabric的思路,同时也希望给打算入坑的小伙伴有个前车之鉴。1.我们一定是需要把fabric的wiki通读一遍,即使你有很多的资料。或者说英文很烂的借口(我就是使用google边翻译边进行阅读的)。即使我做了fabric的相关开发工作一年以后再读依然有很多的收获。2.wiki上面的例子一定要尝试搭建一下。
好这里就不在赘述了,我在阅读fabric的wiki 信息时,会根据假想场景来提出问题。这边blog 便是记录我在阅读文章时提出的问题,并且尝试解决问题过程中的记录。
问题:
1.当我们在已有的通道增加一个新的org3(注意是一个当通道已经创建后新建的一个org3)说到这里我想读者便知道这里是含有前置条件的,我们说在通道已经创建后这就说明org3,没有包含在genesis.block中。也就是说org3 不属于我们任何一个consortium。那么问题来了。在阅读orderer 源码的过程中我发现,当我们新建一个channel 时,新的channel包含的org必须也包含在genesis.block 的某个consortium中。那么问题便是是否可以在一个已经在链网络存在的channel中新增加一个org.
答案:这个问题的答案相对来说就很简单了,如果是阅读过fabric wiki的用户会知道,fabric 给我们提供了一个在已经创建的channel中增加organization 的例子。所以这个问题的答案是可以。
2.根据问题1我们衍生出一个新的问题,既然我们在channel中新增了一个org(为了下面的理解方便我们暂定这个新增的org为org3.)那么我们是否可以使用这个新增的org3,来创建一个新的channel。在问题1的时候我有提到过,我们新建channel时的org必须也包含在genesis.block 的某个consortium中。那么这时包含org3的channel是否可以创建成功。
答案:这个问题的答案是不能,当我尝试进行创建一个包含org3的channel时。会打印信息如下
root@99229b2403ba:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer channel create -o orderer.example.com:7050 -c mychannel2 -f ./channel-artifacts/channel3.tx --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem 2019-05-07 06:51:47.485 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
Error: got unexpected status: BAD_REQUEST -- Attempted to include a member which is not in the consortium。
我们可以看到报ERROR,说我们尝试加入一个不存在consortium 的member。
3.我们知道一个新建的org可以加入一个已经存在的channel,但是我们却不能使用它来创建一个新的channel,这样局限性就特别大,或者当org3想要join其他channel时,我们还需要进行组织加入通道的操作,会特别麻烦,这样从逻辑上也不通顺。所以我们提出一个新的可能,我们能否去修改genesis.block。在genesis.block 中将org3的相关信息加入进去。