闪电网络 - 目录 - Lightningnetwork

该文档提供了 LND (Lightning Network Daemon)的安装和配置指南,包括从二进制文件安装、使用 Docker 构建、以及从源代码构建。

目录

安装

有多种方法可以安装 lnd。对于大多数用户来说,最简单的方法是 下载并安装官方发布的二进制文件。 这些发布的二进制文件始终以生产为目标构建,并启用了所有 RPC 子服务器。

想要从源码构建 lnd 的更高级用户也有多种选择。要构建已标记的版本,可以使用 docker 构建辅助脚本,该脚本允许用户 从源码构建 lnd,而无需安装 golang。 这也是构建和验证团队发布的 reproducible builds 的首选方法。有关 reproducible builds 的更多信息,请参阅 release.md

最后,可以选择完全手动构建 lnd。这需要首先设置更多的工具,但允许生成非生产(调试、开发)构建。

安装二进制版本

建议下载并安装官方发布的二进制文件以在主网上使用。 访问 GitHub 上的发布页面 并选择未设置“Pre-release”标签的最新版本(除非你明确想要帮助测试候选版本,RC)。

选择最适合你的操作系统和系统架构的包。如果你的操作系统都支持,建议选择 64 位版本而不是 32 位版本。

解压包并将两个二进制文件(lndlncli,或者 Windows 上的 lnd.exelncli.exe)放在操作系统可以找到它们的位置。

使用 Docker 构建已标记的版本

要使用 Docker 构建助手,你需要在你的机器上安装并设置以下软件:

  • 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,需要以下构建依赖项:

安装 Go

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

该项目使用 Go modules 来管理依赖项以及提供 reproducible builds

使用 Go modules(使用 Go 1.13)意味着你不再需要将 lnd 克隆到你的 $GOPATH 中以进行开发。相反,你的 lnd repo 现在可以放在任何地方!


注意:对于移动开发,由于 Go mobile 中的当前限制,仍然需要在 $GOPATH 中放置源代码。请查看 构建移动库 的文档以了解更多信息。


从源码安装 lnd

完成初步步骤后,要安装 lndlncli 和所有相关依赖项,请运行以下命令:

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 需要用户指定一个链后端。在编写本文档时,有三个可用的链后端:btcdneutrinobitcoind。所有包括 neutrino 的后端都可以在主网上运行,只需开箱即用的 lnd 实例即可。在使用 bitcoindbtcd 运行时,我们不需要 --txindex,但激活 txindex 通常会使 lnd 运行得更快。请注意,由于 0.13 版本支持 pruned 节点,尽管它们会导致性能下降和更高的网络使用率。

每个后端模式的参数集如下:

btcd 选项

btcd:
      --btcd.dir=                                             包含节点数据、日志、配置文件等的根目录。(默认值: /Users/&lt;用户名>/Library/Application Support/Btcd)
      --btcd.rpchost=                                         守护程序的 RPC 监听地址。如果省略端口,则将使用所选链参数的默认端口。(默认值: localhost)
      --btcd.rpcuser=                                         RPC 连接的用户名
      --btcd.rpcpass=                                         RPC 连接的密码
      --btcd.rpccert=                                         包含守护程序证书文件的文件(默认值: /Users/&lt;用户名>/Library/Application Support/Btcd/rpc.cert)
      --btcd.rawrpccert=                                      守护程序的 PEM 编码证书链的原始字节,将用于验证 RPC 连接。

Neutrino 选项

neutrino:
  -a, --neutrino.addpeer=                                     添加要在启动时连接的对等节点
      --neutrino.connect=                                     仅在启动时连接到指定的对等节点
      --neutrino.maxpeers=                                    入站和出站对等节点的最大数量
      --neutrino.banduration=                                 禁止行为不端的对等节点的时间。有效的时间单位为 {s, m, h}。最小 1 秒
      --neutrino.banthreshold=                                在断开连接并禁止行为不端的对等节点之前允许的最大禁止分数。
      --neutrino.useragentname=                               用于帮助向其他比特币对等节点标识我们自己。
      --neutrino.useragentversion=                            用于帮助向其他比特币对等节点标识我们自己。

Bitcoind 选项

bitcoind:
      --bitcoind.dir=                                         包含节点数据、日志、配置文件等的根目录。(默认值: /Users/&lt;用户名>/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)

使用 btcd

安装 btcd

在 FreeBSD 上,使用 gmake 而不是 make。

为了能够利用最新的 Taproot 功能,必须使用 btcd 版本 v0.23.5

要安装 btcd,请运行以下命令:

安装 btcd

 make btcd

或者,你可以直接从其 repo 安装 btcd

启动 btcd

运行以下命令将创建 rpc.cert 和默认的 btcd.conf

 btcd --testnet --rpcuser=REPLACEME --rpcpass=REPLACEME

如果你想在测试网上使用 lndbtcd 需要首先完全同步测试网区块链。根据你的硬件,这可能需要几个小时。请注意,添加 --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 后端运行 lnd

