学习
实践
活动
专区
工具
TVP
写文章

比特币源码研读(一)

文章作者:菜菜子

编辑整理:Pz-Tse

作者介绍:菜菜子,社群人称菜神,来自于目前国内规模最大,输出质量最高的区块链学习社区——区块链研究社,核心成员。担任比特币源码研读班班长,千聊《比特币编程》主讲,Sia中国微信群群主,Sia维基主要翻译人员。

文章说明

我们为什么要发这样偏重技术的文章?

想必大家都知道,投资有个很重要的原则——不懂不投。作为整个区块链世界的基础货币,想必大家或多或少都持有比特币。我们既然持有了就需要弄明白你手上的东西代表怎样的未来,拥有什么长期的价值?对技术、前景、社会学、经济学等等层面的深刻理解,才能让你更有信心握住手中的数字资产。

从这篇开始,让我们跟随菜神从技术的角度揭开比特币的面纱,将“她”彻底拥入怀中!

正 文:1900字左右,预计阅读时间5分钟。

一、源码下载

本文比特币源码下载地址为: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[])

对于C/C++程序员来说,这是多么熟悉的函数!说真的,找到这个main函数还真不容易啊,因为这是经

过了大量的源码文件浏览才找到的!虽然在找main函数时,花费了不少时间看其他的源码文件,但正

如笑来老师在其公众号中说的:“世界上没有白走的路,每一步都算数……”,这个过程对于我熟悉

比特币核心源码的整体结构还是有帮助的,让我可以知道钱包实现代码、区块实现代码、区块链实现代

码以及挖矿实现代码的具体位置,为后续的源码研读提供了很好的帮助!

三、初始化过程解析

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

具体运行过程为:

第一步:设置运行环境;第二步:连接bitcoind信号处理对象;第三步:应用程序初始化操作;第四步:控制台命令传入参数解析;第五步:解析后参数的处理;第六步:初始化日志打印;第七步:初始化参数设置;第八步:初始化应用程序基本上下文环境;第九步:应用程序参数设置;第十步:应用程序完整性检查;第十一步:应用程序运行主函数;第十二部:循环等待关闭消息;第十三步:程序关闭。

以上就是比特币源码中后台进程bitcoind的运行过程,本文只是列举出了其运行所执行的具体过程,其

实每一步都包含了相应的子分支,包含了很多实现代码,我将在后续的文章将对其每一步进行详细说明

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171218G0CR1A00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

同媒体快讯

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券