如前所述,比特币是一种去中心化的软件,只有客户端而无服务器端软件。比特币软件的官方客户端有两个版本:一个是图形界面的版本,通常被称为Bitcoin;还有一个简洁命令行的版本,通常被称为bitcoind。它们都是开放源代码的,两个版本相互兼容,有同样的命令行参数,读取相同的配置文件,读写相同的数据文件。可以任选Bitcoin客户端或bitcoind客户端中的一个来运行(包括源代码分析、编译、运行、观察和实验),如果尝试同时运行两个客户端,会提示已经有一个客户端在运行并且自动退出。
作为程序开发人员,建议重点研究bitcoind,因为Bitcoin与bitcoind的差异化部分仅仅在于GUI(面向终端用户的图形界面),完全不涉及比特币和区块链的底层技术,因此大可以放心地忽略,对后续的研究与实践工作也毫无影响。
bitcoind支持在Linux、Mac、Windows等平台编译运行,下面选择Ubuntu 14.04版本作为开发测试环境,这也是目前在阿里云和linode等云服务器中部署产品选择的常用版本。Mac、Windows平台下的编译和运行请读者自行学习。
首先要安装Ubuntu Linux环境,如果习惯使用Windows,也可以在VMware下安装虚拟环境。
在Ubuntu 14.04中按Ctrl+Alt+T快捷键,启动Terminal/shell。如图2-1和图2-2所示,分别执行如下两个命令,用来更新安装源和安装必备实验环境(各种工具和依赖库)。
sudo apt-get update sudo apt-get install git autoconf make gcc g++ libdb-dev libdb++-dev libboost-all-dev zlib1g-dev libssl-dev build-essential libminiupnpc-dev libtool pkg-config libevent-dev libzmq3-dev libqt4-core libqt4-gui libqt4-dev
图2-1 更新安装源
图2-2 安装必备实验环境
如图2-3所示,顺次执行如下命令:
git config --global core.compression -1 git clone -b v0.12.1 --depth=1 https://github.com/bitcoin/bitcoin.git
图2-3 从github下载bitcoin源代码
开始在当前目录下载bitcoin源代码(本书选择经典版本bitcoin v0.12.1作为研究对象)。下载完毕后执行chmod 777 -R bitcoin及cd bitcoin,进入bitcoin主目录。
编译过程如下。
● 生成编译源码所需要的库配置:sudo ./autogen.sh。
● 生成makefile文件:./configure --with-incompatible-bdb。
● 编译:make。其中编译好的bitcoind、bitcoin-tx和bitcoin-cli保存在src目录下。
● 安装编译好的二进制文件(可选):make install。
● 运行:执行图形化客户端程序或全节点挖矿客户端程序。
● bitcoin-qt或bitcoind -server –printtoconcole。
注意: 不要在编译上大费周章(不同版本的bitcoin对gcc、g++的版本要求不同,不同版本的gcc、g++的兼容与切换技巧不同),下载源代码并基本编译成功后,应当立即着手开始了解源代码的框架结构(类似于作文的大纲),理解核心代码、快速上手和进入开发阶段才是王道,2.3节和2.4节将分析bitcoind的核心源代码,并基于源代码进行简单的修改实验。
在上述实验的过程中,可能会提示缺少C++17环境支持,遇到该提示的读者可以通过安装gcc/g++ ver9以解决问题,在这个过程中不提倡卸载低版本的gcc/g++编译器,而应将两种版本的编译器以兼容的切换方式进行共存管理。
sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get install g++-9
注意,g++是C++编译器,gcc是C编译器,安装g++ ver9的同时也会安装gcc ver9。
(1)切换gcc到ver9,如图2-4所示。
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 40 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50 sudo update-alternatives --config gcc
图2-4 切换gcc到ver9
输入选项4后按Enter键,运行gcc -v查看,发现gcc已经切换到ver9。
(2)切换g++到ver9,如图2-5所示。
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-5 50 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.9 40 sudo update-alternatives --config g++
图2-5 切换g++到ver9
直接按Enter键选择默认90模式或输入2后按Enter键,运行g++ -v查看,发现g++已经切换到ver9。