标题:如何在一台树莓派上运行比特币全节点 + 闪电节点?
作者:
日期:2022-10-11 20:49:45
内容:

近日,笔者在一台树莓派小电脑上跑起了比特币全节点和闪电网络节点。由于笔者的计算机知识比较有限,这个过程可谓坎坷。也正因此,觉得自己的经历对大部分没有深入的计算机知识、但又希望以经济实惠的方法跑起节点的朋友来说,是有意义的。所以我准备把这个过程的一些经验总结出来分享给大家。

目前网络上能找到的教程,要么过于极客,包含了许多与主旨无关的指令;要么不完整,只在其中某个步骤上较为有效。有鉴于此,笔者准备给出一份全流程的教程,并在每一个环节上都提供笔者自己认为最有参考价值的文献。此外,还必须指出的是:

闲言少叙,直入正题。本教程将分为以下几个部分:(1)硬件选择;(2)系统准备;(3)安装及配置 Bitcoin Core 软件(比特币全节点);(4)安装及配置 LND 软件(闪电网络节点);(5)使用 Zap 远程连接闪电节点。(教程看起来很长,但实际上每个章节都只有关键的几个步骤)

硬件准备和操作系统选择

上图即是一台树莓派 Model 4B,实体也就巴掌大小,它是一块带有各种接口的电脑主板。选择它来跑节点,最重要的原因是便宜。树莓派本身最贵的不过 800 元,功耗更是只有 15 W;而其余的电脑主机,最便宜的也要上千元,功耗是 50 W 以上,所以树莓派是最经济的。

硬件方案

方案解释

(这种底色的内容与主旨无关,只是补充解释,如果你不感兴趣,可以跳过)

笔者方案的总成本:树莓派套餐 830 元;micro SD 卡 50 元;移动硬盘 280 元;散热外壳 20 元;合计 1180 元。树莓派还可选更低配置的。

系统准备

系统准备分为烧录系统盘、初始化 Raspberry OS 系统、挂载硬盘三个步骤。

烧录系统盘

先将 micro SD 卡插入你现在使用的电脑。笔者使用的是 Windows 系统的笔记本电脑。

在此处下载 Rapsberry Pi Imager 软件:https://www.raspberrypi.com/software/ 。(如果你无法访问,可以用软件名搜索并下载。)(记得为你的电脑选择对应的版本。)

下载后打开,页面如下所示:

左边的选项选择你要给树莓派安装的系统,中间的按钮选择你要烧录到哪里(它会自动识别你的 micro SD 卡),最右边的按钮是启动。

在选择操作系统时,可以选择置顶的 “Raspberry Pi OS (32-bit)”,也可以选择 “Raspberry Pi OS (other)” 或 “Other general purpose OS” 中的其它选项。笔者自己选择的是 “Raspberry Pi OS (other)” 中的 “**Raspberry Pi OS Full (32-bit)**”,它会预装一些软件。如果想跟本教程保持完全一致,可以选择这个系统。如果你想安装 64 位的系统,到 “Other general purpose OS” 中选择 Ubuntu (64-bit)。

然后是等待软件自动下载镜像并写入 micro SD 卡。成功后即可从电脑上拔下 micro SD 卡,插入到树莓派的插口中(位于树莓派的背面,是网线接口的反方向)。

初始化系统

给树莓派连接屏幕、移动硬盘、鼠标键盘之后,插电启动树莓派。你会在显示器上看到如下的一个画面:

左上角的几个图标对我们是最重要的,分别是系统菜单(相当于 windows 里面的开始按钮)、网络浏览器、文件管理器、LX 终端(下文简称 “终端”)。其中 LX 终端就是我们输入命令行的窗口,是我们最重要的工具。终端的界面如下图所示:

初次进入系统时,系统会要求你给当前的账户(用户名为 “pi”)安排一个登录口令,可任意设置。建议用纸笔把用户名和口令记下来,并用于记录其它关键口令

