上次在ubuntu系统中将比特处源码编译环境设置好了后,还没有具体分析里面的代码,今天我们就解读一下。源码版本是bitcoin-0.9.5rc2。
我们说验证比特币客户端安装成功就是从 which bitcoind 这个命令进行验证的,因为比特币客户端有两个。一个是图形界面的版本,通常被称为 Bitcoin(首字母大写),以及一个简洁命令行的版本(称为 bitcoind)。
我们就从bitcoind这个命令行入手,因为这个里面代码少,感觉简单点(嘿嘿)。我在源码的src目录下发现了bitcoind.cpp文件。但没发现bitcoind.h文件,我也不知道为什么。但是没影响我们看代码。
一个C++程序的入口是从main()函数执行的。我们也从这里看起。

代码很简单我们就逐行分析下。
一。SetupEnvironment函数定义在src/util.cpp中。

这个函数设置了本地运行环境。此函数的作用是根据不同国家设置不同的编码,用于国际化的。
二。noui_connect
连接bitcoind客户端的信号处理程序。我的理解是这个信号处理程序就是侦听程序的各种消息包括异常消息,也可能是硬件的异常消息或程序的普通信号消息。
三。AppInit()
应用程序初始化,其实这里面包括了很多东西
1。ParseParameters()//解析运行输入的参数并将参数放入mapArgs; mapMultiArgs;这两个map对象中。
2。判断数据目录是否存在并读取配置文件参数指定的配置文件

3。判断参数testnet regtest参数的合法性和是否输入了--help或-?获取帮助信息的参数。

4。根据输入参数得到相应结果并组合的json数据格式打印输出 。

5。根据输入参数进行相应的设置(AppInit2)并开启一个新线程,始终侦听退出程序的消息。

这就是bitcoind.cpp里面的代码内容,分析的可能不太准确仅供参考,也可能在以后的阅读中会发现其中的错误。我们先主要了解里面的工作流程和大概框架。
我绘制了个流程图来说明一下客户端的工作原理。流程图如下:

作者:区块链研习社比特币源码研读班,black
网友评论