以太坊 - Eclair v0.9.0 - Acinq

  • ACINQ_
  • 发布于 2023-06-20 17:55
  • 阅读 57

Eclair v0.9.0 版本发布,主要包含对闪电网络重要功能(双重注资、拼接和Bolt 12 offers)的准备工作,这些功能已在eclair中完全实现,但正在等待规范最终确定和其他实现准备好进行交叉兼容性测试。此外,还增强了插件功能,引入了针对各种类型DoS的缓解措施,并提高了代码库中许多区域的性能。

Eclair v0.9.0

此版本包含大量为重要的(且复杂的)闪电网络功能所做的准备工作:双向注资(dual-funding)、拼接(splicing)和 Bolt 12 报价(offers)。 这些功能现在已在 eclair 中完全实现,但我们正在等待规范工作最终完成,以及其他实现准备好进行交叉兼容性测试。 只有在你清楚自己在做什么,并准备好处理潜在的向后不兼容更改时,才应激活这些功能! 我们还使插件更加强大,引入了针对各种类型的 DoS 的缓解措施,并提高了代码库中许多区域的性能。

主要变更

双向注资(Dual funding)

Eclair 现在与双向注资规范的最新状态保持同步。 在实现此功能时,我们为规范做了许多改进。 此功能默认禁用,因为规范可能尚未最终确定。

拼接(Splicing)原型

Eclair 现在支持拼接的自定义原型. 此原型与当前的提案不同:我们发现了一些改进,这些改进将被添加到规范中。 我们正在积极与其他实现合作,以便在未来版本的 eclair 中发布此重要功能。

数据模型

数据库模型已经完全重做以处理拼接。 主要地,一个通道可以并行地具有多个承诺。 使用 Postgres 作为数据库后端并在通道的 JSON 内容上进行 SQL 查询的节点运营商应该重置 JSON 列:

  1. 在重启 eclair 之前设置 eclair.db.postgres.reset-json-columns = true
  2. 重启后,设置 eclair.db.postgres.reset-json-columns = false(无需再次重启)

报价(Offers)

我们继续致力于 Bolt 12 支持,并为此实验性功能做了大量更新。

支付报价(offers)
$ ./eclair-cli payoffer --offer=<offer-to-pay> --amountMsat=<amountToPay>

如果报价(offer)支持,你也可以指定 --quantity 一次购买多个。 还支持 payinvoice 中的所有参数。

Eclair 将请求发票并支付它(假设它与我们的请求匹配),而无需进一步交互。

报价(offer)仍然是实验性的,在得到广泛支持之前,一些细节可能仍然会发生变化。

接收报价(offers)的付款

要能够接收报价(offer)的付款,你需要使用插件。 该插件需要创建报价(offer)并注册一个处理程序,该处理程序将接受或拒绝发票请求和付款。 Eclair 将检查这些是否满足所有协议要求,并且处理程序只需要考虑是否可以交付报价(offer)上的项目。

为报价(offer)生成的发票不会存储在数据库中,以防止 DoS 向量。 相反,所有相关数据(报价(offer) id、preimage、金额、数量、创建日期和付款人 id)都包含在将用于付款的盲化路由中。 处理程序还可以添加自己的数据。 所有这些数据都经过签名和加密,因此付款人无法读取或伪造。

API 变更

  • 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)

其他改进和错误修复

