在此前数月,关于对比特币网络共识规则中的核心常数的设定引起广泛争议,虽然从表面看来它只是个简单改变,但在事实上已打开了潘多拉盒子。
区块上限究竟在哪,而又为何如此设定?
当比特币网络尚处在婴幼儿时期,鉴于比特币节点运行所需的计算资源,不得不做出几种设想。在这些考虑到的计算资源中,就有网络带宽、存储空间和处理器速度。如果区块容积增长过大,就会瘫痪这些资源,进而令网络易受攻击或者使人们不愿运行节点。另一方面,如果区块被限得太小,网络资源就大有浪费,交易处理过慢。不考虑设备间的计算资源存在很大的差异以及计算机技术会日益进步,为了简单起见,区块容积设定为1MB。
这一切都归结到经济因素
从根本上说,经济因素决定了区块上限。经济因素平衡了交易负载和维持负载的计算资源的两者关系。正如其它稀缺资源,区块容积的设计遵循着同样的经济学供求原则。
在比特币网络的初期阶段,曾希望在预设上限下,交易负载能运行良好。然而,在更多节点接入到网络的情况下,区块最终会被填满。
为了应对资源不足,交易费用被引入到协议设计中。当时的想法是,一些人为了能让他们的交易得到优先处理,会支付更高的费用,这就自然提高市场的交易费用。在仅靠交易费用就能维持网络运行之前,每挖到区块都会得到奖励,奖励每210,000个块(约每四年)就会减半,这会鼓励矿工持续挖矿。
问题就是,这类似于先有鸡还是先有蛋的情形。只要区块空间充裕,就没动力去开发适当的区块容积来调整市场的交易费用。直到最近,大多数区块容积还是没有填满。区块容积要凸显不足,需要我们大量进行交易。然而,当我们不得不开始面对区块容积不足时,这些问题才凸显出来。
随着时间推移,区块奖励会逐渐递减,交易费用作为支付给网络的一种手段,会显得越来越重要。维持区块链的成本高昂——区块容积不再是免费的,这需要有人买单。增大区块容积会弥补不足,进而免除交易发送者向校验节点发送的费用——校验节点是我们极其依赖的,它有助于网络持续的安全运行。
但是区块上限不是关于可扩展性吗?
由区块扩容引起的一个主要误解是,网络能向上扩展。可扩展性的确是值得我们考虑。最近针对这问题已有明显的进展,就是通过区块链线下支付渠道解决,但这不是谈论的要点而且超出今天文章阐释的范围。区块上限是关乎经济因素,并非协议自身的可扩展性,希望我们不要再陷入这个误解中去。
在计算机系统中,可扩展性是指当我们提高尺寸或容量时在原有的设计规范中能继续工作的系统属性。因为计算资源是有限的,真实世界的任何一个计算机系统都有其上限,一旦超出,它就不再很好地运行下去。
在比特币网络上设定区块最大上限,可确保我们不会超出其限制。这里让我们烦恼的事不仅仅是恶意行为——而是比特币网络安全迫在眉睫。超出其运行上限,意味着网络依赖的安全模型变得不再值得依赖。
这安全模型的一个设想是,交易确认的费用足够低。超出一定的区块容积,交易确认的成本就增加,会超出网络中诚实节点的承受能力。没有正确的确认,交易不会视为安全。
提高区块上限,并且上限仍低于确认开始失效的临界点,就只能安全地增加网络中处理的交易数。
我们就不可以优化软件来降低确认成本吗?
我们是可以的。有很多地方仍可以改进的,其中有区块广播机制、压缩或删除数据、更高效的签名方案,这都是好主意并应该付诸实现。在其他参数保持不变的情况下,降低确认的费用只能提高网络的健康。然而,除非在算法上有重大突破、或者协议的大规模重新设计、或者摩尔定律和尼克森定律突然加速,否则理论上已限死我们能降低多少成本。
即使有这些优化,确认所需的计算成本还是超过随区块容积的线性增长。粗略地说,这意味着区块容积以X倍数增长,那么确认区块的成本会以比X更大的倍数增长。如果我们希望在区块链中都能囊括每个人每笔的交易,并且希望能网络能继续正常运行下去,那么我们对满足如此大的全球需求感到力不从心。区块容积从本质上说是不足的。
确认开始失效的点在哪?
有确凿的证据表明,如果我们还没有跨越这个点,就是正迅速接近这个点。当前确认所需的计算成本的增长速度远超过计算资源的成本的降低速度。除了协议固有的超线性的复杂性,该协议设计有两个致命的会使问题加剧的缺陷:协议设想矿工会正确确认区块和客户端将能轻松地合理地获得安全,简单地说就是他们能自行确认其交易。
但矿工就不会确认区块吗?
他们有时真不会。这是第一个缺陷。矿工至少有一些奖励才会这样做。然而,矿工只有发现随机数才有奖励,而不是确认区块。寻找随机数就是发现符合目标的区块哈希值,这也称为工作量证明机制。谁确认他们建立的区块都不重要,如果他们找的区块是无效的或者在无效的区块上挖掘,他们都会失去奖励,但只要有人寻找区块,就几乎同时为他们提供有效的区块,这可合理减少需要确认的地方,从而节省成本。偶尔无效的块可能会被名义上的运营费用的削减所抵消。
特别地,使矿工付出昂贵代价的是广播延迟。矿工接收、确认和广播一个新区块所需的时间越长,其他矿工击败他们计算出另一新区块的概率就越大。另外,同样使矿工付出昂贵代价的是维护和支持确认节点,以此确保全网合理遵循共识规则。然后还有运行节点所需的计算资源亦要消耗成本。而且,即使矿工愿意承担所有这些成本,一个软件漏洞就可造成他们挖到无效的区块。上述提到的都是真实存在的,就算不考虑矿池在内,都可放大因确认出现的缺陷。
这些担忧并非危言耸听,都已经在现实中发生过。在2015年7月4日前后,因为上述原因导致的网络分叉使许多客户端、网站和在线服务接收了无效的区块。确认的成本越高,这类的情景越有可能发生。
不幸的是,当前该协议缺少直接安全的补偿确认的这种途径。如果我们能做到这点,就可建立更健全、安全的经济模型。
为什么客户端本身不能确认区块?
虽然运行完整的确认节点所需的资源仍处在现代服务器的能力之内,但已远远超出小设备的能力之外,尤其是网络连接是间歇的或受限的移动设备。其实大多数桌面级和笔记本系统确认1M大小的区块已是满负荷,所以再加上要运行用户个人的确认节点就会降低用户体验。
协议设计中第二个致命的缺陷是,尽管让大多数用户运行完整的确认节点是不现实的,但他们要从其他节点合理地获得安全,简单地说就是他们接收的区块和交易要是有效的。但是对于这种令人满意的机制至今未能实现。当矿工不能进行正确的确认,此问题就会大大加剧。相反,当前大多数客户端依赖中心化的服务设施来完成确认——不幸的是,在2015年7月4号发生的分叉证明了即使出于良好目的,这些中心化的服务设施不再值得依赖来完成合理确认。
我们能做些什么来应对呢?
不管你喜欢与否,区块容积充裕的阶段即将结束。即使解决所有上述问题后,我们都同意安全地提高区块上限,但迟早会触及新的上限。也许宜早不宜迟。如果我们没有妥善解决上述问题和处理好与共识规则不兼容导致的巨大风险就提高上限,无异于会使网络安全模型崩溃,这时谈区块扩容没有任何意义。
不管是否增加区块上限以及何时增加区块上限,我们最终都不再能向上提高上限,我们要始终面对区块容积不足的问题。网络中交易中继的节点已被迫优先减少内存负载和避免出现拒绝服务的攻击。垃圾攻击已造成一些区块填满,市场的交易费用已开始提高,我相信人类的智慧能找到应对这些挑战的好方法。
鉴于确认成本,我希望我们最终不仅能将确认的费用降低,而且能使确认变得更加高效。或者最坏的情况也是,建立安全外包和执行确认的机制,这需要对协议进行实质性的重新设计,或许对互联网本身进行改造。即使这仍需好几年时间,但是考虑到这个领域会取得的重大进展,我相信最终能实现。就目前而言,我强烈建议在作出任何行动来提高交易成本时,要小心再小心。
原文:
https://bitcoinmagazine.com/21377/settling-block-size-debate/作者:Eric Lombrozo
译者:ivanjianjian
责编:printemps
稿源(译):巴比特资讯