设置完成后,为树莓派接通网线,或点击右上角的图标,为树莓派设置 wifi。

值得一提的是,Raspberry OS 本身不带中文输入法,如果你希望安装中文输入法,请自己在网上搜索教程。

如果你不想用 Windows 电脑来远程控制树莓派(两台电脑连入同一个路由器,就可以远程控制)、你可以全程使用键盘和屏幕来控制树莓派,那你初始化系统的这一步,到这里就结束了。但如果你希望用 windows 来远程控制树莓派(比如你只有一个显示器),那下面这部分关于远程控制的内容,你一定要看

远程控制方法

远程控制的方法既有完全命令行的,也有具备图形界面的。但无论哪种方法,都有两个前提:(1)Windows 电脑和树莓派连入同一个路由器,有线无线皆可;(2)知道树莓派在这个内网中的 IP 地址。

既然如此,我们先来学习如何获得树莓派的 IP 地址(两种方法,任一皆可):

拿到这个 IP 地址是远程控制的第一步。第二步是选择一种控制方法,第一种方法只能输入命令行,第二种办法可以用图形界面操作树莓派。

两种远程控制方法都是有意义的,都推荐学习。

挂载硬盘

挂载硬盘是很关键的,绕不过去的一个步骤!不论你的移动硬盘接入树莓派之后,树莓派能否读写它,都一定要执行挂载硬盘的步骤,否则你会发现,当要运行 bitcoin core 软件选择区块的存储位置时,将无法存储在你的硬盘上!

教程见此处:https://zhuanlan.zhihu.com/p/137711099 。

注意:(1)如果你是移动硬盘,一定要先取消挂载,再手动挂载!(2)如果你想保证移动硬盘在 Windows 下仍然可读,不要执行参考教程中的第三步(格式化硬盘)。移动硬盘一般是 NTFS 文件系统,在 Windows 系统下和 Linux 系统下都是可读可写的。(考虑到你可能希望复制自己的比特币区块链数据,建议不格式化;或者,如果你的硬盘不是 NTFS 文件系统的,那就格式化为 NTFS 系统。)

安装和配置 Bitcoin Core

完成了系统准备之后,我们就要开始安装 Bitcoin Core 软件来运行比特币节点了。分为三个部分:安装 Bitcoin Core、配置 Bitcoin Core 和快捷方式创建。

安装 Bitcoin Core

关于安装的过程,只推荐这个来自 bitcoin.org 的教程:https://bitcoin.org/en/full-node#linux-instructions ,可惜只有英文。其命令行可以总结如下:

