区块链与虚拟币金马带你定投区块链区块链实践专题

比特币源码研读之一

2017-07-09  本文已影响8290人  菜菜子_forest

作者:区块链研习比特币源码研读班 菜菜子

一、源码下载

本文比特币源码下载地址为:https://github.com/bitcoin/bitcoin,下载的版本为github中的最新版本,即0.14版。其源码目录结构如下。

图中红色矩形框选中的src文件夹为比特币源码所在目录,因此我的比特币源码之旅将从这个文件夹开始。

二、找到入口函数

众所周知,任何事物都有其起始位置,就像我们走进一栋房子应该先找到大门一样。软件程序也不例外,每个软件程序都有其入口函数,那么要研读比特币源码,首先需要从其入口函数看起,这样才能逐步理解其执行顺序与逻辑结构。

因此,在进入src目录后,我的第一要事就是找到初始化函数的具体位置。由于刚开始看比特币源码,所以对src中的所有代码都很感兴趣,每个都想点开看看每个文件中都说了什么,而且我自己也确实这么做的,挨个看了一遍之后,发现比特币源码确实有点复杂,着实佩服《精通比特币》的作者,不愧是牛人!他能在把源码看完之后,根据自己对源码的深刻理解写了一本让我们能看懂比特币运行原理的书,以便于我们这些后来者可以很好地理解比特币及其源码。

想到此内心开始有点小激动,因为我看到我们研读班的同学们在经过一段时间的学习之后,编程能力将得到很大的提升,同时,还能有很多的输出,为后来者提供方便!

话不多说,回到正题!前面说到首先要找到比特币源码的入口函数,想到比特币源码是基于C/C++编写的,所以,首当其冲是要找到main函数。想到比特币源码编译完成后,其后台服务进程名为bitcoind,所以,我就想是否有bitcoind.cpp或类似名字的实现文件呢?经过查看,在src文件夹中果然发现了bitcoind.cpp,打开这个文件后,搜索main函数,在189行还真就搜到了main函数,函数中包含的有效代码只有3行,如下所示:

int main(int argc, char* argv[])

{

SetupEnvironment();

// Connectbitcoind signal handlers

noui_connect();

return(AppInit(argc, argv) ? EXIT_SUCCESS : EXIT_FAILURE);

}

对于C/C++程序员来说,这是多么熟悉的函数!说真的,找到这个main函数还真不容易啊,因为这是经过了大量的源码文件浏览才找到的!虽然在找main函数时,花费了不少时间看其他的源码文件,但正如笑来老师在其公众号中说的:“世界上没有白走的路,每一步都算数……”,这个过程对于我熟悉比特币核心源码的整体结构还是有帮助的,让我可以知道钱包实现代码、区块实现代码、区块链实现代码以及挖矿实现代码的具体位置,为后续的源码研读提供了很好的帮助!

三、初始化过程解析

main函数的运行过程如图所示。

具体运行过程为:

第一步:设置运行环境;

第二步:连接bitcoind信号处理对象;

第三步:应用程序初始化操作;

第四步:控制台命令传入参数解析;

第五步:解析后参数的处理;

第六步:初始化日志打印;

第七步:初始化参数设置;

第八步:初始化应用程序基本上下文环境;

第九步:应用程序参数设置;

第十步:应用程序完整性检查;

第十一步:应用程序运行主函数;

第十二部:循环等待关闭消息;

第十三步:程序关闭。

以上就是比特币源码中后台进程bitcoind的运行过程,本文只是列举出了其运行所执行的具体过程,其实每一步都包含了相应的子分支,包含了很多实现代码,我将在后续的文章将对其每一步进行详细说明,敬请期待!

作者:区块链研习社比特币源码研读班 菜菜子


以下是广告:

我们区块链研习社已创建“区块链研习社币圈交流”小密圈”,在小密圈中,我们将带领大家一起学习区块链的原理与投资,还将提供区块链基本原理解答、交易所注册与交易操作、ICO交易与操作、投资分析、风险分析等内容。

目前入圈价格初始定价50元,50人调整一次价格,每次调整幅度为50元!

上一篇 下一篇

猜你喜欢

热点阅读