學習完區塊鍊枯燥乏味的、高深的、必備的基礎知識後,終于可以走上開發之路了!真是迫不及待啦!之後部落格更新主要放在區塊鍊的開發上,相信這才是大多數同學更加感興趣的地方!學習過程從最經典的區塊鍊鼻祖-比特币學習,之後了解下區塊鍊2.0代表:以太坊,最後主要精力放在區塊鍊3.0的代表超級賬本!(我一邊學習,一邊更新,歡迎捧場!)
修近一周主要給大家介紹比特币的開發,通過分析源碼,了解其底層技術的設計及實作!
本片部落格首先介紹比特币開發環境的搭建!
Linux、Mac、Windows等平台均支援運作比特币代碼,作為開發人員,可以重點研究其中的bitcoind代碼部分,因為這是比特币協定及區塊鍊的核心,至于面向終端使用者的圖形界面(GUI)部分,完全可以忽略,對後續研究毫無影響。
在此,隻介紹Linux環境下,開發環境的搭建。(作者作業系統版本為:Ubuntu16.04Desktop 64bit)
因為該開源項目是C/C++語言開發的,當然現在github上有很多其他語言實作的,語言無所謂重要的是思想,是以還是以官方代碼分析為例子。以C++語言為例子,說明如何調用比特币錢包節點提供的RPC接口服務,實作一些涉及比特币區塊鍊的具體應用功能。除了C++外還有很多種語言都可以調用Bitcoin的RPC,例如:Node.js,python等。讀者可以參考本章内容選擇适合自己的語言具體試驗。
RPC(Remote Procedure Call)即遠端過程調用協定,是一種通過網絡從遠端計算機程式上請求服務,而不需要了解底層網絡技術的協定。
一. 環境準備
1. 通過以下指令可安裝并編譯bitcoind所需要的依賴庫:
用指令apt-get install安裝,如果沒有找到該指令則安裝apt-get(自行搜尋,安裝後sudo apt-get update更新包),如果顯示權限不夠則加用sudo apt-get install指令
- 安裝編譯環境
sudo apt-get -y install build-essential libtool autotools-dev automake autoconf pkg-config
- 安裝必備依賴庫
sudo apt-get -y install libssl-dev libboost-all-dev libevent-dev
- 安裝錢包依賴庫
sudo apt-get -y install libdb-dev libdb++-dev
- 安裝其他依賴庫(可選)
sudo apt-get -y install libminiupnpc-dev libzmq3-dev
- 安裝GUI依賴庫(可選)
sudo apt-get -y install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler libqrencode-dev
-
如果沒有安裝git則先安裝(指令:sudo apt-get install git-core)
如果git clone太慢,可以直接上該網址将源碼download下來,然後建立檔案夾bitcoin,解壓到其中。
- 幹脆,我們直接一條指令執行!(隻重點研究bitcoind代碼部分,其他依賴包可不安裝)
sudo apt-get -y install build-essential libtool autotools-dev automake autoconf libssl-dev libboost-all-dev libdb-dev libdb++-dev pkg-config libevent-dev git-core
2. 下載下傳bitcoin源代碼并進入其目錄
1 git clone https://github.com/bitcoin/bitcoin.git #(要等好長時間!)
2 cd bitcoin
3. 編譯源代碼(正常流程)
1 #首先,生成編譯源碼所需要的庫配置:
2 ./autogen.sh
3 #然後,生成makefile檔案:(--with-incompatible-bdb為忽略libdb版本差異)
4 ./configure --with-incompatible-bdb --prefix=/data/install/bitcoin
5 #用make進行編譯:
6 make
7 #安裝編譯好的二進制檔案
8 make install
其他編譯選項:
1 ./configure --disable-wallet #不編譯錢包
2 ./configure --without-gui #不編譯GUI
3 ./configure
因為我們研究的是核心代碼部分,故編譯指令如下:(禁用錢包、GUI)
1 ./autogen.sh
2 ./configure --without-gui --with-incompatible-bdb --prefix=/data/install/bitcoin
3 ./configure --without-gui --disable-wallet
4 make -j
5 make install
附官方文檔:
https://github.com/bitcoin/bitcoin/blob/master/doc/build-unix.mdbitcoin-cli、bitcoind、bitcoin-qt差別:
bitcoin-qt,帶GUI的完整節點;
bitcoind,無GUI的完整節點;
bitcoin-cli,使用bitcoin-cli通路JSON-RPC接口。
二. 問題解決:
1.下載下傳失敗:

嘗試了兩次,每次都好長時間,最終都以失敗告終。
報錯:RPC failed;curl 56 GnuTLS recv error (-54): Error in the pull function.
解決方法:
原因是推送的檔案太大,是以增大git的臨時緩沖區:
git config --global http.postBuffer 2000000000
參考:
https://stackoverflow.com/questions/38378914/git-error-rpc-failed-curl-56-gnutls報錯:fatal:The remote end hung up unexpectedly.
fatal:index-pack failed.
算了,這次又失敗了,我查了查“fatal:index-pack failed”,是權限或連接配接逾時問題,懶得去解決這個問題了,幹脆直接去github下載下傳,速度賊快!推薦這種方法:下載下傳如圖所示:
直接上該網址
https://github.com/bitcoin/bitcoin.git将源碼download下來,然後建立檔案夾bitcoin,解壓到其中。
将檔案提取(解壓)到bitcoin檔案夾下。
繼續運作上面操作即可!
2. 排除warning
執行完.configure之後需要看看是否有相應的錯誤資訊或者WARNING。一般warning是可以允許的,不影響主要功能使用。但是我們最好逐一排除警告。(若隻分析bitcoind代碼,可以忽略此部分。)
原因:warning: zmq找不到大于4的版本 。
sudo apt-get install libzmq-dev
原因:warning:缺少qt所需的依賴
sudo apt-get install libqt4-dev
注:版本問題,可忽略不計,因為前邊指令忽略了版本(--with-incompatible-bdb為忽略libdb版本差異)。強迫症可以自己更新!
這些導緻了:(當然學習源碼的話,已經足夠了!)
排除警告後:
三、啟動bitcoind并加入比特币測試網絡
- 啟動bitcoind
1 cd /data/install/bitcoin/bin/ 2 ./bitcoind --daemon-testnet
[區塊鍊] 帶你進入Bitcoin開發 - 環境搭建 - 停止bitcoind
./bitcoin-cli -testnet stop
bitcoin-cli通路JSON-RPC接口
- 擷取節點統計資訊
./bitcoin-cli -testnet getinfo (該指令已在version 0.16.0去除!是以新版本,沒有此指令!)
- 擷取區塊鍊資訊
./bitcoin-cli -testnet getblockchaininfo
- 擷取網絡資訊
./bitcoin-cli -testnet getnetworkinfo
- 擷取錢包資訊
./bitcoin-cli -testnet getwalletinfo
- 擷取某個區塊資訊
./bitcoin-cli -testnet getblock 000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943
- JSON-RPC接口使用方法見官方文檔: https://bitcoin.org/en/developer-reference#bitcoin-core-apis
【 時間倉促,如有錯誤,歡迎指正! || 歡迎留下您的評語! 大家一起探讨、學習區塊鍊!】
【 轉載請注明出處!
http://www.cnblogs.com/X-knight/】