您的位置:首页 > 理论基础 > 计算机网络

人人都能成为闪电网络节点:第2章安装比特币全节点

2020-02-02 07:29 1271 查看

#安装编译比特币核心
1、比特币客户端介绍
Bitcoin 比特币官方客户端有两个版本:一个是图形界面的版本,通常被称为 Bitcoin(首字母大写),以及一个简洁命令行的版本(称为 bitcoind)。它们相互间是兼容的,有着同样的命令行参数,读取相同的配置文件,也读写相同的数据文件。您可以在一台电脑中运行 Bitcoin 客户端或是 bitcoind 客户端的其中一个(如果您不小心尝试同时运行另外一个客户端,它会提示您已经有一个客户端在运行并且自动退出)。
我们在本文中介绍的比特币核心,也就是执行完安装步骤,两个客户端都已经具备
2、环境准备
1)系统环境:
操作系统:Ubuntu操作系统,版本为16.04 LTS
内存:最少2G
硬盘空间:250GB以上

2)第三方库
sudo apt-get update //准备系统更新
这个命令,会访问源列表里的每个网址,并读取软件列表,然后保存在本地电脑。update后,可能需要upgrade一下。

sudo apt-get upgrade //升级已经比较的更新
这个命令,会把本地已安装的软件,与刚下载的软件列表里对应软件进行对比,如果发现已安装的软件版本太低,就会提示你更新。如果你的软件都是最新版本,会提示:
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。

sudo apt-get install build-essential libtool autotools-dev autoconf pkg-config libssl-dev //安装软件包 build-essential注意参考内容1中菜老师原文缺少了个空格

sudo apt-get install libboost-all-dev //安装boost标准库(c++)

sudo apt-get install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools libprotobuf-dev protobuf-compiler //安装qt5,图形用户界面应用程序开发框架

sudo apt-get install libqrencode-dev //安装c语言生成二维码的库

sudo apt-get install libminiupnpc-dev //libminiupnpc-dev软件包,the MiniUPnP client library,MiniUPnP协议的目标是使家庭网络(数据共享、通信和娱乐)和公司网络中的各种设备能够相互无缝连接,并简化相关网络的实现。。

3、下载比特币核心源码,并进行安装
cd ~ //打开当前用户主目录

一般如果没有装过,系统中是不能直接使用git命令的,需要先安装git
sudo apt-get install git
git clone https://github.com/bitcoin/bitcoin.git

mkdir bitcoin/db4/
cd bitcoin/db4/
wget ‘http://download.oracle.com/berkeley-db/db-4.8.30.NC.tar.gz’

tar -xzvf db-4.8.30.NC.tar.gz

cd db-4.8.30.NC/build_unix/

…/dist/configure --enable-cxx --disable-shared --with-pic --prefix=/home/theusername/bitcoin/db4/

4、构建BitcoinCore可执行文件
make install(如果不是root用户,需要前加sudo)

cd ~/bitcoin/

./autogen.sh

./configure LDFLAGS="-L/home/theusername/bitcoin/db4/lib/" CPPFLAGS="-I/home/theusername/bitcoin/db4/include/"


我的安装过程与参考内容提到的electroman同学遇到的问题一样,试了N遍,才找到他的简书文章。

这里增加安装libevent
sudo apt-get install libevent-dev //安装libevent库

再次执行,
./configure LDFLAGS="-L/home/theusername/bitcoin/db4/lib/" CPPFLAGS="-I/home/theusername/bitcoin/db4/include/"
看到下图这个结果:

make (非root用户需要sudo)
原来使用的make -s -j5,没明白什么意思,使用的是阿里云ecs,只有1G内存,所以直接搞死了,连不上了。
后来查了下,用make -j带一个参数,可以把项目进行并行编译,比如在一台双核的机器上,完全可以用make -j4,让make最多允许4个编译命令同时执行,这样可以更有效的利用CPU资源。-s就是静默模式,在执行之前不输出相应的命令行信息。