如果你在测试网上,请在 btcd 完成同步后运行此命令。否则,请将 --bitcoin.testnet 替换为 --bitcoin.simnet。如果你正在安装 lnd 以准备 教程,则可以跳过此步骤。

 lnd --bitcoin.active --bitcoin.testnet --debuglevel=debug \
       --btcd.rpcuser=kek --btcd.rpcpass=kek --externalip=X.X.X.X

使用 Neutrino

为了在轻客户端模式下运行 lnd,你需要找到一个能够服务于这种新轻客户端模式的完整节点。lnd 使用 BIP 157BIP 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

使用 bitcoind

请注意,添加 -txindex 是可选的,因为它会花费更长的时间来同步节点,但随后 lnd 通常会运行得更快,因为它可以直接访问索引,而不是扫描区块或 BIP 158 过滤器以查找相关项目。

要配置你的 bitcoind 后端以与 lnd 一起使用,请首先完成并验证以下内容:

  • 由于 lnd 使用 ZeroMQbitcoind 交互,你的 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

注意:

  • rpcuserrpcpass 参数可以通过 lnd 为在同一用户下运行的 bitcoind 实例确定,包括在使用 cookie 身份验证时。在这种情况下,你可以将它们完全从 lnd 选项中排除。
  • 如果你确实选择在你的 lnd.conflnd 的命令行选项中显式传递身份验证参数(如上面的示例命令中所示的 bitcoind.rpcuserbitcoind.rpcpass),则还必须指定 bitcoind.zmqpubrawblockbitcoind.zmqpubrawtx 选项。否则,lnd 将尝试从你的 bitcoin.conf 中获取配置。
  • 你必须确保用于传递给 lndbitcoind.zmqpubrawblockbitcoind.zmqpubrawtx 选项的地址与分别在 bitcoind 选项中传递的 zmqpubrawblockzmqpubrawtx 的地址相同。
  • 在同一 Windows 机器上运行 lnd 和 bitcoind 时,请确保对所有需要 TCP/IP 主机地址的配置选项使用 127.0.0.1,而不是 localhost。如果你使用 “localhost” 作为主机名,你可能会看到 lnd 和 bitcoind 后端之间的进程间通信非常缓慢。如果 lnd 遇到此问题,你将在控制台或日志输出中看到 “Waiting for chain backend to finish sync, start_height=XXXXXX” 作为最后一条条目,并且 lnd 似乎会挂起。正常的 lnd 输出将快速显示多个类似的消息,因为 lnd 会从 bitcoind 使用区块。
  • 不要将超过两到三个 lnd 实例连接到 bitcoind。使用默认的 bitcoind 设置,拥有多个 lnd 实例,或者 lnd 加上任何使用 RPC 的应用程序,可能会导致 lnd 错过来自后端的关键更新。
  • bitcoind 中的默认费用估算模式为 CONSERVATIVE。你可以设置 bitcoind.estimatemode=ECONOMICAL 以将其更改为 ECONOMICAL。此外,如果你在 regtest 中启动 bitcoind,则此配置不会生效。

创建钱包

如果 lnd 是第一次运行,请使用以下命令创建一个新钱包:

 lncli create

这将提示输入钱包密码,以及可选的密码种子短语。

然后,lnd 将打印一个 24 字密码种子助记词,该助记词可用于在数据丢失的情况下恢复钱包。用户应将其写下来并保存在安全的地方。

有关管理钱包的更多信息可以在钱包管理文档中找到

Macaroons

lnd 的身份验证系统称为 macaroons,它是去中心化的 bearer 凭据,允许委托、衰减和其他很棒的功能。你可以在 Alex Akselrod 在 GitHub 上的 文章 中了解有关它们的更多信息。

运行 lncli create 创建钱包,默认情况下将生成用于身份验证的 admin.macaroonread_only.macaroonmacaroons.db 文件到 lnd 中。它们将存储在网络目录中(默认值:lnddir/data/chain/bitcoin/mainnet),以便可以使用不同的密码用于主网、测试网、simnet 等。请注意,如果你指定了备用数据目录(通过 --datadir 参数),你将必须使用 --macaroonpath 参数将更新后的 admin.macaroon 文件位置传递到 lncli 中。

要禁用 macaroon 进行测试,请将 --no-macaroons 标志传递到 lndlncli 中。

网络可达性

如果你想向网络上的其他节点发出信号,表明你将接受传入通道(因为对等节点需要入站连接才能启动通道融资工作流程),则应将 --externalip 标志设置为你的公共可访问 IP 地址。

Simnet vs. Testnet 开发

如果你正在进行本地开发,例如对于教程,你需要以 simnet 模式启动 btcdlnd。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.conf (可选)

或者,如果你希望在 lnd 启动之间具有持久配置,允许你只需在命令行中键入 lnd --bitcoin.testnet --bitcoin.active,则可以创建一个 lnd.conf

在 macOS 上,位于: /Users/&lt;用户名>/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 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
lightningnetwork
lightningnetwork
江湖只有他的大名,没有他的介绍。