作者:John Newbery
时间:2020年1月19日
公众号:BTC Media
就在1月14日 Bitcoin Core 0.21.0 版本的正式发布,这是中本聪于大约12年前推出的比特币原始软件客户端的第21个主要版本。
在比特币核心的主要维护者弗拉基米尔·范德兰(Wladimir van der Laan)监督下,这个最新的主要版本由一百多位贡献者在大约六个月的时间内开发。其中包含超过600次代码合并更新,Bitcoin Core 0.21.0是近年来最大的Bitcoin Core软件版本之一,引入了各种新功能以及隐私和性能方面的改进,同时朝着Schnorr / Taproot协议升级迈出了一大步。
以下是一些更值得注意的变化。
当比特币被发送到一个比特币地址时,实际上发生的是,这部分比特币被 “锁定”在一个未花费的交易输出(UTXO)中,而只有当隐藏在UTXO中的条件满足时,才能在之后的交易中被“解锁”(花费)。其中一种典型的条件是包含与特定公钥对应的有效签名。但条件也可以包括像秘密代码、时间锁的失效或签名的组合(多签)。
到目前为止, Bitcoin Core的设计都旨在围绕其对应的私钥来管理钱包中的UTXO——尽管私钥只是花费比特币的几个潜在条件之一。此次Bitcoin Core 0.21.0引入了“描述符钱包”。描述符钱包允许用户根据它们所需的条件类型对UTXO进行分类。(例如:其中一个钱包用于只需有效单签的UTXO,而另一个钱包则用于多签的UTXO)。
描述符钱包对于在Bitcoin Core代码之上设计软件的应用开发者来说特别有用。一个特定的应用可以很容易地被设计成只利用特定类型的UTXO,如多签UTXO,而忽略所有的非多签UTXO。
普通用户可能也会注意到使用描述符钱包后的不同。也许最值得注意的是, 当一个新的比特币核心节点启动时,不会创建默认钱包。只有当用户明确选择创建新钱包时,才会创建新钱包,并允许他们只创建特定类型的钱包。此外,描述符钱包也更好地支持监视 (Watch Only) 钱包:这类节点即使没有使用它们所需的私钥,也会跟踪某些特定的UTXO。
升级到Bitcoin Core 0.21.0的Bitcoin Core用户目前仍然可以使用他们的传统钱包。(传统钱包最终将被弃用,这意味着用户需要将他们的传统钱包迁移到描述符钱包,不过这并不是目前必要的,除非将来的Bitcoin Core版本发布。)
“轻客户端”(Light clients)是指无需下载和验证整个比特币区块链的比特币钱包及应用,它们只需下载和验证与之相关的部分区块和交易数据。这并不是最安全的方式,但资源消耗要少得多。
其中,一种流行的方式是使用布隆过滤器 (Bloom Filters) 。简而言之, 布隆过滤器是一种用于从网络上或多或少的随机对等节点请求相关数据的加密技术。可是,多年以来,人们已经清楚地意识到布隆过滤器对隐私相当不友好:它们本质上将用户的所有地址暴露给(或多或少随机的)对等节点,这也就可以用于侵犯隐私的监听操作。
与布隆过滤器解决方案相比,被称为“紧凑型客户端区块过滤”(BIP 157/158)的替代方案更先进且更能保护隐私。它从本质上颠覆了布隆过滤器的技术。与轻钱包创建过滤器发送到全节点不同,全节点为每个区块创建过滤器,并根据请求将这些过滤器发送给轻客户端。然后,轻客户端使用这些过滤器来弄清与他们相关的交易是否可能已经包含在某一个区块中。如果是的话,轻钱包将获取整个区块数据,并从中提取出任意相关的交易数据。
现有的Bitcoin Core版本已经可以在本地创建过滤器,并通过远程进程调用(RPC)为运行在节点上的应用程序 (如钱包) 提供过滤器。Bitcoin Core 0.21.0 还包括了一个选项,可以根据请求在Bitcoin的点对点网络上提供这些过滤器。也就是说, 现在可以操作使用布隆过滤器的独立轻客户端。
除了布隆过滤器,监听者还可以通过网络分析破解比特币用户的隐私。如果他们能找出某笔交易来自哪个节点,那么该节点的比特币地址就可以绑定其IP地址,而IP地址又可以与现实世界的身份联系起来。
直到现在,当使用Bitcoin Core的节点向比特币网络广播一笔交易时,它们都会尝试每隔15分钟重新广播这笔交易,直到这笔交易被打包到一个区块中。这就意味着,如果这些Bitcoin Core节点连接到了一个监听对等体,那么对于监听者来说,每隔15分钟试图重新广播某笔交易的Bitcoin Core 节点也就很明显是该交易的发起节点。
Bitcoin Core 0.21.0 极大地降低了客户端尝试重新广播交易的频率:调整为每12到36小时才重新广播一次。重新广播频率的降低,使得交易从最初的广播开始就被确认的概率大大增加,所以节点重新广播的可能性也会大大降低。
在未来的Bitcoin Core版本中,这个隐私泄露隐患将会被完全修复。届时,Bitcoin Core节点只会根据自己的内存池和费用计算确认的交易而重新广播。此外,它也会重新广播其他交易,而不仅仅是自己的交易。
由于最近对隐私保护Tor协议的升级,新的V3版本的Tor地址比之前的V2版本地址要长。目前,V2地址仍在使用,但将在大约一年后弃用。
V2地址的弃用会给想要通过隐私网络使用比特币的Bitcoin Core用户带来问题。原本Bitcoin Core节点通过相互分享已知使用Tor的比特币节点的Tor地址来寻找对等节点。他们通过共享其他节点的常规IP地址的相同信息来共享这个IP地址。虽然Tor V2地址可以用常规IP地址格式 (IPV6) “隐藏”,但Tor V3地址太长难以隐藏;换言之,目前的消息太有限了,还无法与Tor的升级兼容。
因此, Bitcoin Core 0.21.0引入了一种新的格式来与对等节点共享IP/Tor地址。这些消息可以大到足以共享Tor V3地址。
和Signet/Regtest部署
Schnorr/Taproot将成为比特币自2017年8月隔离见证(SegWit)以来的首次协议升级。Schnorr签名算法已经开发了两年多,被认为是对比特币当前ECDSA签名算法的全面改进。结合Taproot(在加密哈希树中隐藏各种花费比特币的条件),此次升级有望以可扩展和保护隐私的方式提供更多的智能合约灵活性。
Schnorr/Taproot代码已经包含在Bitcoin Core 0.21.0 代码内。除非出现意外的开发需要,这部分代码不会再有任何变化,也就是说,应用开发者已经可以开始围绕该更新来设计软件了。此外,Schnorr/Taproot现在已经可以在Signet(一个更新、更可靠的变种测试网,开发者可以用它来测试新的比特币软件)上使用,而且也有可能在Regtests(额外的本地测试网)上使用。
不过, Schnorr/Taproot 目前还不能在比特币主网上使用。为此,升级首先需要激活,而这需要激活逻辑,但是这次的Bitcoin Core版本中并没有包含激活逻辑。激活逻辑预计将包含在未来几个月内的一个次要Bitcoin Core版本中。
除了上述变化之外,Bitcoin Core 0.21.0还包括各种bug修复和性能提升,对于普通用户来说,这些变化不会那么明显。例如,Bitcoin Core钱包将从使用Berkeley DB切换为SQLite数据库,后者更适合用作应用数据文件,并且在兼容性、支持和测试方面提供了多项保障。值得关注的是, Bitcoin Core 0.21.0还包含了交易请求的彻底修改:比特币节点用来了解新交易的新消息协议已经经过了更好的测试,更好的指定,也更容易维护和审查。
要查阅更全面的升级详细清单,请参阅Bitcoin Core 0.21.0的发布说明:
https://lists.linuxfoundation.org/pipermail/bitcoin-core-dev/2021-January/000097.html
或者参阅Bitcoin Core开发者Andrew Chow的这篇博文来了解描述符钱包(以及传统钱包)和SQLite (以及Berkeley DB) :
https://achow101.com/2020/10/0.21-wallets
感谢John Newbery的信息和反馈。