比特大陆蚂蚁矿机S7

Mike Hearn:紧急迫降

面神护法 发布在 比特币 10 3942

1-9l6xloRowv4fksAuNMrPDQ

众所周知,比特币区块越来越大,有一种意见认为,应该任由它发展,达到区块的上限。对这种说法的一个普遍的辩护意见是,这样的后果也不会怎么样嘛:不过是交易费的自由竞争。每一个人都爱自由市场对不对?那么谁能反对用交易费来自由竞争呢?

事实上,很多人会反对这个说法,理由嘛,就像没有人会欢迎出现一个IPV4地址的竞争市场一样。IP地址正在变得越来越稀少,复杂的网址转换技术和凭公司力量在市场上竞争的方式,并没有成为胜出的解决之道:那些都是权宜之计。与此同时我们都开始向真正的解决方案迁移:IPV6。

但没关系——因为交易费自由竞争这个说法内在的逻辑是错的。我不相信当比特币超负荷的时候,交易费会升高,并且系统稳定运行。与此相反,我相信比特币会崩溃。

在本文中,我将推演两个场景:

第一个是,如果明年(即我预测区块会达到上限的时间)我们运行着与今天类似的软件的话,会发生什么。

第二个是,如果我们运行一些假设的比特币核心更新版本和钱包应用,又会发生什么。

在这两个场景中,我们都假设区块大小上限是1mb。

 

比特币核心代码与今天相同

当比特币核心超出承载能力时,会发生什么?

进入比特币系统的交易流在某种程度上是稳定的,这个速度在星期日会低一些。这些交易信息先进入“内存池”,内存池是交易信息出现在区块链上之前,它们被存储的地方。就像内存池这个名字显示的,这些信息只保存在内存中。如果一个节点重启,这个节点内存中的信息就会被清空,当然其他未重启的节点中依然保留着这些交易信息。

当区块大小接近100%的时候,发生的第一件事就是确认时间越来越长。根据Dave Hudson的蒙特卡洛模拟结果,当区块大小达到上限的80%时,有一半的交易的确认时间会达到20分钟左右。当区块大小达到上限,即1mb时,有一半的交易要等6个小时以上才能得到确认。

但事实上,将会发生的事不是这样简单。因为当区块大小达到100%时,真实的交易量会大于100%。也就是说永久性的未完成确认的交易信息堆积就会出现。

比特币核心里面并没有处理永久性并不断增长的堆积信息的代码。交易信息只能在内存里面排队,直到节点崩溃。在这个意义上可能会发生下面三种情况之一:

  1. 因为陷入交易信息的汪洋大海,节点可能会变得异常的慢
  2. 当节点试图分配内存空间的时候,节点可能会崩溃掉
  3. 节点可能会被操作系统内核终止

所有这三种情况都是坏消息。比特币核心没有自动重启的功能。如果节点死掉或者变得超级慢,只能靠节点的管理者自己注意到发生的情况,手动重启节点,每次,每次都是这样。

还有,几乎所有的钱包都不知道积压的信息有多大。无论积压交易信息占用的内存有多大,他都会任由用户继续向节点发送交易信息。因此随着积压交易信息越来越大,节点会占光内存然后无法运行。直到被手动重启。

你可能觉得,节点重启,问题就解决了,因为节点会忘记之前所有的积压交易,重新开始运行。但是这有两个问题。第一,这会使双花的可能性大大上升。人们总是想要快速购买,在双花概率上升的情况下,这会变得不牢靠。第二,钱包仍然不知道什么地方出了问题。钱包只是注意到,他们发送的交易信息迟迟没有得到确认,而根据程序,钱包会反复广播没有得到确认的交易信息。因此节点会迅速的积压大量未确认信息,积压有增无减,很快会再一次超过节点的运行能力。

我不知道这种情况什么时候会真的出现,但是只要比特币内核会无限制的接受任何有效的交易信息,那么节点崩溃就是迟早会发生的。

 

然后会怎样?

额,用户们会注意到交易没有被确认。在此之前他们应该已经抱怨过很久确认慢,但是现在他们要真的骂娘了。有些用户会经历真正的“不便”,甚至会损失钱。因为,比如说,他们跟别人约好了当面交易,于是将币从桌面钱包转移到手机钱包中,但是当他们见面之后,币的转移仍然没有得到确认,那么他们计划好的交易就无法向下进行。