make install

5、测试安装结果

$ which bitcoind //查找比特币核心进程位置
/usr/local/bin/bitcoind
如果显示命令找不到,则可能是该命令没有在bin下面,路径不对。用下面命令进行关联。
Sudo make install DESTDIR=/usr/local/bin

$ which bitcoin-cli //查找比特币命令行客户端位置

/usr/local/bin/bitcoin-cli

./src/qt/bitcoin-qt //打开图形化客户端

./src/bitcoind //开启进程
./src/bitcoin-cli //打开命令行客户端

**6、运行配置BitcoinCore
$ bitcoind //安装完毕,现在就要运行比特币进程了

需要找到当前用户的主目录下有一个隐藏目录.bitcoin(bitcoind命令运行以后这个目录才生成,ls -a才能看见隐藏文件),创建bitcoin.conf文件,包括下述信息:
rpcuser=bitcoinrpc
rpcpassword=jgjgjgjg
特别提醒要注意,要实现在主网运行,需要去掉配置文件中的testnet=0前面的#号,或者在bitcoind命令后面增加主网参数。

通过命令行进行常见操作

bitcoin-cli -getinfo //显示关于比特币网络节点、钱包、区块链数据库状态的基础信息。
$bitcoin-cli getblockchaininfo //也可以使用下面的命令,看到的内容更清晰。

$ bitcoin-cli encryptwallet yuntianming //给钱包设置密码

使用backupwallet命令备份,提供文件名作为命令参数:
$bitcoin-cli backupwallet wallet.backup

恢复备份文件,我们使用importwallet命令。(如果你的钱包处于锁定状态,你将需要先将钱包解锁以导入备份文件):
$ bitcoin-cli importwallet wallet.backup

比特币客户端维护了一个地址池,地址池的大小可以用getinfo命令keypoolsize参数获取。这些地址是自动生成 的,可以被用作公开接收地址或零钱地址。可以使用 getaddressesbyaccount 命令列出整个钱包的所有地址:
$ bitcoin-cli getaddressesbyaccount “”

使用getnewaddress命令可以获得其中的一个地址:
$ bitcoin-cli getnewaddress

我们可以询问bitcoind客户端此地址已经接收到的比特币数额,以及指定该数额要被加到余额中所需要的确认数。下面,我们指定只需要0个确认。
$ bitcoin-cli getreceivedbyaddress 1hvzSofGwT8cjb8JU7nBsCSfEVQX5u9CL 0
如果我们忽略这个命令后面的0,我们将只能在至少 minconf 个确认之后才能看到数额,minconf是想要某笔交易出现在 余额中所设置的最少确认数。 minconf 设置在bitcoind配置文件指定。

整个钱包接收到的交易可以通过使用 listtransactions 命令展示出来:
$ bitcoin-cli listtransactions

getbalance 命令将显示所有经过至少 minconf 个确认的交易加和后的余额:
$ bitcoin-cli getbalance

关于交易的命令: gettransaction 、 getrawtransaction 、 decoderawtransaction 之间的关系
使用 gettransaction 命令显示的交易格式为简化格式。

交易ID在交易确认之前并不权威。区块链中找不到交易哈希值并不意味着此笔交易没有进行。这被称作“交易延展性”,因为交易哈希值在区块确认之前是可以更改的。在确认之后txid是不变且权威的。

若要得到整个交易代码并且将之解码,我们将使用两个命 令: getrawtransaction 和 decoderawtransaction 。
getrawtransaction 把交易哈希值(txid)当做一个参数,并且把整个交易以一个“原始”的十六进制字符串的形式返回,而这也正是交易在比特币网络上存在的形式。
要解码这个十六进制字符串,我们使用 decoderawtransaction 命令。复制粘贴这个十六进制字符串作为 decoderawtransaction 的第一个参数以将整个内容解读为JSON数据格式。
交易解码展示这笔交易的所有成分,包括交易的输入及输出。
特别提示,gettransaction加上txid可以显示该交易的详细信息。

