Bismuth源码剖析(一)—-工欲善其事必先利其器

工欲善其事必先利其器

Python的代码以简洁著称,但是好的工具能帮我们节省很多时间,所以要准备好我们的工具。

1、Sublime Text,官网地址 https://www.sublimetext.com/

2、源码文件,下载地址 https://github.com/hclivess/Bismuth

哈哈,其他工具也用不上了

首先,将Bismuth的源码解压到一个文件夹,然后打开sublime,打开解压的文件夹,如下:

 

Crypto目录  存放的是密码算法相关的代码

graphic目录  存放的是一些图片文件

markers目录  目前还没看里面的内容,先遗留吧,后续再分解

static目录  存放账本,就是整个节点的所有账簿

在根目录下比较重要的文件

config.txt   里面记录了一些配置文件,如本机的监听端口、初始块的信息、版本信息、线程池大小、node IP,具体这里就不讲了,后面会细说。

node.py  这个是我们要最开始要分析的代码文件,其他文件后续再分析

下面说下如何看Python代码

a、更改sublime为word wrap模式,view—-> word wrap勾上

b、折叠def或者class开头的代码,因为这些是函数或者类,只会被调用,剩下的就是执行最开始执行的代码了。

开头是加载一些库文件,就是说引用的文件中的函数或者全局变量我这个文件中也可以访问到。

代码第30行,红色框中就是引用了另一个文件options.py中的函数get(),这行的作用就是获取配置文件config.txt中的一些配置信息

接下来的代码就是定义一些全局变量,供后面的代码使用

这里是判断配置文件中的version是否包含testnet,如果包含则为testnet模式,peerlist为peers_list.txt文件中的IP和端口信息,如果是主干网络则peerlist是peers.txt文件中的IP和端口信息

接下来代码就到1438行了,这里判断如果存在fresh_sync文件则执行下面的函数,而刚开始是没有这个文件的,所以我们继续往下看代码

在上图中红色方框中的两行代码,如果存在则跳过,如果不存在则生成私钥、公钥、地址和数据库文件

私钥是privkey_encrypted.der

公钥是pubkey.der

地址是address.txt

上面的三个文件一定不能弄丢了,这三个文件决定了你钱包地址中财产的安全,丢了的话就无法再进行钱包地址中钱币了,就相当于你丢掉了打开钱包的钥匙

数据文件是backup.db和mempool.db

生成完成之后,就是一些数据正确性的检查,可以略过了

下面直接看1538行

这里是做一些数据库中数据的检查,以及定义一些操作数据库的句柄,可以略过,后面用到的话再回过来查看即可

下面就到了主函数了,主函数中主要是启动了一个服务端—-server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)

还有启动了一个客户端t_manager = threading.Thread(target=manager(c, conn))

服务端是接收其他节点发过来的消息,进行数据同步或者其他一些命令操作

客户端是链接其他节点,获取其他节点的数据信息,同步本地数据

至此,node.py的框架应该你心中已经有了,剩下的就是往里面添加血肉了。

 

哈哈,本人喜欢Python是因为Python的代码阅读起来就是这么随意,同样写起来也是那么舒服。所以网上一句流行语“人生苦短,我用Python”

 

欢迎志同道合的朋友加入我们的QQ群,进行问题讨论和心得交流,谢谢!