我们之所以知道这样的后果,是因为在过去我们曾经碰到“区块大小软限制”。在系统默认中,区块曾经默认小于低于1mb的某个值。在2013年,区块大小达到了这个250kb的软限制,用户开始抱怨。然后一些矿池提高了他们的限制,开始铸造更大的区块,之后事情很快得到解决。加入你仔细回顾当时的讨论,你会看到一些与今天的讨论似曾相识说法:小区快没有问题,只要多付一点交易费就好了!

 

为什么交易费市场不能解决问题

有大量关于“交易费市场”的讨论,今天也有某些此类市场显露雏形。问题是,这会使超载问题更加糟糕,甚至创造更多的中心化行为。

怎么会这样呢?

  1.  现在交易费很低廉。当交易信息堆积形成,节点开始崩溃的时候,每个人都会想“多付一点点交易费没什么大不了,我负担得起”。让我们假设这种花些小钱无所谓的情况。第一次交易付出的交易费看起来不够,用户将提高交易费,发起第二次交易,这无疑使过载问题更加严重,使节点崩溃更快的到来。
  2.  蛋疼的是你没有办法自动选择一个交易费。即使你决定一点一点的提高交易费,因为在过载的情况下,确认交易动辄需要几个小时的时间,你还是很容易被交易费比你多的交易抢到前面。想要发现你支付的交易费没有竞争力,只有一个途径,就是注意到你的交易迟迟得不到确认。但即便你支付的交易费足够高,确认过程还是会动辄数个小时(看上面的模拟)。所以在你不耐烦的等待中,你可能会增加交易费发起另一个交易——发现事情的吊诡之处了吧——这个“争上游”的游戏没办法互相协调,每个人都不想浪费钱,于是一次次以最小的幅度增加交易费,一直增加一直增加,但是你永远得不到你想要的确认!
  3.  SPV钱包无从知道他们的交易费的竞争力,除非发生一些重要的协议改变。目前他们可以使用一些硬性的费用标准,在目前的情况下,使用硬性的资费标准,交易的确认可以很好的运行。但是在过载的情况下,SPV钱包将不得不求助于可信的第三方。所有类似“小区快使区块链更加去中心化”的说法,都忽略了这个问题:对很多使用着今天最实用的去中心化钱包的用户来说,小区快将导致比以前更低的去中心化水平。

 

但是,交易费不上升,矿工怎么维持下去呢?

我和加文都不认为交易费市场能够成为通胀补贴的(即区块奖励的比特币)替代品。从经济上看这就不可行。你可以读一读加文对此的讨论,我写了另外一篇文章提出另一个可能的选择。

那么交易费的角色到底是什么?我认为无论是在现在还是未来,交易费的首要目的就是使人们免于大量无意义的小额支付的干扰。在理想的世界中,绝大部分交易应该是事实上免费的。只有非常迅速频繁的发起交易的钱包(比如交易所的钱包)才必须支付交易费。矿工应该就像现在做的,按照“优先级”排序收录免费交易。其中的道理是,只有流动的比特币才是有价值的比特币。多说一句,“比特币没有交易费”与“比特币有小额的交易费”这两句话在哲学上的区别是巨大的。

也许这不会发生,让我们拭目以待。但是这是我为什么反对,用人为的超载解决经济问题。

 

用户会怎么反应?

很糟糕。

很多年以前,当我和我在谷歌的新导师,非凡的Andrew Kirmse在走廊散步时,他说我要为谷歌地球做容量规划和集群网络建设。

我对此感到有一点紧张,因此,22岁的我说:

“我估计如果过载的话,最坏的情况不过是,我们不得不中断几个小时,或者一天。”

安德鲁看我就像看一个傻蛋。“是啊……但那就坏了,我们会上头条”。

上头条???啊!是啊!当然我们会上头条。谷歌几乎从来不会中断服务。谷歌有这样的声誉。如果谷歌地球因为过载中断服务几个小时……这将成为谷歌服务不稳定的信号,这将成为新闻媒体竞相报道的内容。

当听到节点崩溃的消息,你觉得普通的比特币用户会怎么想呢?膨胀的未确认交易,突然双花的风险,高涨的交易费……所有这一切都是因为一个完全可预测并且很容易解决的问题?