wget https://bitcoin.org/bin/bitcoin-core-0.21.1/bitcoin-0.21.1-arm-linux-gnueabihf.tar.gz
tar xzf bitcoin-0.21.1-arm-linux-gnueabihf.tar.gz
sudo install -m 0755 -o root -g root -t /usr/local/bin bitcoin-0.21.1/bin/*

在桌面打开一个终端窗口,逐行输入、逐行回车、等待执行(每一步都必须执行,不能打折扣)。

第一行命令的意思是,使用 wget 软件(一种下载工具),从后面这个地址中下载内容。下载到的内容是 bitcoin core 软件 0.21.1 版(最新版)的 arm 架构 Linux 系统版本(树莓派的 cpu 是 arm 架构,raspberry pi os 是 Linux 系统)的压缩包。它会自动存储在用户的默认存储空间,在我们这里就是 /home/pi(如果你的用户名不是 pi,它就会存在 /home/<你的用户名> 下面)。你可以用 “文件管理器” 看到。

第二行命令的意思是用 tar 软件去解压缩这个文件包,获得 bitcoin core 的软件代码。跟压缩包存储在同一个位置。

第三行的意思是把解压出来的 bitcoin core 代码安装到一个系统可以自动识别的位置 /usr/local/bin(是环境变量位置之一)。第三步千万不能忘

运行完了这三个命令,Bitcoin Core 的软件就已经安装成功啦!是不是很方便!

如果你希望使用 Bitcoin Core 的图形界面,现在你只需打开一个终端,输入 bitcoin-qt,按下回车,就可以看到 Bitcoin Core 软件在前台执行。首次执行,它会询问你:比特币区块链数据存储在哪?是否在同步后修剪数据?有关前者,请安排在你的硬盘中(如果你发现无法将它存储在你的硬盘中,你肯定是跳步了,请回头看上文的 “挂载硬盘” 一节);有关后者,请取消 “prun(修剪)” 的选项,这样它将下载和保存完整的比特币区块链。

初次同步区块链需要花一些时间,具体多久要看你的网络环境。可能需要两天到一周不等。

如果你只是想运行 Bitcoin 节点,教程看到这一步就可以结束了。但如果你想用命令行运行比特币节点、想运行闪电网络节点,后面的配置过程也是绕不过去的。

插一句话:

作为读者,你怎么知道我让你 wget 下载的正是比特币开发者们编写出来的软件呢?你怎么知道它没有被修改过?

你可能想到了,说这个网址不会骗人吧,它是 bitcoin.org 呀。

那你怎么知道 bitcoin.org 没有被劫持呢?

验证方法是有的,尽管并不完美。这部分技能与文章主旨无关,我把它放在文章末尾的附录中。(剧透一下,它也跟密码学有关)

配置比特币

这部分我们将学习用命令行来定制化地运行 Bitcoin Core 软件。使用命令行在后台启动 Bitcoin Core 很简单,输入:

bitcoind

或者:

bitcoind -daemon

然后你就可以看到它开始运行了。打开另一个终端,输入:

bitcoin-cli -getinfo

可以看到 bitcoin core 运行的情形,比如同步了多少区块,有几个对等节点,等等(一般来说你需要等待一段时间才能看到结果,因为软件要在后台处理)。bitcoind --help 和 bitcoin-cli --help 会告诉你可以用命令行做的其它操作,包括生成新的钱包,发送交易,等等。这些命令的描述都是英文的,感兴趣的话你可以看看,但跟我们主要目的不大相关。相反,bitcoin-cli -getinfo 这个命令是一定要记住的。

一个无用的小知识:bitcoind 的后缀 “d” 表示 “daemon”,后台程序;bitcoin-cli 的 “cli” 表示它是一个命令行工具,可以控制 bitcoind。

用这种方式运行软件,你肯定会觉得很奇怪:它都不问我要把数据存在哪里,那它怎么知道要存在哪里呢?而且我的 micro SD 卡肯定是不够大的,它难道会自动存到硬盘上去?

答案是,软件的运行有一个默认配置,如果你不手动用命令告诉它该做什么,它就按默认配置运行。比如,你的 micro SD 卡(系统盘)不够大,软件会自动选择修剪数据模式,这样最终存在你的 micro SD 卡里的数据只有 8 GB 左右,不是完整的比特币区块链,也没有交易的索引。

如果你在一开始输入:

bitcoind -datadir=<你的硬盘挂载点>

它就会把比特币区块链的数据存到你的硬盘上去,如果硬盘空间够大,它就会选择完整区块模式。

这些配置命令,可以用 bitcoind -help 看到。

但仔细想想又不对了。命令行一次只能输入一个命令,如果我想做多方面的配置,那一行一行输入,多麻烦呀,而且每次启动都要输入,不是人都要疯了吗。

这就要用到 “配置文件” 了:我们可以把需要额外执行的配置命令(比如存储在哪里)都写在一个文件中,让软件运行时就按照这个配置文件来运行,这就起到了定制化和便捷运行的效果。

打开你的文件管理器,它的默认位置是 /home/pi(或者 /home/<你的用户名>),在这里选择新建一个文件,命名为“xxx.conf”,XXX 可以是任意字符,比如是 “bitcoin”。对这个文件使用鼠标右键,可以用 text(文本模式)来编辑它,打开了就是像 Windows 的笔记本一样的界面。如果你想用命令行来偷懒,也可以直接打开一个终端,输入 nano bitcoin.conf,它会创建一个 bitcoin.conf 文件并自动进入编辑界面。在编辑界面输入以下内容:

# 以 “#” 号开头表示这是一个注释行。软件会自动跳过这些行,开发人员使用这种格式来说明代码的含义
# 在我们这里也是如此。笔者用注释来说明这些配置命令的含义。你们不必复制,当然复制了也没啥问题。

# 这是笔者自己使用的配置文件,可以当作一个模板。

# datadir 命令用来安排比特币区块数据的存储位置。
# 比如这里,我把它安排到了 /home/pi/Toshiba-storage (我的移动硬盘)的 Bitcoin-blockchain 文件夹。
# 你可以安排为 <你的硬盘挂载点>/XXX 文件夹
datadir=/home/pi/Toshiba-storage/Bitcoin-blockchain

# 表示开启服务器,必须开启
servr=1

# 表示使用 bitcoin core 的钱包功能,可不复制
disablewallet=0

# 设置连接对等节点时候的超时时间,可不复制
timeout=6000
 
# 表示将存储完整的比特币区块链数据,不使用修剪数据的功能。建议复制
prune=0

# 表示在本地生成交易的索引。尽管不是必须,但使用了这个功能会方便闪电网络节点,建议复制
txindex=1

# 设置交易池的内存用量。这里我设置为 1000 MB,也即 1 GB
# 如果你不添加这一行,节点默认的交易池内存用量是 300 MB
datacache=1000

# 下面这两行是为闪电网络节点准备的,如果你想搭配闪电网络节点,就必须复制
# 两行的内容都可以随意设置,在配置闪电网络时原样复制过去即可
rpcuser=<随意设置的用户名>
rpcpassword=<随意设置的口令>

# 下面这两行也是为闪电网络节点准备的,闪电网络节点将使用 ZeroMQ 来与 bitcoind 通信
# 127.0.0.1 后面的是端口号,可以任意设置
# 可能你得额外安装 ZeroMQ。打开一个终端,使用命令 `sudo apt-get install libzmq3-dev` 即可
zmqpubrawblock=tcp://127.0.0.1:27500
zmqpubrawtx=tcp://127.0.0.1:27501

编辑好之后保存。如果你是使用 nano 命令来编辑的,窗口下方会有各种操作的快捷键。比如 “^X 离开” 表示你按 “ctrl + x” 会退出程序,而 “ctrl + s” 是保存,“ctrl + o” 是另存为,等等。

保存好之后,你就有一个比特币配置文件啦!在用命令行启动 bitcoin core 时使用 -conf= 标签接上你安排的配置文件路径即可。例如,我的配置文件路径是 /home/pi/bitcoin.conf,则我这样填写运行命令:

bitcoind -conf=/home/pi/bitcoin.conf

在终端中输入这个命令后按回车,你会看到各种信息显示出来,表示 bitcoin core 软件开始按你在配置文件中的要求开始运行。

当你为 bitcoind 使用这样的配置文件之后,也必须为 bitcoin-cli 安排一个相应的配置文件。步骤如下:

设置好之后,使用 bitcoin-cli -getinfo 来检查你配置对了没有。如果配置对了,这个命令将可以正常使用,否则你会看到消息,表示 bitcoind 拒绝 bitcoin-cli 的访问。

另外,当你要关闭后台运行的 bitcoin core 软件时,你需要用到命令:

bitcoin-cli stop

这在你需要关机或重启时用到。

设置快捷方式和开机启动

使用 -conf 标签固然已经很简便了,但是,每次启动 bitcoind 都需要手动输入配置文件的路径,有没有更简单一点的办法呢?就像 windows 的快捷方式一样?有的,就是 alias。

alias 的介绍可见这个网站:https://wangchujiang.com/linux-command/c/alias.html 。

设置 alias 和开机启动的方式参考这篇:https://wangchujiang.com/linux-command/c/alias.html 。

先来设置快捷方式。打开终端输入下列命令:

sudo nano ~/.bashrc

打开编辑页面后,在最底部添加一行:

alias bitcoind='bitcoind -conf=<你的 bitcoind 配置文件的地址,比如 /home/pi/bitcoin.conf>'

它的意思是 “每当我运行 bitcoind 命令时,我都是在要求你运行 bitcoind -conf=xxx”。注意前后的引号,另外就是路径和文件名要写对。

保存退出后,在终端运行下列命令:

source ~/.bashrc

此后你在终端中运行 bitcoind 命令时,它都会自动使用你安排的配置文件。

再来设置开机启动。用终端运行下列命令:

crontab -e

在底部加入下列代码:

@reboot /usr/local/bin/bitcoind -conf=<你的 bitcoind 配置文件的地址,比如 /home/pi/bitcoin.conf>

保存后退出。使用 bitcoin-cli stop 关闭 bitcoind 之后,重启树莓派系统,再用 bitcoin-cli -getinfo 或者任务管理器(在 “系统菜单” 的 “附件” 中)查看 bitcoind 是否在运行。

安装和配置 LND

闪电网络目前已经有多种实现,而 LND 是最多用户的一种,可能是因为 LND 最早出现了配套的图形界面 Zap(也即是在下一章我们要学习使用的一种软件)。笔者最早接触到的闪电网络钱包也就是 Zap,所以在树莓派上安装时路径依赖地选择了 Zap。相比比特币,LND 的安装和配置要更加复杂,需要更加细心。

本章节同样分成三个步骤:安装 LND、配置 LND 和使用简介。设置 alias 的方法与比特币的相同,我们就简单带过。

安装 LND

安装 LND 的教程只推荐 LND 代码库里的说明:https://github.com/lightningnetwork/lnd/blob/master/docs/INSTALL.md#installing-a-binary-release 。它不仅说明了几种安装 LND 的方法,还介绍了 LND 的配置命令。

在这里,我们选择用 binary 方法安装 LND,这样最简单,还不用安装 go 语言。根据文档里面的说明,可以总结为三条命令:

wget https://github.com/lightningnetwork/lnd/releases/download/v0.14.0-beta.rc2/lnd-linux-armv7-v0.14.0-beta.rc2.tar.gz
tar xzf lnd-linux-armv7-v0.14.0-beta.rc2.tar.gz
sudo mv /home/pi/lnd-linux-armv7-v0.14.0-beta.rc2/* /usr/bin/

第一行是下载压缩包;第二行是解压缩;第三行是把解压得到的文件移动到 /usr/bin/ 文件夹下。第三步必须做,但笔者已经不确定第三行命令是不是有效了,如果无效,读者可以自行搜索在 Linux 系统中移动文件的方法(就移到 /usr/bin/)。

好了,LND 装好了。

配置 LND

依样画葫芦,打开文件管理器,在 /home/<你的用户名> 新建一个文件,命名为 “YYY.conf”(比如 “lnd.conf”),用文本编辑器来编辑它(或者使用命令行 nano /home/<你的用户名>/lnd.conf),输入下列内容:

# 这一行表示将 LND 的节点数据存在哪里
# 如果不手动设置,lnd 和 lncli 都会使用默认存储位置(/home/<你的用户名>/.lnd),实际上更为方便
# 若设置了,后面也会需要额外配置 lncli  的快捷方式
# 所以推荐不设置
datadir=/home/pi/Toshiba-storage/lnd-data

# 下面的三行定义你的闪电网络运行在哪个网络上
# 我们这里的设置表示运行在比特币的主网上,并使用 bitcoind 来作为节点的后台
bitcoin.active=true
bitcoin.mainnet=true
bitcoin.node=bitcoind

# 下面这四行定义 lnd 程序如何与 bitcoind 通信
# 必须与你一开始的 bitcoind 配置文件里面的相应内容完全一致
# 注意开头的前缀,是 bitcoind
bitcoind.rpcuser=<你在 bitcoind 配置文件里设置的 rpc 用户名>
bitcoind.rpcpass=<你在 bitcoind 配置文件里设置的 rpc 口令>
bitcoind.zmqpubrawblock=tcp://127.0.0.1:27500
bitcoind.zmqpubrawtx=tcp://127.0.0.1:27501

# 下面这两行表示使用 TLS 方法,从这个 IP 的端口接受 rpc 请求
# 暂且先加上,在下一个章节我们会说明它的用法
tlsextraip=0.0.0.0
rpclisten=0.0.0.0:10009

listen=0.0.0.0:9735  
listen=[::1]:9736

输入后保存。此后,我们就可以使用这个配置文件来运行 lnd 了,例如:

lnd -C <你的 lnd 配置文件的位置,比如笔者的 /home/pi/lnd.conf>

如果你在 lnd.conf 中设置了 datadir,即安排了 LND 节点的数据存储位置,在你使用 lncli 时,还需加入一个参数,例如:

lncli --macaroonpath <datadir 参数>/chain/bitcoin/mainnet/admin.macaroon

这是因为 lnd 使用 macaroon(直译为 “马卡龙”,一种饼干)文件来存储一些信息,lncli 要获得这些信息才可以访问 lnd。如果你不手动设置 lnd 的 datadir,它会默认存储在 /home/<你的用户名>/.lnd 文件夹中,而这个文件夹是 lnd 和 lncli 默认访问的。所以,如果你没有设置 datadir,就不必加这个参数

我们先把这些命令设置为 alias,再介绍闪电网络节点的使用方法。

打开终端使用 sudo nano ~/.bashrc 命令,在文件最后面输入下面两行代码:

alias lnd='lnd -C <你的 lnd 配置文件的位置,比如笔者的 /home/pi/lnd.conf>'
alias lnlic='lncli --macaroonpath <datadir 参数>/chain/bitcoin/mainnet/admin.macaroon'

如果你并未设置 datadir,第二行不必输入

保存后在终端运行 source ~/.bashrc

此后,你就可以在命令行里直接运行 lnd 和 lncli 了,程序将读取你在配置文件中的设置。

LND 的使用

初次运行 lnd 时,它会提醒你,需要使用 lncli 来创建一个钱包:

生成钱包之后,就可以正常使用 lncli getinfo 来查看 lnd 的运行状况了。同样地,在终端使用 lncli stop 的命令会关闭 lnd 的运行。

此后,每当你使用 lnd 时,它都会要求你(在另一个终端窗口)使用 lncli unlock 来解锁钱包。解锁钱包需要你手动输入你上面设置的 password;必须解锁了钱包,lnd 才会继续运行,实际搭起一个节点(这也是为什么我们不必为 lnd 设置开机启动,设了也还是需要手动用 lncli 解锁)。

有关使用 lnd 来开设通道、发送支付的方法,见:

这两个教程也包含了其他内容,是我找到的最有用的教程之一。

使用 Zap “远程” 连接你的闪电网络节点

说实在的,笔者非常怀疑,在大部分读者的网络环境下,学习这个章节有什么意义。在中国,公网 IP 是非常稀缺的,我们大部分人的家用宽带,使用的都是运营商的内网 IP,这意味着,虽然我们能上网,却不能指望家用宽带能让我们的电脑成为一个可以稳定运行、访问的服务端。

这也意味着,如果只使用家用宽带,不借助其他手段,本章节学习的最终成果就是,当你的手机和树莓派在同一个 wifi 下时,你的手机闪电网络钱包可以直接借助你的节点发起交易,也即自主托管。你仍然做不到可以随时随地使用自己的闪电网络钱包。

因此,本章节的性价比并不高,请读者自行判断是否要继续学习。

本章节分为三个步骤:安装 lndconnect、配置 lnd、手机连接。

安装 lndconnect

lndconnect 是 Zap 开发人员为 lnd 节点开发的一个暴露节点信息的工具,借助它我们可以获得让 Zap 钱包连接我们节点的信息。安装 lndconnect 是第一步,做不到这一步,后面的步骤就无从谈起了,而且安装过程强烈依赖于你有访问外国网站的手段

安装 lndconnect 同样分两步。

第一步是安装 go 语言。(这一步我们同样借鉴了上文参考的 stopanddecrypt 的文章。)

wget https://studygolang.com/dl/golang/go1.17.3.linux-armv6l.tar.gz
sudo tar -C /usr/local -xzf go1.17.3.linux-armv6l.tar.gz
echo "export PATH=$PATH:~/go/bin:/usr/local/go/bin" >> ~/.bashrc

第一步是获得压缩包,第二步是解压缩,第三步是把 go 语言的文件夹设为环境变量,这样才能在终端里面直接使用 go 命令。

第二步是安装 lndconnect。(请保证你开启了 https 代理以及你的代理确实有用。)(这一步我们参考了 https://github.com/LN-Zap/lndconnect/issues/20#issuecomment-825211584 。)

git clone https://github.com/LN-Zap/lndconnect.git

这一步会把 lndconnect 的代码库下载到你的默认存储位置,也就是 /home/<你的用户名>

使用命令:

cd /home/<你的用户名>/lndconnect
go mod init github.com/lndconnect/v2
go mod edit -require github.com/lightningnetwork/lnd@v0.14.0-beta.rc2
go build

从笔者的个人经验来看,第二行和第三行的作用是不明确的,但我们姑且这么输入。go build 这一步一定会报错,但我们要的就是它报错

执行 go build,它会打印出一些信息,告诉你缺少了哪些依赖,关键字是 “to add”。对于这些信息,我们不用管,直接看最后一行,最后一行往往是 go mod download ... 或者 go get ... 开头的命令,我们直接复制下来执行。

每次它执行完下载,我们就重新运行一次 go build,直到它成功为止!(如果笔者没记错,最后一个命令是 go get lndconnect

build 成功之后,我们再运行:

sudo cp lndconnect /usr/local/bin/lndconnect

它会把 lndconncet 整个文件夹搬到第二个地址上去。然后我们就可以直接在终端中使用 lndconnect 了。

配置 LND

这一步的参考是:https://docs.zaphq.io/docs-desktop-lnd-configure 。

原理大意:Zap 钱包软件会使用 gRPC 方法与 lnd 通信,但是通信的端口要提前在配置文件里定义好,否则 lnd 会拒绝连接。

因为随时随地访问的目标暂时不可能实现了,我们这里的配置的目标是,让我们手机上的 Zap 钱包可以连接、使用我们的 lnd 节点

使用 Zap 连接你的闪电网络节点

关键事实:(1)Zap 钱包没有 arm 架构的版本,所以我们没法在树莓派上直接使用 Zap 钱包,有就不用做上面这些事了;(2)不要尝试在 Windows 上使用桌面版 Zap 钱包连接你的闪电节点,桌面版的软件有逻辑问题,会陷入死循环,不可能真正用得上

开搞!

(完)

附录

A. 在终端中使用代理

B. 验证自己下载的软件

简而言之,我们是用密码学方法来减少下载软件时需要信任的人和主体。

以比特币软件为例,比特币每次发布新版本时,都会提供代码的哈希值,以及比特币开发者对这些哈希值的签名。

哈希值我们知道,是哈希函数的输出。密码学哈希函数是抗原像攻击的和抗碰撞的:无法从哈希值反推出原像,而且原像只要改动了,哈希值几乎一定会变。那么好了,只要我们拿到了代码的哈希值,在本地验证代码的哈希值与之是否一致,就可以看出代码是否被改过(这就是校验数据的完整性)。

在比特币软件的发行页,它同时也发布了软件的哈希值:https://bitcoin.org/bin/bitcoin-core-0.21.1/,就是列表中的 .asc 文件。

你肯定又会说了,这没彻底解决问题呀,要是有个人把 bitcoin.org 黑了,发布一个篡改后的代码,他直接把 .asc 里面记载的哈希值都改过来,你们不就验证不出来了吗?

好问题。这问题大家也都想到了。所以我们使用密码学里面的数字签名方案:开发者先把自己的公钥公布出来,此后每次发布软件,都附上一个自己的私钥对哈希值的签名。只要有公钥,签名,就能验证一个哈希值是不是对应于这个签名的。即,签名绑定哈希值,哈希值绑定代码。

.asc 文件也附带了开发者的签名。

最后一个问题,我要在哪里获得开发者的公钥呢?(如果这个步骤不安全,我拿了个假公钥,不也验证不出来吗?)

也是一个好问题。笔者自己验证比特币软件用的公钥也是从 bitcoin.org 获得的,它的 run a full node 页面披露了开发者 W. J. van der Laan 的 PGP 指纹;在开发者个人的 GitHub 主页上也可以找到一个指纹(这个指纹已经过期)。

我们先用终端来验证一遍,再说点题外话:

先获得 bitcoin-core-0.21.1 软件各版本的哈希值、开发者签名,以及 Wladmimir J. van der Laan 的公钥:

wget https://bitcoin.org/bin/bitcoin-core-0.21.1/SHA256SUMS.asc
wget https://bitcoin.org/laanwj-releases.asc

再来校验我们下载的软件的哈希值,以及开发者的签名:

sha256sum bitcoin-0.21.1-arm-linux-gnueabihf.tar.gz
gpg --import laanwj-releases.asc
gpg --verify SHA256SUMS.asc

第一步是获得软件压缩包的哈希值。你可以把得到的哈希值,与 SHA256SUMS.asc 中提供的哈希值相比对。

第二部是加载开发者的公钥。第三步是验证签名。你应该会看到这样的信息:

gpg: 签名建立于 2021年05月02日 星期日 03时33分58秒 CST
gpg:               使用 RSA 密钥 90C8019E36C2E964
gpg: 完好的签名,来自于 “Wladimir J. van der Laan (Bitcoin Core binary release signing key) <laanwj@gmail.com>” [未知]
gpg: 警告:此密钥未被受信任签名认证!
gpg:       没有证据表明此签名属于其声称的所有者。
主密钥指纹: 01EA 5486 DE18 A882 D4C2  6845 90C8 019E 36C2 E964

这个主密钥指纹,也会跟 https://bitcoin.org/en/full-node#linux-instructions 上提供的一致。

直到这一步为止,我们仍然做不到无需信任。我们还是信任了 bitcoin.org。完全免信任是非常困难的。

gpg 的消息里有一句话,很有意思:“没有证据表明此签名属于其声称的所有者”。意思是说,没有机构验证过只有这个人能控制这笔私钥,签出这样的签名。

确实没有。

但聪明如你,肯定也想到了,如果我们安排一个受信任的第三方来做这件事,那接下来我们就会变成信任这个第三方。这也只是转移了信任需要,而没有消除信任需要。

实际上,我们每天浏览的网站,就是有这样的机构来为网站使用的公钥提供证书的,就是所谓的 KPI(公钥基础设施)。这样好不好呢?

推荐阅读:受信任第三方与安全漏洞

想得越深,你将越理解比特币区块链结构的可贵,以及比特币总是选择软分叉(后向兼容升级方法)的可贵:它是在尽可能免除这个系统需要的信任。
来自https://www.btcstudy.org/2021/11/08/how-to-run-a-bitcoin-full-node-and-lightning-node-on-a-raspberry-pi/


返回列表 网站首页