区块链学习笔记(1)从一个Full Node开始

216 阅读5分钟
原文链接: zhuanlan.zhihu.com

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重发