今天(2019年11月24日)标志着 比特币核心0.19.0, 中本聪(Satoshi Nakamoto)在11年前发布的第19个主要版本的比特币原始软件客户端,至今仍是网络上占主导地位的比特币实施。 (尽管由于在Bitcoin Core 0.19.0发布过程的后期发现了一个问题,所以发布供下载的版本实际上是0.19.0.1.。) 比特币核心 首席维护者Wladimir van der Laan,这个最新的主要版本是由一百多位贡献者在大约六个月的时间内开发的.
550个合并拉取请求的结果,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的某些钱包(包括到目前为止默认情况下的默认比特币核心钱包)通过将其“包装”到P2SH输出(地址以“ 3”开头)来实现。要从这样的地址花费比特币,用户必须显示一段代码-“兑换脚本”-以表明比特币确实被锁定在SegWit输出中。使用新的bech32地址,可以跳过此步骤,这意味着来自SegWit输出的支出将需要更少的数据通过比特币网络传输并包含在区块链中。这使得bech32输出的事务比P2SH输出的SegWit事务便宜。.
由于并非所有比特币钱包都支持发送到bech32地址,因此,Bitcoin Core 0.19.0用户仍可以通过GUI中的切换来选择生成PS2H接收地址。.
默认情况下,两个额外的仅阻止出站连接
比特币节点连接到其他几个比特币节点,一起形成对等网络。通过该网络,节点共享块,交易和一些其他交易数据.
但是对等网络可能会遭受诸如“分区攻击”之类的攻击。如果攻击者控制了足够多的比特币节点,它可能会通过拦截所有流量来“切断”比特币网络的某些部分(甚至是特定节点)。然后,例如,可以将网络的分区部分欺骗为有效地接受少数链而不是最长的链,这反过来又可能为双重攻击打开大门.
如果网络分区部分中的节点甚至只有一个与主网络上诚实节点的连接,则可以抵抗分区攻击。然后,它将接收并中继所有交易和区块,并拒绝少数链,转而支持多数链.
一种实现这一目标并使分区攻击更难以进行的方法是,使节点之间建立更多的连接。但是,更多的连接确实需要更多的内存和带宽。需要权衡.
Bitcoin Core 0.19.0将传出连接的默认值增加了两个,但是-巧妙地-这两个额外的连接仅用于中继块-它们不中继交易或其他交易数据。这最小程度地增加了带宽需求,同时仍然使分区攻击更难以成功实施.
不推荐使用Bloom过滤器
Bitcoin Core是一个完整的节点实现,这意味着它下载并验证了所有Bitcoin块。尽管这是最佳的安全性,但它并不十分适合移动电话等资源匮乏的计算设备。因此,移动钱包(以及某些台式机钱包)通常是“轻型客户端”:这些仅下载交易和与它们有关的(部分)区块.
实现此目的的一种方法是使用Bloom Blooms过滤器,该过滤器如今已被多个钱包使用。简而言之,布隆过滤器是轻客户端用来从网络上或多或少的随机完整节点请求相关数据的一种加密技巧。但是,不幸的是,这些年来,Bloom Filters非常不适合隐私,这一点变得很明显:它们实质上将所有地址公开给整个节点。最重要的是,支持Bloom Filter请求的确会消耗整个节点的CPU和磁盘空间,而整个节点本身并没有直接的好处.
特别是由于后一个原因,默认情况下,Bitcoin Core 0.19.0不再支持Bloom Bloom请求。用户仍然可以切换默认设置以支持Bloom Blooms(Bloom筛选器).
值得注意的是,即使没有人更改默认设置,整个比特币网络几乎肯定会在未来几年内继续支持Bloom Blooms过滤器,这仅仅是因为较旧的Bitcoin Core节点通常在新版本推出后已经使用了很多年。被释放.
对紧凑型客户端块过滤的更多支持
布隆过滤器的替代方案是一种称为“紧凑客户端块过滤”的较新解决方案(BIP 158)。紧凑的客户端块过滤从本质上改变了Bloom Filter的窍门。代替轻钱包创建发送到完整节点的过滤器,完整节点为每个块创建过滤器。然后,轻量客户端可以使用这些过滤器来确定与它们相关的交易是否可能在一个区块中发生。如果是这样,轻型钱包将提取整个区块并从中挑选任何相关交易数据.
比特币核心0.19.0继续朝着支持紧凑型客户端块过滤的方向发展。 Bitcoin Core节点已经可以在本地创建过滤器,但是Bitcoin Core 0.19.0用户现在还可以通过远程过程调用(RPC)使它们可供运行在该节点顶部的应用程序(例如钱包)使用。.
但是,这些过滤器尚无法通过对等网络使用。这意味着Bitcoin Core 0.19.0节点将不会自动将过滤器发送到其他Bitcoin用户的钱包。此功能可以添加到将来的Bitcoin Core版本中-或Bitcoin Core 0.19.0用户可以选择通过在其Bitcoin Core节点之上运行的自定义应用程序提供此功能。.
从GUI禁用支付协议支持
付款协议(BIP 70)是几年前设计的,目的是改善比特币的付款体验。除了向比特币网络广播的常规付款之外,用户和商人还将传达有关付款的其他详细信息,例如人类可读的目的地地址(商人的名称)和退款地址,以防万一出了问题。与购买.
尽管比特币核心在其GUI中集成了支付协议,但该标准从未得到广泛采用。相反,大多数钱包仍然使用更基本的URI方案(BIP 21)以接收付款:可点击的链接或可扫描的QR码格式,例如,传达付款地址和金额。 (今天唯一值得注意的例外是支付处理器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节点。比特币核心0.19.0还包括部分签名比特币交易(PSBT)协议的新功能,该功能对于多重签名和CoinJoin交易非常有用。同样,钱包描述符领域也有一些改进,这对从事比特币应用程序的程序员特别有用。比特币核心0.19.0节点还将接受并中继使用未来SegWit版本的交易,以确保即将进行的升级将顺利进行.
有关升级的更详细列表,另请参阅 Bitcoin Core 0.19.0.1发行说明.
感谢Sjors Provoost对本文的反馈.