美文网首页区块链研习社Ulord社区联盟区块链大学
人人都能成为闪电网络节点:第2章安装比特币全节点

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

作者: 云天明ytm_ltd | 来源:发表于2019-03-18 19:59 被阅读3次
    欢迎测试连接

    安装编译比特币核心

    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

    git clone命令结果

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

    Paste_Image.png

    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)

    make install结果

    cd ~/bitcoin/

    ./autogen.sh

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

    有一条报错

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


    没有安装libevent后面会报错,一直走不下去

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

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

    image.png

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

    make了好长时间

    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 //打开图形化客户端


    QT界面,首先更新区块头,区块更新还没有开始

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


    image.png

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

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

    通过命令行进行常见操作

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

    我们看到区块同步已经完成,与btc.com实时出块高度一致

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

    bitcoind停止后,钱包加密码和getinfo都不能成功

    使用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可以显示该交易的详细信息。

    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

    listunspent

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

    gettxout

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

    createrawtransaction

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

    参考内容:

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

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/azjxmqtx.html