/ home / newsletters /
Bitcoin Optech Newsletter #162
本周的 Newsletter 总结了关于粉尘限制的讨论,并包括我们的常规栏目,介绍了对服务和客户端软件的更改、如何为 Taproot 做准备、新的发布与候选发布,以及对流行比特币基础设施软件的值得注意的更改。
新闻
-
● 粉尘限制讨论: Bitcoin Core 及其他节点软件默认拒绝中继或挖掘任何输出值低于某个特定金额的交易,这一金额被称为粉尘限制(具体金额因输出类型而异)。此限制使得用户更难创建非经济性输出——即花费其 UTXO 需要支付的手续费高于 UTXO 本身价值的情况。
本周,Jeremy Rubin 在 Bitcoin-Dev 邮件列表中发表了一篇文章,提出了五点理由支持移除粉尘限制,并表示他认为该限制的目的是为了防止“垃圾交易”和“粉尘指纹攻击”。其他人对此作出了回复,提出了反对意见,并指出该限制的存在并非为了防止垃圾交易,而是为了防止用户创建 UTXO,而这些 UTXO 由于经济因素将不会被花费,从而永久浪费全节点运营者的资源。此外,部分讨论也描述了粉尘限制及非经济性输出对闪电网络的影响。
截至目前,讨论尚未达成共识。至少在短期内,我们预计粉尘限制仍将保留。
服务和客户端软件的更改
在此月度特辑中,我们重点介绍比特币钱包和服务的有趣更新。
-
● Spark Lightning Wallet 添加 BOLT12 支持: Spark v0.3.0rc 版本为 Spark 增加了对 BOLT12 offers 的部分支持。
-
● Blockstream 宣布去托管的闪电网络云服务 Greenlight: 在最近的博客文章中,Blockstream 介绍了其基于云的 C-Lightning 托管节点服务,该服务将节点的运营(由 Blockstream 负责)与节点所持资金的控制权(由用户掌控)分离。Sphinx 和 Lastbit 目前均使用 Greenlight 服务。
-
● BitGo 宣布采用原生 SegWit 作为找零地址: 鉴于 SegWit 采用率已突破 75% 里程碑,BitGo 的博客文章宣布默认的找零地址将从 P2SH 封装格式切换为原生 SegWit 格式。
-
● Blockstream Green 桌面端 0.1.10 版本发布: 0.1.10 版本 增加了默认采用 SegWit 的单签名钱包,并支持手动 coin selection 功能。
准备 Taproot #9:签名适配器
关于开发者和服务提供商如何为即将在区块高度 709,632 激活的 Taproot 做准备的系列文章。
想象有人提出,如果有人能猜出他最喜欢的一个非常大的数字,他将向某个特定的慈善机构捐赠 1,000 BTC。捐赠者可以通过以下简单的方法实现这一目标:创建一笔支付 1,000 BTC 的未签名交易,然后发布该交易的签名的加密版本,其中最喜欢的数字作为解密密钥。
理论上,任何人只要猜对了这个数字,就可以解密签名并广播交易,从而支付给慈善机构。然而,如果捐赠者使用 AES 等标准加密方案,在解密之前,第三方无法轻松验证该签名是否对该交易有效。因此,任何想投入精力猜测数字的人都必须信任捐赠者的诚意,而不是一个恶作剧者。
让我们把这个问题再扩展一点。第三方 Alice 和 Bob 想要就签名是否会被公布进行下注。他们或许可以要求签名者提供签名的哈希值,并将其用作 HTLC 的哈希值,但这仍然要求信任捐赠者的诚实行为。即使签名最终被公布,捐赠者仍可以通过提供错误的哈希值来破坏 Alice 和 Bob 的合约。
适配器签名的魔法
适配器签名(也常被称为 adaptor signatures 或 一次性可验证加密签名)可以解决这些问题——事实上,它还能解决当今比特币系统中许多实际遇到的问题。虽然适配器签名可以与比特币当前的 ECDSA 签名方案一起使用,但在 BIP340 定义的 Schnorr 签名(用于 Taproot)的实现中,适配器签名的使用会更加私密且无需额外成本。让我们看看,如果使用适配器签名,上述示例会发生怎样的变化。
与之前一样,捐赠者准备了一笔 1,000 BTC 的交易。他们的签名过程与通常方式几乎相同,唯一的不同点是,他们会以两部分生成随机数(nonce):一个真正的随机数(将永远保密),以及他们最喜欢的数字(起初也是保密的,但其他人发现它是安全的)。捐赠者使用这两个值生成一个完整的有效签名,将它们相加作为单个随机数。
BIP340 签名承诺使用随机数的两种形式:一个数值表示(称为 标量),通常只有签名者知道;以及一个椭圆曲线(EC)上的 点,用于公示以支持验证。
捐赠者从其有效签名的承诺部分中减去隐藏的标量。这使得签名变得不完整(因此无效),但允许捐赠者共享(无效的)签名承诺、(有效的)完整随机数的椭圆曲线点,以及(有效的)隐藏数字的椭圆曲线点。这三部分信息共同构成了一个适配器签名。
使用 BIP340 签名验证算法的一个小变种,任何人都可以验证该适配器签名是否能通过简单地将隐藏的标量加回当前无效的签名承诺来提供一个有效签名。即使不知道隐藏的数字是什么,这也是可以验证的。简而言之,现在用户可以无需信任地开始猜测隐藏标量的值,确保他们只要猜对,就能获得签名并发送交易。
像所有收到捐赠者适配器签名的人一样,Alice 和 Bob 现在也得到了隐藏数字的椭圆曲线点。同样,他们不知道实际的标量。但请记住,捐赠者只是通过从签名承诺中减去隐藏数字来使签名变得无效,同时仍然让签名承诺包含隐藏数字的椭圆曲线点。Alice 也可以通过类似的方式创建一个无效签名:她可以创建自己的随机数对,在生成(无效的)签名时使用其私有部分,但在签名中承诺使用她的公有随机数与捐赠者适配器签名中的椭圆曲线点的聚合。这将生成一个支付给 Bob 的适配器签名。如果 Bob 知道隐藏的标量,他可以将该适配器签名转换为有效签名,并发送交易,从而赢得赌注。
那么,Bob 如何得知中奖数字?他是否必须等待某个猜对的人发布新闻稿?不需要。请再次回忆,捐赠者发布的适配器签名是他们的实际签名减去标量。当隐藏数字被发现,有人发送 1,000 BTC 交易时,他们必须发布原始(有效的)签名承诺。Bob 可以取该(有效的)签名承诺,并从中减去原始适配器签名中的(无效)签名承诺,以得出标量。然后,他可以使用该标量将 Alice 的适配器签名转换为有效签名。
多签适配器
前一节展示了个体用户如何调整其签名方式以生成适配器签名。此外,多方多签也可以使用相同的技巧。这一点极为重要,因为许多使用适配器签名的场景都需要两方的协作。
例如,在 Alice 和 Bob 进行上述赌注时,他们可以首先将资金存入一个只能由他们两人联合签名的脚本地址。然后,Alice 可以以适配器签名的形式生成她的部分签名;如果 Bob 发现隐藏的数字,他可以将 Alice 的适配器转换为她的有效部分签名,并再提供他的部分签名,以生成完整的签名来花费这些资金。
这使得适配器签名继承了多签的所有优势:它们看起来与单个签名相同,占用的空间也相同,从而最小化手续费并最大化隐私性和可替代性。
在下周的 为 Taproot 做准备 专栏中,我们将探讨适配器签名的一种主要应用场景:点时间锁合约(PTLCs),这是一种对广泛用于闪电网络、币交换以及其他协议中的哈希时间锁合约(HTLCs)的升级改进。
发布与候选发布
流行比特币基础设施项目的新发布和候选发布版本。请考虑升级到新版本或协助测试候选发布版本。
-
● Bitcoin Core 22.0rc2 是该全节点实现及其相关钱包和其他软件的下一个主要版本的候选发布。该版本的主要更改包括支持 I2P 连接、移除对版本 2 Tor 连接的支持,以及增强对硬件钱包的支持。
-
● Bitcoin Core 0.21.2rc1 是 Bitcoin Core 的一个维护版本候选发布,包含多个错误修复和小改进。
值得注意的代码和文档更改
本周在 Bitcoin Core、C-Lightning、Eclair、LND、Rust-Lightning、libsecp256k1、Hardware Wallet Interface (HWI)、Rust Bitcoin、BTCPay Server、Bitcoin 改进提案(BIPs)和闪电网络规范(BOLTs)中的值得注意的更改。
-
● Bitcoin Core #22642 更新了 Bitcoin Core 22.0 版本的发布流程,将所有可重复构建二进制文件的 GPG 签名合并到一个文件中,以便进行批量验证(示例)。虽然确定性构建者的签名已经存在多年,但此更改使得这些签名更加易于访问,同时减少了对项目首席维护者签署发布二进制文件的依赖。
-
● Bitcoin Core #21800 为内存池包接受流程引入了祖先和后代限制。Bitcoin Core 限制其内存池中相关交易的数量,以防止 DoS 攻击并使矿工能够高效构建区块。默认情况下,这些限制确保内存池中任何交易及其祖先交易总数不超过 25 笔,或其总重量不超过 101KB。同样的规则适用于交易及其后代交易的组合。
这些祖先和后代限制在交易被考虑加入内存池时生效。如果添加交易会导致某个限制被超出,则交易将被拒绝。尽管包交易的语义尚未最终确定,#21800 实现了用于验证任意交易包(即同时考虑多个交易加入内存池)的祖先和后代限制检查。内存池包接受功能最初在 #20833 仅作为测试实现,最终将作为包中继的一部分在 P2P 网络中公开。
-
● Bitcoin Core #21500 更新了
listdescriptors
RPC,增加了private
参数,当该参数被设置时,该命令将返回每个描述符的私有形式。私有形式包含任何已知的私钥或扩展私钥(xprvs),使得该命令可用于备份钱包。 -
● Rust-Lightning #1009 添加了
max_dust_htlc_exposure_msat
通道配置选项,该选项限制“粉尘 HTLC”(即金额低于粉尘限制的 HTLC)的总余额。该更改是为提议的
option_dusty_htlcs_uncounted
功能位做准备,该功能位表示该节点不希望将“粉尘 HTLC”计入max_accepted_htlcs
。节点运营者可能希望采用此功能位,因为max_accepted_htlcs
主要用于限制链上交易的潜在大小,以防发生强制关闭,而“粉尘 HTLC”无法在链上被认领,因此不会影响最终交易的大小。新增的
max_dust_htlc_exposure_msat
通道配置选项确保即使启用了option_dusty_htlcs_uncounted
,用户仍可以限制“粉尘 HTLC”的总余额,因为在强制关闭的情况下,这些 HTLC 的余额将作为矿工费用损失。