學習完區塊鏈枯燥乏味的、高深的、必備的基礎知識后,終於可以走上開發之路了!真是迫不及待啦!之后博客更新主要放在區塊鏈的開發上,相信這才是大多數同學更加感興趣的地方!學習過程從最經典的區塊鏈鼻祖-比特幣學習,之后了解下區塊鏈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.md
bitcoin-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 (網友提醒,新版本命令為:./bitcoind -testnet,請讀者自測!)
- 停止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/】