Bitcoin(以下称比特币)是一个P2P网络,它的客户端有Full Node(全功能客户端)、SPV (Simplified Payment Verification,简化支付验证协议[1],即只支持简化支付验证协议的客户端)。SPV有时也称作Thin Clients, light-weight clients,它们在维基[2]上的页面引用是一样的。
Full Node会下载包含所有交易信息(而不仅仅是区块的headers)的完整区块链,到目前为止,这会要求为它保留145GB以上的磁盘空间,并且还在以每10分钟 的[杨勇1] 速度增加着。这些数据将会在交易验证中用到,因此Full Node不容易被欺骗,它们是bitcoin网络中的安全基石。
SPV,或者说Thin Clients,则只会下载整个区块链中所有区块的头信息。正如比特币白皮书: Bitcoin: A Peer-to-Peer Electronic Cash System(以下简称白皮书)所说,一个区块头大概80字节大小,假设每10分钟生成一个新的区块,那么每年只会产生4.2MB的头信息数据,因此这些信息全部放在内存中都不是问题。然而,在安全性上SPV并不如Full Node那么健壮。
安装Full Node是程序员的不二选择。比特币官网就提供了一个Full Node客户端,称作bitcoin core,有时候也被叫作Satoshi(即“聪”)客户端。下载地址在这里[4]。如果想看看其它的客户端,包括SPV客户端,可以看看这里[5]。
1.1 安装Bitcoin Core客户端
我们以Ubuntu下安装bitcoin core客户端为例讲解安装过程。首先,你需要添加PPA:
sudo add-apt-repository ppa:bitcoin/bitcoin[2]
sudo apt-get update
然后执行安装命令:
sudo apt-get install bitcoind
安装完成后,运行命令:
bitcoind -daemon
现在一个Full Node应该已经正常运行了。按照默认配置,它应该全速下载完整的区块链到本地。安装过程并没有给我们留下任何自定义的空间。还记得吗,前文讲过,到目前为止,一个完整的区块链信息已经有145GB之多。那么了解bitcoin core将会在什么位置存储这些数据,空间是否足够将是十分重要的。Bitcoin core在启动之前并不会检查这一点,但如果在运行过程中发现磁盘空间不够,它会报错并且停止。
1.2 检查安装位置
现在来看看安装后的文件系统情况:
dpkg -L bitcoind
--输出--
/usr/share/doc/bitcoind
/usr/share/doc/bitcoind/examples
/usr/bin/bitcoin-cli
/usr/bin/bitcoind
/etc/bash_completion.d
/etc/bash_completion.d/bitcoin-cli
/etc/bash_completion.d/bitcoind
可以看出我们将得到两个可执行命令,bitcoind以及bitcoin-cli。我们还看到在/etc/bash_completion.d下出现了bitcoin-cli,这说明我们将可以在命令行下使用自动完成,这将会省去我们记忆众多命令的烦恼。
但是上述目录中并未出现任何可能存放数据的目录。经过一番查找,原来bitcoin core选定了当前用户的主目录来存放数据:
ls -l ~/.bitcoin
--输出—
-rw------- 1 37 2月 1 11:19 banlist.dat
-rw------- 1 6 2月 1 14:10 bitcoind.pid
drwx------ 3 61440 2月 2 16:57 blocks
drwx------ 2 65536 2月 2 16:57 chainstate
drwx------ 2 4096 2月 1 14:10 database
-rw------- 1 0 2月 1 11:19 db.log
-rw------- 1 76941536 2月 2 16:57 debug.log
-rw------- 1 247985 2月 1 11:23 fee_estimates.dat
-rw------- 1 2797804 2月 2 16:55 peers.dat
-rw------- 1 1425408 2月 2 16:54 wallet.dat
下载的区块将存放在blocks目录中。如果你的根目录分区没有足够多的空间,则应该将data目录放到合适的位置上。这要通过指定一个bitcoin.conf文件来达成。首先,让我们通过下述命令安全地停止掉bitcoind:
bitcoin-cli stop
记住我们的节点是一个P2P网络的一部分,所以,停止往往要等好几分钟。
1.3 自定义配置
Bitcoin core客户端在Ubuntu上的安装并不包括配置文件。我们需要手动生成这个文件,并放到主目录下的.bitcoin目录中去。Bitcoin.conf文件有很多选项,配置起来并不容易,好在我们可以通过一个在线工具[6]来完成:
工具已经内置了好几种常用配置,比如defaults,mining, testnet等,这样使得我们可以只配置我们关注的几个选项。在这里我们关注的是数据目录。你需要展开Bitcoin Core选项,然后找到Config File Location和Data Storage Location,将其设为正确的值。注意你必须将bitcoin.conf文件置于~/.bitcoin目录中,但如果你坚持要使用另一个配置文件,则可以在该文件中再引用另一个配置文件。
好,我们现在可以再次启动bitcoin core客户端[3]了。
[1] 见Bitcoin: A Peer-to-Peer Electronic Cash System第八节
[2] 如果运行本行出错,并且显示:The program add-apt-repository is currently not installed.则你需要按照如下命令安装add-apt-repository:
sudo apt-get install software-properties-common
或者:
sudo apt-get install python3-software-properties
或者:
sudo apt-get install python-software-properties
取决于你的Ubuntu版本和python环境。
[3] 如果提示cannot locate RPC ...错误,一般是daemon未能启动或者未能正常启动。如果运行一段时间后daemon停止,首先考虑磁盘空间不足的问题。
--
整理专栏时误删文章, 2019/7/3重发