他们会得出结论说,比特币开发社区是不称职的。这件事会上头条。

然后那些囤币而不是日常使用比特币的人,早上醒来,读到这些新闻和故事,他们会得出结论说,自己错误估计了比特币未来的价值……,可能比特币根本不会成为未来的货币。

然后价格一旦出现动荡,人们会蜂拥而至将他们的币转移到交易所卖掉,这无疑又会是交易拥堵的时刻,而且是逻辑推演的必然结果。随着大量用户突然对比特币失去信心,价格随之跌落,他们会觉得离场的时间到了。只要休眠状态的币开始移动,甚至是试图开始移动,未确认交易堆积的情况就会进一步恶化。

然后呢?

比特币总会复活。被极端不可信的系统搞崩溃的人最终会放弃,不再试图花掉他们的比特币。很多币会停在一个地方,节点管理员可能会将他们的节点设置成自动重启。SPV钱包会找到一个可信的第三方来获得交易费数据。

最重要的是,再也不会过载了……因为用户留不住了。堆积的未确认信息会确认干净,交易费会再次降落到最小。

因此生活会继续。

比特币会苟活。

但比特币会失去未来。会成为数字货币版的MySpace。信徒们会失去信心,试图将比特币带入主流的商业活动会转而尝试其他东西。那些被“为了让世界更美好”而激励的人也会离场,因为他们看到大众永远不会再使用他们的产品。

 

比特币核心代码发生更新

让我们回到使用更新的核心的场景。这种场景下,结果也不会好,但是我不得不推演这个场景。否则我知道会有人拿这个说事。

让我们想象一下如下的改变:比特币核心加强了关于内存池大小的限制,于是再也不会耗尽机器的内存了。

理论上也会有其他的改变,比如,让SPV钱包自行计算交易费(这是个大工程),但是我不相信这个功能能够及时出现。

OK,那么……区块和内存池都满了。比特币无能为力了:在此时此刻它无法处理更多的交易。

然后会发生什么呢?以下之一:

  1. 钱包试图向网络提交一个交易,但是从遥远的某处送回表示拒绝的P2P协议信息,告诉他们内存池已满。用户收到一个错误信息,然后币没有移动。可以想见用户相当暴躁,因为他的钱看起来锁定在钱包里,无法使用。
  2. 钱包试图向网络提交一个交易,没有被拒绝,或者只是被半数的点拒绝。稍后我将解释为什么会发生这样的事。收到交易的节点会试图转发这个交易,但是并不是每一个内存池都是一样的,因此交易不能稳定的传播到网络的每一处。他可能会到达一些矿池,却没有到达另外一些。于是,可能会穿过网络到达资金的接收方,也可能不会。如果接收方看不到交易,你无法获得想要交易的产品。如果接收方看到了,但是交易并没有到达每一个矿工处,那个6小时只有50%确认可能的确认窗口只会使事情更加糟糕。交易需要一天甚至更多的时间才能确认会成为常态。可以想见,用户会相当暴躁,因为他的钱看起来锁定在钱包里,无法使用。
  3. 钱包发现他们的交易没有送达节点的内存池,于是决定以更高的交易费再试一次。他们重新提交,然后节点说……OK,我将踢掉交易费低的交易,把你换进来。然而,原来那个交易者已经离线了,他不知道发生了什么。不知道现在他们的交易被踢出来了,永远不会得到确认。最终他们会发现这件事,于是他们提高手续费,但是,他们依然无法保证他们不会再一次被踢出来,甚至第三次,第四次……,经过几次尝试后,可以想见,用户会相当暴躁,因为他们的钱看起来锁定在钱包里,无法使用。

为什么钱包不能收到拒绝信息呢?简单地说,这就是一个岂有此理的,开发者的共识。一些比特币核心的开发者相信,拒绝信息只是某种查虫是才用到的东西,而不是应用程序可以依赖的功能。因此,无法保证一个钱包可以发现他的交易并不合适。但即便如此,我们又会回到无限确认时间的交易问题。

结论

我相信,当比特币经历超载的情形时,无论如何我们无法做到不伤害比特币的声誉和用户基础。比特币的声誉和用户基础都会遭受严重的伤害,因为比特币是加密货币概念的创立者,加密货币这个概念也将不可避免的同时遭受巨大的伤害。

