1. 程式人生 > >比特幣原始碼研讀(二)之搭環境遇到的那些坑

比特幣原始碼研讀(二)之搭環境遇到的那些坑

首先說一下度《精通比特幣》是一直不理解的一個地方:

上面兩處被圈起來的地方都提到了一個數字2256,特別是第一句話更是讓人費解,如果私鑰只能在1到2256間產生那豈不是太容易重複了。關於這點,我認為是在翻譯或者排版是出現了錯誤,2256應該是想表達2的256次方的意思。後續翻看其它資料是也證實了我的想法。

現在說說搭環境遇到的問題.

一、源的問題

        我是在docker下進行的原始碼安裝,使用官方的Ubuntu16.04映象,許多標準系統裡的工具映象中是沒有的。對於源我還是比較習慣使用阿里雲,這裡把設定貼出來:

1、備份sources.list

cp /etc/apt/sources.list /etc/apt/sources.list_backup

2、更改源,vim /etc/apt/sources.list,內容如下:

deb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-properties
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-properties
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse

3、記得更新源,不更新資料來源是不能用的

apt-get update

二、安裝add-apt-repository     

編譯原始碼需依賴於libdb4.8-dev,文件要求使用“add-apt-repository ppa:bitcoin/bitcoin”來新增repository,之後在能夠安裝libdb4.8-dev,系統中沒有add-apt-repository,安裝方法如下:

apt-get install python-software-properties
apt-get install software-properties-common

三、安裝hexdump

這個工具應該是系統自帶的,但不知到為什麼我用的官方映象中沒有,安裝方法如下:

apt-get install bsdmainutils

四、安裝pkg-config

apt-get install pkg-config

五、編譯

安裝完上面這些後使用./configure --without-gui就可以生辰Makefile檔案了。--without-gui是使用使用者介面,因為我用的是docker 所以就把這個選項加上了。

make的時候會報錯:“rpcrawtransaction.cpp:299:77:   required from here /usr/include/boost/variant/get.hpp:178:5: error: invalid application of 'sizeof' to incomplete type 'boost::STATIC_ASSERTION_FAILURE<false>'      BOOST_STATIC_ASSERT_MSG(      ^ Makefile:838: recipe for target 'rpcrawtransaction.o' failed”

解決方法如下:

找報錯檔案rpcrawtransaction.cpp的299行:

const CScriptID& hash = boost::get<const CScriptID&>(address);

修改為:

const CScriptID& hash = boost::get<CScriptID>(address);

即可。