用于处理启动时锁定的 utxo 的策略 (#2278)

如果在 eclair 启动时某些 utxo 被锁定,则可能是因为 eclair 先前在为交易注资的过程中停止了。 虽然这不会造成任何资金损失的风险,但这些 utxo 将无缘无故地保持锁定状态,并且不会用于为未来的交易注资。 Eclair 提供了三种处理该情况的策略,节点运营商可以通过在其 eclair.conf 中设置 eclair.bitcoind.startup-locked-utxos-behavior 来配置这些策略:

  • stop: 在节点运营商解锁相应的 utxo 之前,eclair 不会启动
  • unlock: eclair 将自动解锁相应的 utxo
  • ignore: eclair 将保持这些 utxo 锁定并启动
添加插件支持通道打开拦截 (#2552)

Eclair 现在支持拦截通道打开请求并决定是否接受或拒绝它们的插件。 这对于例如对谁可以与你打开通道强制执行自定义策略很有用。

可以在 eclair-plugins 存储库中找到演示此功能的示例插件。

可配置的通道打开速率限制 (#2552)

我们已将参数添加到 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
可配置的传入连接限制 (#2601)

我们已将一个参数添加到 eclair.conf,以允许节点跟踪他们与没有现有通道的对等节点维护的传入连接数。 一旦达到限制,Eclair 将首先断开与最早跟踪的对等节点的连接。

sync-whitelist 上的传出连接和对等节点不受限制,也不计入限制。

新的配置选项和默认值如下:

// 来自与我们没有任何通道的对等节点的最大传入连接数
eclair.peer-connection.max-no-channels = 250
启用 Wumbo 时删除了资金限制 (#2624)

我们删除了 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 构建是确定性的。 要重现我们的构建,请使用以下环境(*):

  • Ubuntu 22.04
  • AdoptOpenJDK 11.0.6
  • Maven 3.9.2

使用以下命令生成 eclair-node 软件包:

mvn clean install -DskipTests

这应该生成 eclair-node/target/eclair-node-<version>-XXXXXXX-bin.zip,其 sha256 校验和与我们在 SHA256SUMS.asc 中提供和签名的校验和匹配

(*)你或许可以使用其他操作系统或 JDK 11 版本构建完全相同的工件,我们尚未尝试所有方法。

升级

此版本与以前的 eclair 版本完全兼容。 你无需关闭通道,只需停止 eclair,升级并重新启动。

更新日志

  • cd9ca57 回到开发模式 (#2515)
  • 3b2eb96 修复余额直方图 (#2516)
  • a0b7a49 移除 waitingSince 的兼容性代码 (#2338)
  • 908d87f 切换测试中使用的嵌入式 postgres 库 (#2518)
  • 2a7649d 在审计 API 上添加分页 (#2487)
  • cdedbdf 简化 API 提取器名称 (#2521)
  • 683328d 在迁移期间关闭 SQL 语句 (#2524)
  • 8320964 改进通道更新中的 htlc_maximum_msat (#2299)
  • 7eb5067 添加 mempool 驱逐测试 (#2529)
  • ca831df 添加支付接收者抽象 (#2480)
  • 04517f8 更新 v0.8.0 发行说明的标题 (#2531)
  • aa04402 添加锚点输出零费用规范测试向量 (#2400)
  • a9146dd 修复不稳定的测试 (#2520)
  • 74719b8 将支付发送到盲化路由 (#2482)
  • 83edd8c 允许在双重注资中使用非隔离见证输出 (#2528)
  • b5a2d3a 修复盲化路由失败消息 (#2490)
  • bf08769 更新依赖项 (#2537)
  • 656812e Commitments 清理 (#2533)
  • 5b19e58 改进 payinvoice API 响应 (#2525)
  • c2eb357 添加 PeerReadyNotifier actor (#2464)
  • 7c50528 改进 findRoute 忽略的通道行为 (#2523)
  • 2fdc9fa 移除冗余的日志消息 (#2527)
  • d76d0f6 修复构建 (#2543)
  • 431df1f 更新各种 doc 文件 (#2547)
  • f0d12eb 少量重构 (#2538)
  • 33ca262 添加单例 AsyncPaymentTriggerer,用于监控异步支付的接收者何时重新连接 (#2491)
  • 555de6eCommitments 方法从伴生对象移动到类 (#2539)
  • 9aee10a 改进盲化支付的端到端测试 (#2535)
  • 530b3c2 在启动时解锁 utxo (#2278)
  • f95f087 更新 offers 规范 (#2386)
  • 5967f72 更新到 bitcoind 23.1 (#2551)
  • 92c27fe 增加区块链监控器连接超时时间 (#2555)
  • c9c5638 将 tlv 流添加到 onion 失败消息中 (#2455)
  • 93ed6e8 分解 funding 花费的处理程序 (#2556)
  • 06587f9 等待交易发布以实现零确认 (#2558)
  • 351666d 分解 funding 交易接受 (#2557)
  • 6b6725e 在 funding 交易时始终锁定 utxo (#2559)
  • 20c9a58 跳过等待空的 tx_signatures (#2560)
  • f02d33d 不要在签名时硬编码输入索引 (#2563)
  • 4dd4829 将 interactive-tx funding 移动到专用 actor (#2561)
  • 1d68ccc 使创建第一个 commit 交易更通用 (#2564)
  • b2bde63 使用 case 类作为费用提供者 (#2454)
  • 6486449 添加 GetNode 路由器 API (#2568)
  • b21085d 添加 ChannelOpened 事件 (#2567)
  • 303799e 允许 keysend 支付没有支付密钥 (#2573)
  • 204bc3e 在 Postman 内部构建消息 (#2570)
  • c52bb69 重做 splices 的数据模型 (#2540)
  • 06fcb1f 双重注资的最新更改 (#2536)
  • 9d4f2bareplyTo 字段添加到 Router.GetNode (#2575)
  • 8084f3c 正确地在 bash 脚本中引用 url (#2580)
  • d52e869 使用 keysend 时不要发送支付密钥 (#2574)
  • 1d5af4d 重新启动时仅读取一次通道数据库 (#2569)
  • 9611f9e 改进 InteractiveTxBuilder 模型 (#2576)
  • e3e1ee5 重构 commitments 和 meta-commitments (#2579)
  • 28072e8 关闭时选择最终的链上地址 (#2565)
  • 46999fd 尽可能使用 MetaCommitments (#2587)
  • 2857994 TlvStream 的相等性 (#2586)
  • 927e1c8 本地通道的绝对优先级 (#2588)
  • f901aea 修复插件与其他 LN 节点交换自定义闪电消息的功能 (#2495)
  • 198fd93 允许向以我们开始的路由发送消息 (#2585)
  • f23e2c5 阐明围绕 rebase PR 的贡献准则 (#2591)
  • 01ec73bfundingParamssharedTx 一起存储 (#2592)
  • a54ae22 移除 interactive-tx 中不必要的 dust limit hack (#2594)
  • 6483896 添加 ChannelAborted 事件 (#2593)
  • 202598d 引入 zeroconf 的特定 funding 状态 (#2598)
  • 6904283 在 ReplaceableTxPublisher 中处理下一个远程 commit (#2600)
  • d4c32f9 添加支付 offers 的支持 (#2479)
  • ddcb978 添加对拦截打开通道消息的插件的支持 (#2552)
  • fcc52a8 准备 InteractiveTxBuilder 以支持 splicing (#2595)
  • e3bba3d 移除首次 commit 时的 reserve 要求 (#2597)
  • 1a79e75Commitments 替换为 MetaCommitments (#2599)
  • a3c6029 限制双重注资期间的 RBF 尝试次数 (#2596)
  • df590d8 使 updateLocalFundingStatus 方法返回 Either (#2602)
  • 1c9c694 添加新命令以修复 PendingChannelsRateLimiterSpec 中的不稳定测试 (#2606)
  • a52a10a 更新 Bolt 3 测试 (#2605)
  • f4326f4 使用 bitcoin-lib 0.27 (#2612)
  • e1cee96 修复机会主义的零确认 (#2616)
  • 732eb31 限制来自没有通道的节点的传入连接数 (#2601)
  • df0e712 添加 offer 管理器 (#2566)
  • dcedecc 重做对通道打开和 rbf 的响应 (#2608)
  • e383d81 添加 listreceivedpayments RPC 调用 (#2607)
  • db15beb 将 t-bast 的 GPG 密钥添加到 SECURITY.md (#2621)
  • 3a95a7d 在发送 commit_sig 后存储通道状态 (#2614)
  • 6d7b0fa 移除 max-funding-satoshis 配置 (#2624)
  • daf947f 允许在 InteractiveTxBuilder 中进行负贡献 (#2619)
  • de6d3c1 添加对 splices 的支持 (#2584)
  • a8471df 更新 tx_signature witness 编解码器 (#2633)
  • 71568ca 动态 funding 公钥 (#2634)
  • 3973ffa Onion 消息测试向量 (#2628)
  • 46149c7 向盲化支付路由添加填充 (#2638)
  • 36745a6 更好地验证 onion 消息负载 (#2631)
  • 0d3de8f 修复测试以防止因超时等待无消息而导致的错误 (#2640)
  • 25b92da 将远程地址传递给 InterceptOpenChannelPlugin (#2641)
  • a58b7e8 将 tlv 类型 0 用于 next_funding_txid (#2637)
  • 25f4cd2InteractiveTxParams 中移除 minDepth (#2635)
  • a010750 对 splices 的小修复 (#2647)
  • 15e4986 清理 ChannelKeyManager (#2639)
  • 396c84d 在程序集 zip 中包含 doc 文件夹 (#2604)
  • ee63c65 添加 cpfp-bump-fees API (#1783)
  • 77b3337 在所有闪电消息中使用 tx_hash 而不是 txid (#2648)
  • 7bf2e8c 移除对 regtest/testnet 的限制 (#2652)
  • 9beccceChannelParams 中定义 channelReserve() 方法 (#2653)
  • 14cbed9 修复通道 remote_node_id 上的 JSON Postgres 索引 (#2649)
  • 55a985a 修复通道数据库迁移 (#2655)
  • fa985da 拒绝过低的 splice 费率 (#2657)
  • c73db84 忽略 lnd 的内部错误 (#2659)
  • 50178be 更新到 bitcoind 23.2 (#2664)
  • [f2aa0cc](https://github.com/ACINQ/eclair/commit/f2aa0cc003d4badb3f30a13b5f8e7- 303c1d4 修复失败的测试 PendingChannelsRateLimiter 并阐明其他测试 (#2691)
  • 878eb27 更新 maven 版本 (#2690)
  • 1105a0a 更新 docker gradle 校验和 (#2692)
  • fe9f32b PeerReadyNotifier 上的小更新 (#2695)
  • 3a351f4 永远不要序列化 ActorRef (#2697)
  • 原文链接: github.com/ACINQ/eclair/...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

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