加文·安德烈森:比特币扩展开发路线图
我对优化新区块公告的粗略建议,引起了关于了许多扩展性问题的讨论。人们存在一些误解,以为通过优化新区块消息,就能解决比特币在成长过程中将要面临的所有问题。本博文打算概略地叙述,未来几年将要进行的,比特币扩展技术工作背后的,一个可能的开发路线图。
关于如何扩展比特币,还有许多其它理念,一旦这些理念被证明实际可行,我乐于选择所有的解决方案,因为没有人能够智慧到每次只选一个解决方案,并且是正确的方案。所以如果比特币的开发,朝着与这份开发路线图相反的方向进行,我将不会感到吃惊或者失望。
初次区块下载
用户初次运行比特币核心(Bitcoin Core)钱包时,需要花费大量时间,下载和索引整个的比特币交易记录,这让人很不胜其烦。现在需要下载的交易数据超过20GB,而且交易数据还在不断增加。
Jeff Garzik创建了一个BitTorrent下载,这将加速初次交易数据的下载。因为区块数据是自我验证的,所以你不必要担心下载的安全问题。最坏的情况也只是,你浪费时间和带宽,下载了无效的文件。然而,在某些计算机上,重新索引超过20GB的数据,仍然需要数小时。
Pieter Wuille一直致力于“区块头优先”方法(headers first approach)-只下载最长区块链中每个区块80字节(byte)的区块头,大约只有25MB数据。用于确认你是否有最好的链,区块头数据就足够了,而且一旦你的节点有区块头,它就可以以任意顺序向多个节点请求完整区块,这类似于BitTorrent同时从多个节点下载大文件。
Pieter也一直致力于“libsecp256k1”–一个高度优化的库,用于在椭圆曲线上执行数学计算,保护比特币交易的安全。我们正在对它进行评估,当我们确信它没有毛病,和完全与现有的基于OpenSSL的代码兼容时,我们将把它纳入到比特币系统中。
Rdponticelli请求将比特币核心与一个“修剪过的”区块数据库一起运行(to run Bitcoin Core to run with a “pruned” block database)。 一旦你已经下载和索引整个区块链,存储所有旧交易数据的唯一原因,是让它服务于正在进行初始下载的崭新节点。
确认新的交易不需要旧区块,这可能让你很吃惊。在几个版本以前,Pieter Wuille重新架构了比特币核心(Bitcoin Core),所以确认交易所需的所有数据,都保存在一个“未花费输出”(UTXO,unspent transaction output )数据库中。确认交易需要的、必须被存储的历史数据的数量,取决于一个区块链重组的可接受深度。在主要的比特币网络上,曾经发生过的最长的重组,是24个区块,发生在2013年3月11日的区块链分叉期间。
下一步将是,使得修剪区块成为默认,但是在这样做之前,比特币网络协议需要扩张,所以节点可以告诉彼此他们正在存储的完全区块是哪个,所以一个有一段时间没有与网络相连接的节点,需要发现哪一个节点有它需要的区块数据。
如此一来,初次区块链下载能够更加优化,直接向节点请求未花费输出集合(UTXO set),而不是通过向它们请求区块链的整个历史来重构它。这样做的风险在于:它们可能在哪些花费、哪些没有花费的问题上进行欺骗,使你接受无效的交易,或当你正在挖矿时,创建无效的区块。针对这个问题的最好解决方案,是在区块中嵌入一个“未花费输出保证”(UTXO commitment,a hash of all of the data in the UTXO set 未花费输出集合中所有数据的哈希值),增加一个新的共识规则——任何一个这样的保证有效后,区块才能有效。
但是取得共识需要时间。Mark Friedenbach关于如何将这样一个保证嵌入区块的提议,还没有达成共识,也还没有讨论未花费输出(UTXO)集合应该如何被表现(represented)和进行哈希计算(hashed)。
增加交易容量
我预期,初次区块下载的绝大部分问题,将被下一个,或接下来的3个版本的比特币核心钱包解决。下一个需要解决的扩展问题,是被硬编码的区块最大为1MB的限制,这意味着比特币网络的交易处理能力仅大约每秒7笔。
对核心共识代码的任何改变都意味着风险,所以,为什么冒险呢?为什么不保持比特币核心钱包目前的状态,每秒钟处理7笔交易呢?“如果它没坏,就不要修理它。”
追溯到2010年,比特币第一次被Slashdot提到和价格上涨以后,中本聪针对各种拒绝服务攻击,推出了几个快速解决方案。一个解决方案就是降低区块的大小,从原来的没有大小上限,变为区块大小上限为1MB(在未改变以前,区块大小的实际上限是32MB–p2p协议中一个消息的大小上限)。
“诉诸权威”是一个逻辑谬误,所以“因为中本聪这样说”不是一个有效的原因。然而,忠于最初的比特币愿景是非常重要的。正是那个愿景,激发人们将他们的时间、精力和财富投资到新的、有风险的技术中。
我们认为比特币区块大小的最大上限必须增加,就像比特币的2100万的上限数量永远不可更改一样:因为人们被告知,比特币系统可以进行扩展,能够处理许多交易,就像他们被告知只有2100万个比特币一样。
我们现在还没有处于一个关键阶段。在过去的一年,比特币每天的交易数量一直比较平稳(除了年初的价格泡沫巅峰时期)。“链下”(off-blockchain)交易可能在增加,但是我不认为这是正在发生的事情,因为现在美元对比特币的交易数量变化模式,与去年交易量变化模式相同。价格和交易数量在一段时期处于稳定,之后伴随的是驱动价格和交易量迅速增长的泡沫。再然后泡沫破裂,价格和交易量下跌到一个新的水平,新水平比巅峰值低,但是比以前的稳定值要高。
我的最好猜测是,在下一轮价格泡沫时期,我们将遭遇区块大小上限是1MB的限制,这是我一直花费时间致力于为比特币核心钱包实施浮动交易费用的原因之一。大多数用户将选择支付更多的交易费用,而不会为了确认交易等待数小时或者数天(或者永远确认不了),因为比特币网络这时候真正遭遇到了区块大小限制造成的不便。
更大区块开发路线图
Matt Corallo已经开始实施支持更大区块的第一步–更快的转播(relaying)–使得一个更大区块比一个更小的区块,需要更长的时间在全网传播,所带来的风险最小化。细节请看我在八月份写的博文。
现在我们已经达成了共识,为了使得比特币网络处理交易的速度快于目前的7笔/每秒,需要作出一些改变。但是如何实现更快的交易处理速度,我们出现了分歧–有许多可能的解决方案。下面是我目前最喜欢的解决方案:
实施一次硬分叉,增加区块大小的上限,并实施一个随着时间推移,增加区块大小上限的规则,非常类似于随着时间推移减少区块奖励的规则(原文:Roll out a hard fork that increases the maximum block size, and implements a rule to increase that size over time, very similar to the rule that decreases the block reward over time)。
选择初始的区块大小上限,从而一个“比特币玩家”能够很容易地以完全节点(full node) 的身份,参加到网络中。我这里指的“比特币玩家”,是拥有运行较快的计算机和较快网速,运行着最新版比特币核心钱包,并愿意将自己一半的CPU算力和带宽贡献给比特币网络的那些人。
根据带宽的增长速率,选择区块大小上限的增长速度:在过去的二十年中,带宽平均每年增长50%。需要注意的是,这一增长速度低于CPU算力每年大约60%的增长速度。在可以预见的未来,带宽将成为比特币交易容量的限制因素。
我相信这是“可能起作用的最简单的方法”。这个方法容易实施,而且非常接近于现在网络的规则。增加区块大小上限,使得任何拥有配置好的计算机和带宽的普通人能够运行完全节点,这能够消除成为完全节点的门槛,而且过高的门槛可能导致比特币网络的中心化。
一旦比特币网络允许大于1MB的区块,更进一步的网络优化将是必要的。这将是可逆绽放查找表(Invertible Bloom Lookup Tables)或者其它数据同步算法大放异彩的地方。
未来看起来很光明
所以未来一些比特币爱好者或者专业的系统管理员,将下载和运行比特币核心钱包,按照下面的步骤快速建立和运行:
1、连接到节点,就像现在一样
2、从它的节点上下载最好链的区块头(数十MB,将需要几分钟)
3、下载足够多的完整区块,来解决区块链重组,并使区块链重组合理化(几百个区块应该足够了,可能需要一个小时)
4、向节点询问未花费输出(UTXO)集合,并核对区块链所做的保证
从此以后,它就是一个完全确认的节点。如果硬盘空间不够了,它可以从硬盘中删除老的区块。
这需要多久的时间?
现在有一个非常清晰的开发路线来扩展比特币网络,使它可以每秒钟处理数千次交易(Visa级别的处理能力)。实现这一目标并不非常容易,因为写可靠、安全的代码需要时间,还因为达成共识很困难。幸运的是,技术一直在进步,互联网带宽的尼尔森定律(译者注:Nielsen’s Law of Internet Bandwidth ,指带宽平均每年增加50%)和摩尔定律( Moore’s Law) 使得比特币网络的扩展更加容易。
如果我们开始思考如何使得比特币网络的扩展速度快于带宽增长速度,这个开发路线图将变得不现实。一些复杂的开发计划避免向每一个节点广播每一笔交易,这有可能实现和足够安全。
但是即使每年50%的增长速度就已经非常不错了。根据我的粗略计算,现在我的高于平均水平的网速和高于平均性能的计算机,可以很容易地支持每秒5000笔交易。
那么每天就可以处理4亿笔交易。非常棒!每个美国人每天可以进行一次比特币交易,而且比特币处理交易的能力还可以继续增长。
经过12年的带宽增长以后,我的网速可以每天处理560亿笔比特币交易–足够全世界的人每天进行5~6笔交易了。很难想象这个交易能力满足不了人们的需要,根据波士顿美联储的数据,美国消费者平均每天的交易支付次数刚超过2笔。
所以,即使在未来二十年内,全世界的每个人都完全从使用法币(cash)转向使用比特币,向每一个完整的确认节点广播每一笔交易,将不成问题。
微信掃描關注公眾號,及時掌握新動向
2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表比特範的觀點或立場
2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表比特範的觀點或立場