1. 程式人生 > >比特幣原始碼解析(1)

比特幣原始碼解析(1)

0x00 寫在前面

研究了這麼久的區塊鏈卻一直都沒有完整的看過一個區塊鏈專案的程式碼,甚至還一度沉迷各種ICO,每天看著各種貨幣層出不窮,跌跌漲漲,起起伏伏,不亦樂乎。現在看來,也許整體來講賺了點小錢,可是那又有什麼意義呢?終究不是長久之計。這兩天終於靜下來大概瀏覽了一遍比特幣的原始碼,比特幣作為數字貨幣的鼻祖,這句話雖然不嚴格,但是就目前的市場價格而言,可謂是當之無愧的老大哥了,並且市場上有很大一部分專案都是在比特幣的程式碼上進行修改的或者使用了比特幣的相關程式碼,再退一步來說,即使是和比特幣完全獨立的專案在整體框架上也類似,比如一些基本的資料結構還有共識演算法等等。說了這麼多,想強調的就是理解比特幣的程式碼對於理解區塊鏈中的很多概念以及各種區塊鏈專案都有很好的幫助。

這將是一個系列的文章,包括最核心的比特幣原始碼的詳細解析,還有實現的過程中用到的各種技巧的分析。之所以打算寫這一系列文章的原因一個是做好筆記,因為整個專案的程式碼比較長,涉及到的相關知識也比較多,如果不做好筆記,很容易看完就忘;第二個原因就是給後來的人提供一個參考資料,希望更多的人瞭解區塊鏈,將去中心化的思想發揚光大!我知道網上已經有很多人寫過了比特幣的原始碼分析,但每個人都有自己的想法,有自己的分析方法,別人的不一定適合自己,自己走出來的路必定也是印象最為深刻的。

0x01 整體框架

這一系列的文章將分為三個部分來介紹,分別是

  • 準備知識:比特幣的實現過程中使用了許多其他的庫,包括Boost, openssl , libevent以及QT等等。所以首先我將會對這些庫做相應的介紹,包括基本的使用方法,便於之後的程式碼分析。當然這部分在整個閱讀時可以先略過,遇到相應問題時再來了解即可。
  • 主要資料結構:比特幣在程式碼中定義許多的類,有些我們在各種文章中經常看到例如交易(CTransaction),區塊(CBlock),交易池(CTxMemPool)等等,還有些不常見的例如共識(Consensus),指令碼(CScript)等等,這些資料結構在程式碼中隨處可見,所以這部分單獨拿出來對這些類包含的變數和成員函式進行解釋,同時也便於之後的查閱。
  • 可執行程式程式碼分析:我們編譯完比特幣的原始碼之後將得到7個可執行程式分別是bench_bitcoin, bitcoin-cli, bitcoind, bitcoin-qt, bitcoin-tx, test_bitcoin, test_bitcoin-qt。其中第2,3,4,5個是主要的功能部分,所以我們將重點分析這四個可執行程式的原始碼。