昨天,Bitcoin Core 0.19.0正式发布,这是近11年前中本聪发布的比特币软件客户端的第19个版本,至今仍是比特币网络上的主流应用。在Bitcoin Core首席维护者Wladimir van der Laan的监督下,这个最新的重要版本是由一百多位贡献者在大约六个月的时间里开发出来的。

(在Bitcoin Core 0.19.0发布过程的后期出现了一个问题,这个正式版严格意义上来说是0.19.0.1。)

合并550个pull request的结果,Bitcoin Core 0.19.0包括一系列的性能改进和bug修复,以及其他变化。

币世界-Bitcoin Core 0.19.0正式版发布,都有哪些新变化?

以下是其中一些变化的概述。

GUI默认Bech32地址

“bech32”地址格式(BIP 173)已经在2018年初发布的Bitcoin Core 0.16.0中引入,但现在首次被设置为Bitcoin Core钱包GUI(用户界面)的默认选项。

Bech32地址是以“bc1”开头的地址(而不是以1或3开头的地址)。这类地址比较长,但是使用的字符比当前地址格式少,因为小写字母和大写字母之间不再有区别。(这减少了人为错误的可能性,例如,读出一个地址时。)Bech32地址还能用来减少因打字错误引起的问题。

此外,bech32的应用在SegWit(隔离见证)的环境中提供了优势。到目前为止,一些提供SegWit功能的钱包(包括默认的Bitcoin Core钱包)是通过将其“包装成”P2SH输出(以3开头的地址)来实现的。要从这样一个地址花费比特币,用户必须在“赎回脚本”中公布一段代码,以表明比特币确实被锁定在SegWit输出中。使用新的bech32地址,可以跳过这一步,这意味着从SegWit输出的花费将只需要更少的数据通过比特币网络传输并包含在区块链中。这使得bech32输出的交易甚至比P2SH输出的SegWit交易更便宜。

并不是所有的比特币钱包都支持发送到bech32地址,因此,Bitcoin Core 0.19.0用户仍然可以选择生成一个PS2H接收地址,在GUI进行切换。

降低带宽需求,预防分区攻击

比特币节点之间相互连接,共同形成点对点网络。在这个网络上,节点共享区块、交易和一些额外的交易数据。

但是这种点对点网络可能会受到攻击,例如分区攻击。如果攻击者控制了足够多的比特币节点,它可能会通过拦截流量的形式,从而切断比特币网络的某些部分(甚至特定节点)。网络中被分割出来的部分可能会被欺骗,接受少数链而不是最长链为有效的,这可能反过来打开了双花攻击的大门。

如果网络分区部分中的节点仅与主网络上的城市节点有一个连接,就可以对分区攻击进行反击。然后,它将接收和转发所有的交易和区块,并拒绝少数链而支持多数链。

实现这一点的一种方法是让节点之间建立更多的连接,从而使分区攻击更难实现。然而,更多的连接需要更多的内存和带宽;这是一种权衡。

Bitcoin Core 0.19.0默认增加了两个传出连接,但其聪明之处在于,这两个额外的连接仅用于传递区块,它们不会传递交易或额外的交易数据。这将降低额外的带宽需求,同时仍然使分区攻击难以成功完成。

弃用Bloom Filters

Bitcoin Core是全节点软件,这意味着需要下载和验证所有的比特币区块。虽然这是最安全的,但它不太适合资源不足的计算设备,如手机。因此,移动钱包(以及一些桌面钱包)通常用的是“轻客户端”:只下载与它们相关的交易和(部分)区块。

一种方法是使用Bloom Filters,现在有一些钱包都在用Bloom Filters。简而言之,Bloom Filters是轻客户端使用的一种加密技术,用于从网络上随机的全节点请求相关数据。然而,不幸的是,随着时间的推移,Bloom Filters变得对隐私非常不友好:它们实际上向全节点暴露了所有地址。最重要的是,支持Bloom Filters请求的代价是占用全节点的CPU和磁盘空间,而对全节点本身没有直接的好处。

特别是后一个原因,默认情况下,Bitcoin Core 0.19.0不再支持Bloom Filter请求。如果用户愿意,他们仍然可以自行选择支持Bloom Filter。

同样值得注意的是,比特币网络肯定会在未来几年继续支持Bloom Filter,因为旧的Bitcoin Core节点可能在新版发布的很多年后依然在使用中。

支持新的过滤器

Bloom Filter的替代方案是称为“紧凑客户端区块过滤”的新解决方案(BIP 158:compact client-side block filtering)。其完全颠覆了Bloom Filter的模式。其并非由轻钱包创建发送到全节点,而是由全节点为每个区块创建过滤器。然后,轻客户端可以使用这些过滤器来确定与它们相关的交易是否发生在一个区块中。如果是这样,轻钱包将获取整个区块并从中挑选出任何相关的交易数据。

Bitcoin Core节点已经可以在本地创建过滤器。Bitcoin Core 0.19.0用户还可以通过远程过程调用(RPC)访问在该节点上运行的应用(如钱包)。

然而,这些过滤器还不能在点对点网络上使用。这意味着一个Bitcoin Core 0.19.0节点不会自动向其他比特币用户的钱包发送过滤器。这项功能可能会被添加到未来的Bitcoin Core版本中——或者,用户可以选择通过在他们的Bitcoin Core节点上运行的自定义应用来提供这项功能。

GUI禁用支付协议(BIP 70)支持

支付协议(BIP 70)是几年前为改善比特币的支付体验而设计的。除了向比特币网络广播的常规支付之外,用户和商户还会就支付的其他细节进行沟通,比如一个可读的目标地址(商户的名字)和一个退款地址,以防在购买过程中出现问题。

虽然Bitcoin Core在其GUI中整合了支付协议,但该标准从未被广泛采用。相反,大多数钱包仍然使用更基本的URI模式(BIP 21)来接收支付:例如,可点击的链接或可扫描的二维码格式,用来传递支付地址和金额。(目前唯一值得注意的例外是支付处理器BitPay,它不支持URI模式,但使用了改进版的BIP 70。)

也许比使用率较低更重要的是,BIP 70支付协议多年来一直遭受大量安全和隐私漏洞。因此,一些钱包已经主动拒绝执行该协议。Bitcoin Core也曾计划不支持BIP 70,因为人们认为维护它是不值得的,但BitPay对它的采用让这一过程陷入停滞。

在Bitcoin Core 0.19.0中,BIP 70已经被默认从GUI中移除。Bitcoin Core 0.19.0的用户将不得不通过特殊配置编译他们的节点,确保仍然可以使用该功能。

其他……

除了上述的变化,Bitcoin Core 0.19.0还带来了一些较小的改进和变化。

例如,现在可以从设置过程中立即启动一个“修剪过的”节点,这让磁盘空间有限的用户可以轻松地启动一个新的比特币节点。Bitcoin Core 0.19.0还包含了部分签名比特币交易(PSBT)协议的新特性,该协议对多重签名和CoinJoin交易非常有用。同样,在钱包描述符领域也有一些改进,这对处理比特币应用的程序员特别有用。Bitcoin Core 0.19.0节点也将接受和中继交易,使用未来的SegWit版本,以确保即将到来的升级将顺利进行。