天天看點

[區塊鍊] 帶你進入Bitcoin開發 - 環境搭建

  學習完區塊鍊枯燥乏味的、高深的、必備的基礎知識後,終于可以走上開發之路了!真是迫不及待啦!之後部落格更新主要放在區塊鍊的開發上,相信這才是大多數同學更加感興趣的地方!學習過程從最經典的區塊鍊鼻祖-比特币學習,之後了解下區塊鍊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.下載下傳失敗:

[區塊鍊] 帶你進入Bitcoin開發 - 環境搭建

  嘗試了兩次,每次都好長時間,最終都以失敗告終。

  報錯: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
[區塊鍊] 帶你進入Bitcoin開發 - 環境搭建

  報錯:fatal:The remote end hung up unexpectedly.

     fatal:index-pack failed.

  算了,這次又失敗了,我查了查“fatal:index-pack failed”,是權限或連接配接逾時問題,懶得去解決這個問題了,幹脆直接去github下載下傳,速度賊快!推薦這種方法:下載下傳如圖所示:

[區塊鍊] 帶你進入Bitcoin開發 - 環境搭建

  直接上該網址

https://github.com/bitcoin/bitcoin.git

将源碼download下來,然後建立檔案夾bitcoin,解壓到其中。

          

[區塊鍊] 帶你進入Bitcoin開發 - 環境搭建

 将檔案提取(解壓)到bitcoin檔案夾下。

         

[區塊鍊] 帶你進入Bitcoin開發 - 環境搭建

  繼續運作上面操作即可!

   2. 排除warning  

  執行完.configure之後需要看看是否有相應的錯誤資訊或者WARNING。一般warning是可以允許的,不影響主要功能使用。但是我們最好逐一排除警告。(若隻分析bitcoind代碼,可以忽略此部分。)

[區塊鍊] 帶你進入Bitcoin開發 - 環境搭建

  原因:warning: zmq找不到大于4的版本 。

sudo apt-get install libzmq-dev      

   

[區塊鍊] 帶你進入Bitcoin開發 - 環境搭建

   原因:warning:缺少qt所需的依賴

sudo apt-get install libqt4-dev      
[區塊鍊] 帶你進入Bitcoin開發 - 環境搭建

  注:版本問題,可忽略不計,因為前邊指令忽略了版本(--with-incompatible-bdb為忽略libdb版本差異)。強迫症可以自己更新!

  這些導緻了:(當然學習源碼的話,已經足夠了!)

[區塊鍊] 帶你進入Bitcoin開發 - 環境搭建

  排除警告後:

[區塊鍊] 帶你進入Bitcoin開發 - 環境搭建

 三、啟動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開發 - 環境搭建
  • 擷取區塊鍊資訊
    ./bitcoin-cli -testnet getblockchaininfo      
[區塊鍊] 帶你進入Bitcoin開發 - 環境搭建
  • 擷取網絡資訊
    ./bitcoin-cli -testnet getnetworkinfo      
[區塊鍊] 帶你進入Bitcoin開發 - 環境搭建
  • 擷取錢包資訊
    ./bitcoin-cli -testnet getwalletinfo       
[區塊鍊] 帶你進入Bitcoin開發 - 環境搭建
  • 擷取某個區塊資訊
    ./bitcoin-cli -testnet getblock 000000000933ea01ad0ee984209779baaec3ced90fa3f408719526f8d77f4943       
[區塊鍊] 帶你進入Bitcoin開發 - 環境搭建

【  時間倉促,如有錯誤,歡迎指正! ||   歡迎留下您的評語!  大家一起探讨、學習區塊鍊!】

【  轉載請注明出處!

http://www.cnblogs.com/X-knight/

繼續閱讀