比特幣源碼研讀---開篇

btc.png

0x00 為啥要讀

如果說是在18年以前閱讀比特幣代碼涂邀,是價值投資的基本操作瘟仿,那今年再去做這個事,絕逼是信仰了比勉。比特幣作為虛擬貨幣的開山鼻祖劳较,運行至今近10年驹止,在沒有中心化結構的運營下,幾乎沒有出現(xiàn)過重大事故观蜗,相信BAT的產(chǎn)品也不敢吹這牛逼吧臊恋,所以作為技術人員讀一讀比特幣代碼是修煉內功的絕佳選擇。由于比特幣代碼相比于我們之前所研發(fā)的C(B)/S結構不同墓捻,理解起來總會有一些吃力抖仅,如果能有一群水平差不多的朋友在一起互開腦洞,共同勉勵砖第,那更是一件美妙的事情撤卢。機緣巧合認識到國內第一批研讀比特幣代碼的大神@菜菜子,經(jīng)過幾次溝通梧兼,他組織發(fā)起我們共同去做這個事情放吩,在此特別感謝!

0x01 閱讀思路

按照我以前的習慣羽杰,如果想去學習一門技術渡紫,那首先要去學會使用這門技術。話說學習使用比特幣成本還是蠻大的忽洛,按照今天的行情BTC一枚也要4W多人民幣。不過沒有關系环肘,我們還有很多其他的山寨幣欲虚,操作起來也都是大同小異。利用3個月的時間悔雹,我從交易所到錢包复哆,從公鏈到側鏈,從炒幣到各種DAPP幾乎都玩了一遍腌零。這個時候再去學習區(qū)塊鏈的技術梯找,知道自己該如何做信息過濾了,身邊的同仁也會越來越多益涧,遇到問題的時候锈锤,解決起來也就得心應手了。
在開始閱讀代碼之前闲询,《比特幣白皮書》和《精通比特幣》這兩份材料是必須要讀的久免,對,必須扭弧。即使讀不懂也沒關系阎姥,至少從宏觀上對比特幣的技術有個大致的了解,腦子里有區(qū)塊鏈模糊的樣子鸽捻,這是很重要的呼巴,如果一開始就從某個技術細節(jié)入手泽腮,比如密碼學,P2P衣赶,很容易就走進一個死胡同诊赊,最后無疾而終。


精通比特幣.jpg

0x02 環(huán)境搭建

工欲善其事屑埋,必先利其器豪筝。首先我們先選個版本,我用的是Bitcoin Core Daemon version v0.16.99.0-b1dc39d摘能。在開始研讀代碼之前续崖,我們先把環(huán)境搭好。由于常年在Windows下面做開發(fā)团搞,我嘗試過搭建bitcoin的windows環(huán)境严望,網(wǎng)上也能搜索到教程,但我不推薦大家去這么做逻恐,因為這是一個巨坑像吻,詳細就不多贅述了。我選擇的系統(tǒng)環(huán)境是Ubuntu 14.04 Server LTS复隆,我不太喜歡用桌面版拨匆。具體搭建的教程在互聯(lián)網(wǎng)上能搜到@菜菜子的教程,講的很詳細挽拂,一步一步做下去就是了惭每。IDE我嘗試過幾個,sublime亏栈,vscode台腥,甚至Idea,我覺得都不夠好用绒北,最主要的是對“代碼引用”這個功能支持的不好黎侈,最后只好祭出了江湖殺器Visual Stuio,但VS導入文件夾的功能不是很友好闷游,只好自己先去Create Filter峻汉,然后再導入文件。最后我想強調一點的是關于代碼的調試脐往,可能很多朋友喜歡用Log調試俱济,我個人還是喜歡debug,我用的是gdb钙勃,不過要注意的是蛛碌,在make文件之前要修改所有目錄下的makefile,把編譯的優(yōu)化禁止掉辖源,也就是把g++的編譯選項-O2改成-O0蔚携,這樣就能跟蹤代碼的完整的執(zhí)行流程了希太。


gdb.jpg

0x03 目錄結構&數(shù)據(jù)結構

整個的項目的目錄結構可以參考下圖(圖片來源于互聯(lián)網(wǎng))


目錄結構.png

