闪电网络 - Eclair Logo - Acinq

  • ACINQ_
  • 发布于 2025-05-21 20:14
  • 阅读 14

Eclair 是一个用 Scala 语言编写的闪电网络实现,遵循闪电网络规范(BOLT)。它依赖于 Bitcoin Core 来与区块链进行交互和监控,并提供 HTTP API 以方便应用程序集成。Eclair 支持插件扩展,并可在主网、测试网和 regtest 上运行。

Eclair 标志

构建状态 codecov License

Eclair(法语中闪电的意思)是闪电网络的 Scala 实现。

此软件遵循 闪电网络规范 (BOLT)。 其他实现包括 core lightning, lnd, electrum, 和 ldk



闪电网络规范兼容性

请参阅最新的 版本说明 以获取有关 BOLT 兼容性的详细信息。

JSON API

Eclair 提供了功能丰富的 HTTP API,使应用程序开发人员可以轻松集成。

有关更多信息,请访问 API 文档网站

:rotating_light: Eclair 的 JSON API 不应该 从外部世界访问(类似于 Bitcoin Core API)

文档

请访问我们的 docs 文件夹,以查找有关如何配置你的节点、连接到其他节点、打开通道、发送和接收付款以及帮助处理更高级场景的详细说明。

你还将在那里找到详细的指南常见问题解答

安装

前提条件:Bitcoin Core

Eclair 依赖于 Bitcoin Core 来与区块链交互和监控区块链,并管理链上资金:Eclair 不包含链上钱包,通道打开交易由你的 Bitcoin Core 节点提供资金,通道关闭交易将资金返回到你的 Bitcoin Core 节点。

这意味着 Eclair 无需重新实现它们,而是受益于 Bitcoin Core 实现的验证和优化(包括使用 RBF/CPFP 进行费用管理等)。Eclair 使用我们自己的 bitcoin library 来验证 Bitcoin Core 提供的数据。

:warning: 这也意味着 Eclair 对你的 Bitcoin Core 节点的配置方式有很高的要求(见下文),并且你必须备份你的 Bitcoin Core 钱包以及你的 Eclair 节点(见 此处):

  • Eclair 需要一个已同步支持隔离见证启用 Zeromq启用钱包非剪枝tx-indexingBitcoin Core 节点。
  • 你必须将你的 Bitcoin 节点配置为使用 bech32bech32m (隔离见证) 地址。如果你的钱包有“非隔离见证 UTXO”(既不是 p2sh-segwitbech32 也不是 bech32m 的输出),你必须在运行 Eclair 之前将它们发送到 bech32bech32m 地址。
  • Eclair 需要 Bitcoin Core 28.1 或更高版本。 如果你要升级现有钱包,你可能需要创建一个新地址并将所有资金发送到该地址。

使用以下最小 bitcoin.conf 运行 bitcoind:

server=1
rpcuser=foo
rpcpassword=bar
txindex=1
addresstype=bech32
changetype=bech32
zmqpubhashblock=tcp://127.0.0.1:29000
zmqpubrawtx=tcp://127.0.0.1:29000

根据实际的硬件配置,为更快的验证提供增加的 dbcache 参数值,以及为更好处理 bitcoind 端的 API 请求提供 rpcworkqueue 参数值可能很有用。

## UTXO 数据库缓存大小,单位为 MiB
dbcache=2048
## 允许的挂起 RPC 请求的数量(默认为 16)
rpcworkqueue=128

## bitcoin 在 HTTP 连接建立后,等待完整的 RPC HTTP 请求的秒数。
rpcclienttimeout=30

安装 Eclair

Eclair 是用 Scala 开发的,Scala 是一种功能强大的函数式语言,可在 JVM 上运行,并打包为 ZIP 归档文件。

要运行 Eclair,你首先需要安装 Java。Eclair 针对 Java 21,可以在任何兼容的 Java 运行时上运行,我们建议你使用 OpenJDK 21

然后下载我们最新的 版本,解压缩归档文件并运行以下命令:

eclair-node-<version>-<commit_id>/bin/eclair-node.sh

然后,你可以通过 eclair-cliAPI 控制你的节点。

:warning: 遵循可能已过时或不完整的教程/指南时要小心。在运行自己的节点之前,你必须彻底阅读官方 eclair 文档。

配置

配置文件

默认情况下,Eclair 将其配置文件读取到 ~/.eclair,并将日志写入到 ~/.eclair

