先理清单机的网络步骤:
生成组织
生成组织的证书
生成创世纪块
生成通道
生成结点加入通道
设定锚结点
然后搞清楚脚本中通过那些指令怎样的步骤启动的:
先来看一个网络的启动参数把
cd test-network/
./network.sh up createChannel -c mychannel -ca && ./network.sh deployCC -ccn basic -ccp ../asset-transfer-basic/chaincode-java -ccl java
上面 && 的前后实际上是两行不同的指令
-
前一个指令运行脚本,带有参数
up
createChannel
ca
(带ca和不带ca使用的证书生成方式会不同,目前的工作中我们使用带有ca标签启动) 作用为启动网络
创建通道
使用ca来生成加密材料
-
后一个指令运行脚本,带有参数
deployCC
作用为在通道上安装链码(智能合约)
运行脚本的目录一定得是在test-network/下
1.networkup( )
-
先执行network up()函数,该函数中调用了
-
checkPrep() – 主要检查docker的版本
-
createOrgs() – createOrgs分为以下步骤:(这里直接以-ca的启动模式为例)
createOrgs( )
-
通过docker-compose启动ca结点
-
载入 registerEnroll.sh --那么这个脚本有什么内容呢?
- createOrg1()
- createOrg2()
- createOrderer()
- 上面三个函数是这个shell里的定义
-
然后执行shell里定义的函数
-
createOrg1
-
createOrg2
-
createOrderer
-
接下来执行ccp-generate.sh脚本
- 脚本功能是创建证书文件,然后放置在了organizations/ 下
-
-
接下来会检查是否使用数据库,如果有使用couchdb,那用docker启动一个相关容器
-
2.createChannel( )
那么组织文件证书弄完了,要使用的话,接下来需要创建创世纪块
创世纪块使用了工具 configtxgen, 创世纪块的配置为TwoOrgsApplicationGenesis
The channel MSP allows the nodes and users to be recognized as members of the network
有了组织的加密文件和创世纪块,peers 和 orderer 的服务就能启动了
这一步会在createChannel() 时进行
-
up( ) 的内容结束,网络启动后会创建通道 也就是createChannel( )这个函数
-
函数第一步是检查网络是否在启动,没有的话就去执行上面的up( )了
-
如果网络没问题,就去跑scripts/ 下的createChannel.sh – 那么我们去看看里面有什么
createChannel.sh的内容
创建文件夹
- 首先会创建一个文件夹 channel-artifacts/ 来存放通道的文件
四个函数的定义
1.接下来是一个函数的定义 createChannelGenesisBlock( )
-
这个函数中的一条重要指令为
configtxgen -profile TwoOrgsApplicationGenesis -outputBlock ./channel-artifacts/${CHANNEL_NAME}.block -channelID $CHANNEL_NAME #通过这条指令,使用之前说到的configtxgen工具创建创世纪块,存放在刚刚创建的 channel-artifacts/ 下
2.定义了一个createChannel( ) – 内容如下
#脚本中写了个延时的指令,给raft共识留时间,这里就省略了 setGlobals 1 #后面是一条很长指令,看的出来,是根据我们在channel-artifacts/ 中创出来的创世纪块文件来创建通道 osnadmin channel join --channelID $CHANNEL_NAME --config-block ./channel-artifacts/${CHANNEL_NAME}.block -o localhost:7053 --ca-file "$ORDERER_CA" --client-cert
-