探索比特币源码0-bitcoin的编译
探索比特幣源碼0-bitcoin的編譯
前言
區塊鏈領域作為一個新興的熱點,迭代的實在是太快了,剛剛入門,必須要抓緊追趕。
在閱讀了一些優秀的文檔之后,已經對比特幣及其背后的實現技術——區塊鏈有了一定的理解。
為了更深入的理解比特幣及其實現技術的各種細節,開始進行比特幣源碼的學習。
我學習源碼過程中遇到的優秀資源,推薦如下,后續會不斷更新。
比特幣開發者手冊
精通比特幣
比特幣其實是一種協議,而這個基于信任的協議的第一個實現版本,叫做“比特幣(Bitcoin)”或者“Satoshi客戶端”。現在它已經被大大的修改和改進了,演變成所謂的比特幣核心——Bitcoin Core,以區別于其他兼容的實現方式。
比特幣核心是比特幣系統的參考實現,這意味著它是如何實施的權威參考。Bitcoin Core實現了比特幣的所有方面,包括錢包,交易和區塊驗證引擎,以及P2P網絡中的完整網絡節點。
因此讓我們從Bitcoin Core入手,學習源碼,全面了解比特幣。
下載比特幣源碼
我們使用git命令來創建源代碼的本地副本
$ git clone https://github.com/bitcoin/bitcoin.git當git克隆操作完成后,進入到項目中
$ cd bitcoin選擇Bitcoin Core版本
在編譯代碼之前,我們需要先切換到一個穩定的release版本
首先,要找到可用release的標簽,我們使用git tag命令:
$ git tag v0.1.5 v0.1.6test1 v0.10.0 ... v0.11.2 v0.11.2rc1 v0.12.0rc1 v0.12.0rc2 ...根據慣例,用于測試的發布候選版本具有后綴“rc”
因此我們選一個沒有后綴的版本check下來,就選最新的吧
git checkout v0.16.1通過輸入命令git status來確認所需的版本
git status完成后可以簡單觀察下比特幣項目的結構
$ ls autogen.sh build-aux configure.ac contrib CONTRIBUTING.md COPYING depends doc INSTALL.md libbitcoinconsensus.pc.in Makefile.am README.md share src test配置構建Bitcoin Core
現在嘗試構建命令行比特幣客戶端,也稱為比特幣(bitcoind)。
我是在Linux下進行,可以在doc/build-unix.md中查看編譯bitcoind命令行客戶端的說明。
其他系統可以在doc目錄中找到替代說明,如macOS和Windows的說明,分別為build-osx.md或build-windows.md。
Bitcoin Core 的構建過程從0.9版本開始更改為使用autogen / configure / make系統。也就是說,構建的流程如下:
./autogen.sh ./configure make make install # optional一步步來,autogen.sh文件是一個shell腳本,我們可以通過使用autogen.sh腳本生成一組build腳本來啟動build過程。
我們嘗試運行autogen.sh腳本
$ ./autogen.sh得到的結果如下:
configuration failed, please install autoconf first出現了配置錯誤,我們需要預先安裝autoconf
如官方文檔所述,很友好的是,它會詢問系統以發現正確的設置,并確保你擁有編譯代碼所需的所有庫。
也就是說,它會機智的檢查你缺什么依賴,缺什么包。按照build-unix.md中的提示,各種依賴的安裝走一波
$ sudo apt-get install build-essential libtool autotools-dev automake pkg-config libssl-dev libevent-dev bsdmainutils python3 libboost-system-dev libboost-filesystem-dev libboost-chrono-dev libboost-program-options-dev libboost-test-dev libboost-thread-dev再次運行autogen.sh腳本,成功~
目前我還不了解shell,但我又有點好奇autogen.sh腳本都做了什么,于是調用如下命令,查詢當前目錄下的文件及最后修改時間,并按時間排序:
$ ls -lc -t 總用量 1216 drwxrwxr-x 21 lsgo-as lsgo-as 4096 7月 12 21:16 src drwxrwxr-x 3 lsgo-as lsgo-as 4096 7月 12 21:16 build-aux -rw-rw-r-- 1 lsgo-as lsgo-as 46452 7月 12 21:16 Makefile.in drwxr-xr-x 2 lsgo-as lsgo-as 4096 7月 12 21:16 autom4te.cache -rwxrwxr-x 1 lsgo-as lsgo-as 1005998 7月 12 21:16 configure -rw-rw-r-- 1 lsgo-as lsgo-as 55075 7月 12 21:16 aclocal.m4 drwxrwxr-x 4 lsgo-as lsgo-as 4096 7月 12 20:57 test drwxrwxr-x 4 lsgo-as lsgo-as 4096 7月 12 20:57 doc drwxrwxr-x 5 lsgo-as lsgo-as 4096 7月 12 20:57 share drwxrwxr-x 17 lsgo-as lsgo-as 4096 7月 12 20:57 contrib drwxrwxr-x 6 lsgo-as lsgo-as 4096 7月 12 20:57 depends -rw-rw-r-- 1 lsgo-as lsgo-as 47128 7月 12 20:57 configure.ac -rw-rw-r-- 1 lsgo-as lsgo-as 13886 7月 12 20:57 CONTRIBUTING.md -rw-rw-r-- 1 lsgo-as lsgo-as 1142 7月 12 20:57 COPYING -rw-rw-r-- 1 lsgo-as lsgo-as 10859 7月 12 20:57 Makefile.am -rwxrwxr-x 1 lsgo-as lsgo-as 527 7月 12 20:55 autogen.sh -rw-rw-r-- 1 lsgo-as lsgo-as 3600 7月 12 20:55 README.md -rw-rw-r-- 1 lsgo-as lsgo-as 295 7月 12 17:42 libbitcoinconsensus.pc.in -rw-rw-r-- 1 lsgo-as lsgo-as 161 7月 12 17:42 INSTALL.md仔細對比,可以看出autogen.sh腳本沒有在當前目錄下生成新文件,但修改了如下文件
src build-aux Makefile.in autom4te.cache configure aclocal.m4這些都是和配置有關的,其中最重要的是configure腳本,它提供了許多不同的選項來自定義構建過程。
鍵入“./configure –help”查看各種選項:
$ ./configure --help看的有點蒙,也不得不說,功能真強大!
configure腳本允許您通過使用--enable-FEATURE和--disable-FEATURE標志來啟用或禁用bitcoind的某些功能,其中FEATURE由功能名稱替換,如幫助輸出中所列。
我還沒有搞清這些功能,這里我們構建具有所有默認功能的bitcoind客戶端。 我們不會使用配置標志。
調用./configure腳本,報了這樣一個錯
$ ./configure ... configure: error: libdb_cxx headers missing, Bitcoin Core requires this library for wallet functionality (--disable-wallet to disable wallet functionality)錯誤顯示,我沒有安裝錢包的一個依賴庫
這才回想起來,錯誤原因一定是我偷懶了,沒有把build-unix.md讀完,所以重要的事情說三遍
仔細閱讀build-unix.md文檔,并安裝所有的依賴項!
仔細閱讀build-unix.md文檔,并安裝所有的依賴項!
仔細閱讀build-unix.md文檔,并安裝所有的依賴項!
認真安裝所有依賴項后,重新運行./configure腳本,成功~
構建Bitcoin Core可執行文件
下一步,編譯源代碼,這個過程根據CPU和內存資源不同,但一般可能需要1個小時完成。輸入make命令就可以開始編譯了:
$ make Making all in srcCXX crypto/libbitcoinconsensus_la-hmac_sha512.loCXX crypto/libbitcoinconsensus_la-ripemd160.loCXX crypto/libbitcoinconsensus_la-sha1.loCXX crypto/libbitcoinconsensus_la-sha256.loCXX crypto/libbitcoinconsensus_la-sha512.loCXX libbitcoinconsensus_la-hash.loCXX primitives/libbitcoinconsensus_la-transaction.loCXX libbitcoinconsensus_la-pubkey.loCXX script/libbitcoinconsensus_la-bitcoinconsensus.loCXX script/libbitcoinconsensus_la-interpreter.lo[... many more compilation messages follow ...] $如果一切順利,bitcoind現在已經編譯完成。
最后一步就是通過sudo make install命令,安裝bitcoind可執行文件到你的系統路徑下,可能會提示您輸入用戶密碼,因為此步驟需要管理員權限:
$ sudo make install Password: Making install in src../build-aux/install-sh -c -d '/usr/local/lib' libtool: install: /usr/bin/install -c bitcoind /usr/local/bin/bitcoind libtool: install: /usr/bin/install -c bitcoin-cli /usr/local/bin/bitcoin-cli libtool: install: /usr/bin/install -c bitcoin-tx /usr/local/bin/bitcoin-tx ... $bitcoind默認的安裝位置是/usr/local/bin。你可以通過詢問系統下面2個可執行文件的路徑,來確認bitcoin是否安裝成功。
$ which bitcoind /usr/local/bin/bitcoind$ which bitcoin-cli /usr/local/bin/bitcoin-cli總結
以上是生活随笔為你收集整理的探索比特币源码0-bitcoin的编译的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件设计开发笔记1:基于状态机的程序设计
- 下一篇: 区块链读书笔记三