主页 > 苹果imtoken钱包安装 > 如何运行比特币全节点和本地区块浏览器

如何运行比特币全节点和本地区块浏览器

苹果imtoken钱包安装 2023-01-18 11:32:19

本指南的目标是设置一个比特币节点,这对开发人员很有用。如果您成功完成本指南,您将拥有一个与网络同步的节点,包含比特币区块链的完整历史记录,并全面验证所有交易。

您还可以通过简单的 JSON-RPC 调用与您的节点进行通信。这意味着您可以在不依赖任何受信任的第三方的情况下与比特币网络进行交互。作为如何做到这一点的一个简单示例,我们将运行一个开源区块浏览器,它为您提供了一个无需信任的界面来查看网络上的活动。

先决条件

由于本指南面向开发人员,因此假设您可以轻松进行开发,例如运行 Linux、使用 bash 和执行 Python 脚本。我们不会使用比特币 QT GUI 来设置我们的钱包:事实上,本指南中的所有步骤都没有假设使用 GUI。

如果深入使用其他技术是超出范围的先决条件,我将提供指向这些部分的有用指南的链接。如果您希望以标准用户身份运行完整节点,请查看 bitcoin.org 上的指南。

有一些硬件和软件要求比特币的运作流程,如下所列:

我在具有快速家庭宽带的 6 年前使用的台式计算机上运行我的节点。它有一个 Athlon FX 处理器、4GB RAM 和 250GB 慢速旋转磁盘。效果很好! Bitcoin Core 团队致力于让任何人都可以运行节点并真正获得报酬。

安装比特币

比特币网络遵循通信协议和共识。虽然该协议存在多个客户端,但“规范”且使用最广泛的版本称为比特币核心。

要在 Ubuntu 上安装 Bitcoin Core,您有多种选择:

每种方法都有其权衡。在本指南中,我们将选择使用 apt 和 PPA,因为它是最简单的方法,并且还可以轻松升级到较新版本的软件。一个缺点是它需要信任来自 PPA 的软件,例如,攻击者可能会破坏该软件。请自行评估这些权衡,然后选择最适合您的方法。

如果您只是使用 node 进行开发和修改,并想继续使用选项 #3,只需运行以下命令并按照提示操作:

1
2
3

sudo apt-add-repository ppa:bitcoin/bitcoin
sudo apt-get update
sudo apt-get install bitcoind

成功完成这些命令后,运行 bitcoind -version。您应该会看到一些显示您正在使用的 bitcoind 软件版本的输出。

初始块下载

您现在拥有运行节点所需的最新软件,但您错过了 10 多年的网络历史。请记住,这是一个完整的节点!这意味着它存储和验证区块链的完整历史,从 Satoshi 自己开采的第一个区块开始。您需要下载该历史记录。

不幸的是,这个过程需要一段时间,到目前为止需要大约 150GB 的磁盘空间。在我快速的互联网上,我能够在大约 4 天内下载完整的区块链。您的时间可能会因您的连接和地理位置而异。

运行以下命令:

1

bitcoind -daemon -txindex=1

这将在后台运行 bitcoind 进程并启用交易索引。您可能还希望在每次重新启动时自动启动此过程。您可以通过运行:crontab -e 并添加以下行来做到这一点:

1

@reboot bitcoind -daemon

请注意,我们没有将 txindex 选项添加到 crontab。在本指南的后面部分,我们将此选项放在配置文件中,这是为节点设置选项的更好方法。

节点软件第一次启动时,会创建~/.bitcoin/。现在让我们来看看:

1
2

cd ~/.bitcoin/
ls

您会注意到已经创建了许多文件和目录。我们现在只研究其中的几个。首先,运行 tail -f debug.log。您会注意到一系列日志消息如下:

1
2
3

2018-08-10 17:22:15 UpdateTip: new best=00000000000000000011b735b8fde14db39704c446dd2b1ae4b8db198c255e0d
height=536128 version=0x20000000 log2_work=89.424049 tx=333938835
date='2018-08-10 17:22:26' progress=1.000000 cache=71.6MiB(529075txo)

(当节点第一次开始同步时,这些可以飞得很快。按Ctrl-C退出尾随文件并检查消息)。

这些消息代表从网络下载的块。这里显示的是我在编写本教程时挖掘的最新块,但你会远远超出这些。您会注意到每条消息都显示了许多参数,包括区块的哈希值 (best=X)、区块的高度 (height=X) 以及该区块被开采的时间戳 (date=X)。

