Eclair v0.9.0 版本发布,主要包含对闪电网络重要功能(双重注资、拼接和Bolt 12 offers)的准备工作,这些功能已在eclair中完全实现,但正在等待规范最终确定和其他实现准备好进行交叉兼容性测试。此外,还增强了插件功能,引入了针对各种类型DoS的缓解措施,并提高了代码库中许多区域的性能。
此版本包含大量为重要的(且复杂的)闪电网络功能所做的准备工作:双向注资(dual-funding)、拼接(splicing)和 Bolt 12 报价(offers)。
这些功能现在已在 eclair 中完全实现,但我们正在等待规范工作最终完成,以及其他实现准备好进行交叉兼容性测试。
只有在你清楚自己在做什么,并准备好处理潜在的向后不兼容更改时,才应激活这些功能!
我们还使插件更加强大,引入了针对各种类型的 DoS 的缓解措施,并提高了代码库中许多区域的性能。
Eclair 现在与双向注资规范的最新状态保持同步。 在实现此功能时,我们为规范做了许多改进。 此功能默认禁用,因为规范可能尚未最终确定。
Eclair 现在支持拼接的自定义原型.
此原型与当前的提案不同:我们发现了一些改进,这些改进将被添加到规范中。
我们正在积极与其他实现合作,以便在未来版本的 eclair 中发布此重要功能。
数据库模型已经完全重做以处理拼接。 主要地,一个通道可以并行地具有多个承诺。 使用 Postgres 作为数据库后端并在通道的 JSON 内容上进行 SQL 查询的节点运营商应该重置 JSON 列:
eclair.db.postgres.reset-json-columns = trueeclair.db.postgres.reset-json-columns = false(无需再次重启)我们继续致力于 Bolt 12 支持,并为此实验性功能做了大量更新。
$ ./eclair-cli payoffer --offer=<offer-to-pay> --amountMsat=<amountToPay>
如果报价(offer)支持,你也可以指定 --quantity 一次购买多个。
还支持 payinvoice 中的所有参数。
Eclair 将请求发票并支付它(假设它与我们的请求匹配),而无需进一步交互。
报价(offer)仍然是实验性的,在得到广泛支持之前,一些细节可能仍然会发生变化。
要能够接收报价(offer)的付款,你需要使用插件。 该插件需要创建报价(offer)并注册一个处理程序,该处理程序将接受或拒绝发票请求和付款。 Eclair 将检查这些是否满足所有协议要求,并且处理程序只需要考虑是否可以交付报价(offer)上的项目。
为报价(offer)生成的发票不会存储在数据库中,以防止 DoS 向量。 相反,所有相关数据(报价(offer) id、preimage、金额、数量、创建日期和付款人 id)都包含在将用于付款的盲化路由中。 处理程序还可以添加自己的数据。 所有这些数据都经过签名和加密,因此付款人无法读取或伪造。
audit 现在接受 --count 和 --skip 参数来限制检索到的项目数量 (#2474, #2487)sendtoroute 移除 --trampolineNodes 参数并隐式使用单个 trampoline 中继 (#2480)sendtoroute 现在接受 --maxFeeMsat 来指定手续费的上限 (#2626)--blocking 一起使用时,payinvoice 始终返回付款结果,即使在使用 MPP 时也是如此 (#2525)node 返回有关远程节点的高级信息 (#2568)channel-created 是一个新的 websocket 事件,当通道的注资交易已广播时发布 (#2567)channel-opened websocket 事件已更新为包含最终的 channel_id 并在通道准备好处理付款时发布 (#2567)getsentinfo 现在可以与 --offer 一起使用,以列出发送到特定报价(offer)的付款。listreceivedpayments 列出你的节点收到的付款 (#2607)closedchannels 列出已关闭的通道。 它接受 --count 和 --skip 参数来限制检索到的项目数量 (#2642)cpfpbumpfees 可用于通过创建支付高额手续费的子交易来解除未确认交易链的阻塞 (#1783)如果在 eclair 启动时某些 utxo 被锁定,则可能是因为 eclair 先前在为交易注资的过程中停止了。
虽然这不会造成任何资金损失的风险,但这些 utxo 将无缘无故地保持锁定状态,并且不会用于为未来的交易注资。
Eclair 提供了三种处理该情况的策略,节点运营商可以通过在其 eclair.conf 中设置 eclair.bitcoind.startup-locked-utxos-behavior 来配置这些策略:
stop: 在节点运营商解锁相应的 utxo 之前,eclair 不会启动unlock: eclair 将自动解锁相应的 utxoignore: eclair 将保持这些 utxo 锁定并启动Eclair 现在支持拦截通道打开请求并决定是否接受或拒绝它们的插件。 这对于例如对谁可以与你打开通道强制执行自定义策略很有用。
可以在 eclair-plugins 存储库中找到演示此功能的示例插件。
我们已将参数添加到 eclair.conf,以允许节点管理来自等待链上确认的对等节点的通道打开请求的数量。 每个公共对等节点单独存在一个限制,所有私有对等节点总共存在一个限制。
新的配置选项和默认值如下:
// 公钥列表; 我们将忽略来自这些对等节点的待处理通道的限制
eclair.channel.channel-open-limits.channel-opener-whitelist = []
// 我们将接受来自给定对等节点的最大待处理通道数
eclair.channel.channel-open-limits.max-pending-channels-per-peer = 3
// 我们将接受来自所有私有节点的最大待处理通道总数
eclair.channel.channel-open-limits.max-total-pending-channels-private-nodes = 99
我们已将一个参数添加到 eclair.conf,以允许节点跟踪他们与没有现有通道的对等节点维护的传入连接数。 一旦达到限制,Eclair 将首先断开与最早跟踪的对等节点的连接。
sync-whitelist 上的传出连接和对等节点不受限制,也不计入限制。
新的配置选项和默认值如下:
// 来自与我们没有任何通道的对等节点的最大传入连接数
eclair.peer-connection.max-no-channels = 250
我们删除了 eclair.channel.max-funding-satoshis 配置字段。
如果节点运营商希望限制打开给他们的通道的大小,则有两种选择。
第一种选择是通过将以下行添加到 eclair.conf 来禁用大型信道支持:
eclair.features.option_support_large_channel = disabled
但是该选项不会限制入站通道的数量,因此它不能保证节点会“保持小”。
第二种选择是利用新的插件支持通道打开拦截:节点运营商可以基于他们认为合适的任何指标拒绝通道打开请求。
你将需要 gpg 和我们的发布签名密钥 7A73FE77DE2C4027。 请注意,你可以从以下位置获取它:
要导入我们的签名密钥:
$ gpg --import drouinf.asc
要验证发布文件校验和和签名:
$ gpg -d SHA256SUMS.asc > SHA256SUMS.stripped
$ sha256sum -c SHA256SUMS.stripped
Eclair 构建是确定性的。 要重现我们的构建,请使用以下环境(*):
使用以下命令生成 eclair-node 软件包:
mvn clean install -DskipTests
这应该生成 eclair-node/target/eclair-node-<version>-XXXXXXX-bin.zip,其 sha256 校验和与我们在 SHA256SUMS.asc 中提供和签名的校验和匹配
(*)你或许可以使用其他操作系统或 JDK 11 版本构建完全相同的工件,我们尚未尝试所有方法。
此版本与以前的 eclair 版本完全兼容。 你无需关闭通道,只需停止 eclair,升级并重新启动。
htlc_maximum_msat (#2299)Commitments 清理 (#2533)payinvoice API 响应 (#2525)PeerReadyNotifier actor (#2464)AsyncPaymentTriggerer,用于监控异步支付的接收者何时重新连接 (#2491)Commitments 方法从伴生对象移动到类 (#2539)tx_signatures (#2560)ChannelOpened 事件 (#2567)replyTo 字段添加到 Router.GetNode (#2575)InteractiveTxBuilder 模型 (#2576)MetaCommitments (#2587)fundingParams 与 sharedTx 一起存储 (#2592)ChannelAborted 事件 (#2593)InteractiveTxBuilder 以支持 splicing (#2595)Commitments 替换为 MetaCommitments (#2599)updateLocalFundingStatus 方法返回 Either (#2602)listreceivedpayments RPC 调用 (#2607)commit_sig 后存储通道状态 (#2614)max-funding-satoshis 配置 (#2624)InteractiveTxBuilder 中进行负贡献 (#2619)tx_signature witness 编解码器 (#2633)InteractiveTxParams 中移除 minDepth (#2635)ChannelKeyManager (#2639)cpfp-bump-fees API (#1783)tx_hash 而不是 txid (#2648)ChannelParams 中定义 channelReserve() 方法 (#2653)remote_node_id 上的 JSON Postgres 索引 (#2649)PendingChannelsRateLimiter 并阐明其他测试 (#2691)PeerReadyNotifier 上的小更新 (#2695)
- 原文链接: github.com/ACINQ/eclair/...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!