这一节主要讲一下启动fabric网络的脚本编写以及tps的压测。
在fabric_raft这个目录中主要有四个脚本,分别是updown.sh
、genesis.sh
、cc.sh
以及script/official.sh
这四个脚本,其中updown.sh
脚本就是启动或者宕掉fabric网络,genesis.sh这个脚本比较重要的是下面几行:
crypto-config.yaml
文件,通过cryptogen
二进制文件来生成证书文件,这里需要注意的一点是cryptogen
最好是跟你要搭建的网络的版本一致,不然生成的证书有可能有出入导致一些奇奇怪怪的错误,一般关于这个二进制的获取可以直接clone fabric
的官方代码,checkout
到自己想要的版本,然后make cryptogen
,会在 .build/bin这个目录下生成这个二进制。configtx.yaml
文件,通过configtxgen
来生成证书文件,同样的版本最好是一致的,获取方式是通过make configtxgen
来获得;第一行命令是生成system channel
的创世区块;第二行是生成application channel
的通道交易配置;第三行跟第四行都是生成锚节点配置文件;这些artificials
在official.sh
脚本中都会用到。cc.sh这个脚本就是在容器外来调用容器内部的official.sh脚本,所以它的命令就只有一行:
docker exec cli bash scripts/official.sh
这么做的好处就是不需要进入到容器内部去执行脚本,其实相当于:
docker exec -it cli bash
bash scripts/official.sh
official.sh这个脚本讲一下里面的大概逻辑。
- 第一步是组织的节点创建channel并加入channel;
在节点peer0.org1.example.com
中根据通道配置交易(就是上一步由configtxgen
生成的)创建一个channel,这时会在当前目录下生成一个application channel
的创世区块,即mychannel.block
,这个区块在join channel的时候需要指定,然后就是更新锚节点,锚节点是用于组织与组织之间的通信;切换到节点peer0.org2.example.com
的环境变量使当前的节点加入到channel
中,顺便提一下,cli
容器与各个节点容器是通过grpc
进行交互的,所以可以通过切换环境变量的方式来控制不同的节点。
- 第二步是安装实例化chaincode
channel
且参与背书的节点都需要安装链码,安装链码实际上就是将链码文件拷贝到本地某个目录下,用于实例化的时候将链码文件拷贝进容器中;ccenv
镜像,然后在此基础之上构建出一个新的链码镜像(这个镜像包含了链码文件),然后再根据这个镜像启动容器;实例化链码只需要一次,此后其他节点并不需要都去执行同样的命令,其他节点只需要执行查询或者调用链码的操作,系统会自动为当前的节点启动一个新的链码容器;重点的参数**-P**是指背书策略,包括OR,AND,NOutOf,详细可以查看这一篇:Fabric背书策略相关概念与背书验证过程压测一开始本来是想使用fabric官方推荐的caliper,但是由于各种原因,没搞明白[哭状脸],所以就放弃了,使用了一个使用非常简单的压测小工具Stupid,下面是我对这个测试网络的压测的过程。
git clone https://github.com/guoger/stupid.git
cd stupid
go build -o stupid
新建文件stupid-config.json
vim stupid-config.json
编写文件(sample)
{
"peer_addr": "peer0.org1.example.com:7051",
"orderer_addr": "orderer.example.com:7050",
"channel": "mychannel",
"chaincode": "mycc",
"version": "",
"args": ["invoke", "a", "b", "10"],
"mspid": "Org1MSP",
"private_key": "crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp/keystore/priv_sk",
"sign_cert": "crypto-config/peerOrganizations/org1.example.com/users/[email protected]/msp/signcerts/[email protected]",
"tls_ca_certs": ["crypto-config/peerOrganizations/org1.example.com/tlsca/tlsca.org1.example.com-cert.pem","crypto-config/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem"],
"num_of_conn": 20,
"client_per_conn": 40
}
private_key
、sign_cert
、tls_ca_certs
填写相对应的目录文件, num_of_conn
这个参数是指client端与peer端、orderer端之间所建立的grpc连接数,client_per_conn
这个参数是指向一个peer发送交易提案的客户端数目。
**注意:**把peer0.org1.example.com
跟orderer.example.com
写到本机的hosts文件中
# 发起4000笔交易
./stupid stupid-config.json 4000
好了,整个过程大概就是这样,接下来按照原计划就是开始编写chaincode。