要监控初始下载的进度,您可以拖动此文件并查看您捕获的历史日期。请注意,早期的块将快速下载,因为网络历史早期的大多数块大部分都是空的。随着您的进一步进步比特币的运作流程,下载时间将增加。 2017 年之后,我的节点大部分时间都在下载区块。

您还可以使用 bitcoin-cli 命令行界面与区块链进行交互。例如,您可以运行 bitcoin-cli stop 来安全地关闭您的节点,或者运行 bitcoin-cli -getinfo 来获取节点状态的摘要:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

{
"version": 160000,
"protocolversion": 70015,
"walletversion": 159900,
"balance": 0.00000000,
"blocks": 536128,
"timeoffset": 0,
"connections": 33,
"proxy": "",
"difficulty": 5949437371609.53,
"testnet": false,
"keypoololdest": 1531965982,
"keypoolsize": 1000,
"paytxfee": 0.00000000,
"relayfee": 0.00001000,
"warnings": ""
}

还有一集。节点下载的区块数据存储在 ~/.bitcoin/blocks/ 目录下的二进制文件中。您通常不会直接与这些数据交互,但请尝试运行以下命令:

1

head -c 210 ~/.bitcoin/blocks/blk00000.dat && echo '\n'`.

你会看到:

1

The Times 03/Jan/2009 Chancellor on brink of second bailout for banks

你认得那句话吗?如果你知道的话,它可能会让你的脊椎发冷!如果您不知道怎么做,请访问 Google 并找出原因。

如上所述,初始块下载至少需要几天时间。在此阶段,守护程序可能会使用大量资源。我的处理器固定在 20-30%,使用超过 2GB 的 RAM,并且通常会减慢我的旧机器的速度。一旦你的机器合适,运行节点软件的性能影响就可以忽略不计了。

如果您已完成此操作,请将页面添加为书签,并在节点同步后几天内返回!

服务器配置

欢迎回来!是时候将节点配置为 JSON-RPC 服务器了,这样我们就可以用我们最喜欢的语言运行和编写代码来与之交互了。

回到比特币目录并创建一个名为 bitcoin.conf 的文本文件。

1
2

cd ~/.bitcoin/
touch bitcoin.conf

之后,bitcoind 启动时会读取此文件,并用于配置节点的选项。可以设置很多选项,每个选项也可以在命令行中设置。要查看可用选项,请运行:

1

bitcoind --help

在您喜欢的文本编辑器.conf 文件中打开比特币并添加以下行:

1
2
3
4

## Configuration for the Bitcoin Core Daemon

# Accept command line and JSON-RPC commands
server=1

这是一个好的开始,但还不足以启用与我们节点的 RPC 交互。为此,我们还必须为将要登录的用户创建身份验证凭据。

过去可以在配置文件中将用户名和密码指定为文本,但这种方法显然不安全并且已被弃用。相反,我们必须提供用户名和密码的散列:以及散列期间使用的盐。

要生成此命令,请使用以下命令下载 Bitcoin Core 团队提供的规范 Python 脚本,并使用您自己的用户名和密码运行它。

1
2

wget https://raw.githubusercontent.com/bitcoin/bitcoin/master/share/rpcauth/rpcauth.py
python3 rpcauth.py myusername mysecretpassword

一定要用理智的东西替换用户名和密码值!该脚本应产生以下结果:

1
2
3
4

String to be appended to bitcoin.conf:
rpcauth=myusername:d2a45f8bd56a2014461e2f70f6783b56$636211cdbf3f943a887df72d9944be13ae61c03ef43c6d06dd5044debd4fcbd7
Your password:
mysecretpassword

按照说明将此行添加到您的比特币。 conf 文件,现在应该是这样的:

1
2
3
4
5
6
7
8
9
10

## Configuration for the Bitcoin Core Daemon

# Accept command line and JSON-RPC commands
server=1

# Index all transactions
txindex=1

# Auth Credentials For JSON-RPC server
rpcauth=myusername:d2a45f8bd56a2014461e2f70f6783b56$636211cdbf3f943a887df72d9944be13ae61c03ef43c6d06dd5044debd4fcbd7

接下来,重启节点以确保配置更改生效:

1
2

bitcoin-cli stop
bitcoind -daemon

此时,您已准备好向节点发出 JSON-RPC 请求,只要它们来自节点本身。要对此进行测试,请尝试运行以下命令(注意:您可能必须先通过 apt 安装 curl)。

1

curl --user myusername --data-binary '{"jsonrpc": "1.0", "id":"curltest", "method": "getinfo", "params": [] }' -H 'content-type: text/plain;' http://127.0.0.1:8332

请务必将 myusername 替换为您实际创建的用户名。系统将提示您输入相关密码,如果一切正常,您应该会看到以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

{
"result": {
"chain": "main",
"blocks": 536148,
"headers": 536148,
"bestblockhash": "00000000000000000028fab7a6b5035e2745fe06ef58d817bb32f35924198f97",
"difficulty": 5949437371609.53,
"mediantime": 1533926692,
"verificationprogress": 0.9999864596463776,
"initialblockdownload": false,
"chainwork": "000000000000000000000000000000000000000002af5dee686cd058c3ec064d",
"size_on_disk": 203955272825,
"pruned": false,
"softforks": ["..."],
"bip9_softforks": { "..." : "" },
"warnings": ""
},
"error": null,
"id": "curltest"
}

如果这样做,您可以开始使用完整节点来构建/运行与之交互的应用程序。要详细了解可用的全套 API 调用以及包含 API 的各种库,请访问 bitcoin.org。

IP 白名单

默认情况下,您的节点被配置为仅接受来自本地主机的 JSON-RPC 请求,即运行它的计算机。如果您在与节点相同的设备上进行开发,这很好,您可以跳过此部分。

如果您在另一台计算机(如 Windows 或 macOS 计算机)上进行开发,则必须使用 rpcallowip 选项将允许调用的 IP 地址列入白名单,并确保端口 8332 可访问。 (请注意,虚拟机确实有唯一的 IP,尽管它们运行在相同的硬件上)。

我的本​​地开发机器正在运行 macOS,所以我可以使用 ifconfig 来确定我的本地 ip,然后通过在我的配置文件中添加类似 rpcallowip=192.168.@ >0. 101 内容将其列入白名单。请注意,您可以多次包含此选项以将多个 IP 地址列入白名单。

在节点上查找开发机器的IP和提供8332端口的细节取决于你的平台和网络。这些留给读者作为练习。这是您最终的 bitcoin.conf 的示例。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

#### Configuration for the Bitcoin Core Daemon

# Keep my daily upload bandwith around 1 GB

maxuploadtarget=1024 # Note that if your node isn't exposed to the internet on
# Port 8333, you're not feeding data to other nodes and this
# setting won't matter.
# While not required, if you'd like to support the network
# by servering data, make sure your router is configured to
# forward port 8333 to the machine with your.

# Accept command line and JSON-RPC commands
server=1

# Index all transactions
txindex=1

# Auth Credentials For JSON-RPC
rpcauth=myusername:d2a45f8bd56a2014461e2f70f6783b56$636211cdbf3f943a887df72d9944be13ae61c03ef43c6d06dd5044debd4fcbd7

# Whitelist only my Mac's local IP for JSON-RPC calls
rpcallowip=192.168.0.101

运行区块浏览器

在您的全节点上启动,一旦运行、同步到网络并配置为 JSON-RPC 服务器,就可以运行您自己的本地区块链浏览器了!我们将使用 Dan Janosik 创建的开源 btc-rpc-explorer。

这个资源管理器很棒,因为它不使用数据库:它只需要访问您的节点,它通过我们刚刚配置的 RPC 接口与之交互。

btc-rpc-explorer 是使用 Node.js 用 Ja​​vaScript 编写的,所以你需要安装最新的稳定版本的 node 和 npm。如果您还没有这些,请查看您选择的开发平台的说明。

Node 和 npm 准备就绪后,从 GitHub 复制 repo 并使用以下命令构建它(假设是 Unix 开发环境):

1
2
3
4

git clone https://github.com/janoside/btc-rpc-explorer.git
cd btc-rpc-explorer
npm install
npm run

接下来,在您选择的文本编辑器中打开 app/credentials.js 文件,并将用户名和密码更新为您在 RPC 配置期间使用的值。

如果你的开发盒与节点不同,还必须更新host参数为节点的IP地址。这可能是 LAN IP,除非您的节点托管在 LAN 之外。 (另请注意,您的路由器将来可能会为您的开发盒或您的节点分配一个新 IP。请参阅在路由器配置面板中配置基于 MAC 地址的静态本地 IP 以解决此问题。

更新凭据后,您可以运行资源管理器。执行以下命令,然后在您选择的浏览器中访问:3002/。

1

npm start

如果一切顺利,您应该会看到如下内容:

恭喜,您现在拥有自己的比特币全节点,以及本地来源的有机区块浏览器。快乐的黑客攻击!

================================================ ==========================

分享一些区块链相关的交互如以太坊、EOS、比特币等。在线编程实战教程: