本周的周报总结了一种更高效的混淆电路方案,并链接了 LN-Symmetry 的更新。此外还包括来自 Bitcoin Stack Exchange 的精选问答,新软件发布和候选版本的公告,以及流行比特币基础设施软件的重大变更摘要。

新闻

  • Argo:一种更高效的链下计算混淆电路方案: Robin Linus 在 Delving Bitcoin 上发布了一篇由 Liam Eagen 和 Ying Tong Lai 撰写的新论文,描述了一种能够使混淆锁(garbled locks)效率提高 1000 倍的技术。这项新技术使用一种消息认证码(MAC),将混淆电路的线路编码为椭圆曲线(EC)点。该 MAC 设计为同态的,使得混淆电路中的许多操作可以直接表示为 EC 点上的操作。关键的改进在于 Argo 适用于_算术_电路,而不是二进制电路。对于二进制电路,需要数百万个二进制门来表示一个曲线点乘法,而对于这种算术电路,只需要一个算术门。目前的论文是将该技术应用于比特币上类似 BitVM 结构的几部分工作中的第一部分。

  • LN-Symmetry 更新:Gregory Sanders 在 Delving Bitcoin 上发布了关于他之前在 LN-Symmetry 上的工作的更新(见周报 #284)。

    Sanders 将他之前的概念验证工作基于BOLT 规范CLN 实现重新变基(rebase)到了最新更新。更新后的实现现在可以在 signet 上的 Bitcoin Inquisition 29.x 上运行,支持 TRUC临时锚点(ephemeral dust/P2A)和 1p1c 包中继。它支持协作关闭通道,修复了一个导致节点无法正确重启的崩溃问题,并扩展了测试覆盖率。Sanders 邀请其他开发者在 signet 上使用 Bitcoin Inquisition 测试他的新概念验证。

    Sanders 还利用大型语言模型(LLM)的能力将他的工作从 APO 迁移到了 OP_TEMPLATEHASH+OP_CSFS+IK(见周报 #365),修改了 BOLT 草案并创建了一个基于 CLN 的实现。然而,Sanders 补充说,由于 OP_TEMPLATEHASH 尚未在 Bitcoin Inquisition 上线,此更新目前只能在 regtest 中测试。

Bitcoin Stack Exchange 精选问答

Bitcoin Stack Exchange 是 Optech 贡献者寻找问题答案的首选之地,或者当我们有空闲时间时,通过它帮助好奇或困惑的用户。在这个月度栏目中,我们精选了自上次更新以来得票最高的一些问题和答案。

版本发布和候选版本

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

  • Libsecp256k1 0.7.1 是该比特币相关密码学操作库的维护版本,其中包括一项安全性改进,增加了库尝试从堆栈中清除秘密的情况数量。它还引入了一个新的单元测试框架和一些构建系统更改。

重大代码和文档变更

以下是来自 Bitcoin CoreCore LightningEclairLDKLNDlibsecp256k1硬件钱包接口 (HWI)Rust BitcoinBTCPay ServerBDK比特币改进提案 (BIPs)Lightning BOLTsLightning BLIPsBitcoin InquisitionBINANAs 的近期重大变更。

  • Bitcoin Core #33822libbitcoinkernel API 接口添加了区块头支持(见周报 #380)。新的 btck_BlockHeader 类型及其相关方法支持创建、复制和销毁区块头,以及获取区块头字段,如哈希、前一个哈希、时间戳、难度目标、版本和随机数。新的 btck_chainstate_manager_process_block_header() 方法在不需要完整区块的情况下验证和处理区块头,btck_chainstate_manager_get_best_entry() 返回具有最大累积工作量证明的区块树条目。

  • Bitcoin Core #34269 禁止在使用 createwalletrestorewallet RPC 以及钱包工具的 createcreatefromdump 命令时创建或恢复未命名钱包(见周报 #45#130)。虽然 GUI 已经强制执行了此限制,但 RPC 和底层函数此前并未执行。钱包迁移仍然可以恢复未命名钱包。关于未命名钱包的相关 bug,请参见周报 #387

  • Core Lightning #8850 移除了几个已弃用的功能:option_anchors_zero_fee_htlc_tx,重命名为 option_anchors 以反映锚点输出的变更;decodepay RPC(由 decode 取代);close 命令响应中的 txtxid 字段(由 txstxids 取代);以及 estimatefeesv1,即 bcli 插件用于返回费用估算的原始响应格式。

  • LDK #4349 在解析 BOLT12 offers 时添加了对 bech32 填充的验证,如 BIP173 所述。以前,LDK 会接受填充无效的 offers,而其他实现(如 Lightning-KMP 和 Eclair)会正确拒绝它们。Bolt12ParseError 枚举中添加了一个新的 InvalidPadding 错误变体。

  • Rust Bitcoin #5470 向解码器添加了验证,以拒绝零输出的交易,因为有效的比特币交易必须至少有一个输出。

  • Rust Bitcoin #5443 向解码器添加了验证,以拒绝输出值总和超过 MAX_MONEY(2100 万比特币)的交易。此检查与 CVE-2010-5139 相关,这是一个历史漏洞,攻击者可以创建具有极大输出值的交易。

  • BDK #2037 添加了 median_time_past() 方法,用于计算 CheckPoint 结构的过去中位时间 (MTP)。MTP 在 BIP113 中定义,是前 11 个区块的时间戳中位数,用于验证时间锁。关于启用此功能的先前工作,请参见周报 #372

  • BIPs #2076 添加了 BIP434,定义了一种 P2P 特性消息,允许对等节点宣布和协商对新特性的支持。这个想法概括了 BIP339 的机制(见周报 #87),但 BIP434 不再需要为每个特性提供新的消息类型,而是提供一种单一的、可重用的消息,用于宣布和协商多个 P2P 升级。这有利于各种提议的 P2P 用例,包括模板共享。有关邮件列表讨论,请参见周报 #386

  • BIPs #1500 添加了 BIP346,定义了用于 tapscriptOP_TXHASH 操作码,该操作码将指定部分的支出交易的哈希摘要推送到堆栈上。这可用于创建契约并减少多方协议中的交互性。该操作码概括了 OP_CHECKTEMPLATEVERIFY,当与 OP_CHECKSIGFROMSTACK 结合使用时,可以模拟 SIGHASH_ANYPREVOUT。有关先前的讨论,请参见周报 #185#272