要更改节点的配置,请在 ~/.eclair 中创建一个名为 eclair.conf 的文件。这是一个示例配置文件:

eclair.node-alias=eclair
eclair.node-color=49daaa

以下是一些最常见的选项:

名称 描述 默认值
eclair.chain 要使用的区块链:regtesttestnetsignetmainnet mainnet
eclair.server.port 闪电 TCP 端口 9735
eclair.api.enabled 启用/禁用 API 默认禁用 API。如果要启用它,必须设置密码。
eclair.api.port API HTTP 端口 8080
eclair.api.password API 密码 (BASIC) ""(如果启用 API,则必须设置)
eclair.bitcoind.rpcuser Bitcoin Core RPC 用户 foo
eclair.bitcoind.rpcpassword Bitcoin Core RPC 密码 bar
eclair.bitcoind.zmqblock Bitcoin Core ZMQ 区块地址 "tcp://127.0.0.1:29000"
eclair.bitcoind.zmqtx Bitcoin Core ZMQ tx 地址 "tcp://127.0.0.1:29000"
eclair.bitcoind.wallet Bitcoin Core 钱包名称 ""

除非值包含特殊字符,否则不需要引号。完整的语法指南此处

→ 有关更多配置选项,请参见此处

配置 Bitcoin Core 钱包

Eclair 将使用默认加载的 Bitcoin Core 钱包来为你要打开的任何通道提供资金。 如果要使用与默认钱包不同的钱包,则必须在 eclair.conf 中相应地设置 eclair.bitcoind.wallet

:warning: 配置钱包后,如果要更改它,则必须非常小心:当你有打开的通道时更改钱包可能会导致资金损失(或复杂的恢复过程)。

Eclair 会将关闭的通道中的 BTC 返回到配置的钱包。 钱包中找到的任何 BTC 都可以用来为你选择打开的通道提供资金。

我们还建议在 bitcoin.conf 中调整以下参数:

## 此参数确保你的钱包不会创建会被其他节点拒绝的未确认交易链。
walletrejectlongchains=1
## 以下参数将未确认交易链的最大长度设置为 20,而不是默认值 25。
limitancestorcount=20
limitdescendantcount=20

设置这些参数使你可以使用子为父付费 (CPFP) 来确认它们,从而解除未确认的通道资金交易的长链。

使用默认的 bitcoind 参数,如果你的节点创建了 25 个低费用率的未确认资金交易链,你将无法使用 CPFP 提高它们的费用,因为你的 CPFP 交易很可能会被 网络的其余部分拒绝。

你还可以配置 Eclair 来管理 Bitcoin Core 的私钥,有关更多详细信息,请参见我们的 指南

Java 环境变量

某些高级参数可以使用 java 环境变量更改。大多数用户不需要这样做,可以跳过此部分。

但是,如果你看到 Java 堆大小错误,则可以尝试使用 -Xmx 参数增加分配给 JVM 的最大内存。

例如,你可以将其设置为最多使用 512 MB(或适合你机器上 RAM 量的任何值):

export JAVA_OPTS=-Xmx512m

:warning: 如果你想在同一台机器上运行多个 eclair 实例,则必须使用单独的 datadir。你还必须更改 eclair.conf 中的端口(见上文)。

名称 描述 默认值
eclair.datadir 数据目录的路径 ~/.eclair
eclair.printToConsole 记录到 stdout(除了 eclair.log)

例如,要指定不同的数据目录,你可以运行以下命令:

eclair-node-<version>-<commit_id>/bin/eclair-node.sh -Declair.datadir=/tmp/node1

日志

Eclair 使用 logback 进行日志记录。要使用不同的配置,并覆盖内部 logback.xml,请运行:

eclair-node-<version>-<commit_id>/bin/eclair-node.sh -Dlogback.configurationFile=/path/to/logback-custom.xml

备份

你需要备份:

  • 你的 Bitcoin Core 钱包
  • 你的 Eclair 通道

对于 Bitcoin Core,你需要备份 Eclair 正在使用的钱包的钱包文件。你只需要在创建钱包时执行此操作一次。有关更多信息,请参见 Bitcoin Core 文档中的 管理钱包

对于 Eclair,你需要备份的文件位于你的数据目录中。你必须备份:

  • 你的种子 (node_seed.datchannel_seed.dat)
  • 你的通道数据库 (eclair.sqlite.bak 在目录 mainnettestnetsignetregtest 下,具体取决于你运行的链)

