Eclair 是一个用 Scala 语言编写的闪电网络实现,遵循闪电网络规范(BOLT)。它依赖于 Bitcoin Core 来与区块链进行交互和监控,并提供 HTTP API 以方便应用程序集成。Eclair 支持插件扩展,并可在主网、测试网和 regtest 上运行。
Eclair(法语中闪电的意思)是闪电网络的 Scala 实现。
此软件遵循 闪电网络规范 (BOLT)。 其他实现包括 core lightning, lnd, electrum, 和 ldk。
请参阅最新的 版本说明 以获取有关 BOLT 兼容性的详细信息。
Eclair 提供了功能丰富的 HTTP API,使应用程序开发人员可以轻松集成。
有关更多信息,请访问 API 文档网站。
:rotating_light: Eclair 的 JSON API 不应该 从外部世界访问(类似于 Bitcoin Core API)
请访问我们的 docs 文件夹,以查找有关如何配置你的节点、连接到其他节点、打开通道、发送和接收付款以及帮助处理更高级场景的详细说明。
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 节点(见 此处):
bech32
或 bech32m
(隔离见证) 地址。如果你的钱包有“非隔离见证 UTXO”(既不是 p2sh-segwit
、bech32
也不是 bech32m
的输出),你必须在运行 Eclair 之前将它们发送到 bech32
或 bech32m
地址。使用以下最小 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 是用 Scala 开发的,Scala 是一种功能强大的函数式语言,可在 JVM 上运行,并打包为 ZIP 归档文件。
要运行 Eclair,你首先需要安装 Java。Eclair 针对 Java 21,可以在任何兼容的 Java 运行时上运行,我们建议你使用 OpenJDK 21。
然后下载我们最新的 版本,解压缩归档文件并运行以下命令:
eclair-node-<version>-<commit_id>/bin/eclair-node.sh
然后,你可以通过 eclair-cli 或 API 控制你的节点。
:warning: 遵循可能已过时或不完整的教程/指南时要小心。在运行自己的节点之前,你必须彻底阅读官方 eclair 文档。
默认情况下,Eclair 将其配置文件读取到 ~/.eclair
,并将日志写入到 ~/.eclair
。
要更改节点的配置,请在 ~/.eclair
中创建一个名为 eclair.conf
的文件。这是一个示例配置文件:
eclair.node-alias=eclair
eclair.node-color=49daaa
以下是一些最常见的选项:
名称 | 描述 | 默认值 |
---|---|---|
eclair.chain | 要使用的区块链:regtest、testnet、signet 或 mainnet | 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 钱包名称 | "" |
除非值包含特殊字符,否则不需要引号。完整的语法指南此处。
→ 有关更多配置选项,请参见此处。
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 堆大小错误,则可以尝试使用 -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,你需要备份的文件位于你的数据目录中。你必须备份:
node_seed.dat
和 channel_seed.dat
)eclair.sqlite.bak
在目录 mainnet
,testnet
,signet
或 regtest
下,具体取决于你运行的链)你的种子一旦创建就不会改变,但是你的通道会在你收到或发送付款时发生变化。Eclair 将创建并维护其数据库的快照,名为 eclair.sqlite.bak
,在你的数据目录中,并在需要时更新它。即使 Eclair 正在运行,此文件也始终一致且可以安全使用,这也是你应该定期备份的内容。
例如,你可以为你的备份作业配置一个 cron
任务。或者你可以配置一个可选的通知脚本,以便在创建新的数据库快照后由 eclair 调用,使用以下选项:
eclair.file-backup.notify-script = "/absolute/path/to/script.sh"
确保你的脚本是可执行的,并且使用 eclair.sqlite.bak
的绝对路径名。
请注意,根据你的文件系统,在你的备份过程中,我们建议首先将 eclair.sqlite.bak
到某个临时文件,然后再将该文件复制到你的最终备份位置。
一个 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.conf
。 signet-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 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!