使用getblock命令,并把区块哈希值作为参数来查询对应的区块的详细信息。
既然我们知道我们的交易在哪个区块中,我们可以使用getblock命令,并把区块哈希值作为参数来查询对应的区块:

$ bitcoin-cli getblock 0000000000000001b6b9a13b095e96db41c4a928b97ef2d944a9b31b2cc7bdc4 { "hash": "0000000000000001b6b9a13b095e96db41c4a928b97ef2d944a9b31b2cc7bdc4", "confirmations": 37371, "size": 218629, "height": 277316, "version": 2, "merkleroot": "c91c008c26e50763e9f548bb8b2fc323735f73577effbc55502c51eb4cc7cf2e", "tx": [ "d5ada064c6417ca25c4308bd158c34b77e1c0eca2a73cda16c737e7424afba2f", "b268b45c59b39d759614757718b9918caf0ba9d97c56f3b91956ff877c503fbe", "04905ff987ddd4cfe603b03cfb7ca50ee81d89d1f8f5f265c38f763eea4a21fd", "32467aab5d04f51940075055c2f20bbd1195727c961431bf0aff8443f9710f81", "561c5216944e21fa29dd12aaa1a45e3397f9c0d888359cb05e1f79fe73da37bd", [... hundreds of transactions ...] "78b300b2a1d2d9449b58db7bc71c3884d6e0579617e0da4991b9734cef7ab23a", "6c87130ec283ab4c2c493b190c20de4b28ff3caf72d16ffa1ce3e96f2069aca9", "6f423dbc3636ef193fd8898dfdf7621dcade1bbe509e963ffbff91f696d81a62", "802ba8b2adabc5796a9471f25b02ae6aeee2439c679a5c33c4bbcee97e081196", "eaaf6a048588d9ad4d1c092539bd571dd8af30635c152a3b0e8b611e67d1a1af", "e67abc6bd5e2cac169821afc51b207127f42b92a841e976f9b752157879ba8bd", "d38985a6a1bfd35037cb7776b2dc86797abbb7a06630f5d03df2785d50d5a2ac", "45ea0a3f6016d2bb90ab92c34a7aac9767671a8a84b9bcce6c019e60197c134b", "c098445d748ced5f178ef2ff96f2758cbec9eb32cb0fc65db313bcac1d3bc98f" ], "time": 1388185914, "mediantime": 1388183675, "nonce": 924591752, "bits": "1903a30c", "difficulty": 1180923195.258026, "chainwork": "000000000000000000000000000000000000000000000934695e92aaf53afa1a", "previousblockhash": "0000000000000002a7bbd25a417c0374cc55261021e8a9ca74442b01284f0569", "nextblockhash": "000000000000000010236c269dd6ed714dd5db39d36b33959079d78dfd431ba7" }

该块包含419笔交易,列出的第64笔交易(0627052b …)是Alice的咖啡付款。 高度条目告诉我们这是区块链中的第277316块。

使用 listunspent 命令去查看我们钱包中所有剩余的从之前交易中已确认的支出:
$ bitcoin-cli listunspent

可以使用 gettxout 命令来得到未花费的输出的详细细节。交易输出通常可以参 考txid和vout两个指标。以下就是我们通过 gettxout 命令得到的结果:

最后我们可以用 createrawtransaction 命令去建立一笔交易。

createrawtransaction 命令产生了一个原始十六进制字符串,其中编码了这笔交易的诸多细节。我们可以通 过 decoderawtransaction 命令来解码这个字符串,以确认所有的细节。

###参考内容:
聊聊比特币(Bitcoin)客户端源码编译那些事
http://www.jianshu.com/p/8b4ebd0e4b3d
比特币源码研读(1)–下载与编译
http://www.jianshu.com/p/58f3900fbca0

  • 点赞
  • 收藏
  • 分享
  • 文章举报
yuntianming3906 发布了7 篇原创文章 · 获赞 0 · 访问量 360 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: