Mike Hearn:紧急迫降
众所周知,比特币区块越来越大,有一种意见认为,应该任由它发展,达到区块的上限。对这种说法的一个普遍的辩护意见是,这样的后果也不会怎么样嘛:不过是交易费的自由竞争。每一个人都爱自由市场对不对?那么谁能反对用交易费来自由竞争呢?
事实上,很多人会反对这个说法,理由嘛,就像没有人会欢迎出现一个IPV4地址的竞争市场一样。IP地址正在变得越来越稀少,复杂的网址转换技术和凭公司力量在市场上竞争的方式,并没有成为胜出的解决之道:那些都是权宜之计。与此同时我们都开始向真正的解决方案迁移:IPV6。
但没关系——因为交易费自由竞争这个说法内在的逻辑是错的。我不相信当比特币超负荷的时候,交易费会升高,并且系统稳定运行。与此相反,我相信比特币会崩溃。
在本文中,我将推演两个场景:
第一个是,如果明年(即我预测区块会达到上限的时间)我们运行着与今天类似的软件的话,会发生什么。
第二个是,如果我们运行一些假设的比特币核心更新版本和钱包应用,又会发生什么。
在这两个场景中,我们都假设区块大小上限是1mb。
比特币核心代码与今天相同
当比特币核心超出承载能力时,会发生什么?
进入比特币系统的交易流在某种程度上是稳定的,这个速度在星期日会低一些。这些交易信息先进入“内存池”,内存池是交易信息出现在区块链上之前,它们被存储的地方。就像内存池这个名字显示的,这些信息只保存在内存中。如果一个节点重启,这个节点内存中的信息就会被清空,当然其他未重启的节点中依然保留着这些交易信息。
当区块大小接近100%的时候,发生的第一件事就是确认时间越来越长。根据Dave Hudson的蒙特卡洛模拟结果,当区块大小达到上限的80%时,有一半的交易的确认时间会达到20分钟左右。当区块大小达到上限,即1mb时,有一半的交易要等6个小时以上才能得到确认。
但事实上,将会发生的事不是这样简单。因为当区块大小达到100%时,真实的交易量会大于100%。也就是说永久性的未完成确认的交易信息堆积就会出现。
比特币核心里面并没有处理永久性并不断增长的堆积信息的代码。交易信息只能在内存里面排队,直到节点崩溃。在这个意义上可能会发生下面三种情况之一:
因为陷入交易信息的汪洋大海,节点可能会变得异常的慢 当节点试图分配内存空间的时候,节点可能会崩溃掉 节点可能会被操作系统内核终止
所有这三种情况都是坏消息。比特币核心没有自动重启的功能。如果节点死掉或者变得超级慢,只能靠节点的管理者自己注意到发生的情况,手动重启节点,每次,每次都是这样。
还有,几乎所有的钱包都不知道积压的信息有多大。无论积压交易信息占用的内存有多大,他都会任由用户继续向节点发送交易信息。因此随着积压交易信息越来越大,节点会占光内存然后无法运行。直到被手动重启。
你可能觉得,节点重启,问题就解决了,因为节点会忘记之前所有的积压交易,重新开始运行。但是这有两个问题。第一,这会使双花的可能性大大上升。人们总是想要快速购买,在双花概率上升的情况下,这会变得不牢靠。第二,钱包仍然不知道什么地方出了问题。钱包只是注意到,他们发送的交易信息迟迟没有得到确认,而根据程序,钱包会反复广播没有得到确认的交易信息。因此节点会迅速的积压大量未确认信息,积压有增无减,很快会再一次超过节点的运行能力。
我不知道这种情况什么时候会真的出现,但是只要比特币内核会无限制的接受任何有效的交易信息,那么节点崩溃就是迟早会发生的。
然后会怎样?
额,用户们会注意到交易没有被确认。在此之前他们应该已经抱怨过很久确认慢,但是现在他们要真的骂娘了。有些用户会经历真正的“不便”,甚至会损失钱。因为,比如说,他们跟别人约好了当面交易,于是将币从桌面钱包转移到手机钱包中,但是当他们见面之后,币的转移仍然没有得到确认,那么他们计划好的交易就无法向下进行。
我们之所以知道这样的后果,是因为在过去我们曾经碰到“区块大小软限制”。在系统默认中,区块曾经默认小于低于1mb的某个值。在2013年,区块大小达到了这个250kb的软限制,用户开始抱怨。然后一些矿池提高了他们的限制,开始铸造更大的区块,之后事情很快得到解决。加入你仔细回顾当时的讨论,你会看到一些与今天的讨论似曾相识说法:小区快没有问题,只要多付一点交易费就好了!
为什么交易费市场不能解决问题
有大量关于“交易费市场”的讨论,今天也有某些此类市场显露雏形。问题是,这会使超载问题更加糟糕,甚至创造更多的中心化行为。
怎么会这样呢?
现在交易费很低廉。当交易信息堆积形成,节点开始崩溃的时候,每个人都会想“多付一点点交易费没什么大不了,我负担得起”。让我们假设这种花些小钱无所谓的情况。第一次交易付出的交易费看起来不够,用户将提高交易费,发起第二次交易,这无疑使过载问题更加严重,使节点崩溃更快的到来。 蛋疼的是你没有办法自动选择一个交易费。即使你决定一点一点的提高交易费,因为在过载的情况下,确认交易动辄需要几个小时的时间,你还是很容易被交易费比你多的交易抢到前面。想要发现你支付的交易费没有竞争力,只有一个途径,就是注意到你的交易迟迟得不到确认。但即便你支付的交易费足够高,确认过程还是会动辄数个小时(看上面的模拟)。所以在你不耐烦的等待中,你可能会增加交易费发起另一个交易——发现事情的吊诡之处了吧——这个“争上游”的游戏没办法互相协调,每个人都不想浪费钱,于是一次次以最小的幅度增加交易费,一直增加一直增加,但是你永远得不到你想要的确认! SPV钱包无从知道他们的交易费的竞争力,除非发生一些重要的协议改变。目前他们可以使用一些硬性的费用标准,在目前的情况下,使用硬性的资费标准,交易的确认可以很好的运行。但是在过载的情况下,SPV钱包将不得不求助于可信的第三方。所有类似“小区快使区块链更加去中心化”的说法,都忽略了这个问题:对很多使用着今天最实用的去中心化钱包的用户来说,小区快将导致比以前更低的去中心化水平。
但是,交易费不上升,矿工怎么维持下去呢?
我和加文都不认为交易费市场能够成为通胀补贴的(即区块奖励的比特币)替代品。从经济上看这就不可行。你可以读一读加文对此的讨论,我写了另外一篇文章提出另一个可能的选择。
那么交易费的角色到底是什么?我认为无论是在现在还是未来,交易费的首要目的就是使人们免于大量无意义的小额支付的干扰。在理想的世界中,绝大部分交易应该是事实上免费的。只有非常迅速频繁的发起交易的钱包(比如交易所的钱包)才必须支付交易费。矿工应该就像现在做的,按照“优先级”排序收录免费交易。其中的道理是,只有流动的比特币才是有价值的比特币。多说一句,“比特币没有交易费”与“比特币有小额的交易费”这两句话在哲学上的区别是巨大的。
也许这不会发生,让我们拭目以待。但是这是我为什么反对,用人为的超载解决经济问题。
用户会怎么反应?
很糟糕。
很多年以前,当我和我在谷歌的新导师,非凡的Andrew Kirmse在走廊散步时,他说我要为谷歌地球做容量规划和集群网络建设。
我对此感到有一点紧张,因此,22岁的我说:
“我估计如果过载的话,最坏的情况不过是,我们不得不中断几个小时,或者一天。”
安德鲁看我就像看一个傻蛋。“是啊……但那就坏了,我们会上头条”。
上头条???啊!是啊!当然我们会上头条。谷歌几乎从来不会中断服务。谷歌有这样的声誉。如果谷歌地球因为过载中断服务几个小时……这将成为谷歌服务不稳定的信号,这将成为新闻媒体竞相报道的内容。
当听到节点崩溃的消息,你觉得普通的比特币用户会怎么想呢?膨胀的未确认交易,突然双花的风险,高涨的交易费……所有这一切都是因为一个完全可预测并且很容易解决的问题?
他们会得出结论说,比特币开发社区是不称职的。这件事会上头条。
然后那些囤币而不是日常使用比特币的人,早上醒来,读到这些新闻和故事,他们会得出结论说,自己错误估计了比特币未来的价值……,可能比特币根本不会成为未来的货币。
然后价格一旦出现动荡,人们会蜂拥而至将他们的币转移到交易所卖掉,这无疑又会是交易拥堵的时刻,而且是逻辑推演的必然结果。随着大量用户突然对比特币失去信心,价格随之跌落,他们会觉得离场的时间到了。只要休眠状态的币开始移动,甚至是试图开始移动,未确认交易堆积的情况就会进一步恶化。
然后呢?
比特币总会复活。被极端不可信的系统搞崩溃的人最终会放弃,不再试图花掉他们的比特币。很多币会停在一个地方,节点管理员可能会将他们的节点设置成自动重启。SPV钱包会找到一个可信的第三方来获得交易费数据。
最重要的是,再也不会过载了……因为用户留不住了。堆积的未确认信息会确认干净,交易费会再次降落到最小。
因此生活会继续。
比特币会苟活。
但比特币会失去未来。会成为数字货币版的MySpace。信徒们会失去信心,试图将比特币带入主流的商业活动会转而尝试其他东西。那些被“为了让世界更美好”而激励的人也会离场,因为他们看到大众永远不会再使用他们的产品。
比特币核心代码发生更新
让我们回到使用更新的核心的场景。这种场景下,结果也不会好,但是我不得不推演这个场景。否则我知道会有人拿这个说事。
让我们想象一下如下的改变:比特币核心加强了关于内存池大小的限制,于是再也不会耗尽机器的内存了。
理论上也会有其他的改变,比如,让SPV钱包自行计算交易费(这是个大工程),但是我不相信这个功能能够及时出现。
OK,那么……区块和内存池都满了。比特币无能为力了:在此时此刻它无法处理更多的交易。
然后会发生什么呢?以下之一:
钱包试图向网络提交一个交易,但是从遥远的某处送回表示拒绝的P2P协议信息,告诉他们内存池已满。用户收到一个错误信息,然后币没有移动。可以想见用户相当暴躁,因为他的钱看起来锁定在钱包里,无法使用。 钱包试图向网络提交一个交易,没有被拒绝,或者只是被半数的点拒绝。稍后我将解释为什么会发生这样的事。收到交易的节点会试图转发这个交易,但是并不是每一个内存池都是一样的,因此交易不能稳定的传播到网络的每一处。他可能会到达一些矿池,却没有到达另外一些。于是,可能会穿过网络到达资金的接收方,也可能不会。如果接收方看不到交易,你无法获得想要交易的产品。如果接收方看到了,但是交易并没有到达每一个矿工处,那个6小时只有50%确认可能的确认窗口只会使事情更加糟糕。交易需要一天甚至更多的时间才能确认会成为常态。可以想见,用户会相当暴躁,因为他的钱看起来锁定在钱包里,无法使用。 钱包发现他们的交易没有送达节点的内存池,于是决定以更高的交易费再试一次。他们重新提交,然后节点说……OK,我将踢掉交易费低的交易,把你换进来。然而,原来那个交易者已经离线了,他不知道发生了什么。不知道现在他们的交易被踢出来了,永远不会得到确认。最终他们会发现这件事,于是他们提高手续费,但是,他们依然无法保证他们不会再一次被踢出来,甚至第三次,第四次……,经过几次尝试后,可以想见,用户会相当暴躁,因为他们的钱看起来锁定在钱包里,无法使用。
为什么钱包不能收到拒绝信息呢?简单地说,这就是一个岂有此理的,开发者的共识。一些比特币核心的开发者相信,拒绝信息只是某种查虫是才用到的东西,而不是应用程序可以依赖的功能。因此,无法保证一个钱包可以发现他的交易并不合适。但即便如此,我们又会回到无限确认时间的交易问题。
结论
我相信,当比特币经历超载的情形时,无论如何我们无法做到不伤害比特币的声誉和用户基础。比特币的声誉和用户基础都会遭受严重的伤害,因为比特币是加密货币概念的创立者,加密货币这个概念也将不可避免的同时遭受巨大的伤害。
基于此,我们提早升高区块的限制是很重要的,这样我们的事业才能顺畅的继续下去。
微信扫描关注公众号,及时掌握新动向
2.本文版权归属原作所有,仅代表作者本人观点,不代表比特范的观点或立场
2.本文版权归属原作所有,仅代表作者本人观点,不代表比特范的观点或立场