你的种子一旦创建就不会改变,但是你的通道会在你收到或发送付款时发生变化。Eclair 将创建并维护其数据库的快照,名为 eclair.sqlite.bak,在你的数据目录中,并在需要时更新它。即使 Eclair 正在运行,此文件也始终一致且可以安全使用,这也是你应该定期备份的内容。

例如,你可以为你的备份作业配置一个 cron 任务。或者你可以配置一个可选的通知脚本,以便在创建新的数据库快照后由 eclair 调用,使用以下选项:

eclair.file-backup.notify-script = "/absolute/path/to/script.sh"

确保你的脚本是可执行的,并且使用 eclair.sqlite.bak 的绝对路径名。

请注意,根据你的文件系统,在你的备份过程中,我们建议首先将 eclair.sqlite.bak 到某个临时文件,然后再将该文件复制到你的最终备份位置。

Docker

一个 Dockerfile x86_64 镜像在 docker hub 上的每次提交时构建,用于运行 dockerized eclair-node。 对于 arm64 平台,你可以使用 arm64 Dockerfile 构建你自己的 arm64 容器。

你可以使用 JAVA_OPTS 环境变量来设置 eclair-node 的参数。

docker run -ti --rm -e "JAVA_OPTS=-Xmx512m -Declair.api.binding-ip=0.0.0.0 -Declair.node-alias=node-pm -Declair.printToConsole" acinq/eclair

如果要持久化数据目录,可以使用 -v 参数将卷挂载到你的主机,如以下示例所示:

docker run -ti --rm -v "/path_on_host:/data" -e "JAVA_OPTS=-Declair.printToConsole" acinq/eclair

如果启用了 API,则可以使用命令行工具检查 Eclair 的状态:

docker exec <container_name> eclair-cli -p foobar getinfo

插件

对于高级用法,Eclair 支持用 Scala、Java 或任何 JVM 兼容语言编写的插件。

有效的插件是一个 jar 文件,其中包含 Plugin 接口的实现,以及 Main-Class 的 manifest 条目,其中包含实现的 FQDN。

以下是如何使用插件运行 Eclair:

eclair-node-<version>/bin/eclair-node.sh <plugin1.jar> <plugin2.jar> <...>

你可以在 eclair-plugins 存储库中找到有关插件的更多详细信息。

测试网使用

Eclair 默认配置为在主网上运行,但你仍然可以在测试网(或 regtest/signet)上运行它:在 测试网模式下启动你的 Bitcoin 节点(在 bitcoin.conf 中添加 testnet=1 或以 -testnet 启动),并更改 Eclair 的链参数和 Bitcoin RPC 端口:

eclair.chain=testnet
eclair.bitcoind.rpcport=18332

对于 regtest,在 bitcoin.conf 中添加 regtest=1 或以 -regtest 启动,并修改 eclair.conf

eclair.chain = "regtest"
eclair.bitcoind.rpcport=18443

对于 signet,在 bitcoin.conf 中添加 signet=1 或以 -signet 启动,并按如下所示修改 eclair.confsignet-check-tx 配置参数应该是你的 signet 中存在的交易的 txid,"" 以跳过此检查,或者如果未指定,将使用默认的 signet txid 值。

eclair.chain = "signet"
eclair.bitcoind.rpcport=38332
eclair.bitcoind.signet-check-tx=<signet tx 的 txid>

你可能还想利用 bitcoin.conf 中的新配置部分来管理特定于网络的参数, 因此你可以轻松地在主网和测试网上运行你的 Bitcoin 节点。例如,你可以使用:

server=1
txindex=1

addresstype=bech32
changetype=bech32

walletrejectlongchains=1
limitancestorcount=20
limitdescendantcount=20

[main]
rpcuser=<your-mainnet-rpc-user-here>
rpcpassword=<your-mainnet-rpc-password-here>
zmqpubhashblock=tcp://127.0.0.1:29000
zmqpubrawtx=tcp://127.0.0.1:29000

[test]
rpcuser=<your-testnet-rpc-user-here>
rpcpassword=<your-testnet-rpc-password-here>
zmqpubhashblock=tcp://127.0.0.1:29001
zmqpubrawtx=tcp://127.0.0.1:29001

工具

  • 演示商店 - 一个示例测试网闪电网络网上商店。

资源

  • 原文链接: github.com/ACINQ/eclair/...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

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