0x00 为啥要读
如果说是在18年以前阅读比特币代码,是价值投资的基本操作,那今年再去做这个事,绝逼是信仰了。比特币作为虚拟货币的开山鼻祖,运行至今近10年,在没有中心化结构的运营下,几乎没有出现过重大事故,相信BAT的产品也不敢吹这牛逼吧,所以作为技术人员读一读比特币代码是修炼内功的绝佳选择。由于比特币代码相比于我们之前所研发的C(B)/S结构不同,理解起来总会有一些吃力,如果能有一群持有共同信仰的朋友在一起互开脑洞,共同勉励,那更是一件美妙的事情。机缘巧合认识到国内第一批研读比特币代码的大神@菜菜子,经过几次沟通,大家就决定共同去分析研读比特币的代码,将来有可能是以太坊,甚至更多!0x01 阅读思路
按照我以前的习惯,如果想去学习一门技术,那首先要去学会使用这门技术。话说学习使用比特币成本还是蛮大的,按照今天的行情BTC一枚也要4W多人民币。不过没有关系,我们还有很多其他的山寨币,操作起来也都是大同小异。利用3个月的时间,我从交易所到钱包,从公链到侧链,从炒币到各种DAPP几乎都玩了一遍。这个时候再去学习区块链的技术,知道自己该如何做信息过滤了,身边的同仁也会越来越多,遇到问题的时候,解决起来也就得心应手了。在开始阅读代码之前,《比特币白皮书》和《精通比特币》这两份材料是必须要读的,对,必须。即使读不懂也没关系,至少从宏观上对比特币的技术有个大致的了解,脑子里有区块链模糊的样子,这是很重要的,如果一开始就从某个技术细节入手,比如密码学,P2P,很容易就走进一个死胡同,最后无疾而终。
0x02 环境搭建
工欲善其事,必先利其器。首先我们先选个版本,我用的是Bitcoin Core Daemon version v0.16.99.0-b1dc39d。在开始研读代码之前,我们先把环境搭好。由于常年在Windows下面做开发,我尝试过搭建bitcoin的windows环境,网上也能搜索到教程,但我不推荐大家去这么做,因为这是一个巨坑,详细就不多赘述了。我选择的系统环境是Ubuntu 14.04 Server LTS,我不太喜欢用桌面版。具体搭建的教程在互联网上能搜到@菜菜子的教程,讲的很详细,一步一步做下去就是了。IDE我尝试过几个,sublime,vscode,甚至Idea,我觉得都不够好用,最主要的是对“代码引用”这个功能支持的不好,最后只好祭出了江湖杀器Visual Stuio,但VS导入文件夹的功能不是很友好,只好自己先去Create Filter,然后再导入文件。最后我想强调一点的是关于代码的调试,可能很多朋友喜欢用Log调试,我个人还是喜欢debug,我用的是gdb,不过要注意的是,在make文件之前要修改所有目录下的makefile,把编译的优化禁止掉,也就是把g++的编译选项-O2改成-O0,这样就能跟踪代码的完整的执行流程了。0x03 目录结构&数据结构
整个的项目的目录结构可以参考下图(图片来源于互联网)首先来分析chain.h和chain.cpp这两个文件,里面包含了这样的类。
CBlockIndex
CDiskBlockIndex
CChain
CBlockHeader
CBlock
CBlockLocator