讀了一下前輩的研讀代碼,基本都是從函數(shù)入口進行介紹的酝蜒,是基于函數(shù)跳轉分析的誊辉,也就是我們平時調試的callstack。我研讀的方式稍有不同亡脑,我是從整個比特幣的數(shù)據(jù)結構入手的堕澄。我們都知道比特幣代碼是基于區(qū)塊鏈技術的,腦子里都有鏈表這樣的一個概念霉咨,一環(huán)一環(huán)利用指針依次連接起來蛙紫。如果我們知道每個節(jié)點里的數(shù)據(jù)結構,甚至是內存布局途戒,然后再去分析每個數(shù)據(jù)結構在代碼中扮演的角色坑傅,各個數(shù)據(jù)結構之間的組織方式,是Has-A喷斋,還是Is-A唁毒,按照這個思路去閱讀代碼,就輕松愉悅加開心了星爪。
首先來分析chain.h和chain.cpp這兩個文件浆西,里面包含了這樣的類。

CBlockIndex
CDiskBlockIndex
CChain

類的關系成員變量及關系圖如下:


BlockIndex.jpg

再來分析block.h和block.cpp這兩個文件顽腾,里面包含如下幾個類近零。

CBlockHeader
CBlock
CBlockLocator

類的關系成員變量及關系圖如下:


Block.jpg

從上面的分析可以看出CBlockIndex是Block的內存索引,Block的詳細數(shù)據(jù)是懶加載(lazy-load)崔泵,只有在使用的時候才會用硬盤數(shù)據(jù)讀取秒赤。Block在硬盤序列化的數(shù)據(jù)除了類里的成員變量之外猪瞬,還有一些額外的數(shù)據(jù)如下圖所示憎瘸,看到這些是不是很眼熟,在剛開始接觸windows PE文件的時候陈瘦,思路和這個也是類似的幌甘。


BlockDB.jpg

有網(wǎng)友總結出來的更簡單粗暴的圖,如下(圖片來源于互聯(lián)網(wǎng))痊项,這個圖锅风,我很喜歡,哈哈哈鞍泉。


詳細.png

0x04 總結

本開篇小節(jié)主要講述了研讀BTC代碼的動機和方法皱埠,立Flag去做一件事情可能會很簡單,但能堅持下來是一件很不容易的事情咖驮,由于本人能力有限边器,文中有描述不當?shù)牡胤窖凳啵€請大家多多包涵。下一小節(jié)忘巧,主要講交易的數(shù)據(jù)結構恒界,See u then!

本文由區(qū)塊鏈研習社源碼研讀班@Hefe原創(chuàng),轉載請注明出處砚嘴!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末十酣,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子际长,更是在濱河造成了極大的恐慌耸采,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件也颤,死亡現(xiàn)場離奇詭異洋幻,居然都是意外死亡,警方通過查閱死者的電腦和手機翅娶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門文留,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人竭沫,你說我怎么就攤上這事燥翅。” “怎么了蜕提?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵森书,是天一觀的道長。 經(jīng)常有香客問我谎势,道長凛膏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任脏榆,我火速辦了婚禮猖毫,結果婚禮上,老公的妹妹穿的比我還像新娘须喂。我一直安慰自己吁断,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布坞生。 她就那樣靜靜地躺著仔役,像睡著了一般。 火紅的嫁衣襯著肌膚如雪是己。 梳的紋絲不亂的頭發(fā)上又兵,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音卒废,去河邊找鬼沛厨。 笑死乘盼,一個胖子當著我的面吹牛,可吹牛的內容都是我干的俄烁。 我是一名探鬼主播绸栅,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼页屠!你這毒婦竟也來了粹胯?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤辰企,失蹤者是張志新(化名)和其女友劉穎风纠,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體牢贸,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡竹观,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了潜索。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片臭增。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖竹习,靈堂內的尸體忽然破棺而出誊抛,到底是詐尸還是另有隱情,我是刑警寧澤整陌,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布拗窃,位于F島的核電站,受9級特大地震影響泌辫,放射性物質發(fā)生泄漏随夸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一震放、第九天 我趴在偏房一處隱蔽的房頂上張望宾毒。 院中可真熱鬧,春花似錦澜搅、人聲如沸伍俘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至觅丰,卻和暖如春饵溅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背妇萄。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工蜕企, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留咬荷,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓轻掩,卻偏偏與公主長得像幸乒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子唇牧,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內容