比特币源码研读之一

本人15年毕业后一直从事Java电商平台的开发工作,2017年4月开始接触区块链技术,随后慢慢自学了《精通比特币》,谈谈区块链,以太坊,Solidity等相关内容。前不久开始阅读bitcoin的源码,在网上找资料的过程中,发现并加入了区块链研习社。随后在编译比特币源码的过程中与菜菜子进行了一系列的技术交流。刚好比特币源码班二期开班,随后报名加入该班级,开启了比特币源码的研读之旅。源码的阅读相对枯燥无味,希望自己能在坚持下去。好了,废话不多说,Let’s get started.

本系列文章基于bitcoin-0.15, 下载地址: https://github.com/bitcoin/bitcoin. 我们先从宏观上看下源码的目录结构以及数据目录的结构。项目源码的目录结构如下:

接下来我们简要分析下src目录下几个关键的模块,后续随着我们对源码的不断研究将详细分析各个模块的内容。

./:网络处理模块,块的产生,初始化模块,链的操作模块等

compact:处理文件兼容性相关的细节,较为low level

consensus:交易/块的验证,merkle tree相关的计算,一些共识参数的定义

crypto:加密HASH函数,SHA256、RIPEMD160等

leveldb:bitcoin使用level db存储block、tx、utxo等内容(文章后面有相关描述)https://github.com/google/leveldb

policy:与consensus相反,用户可以根据自身的需求定义不同的policy,例如是否转发大小为100k以上的交易等

primitives:块和交易相关的基本数据类型定义

qt:桌面客户端源程序

rpc:远程过程调用接口的相关实现

script:脚本引擎,定义了操作码,交易签名的生成与验证等

secp256k1:椭圆曲线函数库

univalue:univalue库https://github.com/jgarzik/univalue

wallet:钱包相关操作,地址的管理,交易的生成等

zmq:zmq是一个高性能的异步消息库

接下来,我们来看一下数据目录结构并简要分析下一些主要的文件:

¬ blocks/blk*.dat:所有的区块数据,这部分数据只有在钱包需要重新扫描丢失的交易,重组链以及向其他节点提供区块数据等情况时被使用。

¬ blocks/rev*.dat:这些文件可以理解为“撤销”(undo)文件。区块链在某一种程度上可以看做是一个状态机,每一种状态我们叫做chain state(UTXOs),每当接收到了一个块,经过一系列的处理(状态转换函数)变成了另一个chain state。所以我们可以把一个块当作是某个chain state的一个补丁(patch),同时把这些“撤销”文件当作是回退(reverse)操作的patch。当发生区块链重组(reorganization)的时候,这些数据可以方便快捷的回滚chain state.

¬ blocks/index/*:该目录下是level db的存储文件,记录了该节点上所有块的元数据信息以及怎样在磁盘中找到块的具体数据。如果没有这部分数据,查找一个块将会非常的慢。

¬ chainstate/*:该目录下是UTXO的level db存储文件以及相关的一些meta信息,可以用于验证块和交易的有效性。这部分数据也可以通过参数-reindex根据blocks重新生成。如果没有这部分数据,需要扫描所有的块进行区块和交易的验证将会非常耗时。

¬ wallet.data:最为重要的钱包文件,该文件中存储着钱包中所有的密钥信息。我们常说的备份bitcoin core钱包,就是备份该文件。只要有了该文件,把文件放到对应的钱包数据目录下,你可以在任何其他任何bitcoin core节点操作你的钱包。

¬ debug.log:该文件记录的程序运行的各种提示信息。在遇到问题时,可以通过查看该文件获得具体的信息提示。启动bitcoind时,可以通过参数-debug设置日志级别。

本篇文章简要分析了比特币源码的目录结构以及数据存储目录结构,接下来的文章我们将进入源码的阅读。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • 这次跟大家讲一个比较长的故事,可能会分几个篇章讲完,如果对我的故事感兴趣的人,可以继续关注后面几篇故事,也可以私信...
    ami啾啾阅读 256评论 0 0
  • 11-29 每日打卡 【三件事】1. 得到订阅精读两个小时。2. 平台的继续熟悉,寻找一种更便捷的方法,一周后把相...
    纯简之佳阅读 189评论 0 1
  • 天猫精灵X1官方团队宣布天猫超级会员将于8月8日首先体验产品。截止到8月8日10点,超级会员可在天猫精灵官方旗舰店...
    摩尔金融阅读 264评论 0 0
  • 来沪4月有余,我习惯了每天上下班的地铁线路。在上海地铁,我遭遇过小偷,也遇到过穿粉色波点衬衫的变态...... 第...
    吃草姑娘阅读 625评论 6 2
  • 一 炎热的夏天,蝉不知躲在何处小声地叫着。声音断断续续,漫长而悠扬。 三水躺在铺着凉席的床上,翻来覆去睡不着,耳机...
    离尹阅读 1,062评论 0 6