基于此,我们提早升高区块的限制是很重要的,这样我们的事业才能顺畅的继续下去。

----

原文:原文地址:https://medium.com/@octskyward/crash-landing-f5cc19908e32
作者:Mike Hearn
译者:面神护法
译者打赏地址:1AgQhZScPTYeZdz5zQ86Nr4dwhX1RPXkXC
稿源(译):巴比特资讯(http://www.8btc.com/crash-landing)

版权声明: by nc" sa 作者保留权利。文章为作者独立观点,不代表巴比特立场。

评论:10

您需要登录后才可以回复 登录|注册
    潶眼镜
    潶眼镜 189 天前

    Mike Hearn:紧急迫降 | 巴比特 http://t.cn/RAeOe3f

    +1
    +1
    我要点评
    Author Image
    玛_雅 581 天前

    扩大不扩大都有优缺点。要分析利弊。扩大的风险就是升级时分叉和过大的区块会造成同步的缓慢,对找到上一区块的挖下一区块有太大优势,造成对小矿池的不公平加大。不扩大的确定作者有点吓唬人。其实只有你交0.01BTC的手续费再忙也会优先打包10分钟左右一确认。矿池可以按交易手续费高到低排序的。不交多就多等待。从来就没有“锁定在钱包里,无法使用”,而是你太小气没有多给很多手续费。小额交易可以用侧链币如狗狗币,或者第三方链下钱可免手续费且秒速如币付宝。比特币的定位是大额交易是黄金。交易几十几百BTC付个0.01BTC多吗?比特币应该是个小巧玲珑的系统,提高区块大小会让其雍肿。不要太贪心,定位大额对币对矿工都好。小额交易这块通过侧链该让位其他币(如狗狗币瑞波币)就让位,要打造的是加密电子币生态圈,而不仅仅是比特币生态圈。

    +1
    +1
    我要点评
    BTC88
    BTC88 581 天前

    还记得一家矿池算力过半的事吗?当整个行业到了不联合就死的地步时,二三家大矿池联手可能是唯一选项。

    +1
    +1
    我要点评
    叶宇科
    叶宇科 581 天前

    //@bitPaul:好文章。另,比交易费问题更可怕的,是政府对物理节点的控制。尽管两者都无法在技术上直接摧毁比特币,但都能给受用者的信心造成毁灭性打击。

    +1
    +1
    我要点评
    bitPaul
    bitPaul 581 天前

    好文章。另,比交易费问题更可怕的,是政府对物理节点的控制。尽管两者都无法在技术上直接摧毁比特币,但都能给受用者的信心造成毁灭性打击。

    +1
    +1
    我要点评
      Author Image
      玛_雅 581 天前

      交易费问题不可怕,关键是担心交的交易费低没能确认,然后反复提交交易越来越赌,越积越多,其实加个时间过时删除即可,例如手续费不超0.001BTC且超1个小时未确认的交易将会从内存被删除。若将来还有问题可提高到0.01BTC和缩短到20分钟。这个改动不涉及核心不需要分叉。希望楼主有空将这个建议翻译一下发到英文社区或维护者那里。我们需要双向交流。物理节点控制就更不用担心了,节点只是验证转发交易,不能控制交易除非控制全球各地的节点,而这个难度太大。

      +1
      +1
      我要点评
    BTC88
    BTC88 581 天前

    然后矿工开始自救,大矿主联合起来,统一规定,交易费少于0.01BTC的交易不予打包。

    +1
    +1
    我要点评
    BTC88
    BTC88 581 天前

    “那么交易费的角色到底是什么?我认为无论是在现在还是未来,交易费的首要目的就是使人们免于大量无意义的小额支付的干扰。”那么,当BTC产量减半再减半时,矿工由谁来养活呢?很有意思的问题。

    +1
    +1
    我要点评
    P2PBUCKS
    P2PBUCKS 581 天前

    提高上限是对的,但没有那么急。另外,感觉mike刻意夸大了一些技术层面的东西:1. mempool 1G内存大约可以存储400万的交易,如果占满普通配置下4G内存造成core重启要多少交易 ? 2. bitcoincore 自动重启机制是外部设定的 。除非btc发生创新高式暴涨 ,造成接受度大幅提升,才会发生文中情况

    +1
    +1
    我要点评