网络上很少有全面详细的区块链系统仿真的代码和讲解,从头开始真的很难。
现在先把叶之秋大神分享的BFT-SMaRt 性能测试实验给复现一下,遇到的困难...不计其数。链接如下:共识和区块链实验-以 BFT-SMaRt 和 Fabric 为例 - 知乎
Ubuntu和docker部分省略。
初始化环境
拉取Ubuntu18.04镜像
docker run -it --rm ubuntu:18.04 bash
安装git和ant
apt update
apt install git -y
apt install ant -y
git clone https://github.com/bft-smart/library.git
cd library
git checkout 0f2d407
ant
重要步骤:注释掉 /usr/lib/jvm/java-11-openjdk-amd64/conf/security/java.security 中的下面这3行,不然会报错。(Java调用ssl异常,javax.net.ssl.SSLHandshakeException: No appropriate protocol)
apt update
apt install vim
vim /usr/lib/jvm/java-11-openjdk-amd64/conf/security/java.security
#注释下面这三行,记得看清楚内容,行数不一定准确
# 704 # jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
# 705 # DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
# 706 # include jdk.disabled.namedCurves
此时网络环境初始化步骤已经结束,笔者建议此时的容器可以保存成镜像,后续使用避免重来。
之后在ubuntu中打开四个终端,进入同一个docker容器的终端作为四个节点。
docker exec -it 7e9117c6bbb2 /bin/bash
#容器id自拟
之后在新打开的四个终端内单独配置组网设置:
./runscripts/smartrun.sh bftsmart.demo.counter.CounterServer 0
./runscripts/smartrun.sh bftsmart.demo.counter.CounterServer 1
./runscripts/smartrun.sh bftsmart.demo.counter.CounterServer 2
./runscripts/smartrun.sh bftsmart.demo.counter.CounterServer 3
# 等四个节点都输出 Ready to process operations 后,运行 client
./runscripts/smartrun.sh bftsmart.demo.counter.CounterClient 1001 2 100
注:四个终端都配置好后才显示-- Ready to process operations成功页面
client正常运行:
测试 BFT-SmaRt 的 throughput 和 latency
根据叶之秋大神笔记做
更改节点数量
在config/hosts.config文件中增加一个节点。
4 127.0.0.1 11040 11041
修改config/hosts.config:
############################################
### Replication Algorithm Configurations ###
############################################
#Number of servers in the group
system.servers.num = 5
############################################
###### Reconfiguration Configurations ######
############################################
#Replicas ID for the initial view, separated by a comma.
# The number of replicas in this parameter should be equal to that specified in 'system.servers.num'
system.initial.view = 0,1,2,3,4
##163行
后续未实现