在windows下成功运行go语言编写的区块链pbft共识代码:

先附上代码链接:https://github.com/corgi-kx/blockchain_consensus_algorithm/tree/master/pbft

主要是想记录一下运行代码过程中遇到的问题,万一以后用得到,还能抄一下作业


问题1:配置go语言环境变量

电脑上没有go语言环境,按下面步骤进行环境配置:

1、首先在go官网下载https://golang.org/dl/安装包,根据自己电脑选择,我是windows 64位,所以下载的 go1.18.4.windows-amd64.msi;
2、然后按照指引一步一步安装即可,唯一需要注意的地方是在选择安装位置的时候,我选择的默认位置,C:\Program Files\Go,这个位置要记好;
3、安装结束,也就是一直正常进行到“Finish”,到这里安装环节就结束了;
4、开始环境配置,建议大家在网上搜一下,环境配置的帖子很多,我选择的是配置过程是此电脑--属性--高级--环境变量--用户变量--新建--变量名:GOPATH 变量值:步骤3中的路径--进入用户变量的path中--新建C:\Program Files\Go\bin,至此,完成环境配置;
5、进入cmd,输入go,回车可以看到相应提示表示成功,也可以使用有go version查看go版本。


问题2:按照代码注释运行代码报错

报错提示:go: go.mod file not found in current directory or any parent directory; see 'go help modules'

查了一下,找到了解决办法:
1、开启go modules功能,命令行输入

go env -w GO111MODULE=on

2、在该项目目录下(我要运行pbft文件夹里的代码,故而在pbft文件夹所在目录下),运行下面命令

go mod init pbft //pbft代表文件夹名

然后,错误解决,继续往下进行!

步骤3:这里往下已经顺利进行了,所以改为步骤3

1、按照github上代码执行顺序,打开一个客户端和4个节点,其中客户端执行pbft.exe client,节点分别执行pbft.exe N0,pbft.exe N1,pbft.exe N2,pbft.exe N3,如下图所示

2、接着,随便输入一段信息,查看节点同步情况,从下图可以看到,信息同步成功,

3、关闭一个节点(代表作恶、故障节点),再次输入信息,看看是否还会接收到reply。可以看到,客户端依然会接收到reply,因为根据公式 n >= 3f+1 ,就算宕机一个节点,系统依然能顺利运行。

4、关闭两个节点(代表作恶、故障节点),再次输入信息,看看是否还会接收到reply。可以看到,关闭两个节点后,故障节点已经超出了pbft的允许数量,消息进行到Prepare阶段由于接收不到满足数量的信息,固系统不再进行commit确认,客户端也接收不到reply。

可以大致看到pbft的运行情况,上面只是共识算法的学习中代码的初步复现,继续加油。