该文档提供了 LND (Lightning Network Daemon)的安装和配置指南,包括从二进制文件安装、使用 Docker 构建、以及从源代码构建。
有多种方法可以安装 lnd
。对于大多数用户来说,最简单的方法是
下载并安装官方发布的二进制文件。
这些发布的二进制文件始终以生产为目标构建,并启用了所有 RPC 子服务器。
想要从源码构建 lnd
的更高级用户也有多种选择。要构建已标记的版本,可以使用 docker 构建辅助脚本,该脚本允许用户
从源码构建 lnd
,而无需安装 golang
。
这也是构建和验证团队发布的 reproducible builds 的首选方法。有关 reproducible builds 的更多信息,请参阅
release.md。
最后,可以选择完全手动构建 lnd
。这需要首先设置更多的工具,但允许生成非生产(调试、开发)构建。
建议下载并安装官方发布的二进制文件以在主网上使用。 访问 GitHub 上的发布页面 并选择未设置“Pre-release”标签的最新版本(除非你明确想要帮助测试候选版本,RC)。
选择最适合你的操作系统和系统架构的包。如果你的操作系统都支持,建议选择 64 位版本而不是 32 位版本。
解压包并将两个二进制文件(lnd
和 lncli
,或者 Windows 上的 lnd.exe
和 lncli.exe
)放在操作系统可以找到它们的位置。
要使用 Docker 构建助手,你需要在你的机器上安装并设置以下软件:
make
bash
要构建 lnd
的特定 git 标签,只需运行以下步骤(假设 v0.x.y-beta
是要构建的已标记版本):
git clone https://github.com/lightningnetwork/lnd
cd lnd
git checkout v0.x.y-beta
make docker-release tag=v0.x.y-beta
这将创建一个名为 lnd-v0.x.y-beta
的目录,其中包含所有操作系统和架构对的发布二进制文件。也可以通过指定 sys=linux-amd64
标志来选择单个对。有关 reproducible builds 的更多信息,请参阅release.md。
仅建议高级用户和/或开发人员从源码构建和安装 lnd
。不建议在主网上运行 master
分支的最新提交。master
分支有时可能不稳定,如果你运行的节点基于它,如果存在数据库迁移,则可能会阻止其回到以前的稳定版本。
为了使用 lnd
,需要以下构建依赖项:
lnd
是用 Go 编写的,最低版本为 1.23.9
(或者,如果本文档已过时,则为主 go.mod
文件中所需的 Go 版本)。要安装,请为你的操作系统运行以下命令之一:
<details> <summary>Linux (x86-64)</summary>
wget https://dl.google.com/go/go1.23.9.linux-amd64.tar.gz
sha256sum go1.23.9.linux-amd64.tar.gz | awk -F " " '{ print $1 }'
上面命令的最终输出应为
de03e45d7a076c06baaa9618d42b3b6a0561125b87f6041c6397680a71e5bb26
。如果不是,则目标 REPO 已被修改,你不应安装此版本的 Go。如果匹配,请继续安装 Go:
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.23.9.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
</details>
<details> <summary>Linux (ARMv6)</summary>
wget https://dl.google.com/go/go1.23.9.linux-armv6l.tar.gz
sha256sum go1.23.9.linux-armv6l.tar.gz | awk -F " " '{ print $1 }'
上面命令的最终输出应为
ade33880caacb8919b48767e0957e9880f2cdf634e137402a6f22552504136dd
。如果不是,则目标 REPO 已被修改,你不应安装此版本的 Go。如果匹配,请继续安装 Go:
sudo rm -rf /usr/local/go && tar -C /usr/local -xzf go1.23.9.linux-armv6l.tar.gz
export PATH=$PATH:/usr/local/go/bin
</details>
<details> <summary>macOS</summary>
首先,如果你还没有安装 Homebrew,请安装它。
然后
brew install go
</details>
<details> <summary>FreeBSD</summary>
pkg install go
或者,可以下载 Golang 下载页面 上托管的预编译二进制文件。如果需要从源码安装,则可以在 此处 找到更详细的安装说明。 </details>
重要提示
此时,你应该设置 $GOPATH
环境变量,它表示你的工作区的路径。默认情况下,$GOPATH
设置为 ~/go
。你还需要将 $GOPATH/bin
添加到你的 PATH
中。这可以确保你的 shell 能够检测到你安装的二进制文件。
export GOPATH=~/go
export PATH=$PATH:$GOPATH/bin
我们建议将以上内容放在你的 .bashrc
、.zshrc
或设置脚本中,这样你就可以避免每次打开新的终端窗口时都键入这些内容。
该项目使用 Go modules 来管理依赖项以及提供 reproducible builds。
使用 Go modules(使用 Go 1.13)意味着你不再需要将 lnd
克隆到你的 $GOPATH
中以进行开发。相反,你的 lnd
repo 现在可以放在任何地方!
注意:对于移动开发,由于 Go mobile 中的当前限制,仍然需要在 $GOPATH
中放置源代码。请查看 构建移动库 的文档以了解更多信息。
完成初步步骤后,要安装 lnd
、lncli
和所有相关依赖项,请运行以下命令:
git clone https://github.com/lightningnetwork/lnd
cd lnd
make install
上面的命令将安装 lnd
的当前 master 分支。如果你希望安装 lnd
的已标记版本(因为 master 分支有时可能不稳定),请访问发布页面以找到最新版本。假设发布的名称为 v0.x.x
,那么你可以通过对上述命令进行少量修改来从源码编译此版本:
git clone https://github.com/lightningnetwork/lnd
cd lnd
git checkout v0.x.x
make install
注意:我们的说明仍然使用早期版本的 Go 中的 $GOPATH
目录,但使用 Go 1.13,现在可以将 lnd
放在文件系统上的 任何位置。
对于 Windows WSL 用户,需要直接通过 /usr/bin/make/ 引用 make,或者通过将引号括在 make 周围,如下所示:
/usr/bin/make && /usr/bin/make install
"make" && "make" install
在 FreeBSD 上,使用 gmake 而不是 make。
或者,如果不想使用 make
,则可以直接使用 go
命令:
go install -v ./...
标签
使用 make release-install
从源码发布二进制文件和安装将具有以下标签:
dev
标签用于开发构建,不包含在发行版构建和安装中。
从源码安装时,可以使用 tags=""
参数指定一组自定义标签。例如:
make install tags="signrpc walletrpc routerrpc invoicesrpc"
更新
要将你的 lnd
版本更新到最新版本,请运行以下命令:
cd $GOPATH/src/github.com/lightningnetwork/lnd
git pull
make clean && make && make install
在 FreeBSD 上,使用 gmake 而不是 make。
或者,如果不想使用 make
,则可以直接使用 go
命令:
cd $GOPATH/src/github.com/lightningnetwork/lnd
git pull
go install -v ./...
测试
要检查 lnd
是否已正确安装,请运行以下命令:
make check
此命令需要 bitcoind
(几乎任何版本都可以)在系统的 $PATH
变量中可用。否则,一些测试将失败。
lncli
的命令行补全
Bash: 参见 contrib/lncli.bash-completion
Fish: 运行:lncli fish-completion > $HOME/.config/fish/completions/lncli.fish
为了运行,lnd
需要用户指定一个链后端。在编写本文档时,有三个可用的链后端:btcd
、neutrino
、bitcoind
。所有包括 neutrino 的后端都可以在主网上运行,只需开箱即用的 lnd
实例即可。在使用 bitcoind
或 btcd
运行时,我们不需要 --txindex
,但激活 txindex
通常会使 lnd
运行得更快。请注意,由于 0.13 版本支持 pruned 节点,尽管它们会导致性能下降和更高的网络使用率。
每个后端模式的参数集如下:
btcd:
--btcd.dir= 包含节点数据、日志、配置文件等的根目录。(默认值: /Users/<用户名>/Library/Application Support/Btcd)
--btcd.rpchost= 守护程序的 RPC 监听地址。如果省略端口,则将使用所选链参数的默认端口。(默认值: localhost)
--btcd.rpcuser= RPC 连接的用户名
--btcd.rpcpass= RPC 连接的密码
--btcd.rpccert= 包含守护程序证书文件的文件(默认值: /Users/<用户名>/Library/Application Support/Btcd/rpc.cert)
--btcd.rawrpccert= 守护程序的 PEM 编码证书链的原始字节,将用于验证 RPC 连接。
neutrino:
-a, --neutrino.addpeer= 添加要在启动时连接的对等节点
--neutrino.connect= 仅在启动时连接到指定的对等节点
--neutrino.maxpeers= 入站和出站对等节点的最大数量
--neutrino.banduration= 禁止行为不端的对等节点的时间。有效的时间单位为 {s, m, h}。最小 1 秒
--neutrino.banthreshold= 在断开连接并禁止行为不端的对等节点之前允许的最大禁止分数。
--neutrino.useragentname= 用于帮助向其他比特币对等节点标识我们自己。
--neutrino.useragentversion= 用于帮助向其他比特币对等节点标识我们自己。
bitcoind:
--bitcoind.dir= 包含节点数据、日志、配置文件等的根目录。(默认值: /Users/<用户名>/Library/Application Support/Bitcoin)
--bitcoind.rpchost= 守护程序的 RPC 监听地址。如果省略端口,则将使用所选链参数的默认端口。(默认值: localhost)
--bitcoind.rpcuser= RPC 连接的用户名
--bitcoind.rpcpass= RPC 连接的密码
--bitcoind.zmqpubrawblock= 监听 ZMQ 连接以传递原始区块通知的地址
--bitcoind.zmqpubrawtx= 监听 ZMQ 连接以传递原始交易通知的地址
--bitcoind.estimatemode= 费用估算模式。必须为 "ECONOMICAL" 或 "CONSERVATIVE"。(默认值: CONSERVATIVE)
在 FreeBSD 上,使用 gmake 而不是 make。
为了能够利用最新的 Taproot 功能,必须使用 btcd
版本 v0.23.5
。
要安装 btcd,请运行以下命令:
安装 btcd:
make btcd
或者,你可以直接从其 repo 安装 btcd
。
运行以下命令将创建 rpc.cert
和默认的 btcd.conf
。
btcd --testnet --rpcuser=REPLACEME --rpcpass=REPLACEME
如果你想在测试网上使用 lnd
,btcd
需要首先完全同步测试网区块链。根据你的硬件,这可能需要几个小时。请注意,添加 --txindex
是可选的,因为它会花费更长的时间来同步节点,但随后 lnd
通常会运行得更快,因为它可以直接访问索引,而不是扫描区块或 BIP 158 过滤器以查找相关项目。
(注意:可能需要几分钟才能找到启用 segwit 的对等节点。)
在 btcd
同步时,你可以使用 btcd 的 getinfo
RPC 命令检查其进度:
btcctl --testnet --rpcuser=REPLACEME --rpcpass=REPLACEME getinfo
{
"version": 120000,
"protocolversion": 70002,
"blocks": 1114996,
"timeoffset": 0,
"connections": 7,
"proxy": "",
"difficulty": 422570.58270815,
"testnet": true,
"relayfee": 0.00001,
"errors": ""
}
此外,你可以监控 btcd 的日志以实时跟踪其同步进度。
你可以使用 getpeerinfo
命令测试你的 btcd
节点的连接性:
btcctl --testnet --rpcuser=REPLACEME --rpcpass=REPLACEME getpeerinfo | more
如果你在测试网上,请在 btcd
完成同步后运行此命令。否则,请将 --bitcoin.testnet
替换为 --bitcoin.simnet
。如果你正在安装 lnd
以准备 教程,则可以跳过此步骤。
lnd --bitcoin.active --bitcoin.testnet --debuglevel=debug \
--btcd.rpcuser=kek --btcd.rpcpass=kek --externalip=X.X.X.X
为了在轻客户端模式下运行 lnd
,你需要找到一个能够服务于这种新轻客户端模式的完整节点。lnd
使用 BIP 157 和 BIP 158 实现其轻客户端模式。可以在 faucet.lightning.community
找到此类节点的公共实例。
要在 neutrino 模式下运行 lnd,请使用以下参数运行 lnd
(如果需要,可以换入 --bitcoin.simnet
),如果可用,还可以使用你自己的 btcd
节点:
lnd --bitcoin.active --bitcoin.testnet --debuglevel=debug \
--bitcoin.node=neutrino --neutrino.connect=faucet.lightning.community
请注意,添加 -txindex
是可选的,因为它会花费更长的时间来同步节点,但随后 lnd
通常会运行得更快,因为它可以直接访问索引,而不是扫描区块或 BIP 158 过滤器以查找相关项目。
要配置你的 bitcoind 后端以与 lnd 一起使用,请首先完成并验证以下内容:
由于 lnd
使用 ZeroMQ 与 bitcoind
交互,你的 bitcoind
安装必须使用 ZMQ 编译。请注意,如果你从源码安装了 bitcoind
且 ZMQ 不存在,则 ZMQ 支持将被禁用,并且 lnd
将在 connection refused
错误时退出。如果你过去通过 Homebrew 安装了 bitcoind
,则可能未包含 ZMQ(这已在最新的 Homebrew bitcoin 配方中修复)
使用 -zmqpubrawblock
和 -zmqpubrawtx
配置 bitcoind
实例以用于 ZMQ。这些选项必须各自使用其唯一的地址才能提供可靠的通知传递(例如 -zmqpubrawblock=tcp://127.0.0.1:28332
和 -zmqpubrawtx=tcp://127.0.0.1:28333
)。
确保 bitcoind
中的配置设置 -rpcserialversion
要么设置为 1,要么不使用,因为 bitcoind 的默认行为是正确的(有关更多信息,请参阅 bitcoin/issues/28730)。闪电网络依赖于隔离见证交易,因此在查询 bitcoind 后端以获取交易详细信息时,我们需要见证数据。
启动针对测试网运行的 bitcoind
,并让它完成与测试网链的完全同步(或者,可以使用 --bitcoind.regtest
代替)。
这是一个用于 lnd 的示例 bitcoin.conf
:
testnet=1
server=1
daemon=1
zmqpubrawblock=tcp://127.0.0.1:28332
zmqpubrawtx=tcp://127.0.0.1:28333
完成以上所有操作,并且你已确认 bitcoind
已使用测试网上的最新区块完全更新后,运行以下命令以使用 bitcoind
作为你的后端启动 lnd
(与 bitcoind
一样,你可以创建一个 lnd.conf
来保存这些选项,有关更多信息,请在下面进一步描述):
lnd --bitcoin.active --bitcoin.testnet --debuglevel=debug \
--bitcoin.node=bitcoind --bitcoind.rpcuser=REPLACEME \
--bitcoind.rpcpass=REPLACEME \
--bitcoind.zmqpubrawblock=tcp://127.0.0.1:28332 \
--bitcoind.zmqpubrawtx=tcp://127.0.0.1:28333 \
--externalip=X.X.X.X
注意:
rpcuser
和 rpcpass
参数可以通过 lnd
为在同一用户下运行的 bitcoind
实例确定,包括在使用 cookie 身份验证时。在这种情况下,你可以将它们完全从 lnd
选项中排除。lnd.conf
或 lnd
的命令行选项中显式传递身份验证参数(如上面的示例命令中所示的 bitcoind.rpcuser
和 bitcoind.rpcpass
),则还必须指定 bitcoind.zmqpubrawblock
和 bitcoind.zmqpubrawtx
选项。否则,lnd
将尝试从你的 bitcoin.conf
中获取配置。lnd
的 bitcoind.zmqpubrawblock
和 bitcoind.zmqpubrawtx
选项的地址与分别在 bitcoind
选项中传递的 zmqpubrawblock
和 zmqpubrawtx
的地址相同。lnd
实例连接到 bitcoind
。使用默认的 bitcoind
设置,拥有多个 lnd
实例,或者 lnd
加上任何使用 RPC 的应用程序,可能会导致 lnd
错过来自后端的关键更新。bitcoind
中的默认费用估算模式为 CONSERVATIVE。你可以设置 bitcoind.estimatemode=ECONOMICAL
以将其更改为 ECONOMICAL。此外,如果你在 regtest
中启动 bitcoind
,则此配置不会生效。如果 lnd
是第一次运行,请使用以下命令创建一个新钱包:
lncli create
这将提示输入钱包密码,以及可选的密码种子短语。
然后,lnd
将打印一个 24 字密码种子助记词,该助记词可用于在数据丢失的情况下恢复钱包。用户应将其写下来并保存在安全的地方。
lnd
的身份验证系统称为 macaroons,它是去中心化的 bearer 凭据,允许委托、衰减和其他很棒的功能。你可以在 Alex Akselrod 在 GitHub 上的 文章 中了解有关它们的更多信息。
运行 lncli create
创建钱包,默认情况下将生成用于身份验证的 admin.macaroon
、read_only.macaroon
和 macaroons.db
文件到 lnd
中。它们将存储在网络目录中(默认值:lnddir/data/chain/bitcoin/mainnet
),以便可以使用不同的密码用于主网、测试网、simnet 等。请注意,如果你指定了备用数据目录(通过 --datadir
参数),你将必须使用 --macaroonpath
参数将更新后的 admin.macaroon
文件位置传递到 lncli
中。
要禁用 macaroon 进行测试,请将 --no-macaroons
标志传递到 lnd 和 lncli 中。
如果你想向网络上的其他节点发出信号,表明你将接受传入通道(因为对等节点需要入站连接才能启动通道融资工作流程),则应将 --externalip
标志设置为你的公共可访问 IP 地址。
如果你正在进行本地开发,例如对于教程,你需要以 simnet
模式启动 btcd
和 lnd
。Simnet 类似于 regtest,因为你将能够根据需要立即挖掘区块以在本地测试 lnd
。为了在 simnet
模式下启动任何守护程序,请使用 simnet
而不是 testnet
,添加 --bitcoin.simnet
标志而不是 --bitcoin.testnet
标志。
用于测试新 lnd
开发的另一个相关命令行标志是 --debughtlc
标志。当使用此标志启动 lnd
时,它将能够自动结算发送给它的特殊类型的 HTLC。这意味着你无需手动插入发票即可测试支付连接。要发送此“特殊”HTLC 类型,请在 sendpayment
命令的末尾包含 --debugsend
命令。
目前有两种主要方式运行 lnd
:一种需要公开 RPC 服务的本地 btcd
实例,另一种使用由 neutrino 驱动的完全集成的轻客户端。
对于诸如钱包安全性不重要的集成测试之类的测试场景,可以使用 itest/lnd-itest
二进制文件,该文件对钱包加密使用非常弱的密码拉伸,因此启动速度比生产/主网/发布版本更快。可以通过运行 make build-itest
构建该二进制文件。
或者,如果你希望在 lnd
启动之间具有持久配置,允许你只需在命令行中键入 lnd --bitcoin.testnet --bitcoin.active
,则可以创建一个 lnd.conf
。
在 macOS 上,位于:
/Users/<用户名>/Library/Application Support/Lnd/lnd.conf
在 Linux 上,位于:
~/.lnd/lnd.conf
这是一个用于 btcd
的示例 lnd.conf
,可帮助你入门:
[Application Options]
debuglevel=trace
maxpendingchannels=10
[Bitcoin]
bitcoin.active=1
请注意 [Bitcoin]
部分。此部分包含比特币链的参数。请参阅 此处 提供的更详细的示例配置文件,并根据你使用的链和节点类型浏览其他节点配置部分,包括 [Btcd]
、[Bitcoind]
和 [Neutrino]
。
- 原文链接: github.com/lightningnetw...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!