本周的周报总结了关于 LND 更新的动态手续费调整系统的讨论。此外还包括我们的常规板块,描述了服务和客户端软件的近期变更,发布新版本和候选版本的公告,以及总结了热门比特币基础设施软件的最新合并。

新闻

  • 关于 LND 动态手续费率调整系统的讨论: Matt Morehouse 在 Delving Bitcoin 上发布了对 LND 最近重写的 sweeper 系统的描述,该系统用于确定链上交易的手续费率(包括手续费替换调整)。他首先简要描述了闪电网络节点手续费管理的安全关键方面,以及避免手续费过高的自然需求。然后他描述了 LND 使用的两种通用策略:

    • 查询外部手续费率估算器,比如本地 Bitcoin Core 节点或第三方。这主要用于选择初始手续费率和为非紧急交易追加手续费。

    • 指数级手续费提升,在截止期限临近时使用,以确保节点的交易池或其手续费估算出现问题时不会影响及时确认。例如,Eclair 在截止期限在六个区块以内时使用指数级手续费提升。

    Morehouse 接着描述了这两种策略在 LND 新的 sweeper 系统中是如何结合的:“具有相同截止期限的 HTLC 取款被聚合到单个批量交易中。批量交易的预算是通过计算交易中各个 HTLC 预算的总和得出的。基于交易预算和截止期限,计算出一个手续费函数,该函数决定了随着截止期限临近要花费多少预算。默认情况下,使用线性手续费函数,从低手续费开始(由最低中继费率或外部估算器决定),在截止期限还剩一个区块时将全部预算分配给手续费。”

    他还描述了新逻辑如何帮助防御替代循环攻击,总结道:“使用 LND 的默认参数,攻击者通常必须花费至少 20 倍于 HTLC 价值的费用才能成功进行替代循环攻击。”他补充说,新系统还改进了 LND 对交易钉死攻击的防御。

    最后他用包含许多链接的形式,总结了通过改进逻辑修复的几个“LND 特定的错误和漏洞”。Abubakar Sadiq Ismail 回复提出了一些建议,说明所有闪电网络实现(以及其他软件)如何更有效地使用 Bitcoin Core 的手续费估算。其他几位开发者也发表了评论,既补充了细节,也对新方法表示赞赏。

服务和客户端软件变更

在这个月度专题中,我们会重点介绍比特币钱包和服务的有趣更新。

新版本和候选版本

热门比特币基础设施项目的新版本和候选版本。请考虑升级到新版本或帮助测试候选版本。

重要代码和文档变更

以下是Bitcoin CoreCore LightningEclairLDKLNDlibsecp256k1硬件钱包接口(HWI)Rust BitcoinBTCPay ServerBDK比特币改进提案(BIPs)闪电网络 BOLTs闪电网络 BLIPsBitcoin InquisitionBINANAs 的重要变更。

  • Bitcoin Core #31649 移除了所有检查点逻辑,这在几年前实现的区块头预同步步骤(参见周报 #216)之后已不再必要。该预同步使节点在初始区块下载(IBD)期间能够通过将区块头链的总工作量与预定义的阈值 nMinimumChainWork 进行比较来确定其有效性。只有总工作量超过此值的链才被认为有效并存储,有效防止了低工作量区块头的内存 DoS 攻击。这消除了对检查点的需求,检查点经常被视为一个中心化元素。

  • Bitcoin Core #31283BlockTemplate 接口中引入了新的 waitNext() 方法,该方法仅在链顶端区块发生变化或交易池手续费超过 MAX_MONEY 阈值时才返回新模板。此前,矿工每次请求都会收到新模板,导致不必要的模板生成。这一变更符合 Stratum V2 协议规范。

  • Eclair #3037 增强了 listoffers 命令(参见周报 #345),返回所有相关的 offer数据,包括 createdAtdisabledAt 时间戳,而不仅仅是原始的类型-长度-值(TLV)数据。此外,这个 PR 修复了尝试再次注册相同 offer 时导致节点崩溃的错误。

  • LND #9546lncli constrainmacaroon 子命令(参见周报 #201)中添加了 ip_range 标志,允许用户在使用 macaroon(认证令牌)时将资源访问限制在特定的 IP 范围内。此前,macaroon 只能基于特定 IP 地址允许或拒绝访问,而不能基于范围。

  • LND #9458 为某些对等节点引入了受限访问槽,可通过 --num-restricted-slots 标志配置,以管理服务器上的初始访问权限。对等节点根据其通道历史被分配访问级别:具有已确认通道的获得受保护访问权限,具有未确认通道的获得临时访问权限,其他所有节点获得受限访问权限。

  • BTCPay Server #6581 添加了手续费替换支持,使得在没有后代交易、所有输入都来自商店钱包且包含商店的找零地址的交易中可以进行手续费提升。用户现在可以在选择提升交易手续费时在 CPFP 和手续费替换之间选择。手续费提升需要 NBXplorer 2.5.22 或更高版本。

  • BDK #1839 通过引入新的 TxUpdate::evicted_ats 字段来支持检测和处理已取消(双重支付)的交易,该字段更新 TxGraph 中的 last_evicted 时间戳。如果交易的 last_evicted 时间戳超过其 last_seen 时间戳,则认为该交易已被驱逐。正统化算法(参见周报 #335)已更新,忽略被驱逐的交易,除非基于传递性规则存在正统后代。

  • BOLTs #1233 更新了节点行为,规定如果节点知道原像,就永远向上游回传 HTLC 失败的信息,确保 HTLC 可以正确结算。此前的建议是,如果已确认的承诺中缺少未完成的 HTLC,即使知道原像也要向上游回传失败信息。LND 0.18 版本之前的一个错误导致节点在遭受 DoS 攻击后重启时,尽管知道原像但仍向上游回传 HTLC 失败信息,导致 HTLC 价值损失(参见周报 #344)。