近期导致莱特币上涨的主要原因是莱特币激活了隔离见证(SegWit),但是隔离见证究竟是什么,他的主要优缺点,会带来哪些后续影响,我们需要仔细了解
比特币扩容争议长期以来一直都受到广泛关注,比特币社区内也不断提出各种解决方案来解决这一问题。在这些解决方案中,隔离见证(SegWit)尤为引人注意
什么是隔离见证
在每一个比特币交易中,其实可以分为两部份。第一部份是说明结馀的进出,第二部份是用来证明这个交易的合法性 (主要是签署)。第一部份可称为「交易状态」,第二部份就是所谓的「见证」(witness)。如果你只关心每个账户的结馀,其实交易状态资料就已经足够。只有部份人(主要是矿工)才有必要取得交易见证。
但是中本聪设计比特币系统时,并没有把两部份资料分开处理,导致交易ID的计算混合了交易状态和见证。因为见证本身包括签署,而签署不可能对其自身进行签署,因此见证是可以由任何人在没有交易双方同意下可以改变的,造成所谓交易可变性 (malleability)。在交易发出後,确认前的交易ID可以被任意更改,因此基於未确认交易的交易是绝对不安全的。在2014年就曾有人利用这漏洞大规模攻击比特币网络,然而这问题一直至今没有解决。
比特币核心开发员Pieter Wuille 在2015年12月於香港提出的隔离见证 (Segregated Witness,简称SegWit) 软分叉非常巧妙地彻底解决了这个问题。SegWit用户在交易时,会把比特币传送到有别於传统的地址。当要使用这些比特币的时候,其签署 (即见证)并不会记录为交易ID的一部份,而是另外处理。也就是说,交易ID完全是由交易状态 (即结余的进出) 决定,不受见证部份影响。
SegWit由比特币开发团队对于BitcoinCore的拟议更新。最初,该更新旨在解决交易的可扩展性,这也是比特币软件中众所周知的弱点。虽然这种攻击向量对用户来说并不是最具破坏性的,但目前为止已经在多个攻击案例中被利用,因此也就凸显了修补这一漏洞的必要性。
而且,SegWit提供了一系列其他优势,现在关注的焦点也已从修复交易可扩展性转移到解决比特币扩容的问题。比特币正面临着大规模扩容的问题,而这些问题只会随着时间的推移越来越恶化。
SegWit原理
隔离见证锁定输出的花费,可以不需要用到脚本签名( scriptSig),交易真正的脚本签名,将被放在一个单独的,新的数据结构当中,做验证工作的钱包和矿工会使用新的数据结构,以确保交易的签名是有效的。
在这个新的数据结构中,是一颗反映这些交易的默克尔树(merkle tree),每一笔隔离见证输入(input)的交易,在第二颗默克尔树中,将有一个带有签名数据的条目,每笔输入加上10个左右额外的字节,以允许欺诈证明(fraud proofs)。
将交易和隔离见证梅克尔树合并到同一颗树中,左边数上为交易数据,右边树上为隔离见证数据。而区块头中的梅克尔根(merkle root)将是这颗合并之后的树,可以通过一次硬分叉来完成,但比较可行的是进行一次软分叉,将隔离见证梅克尔根放到每个区块的第一个(coinbase)交易当中,这会是更加复杂的,显得没那么优雅,但意味着它只需要一次软分叉。通过软分叉可以不要求钱包进行升级,但任何生成大量交易的人,都会有强烈的动机去产生隔离见证交易。
当软分叉或者硬分叉也实施完后,如果有小部分交易使用了隔离见证锁定输出,会有更多的交易进入1MB的硬编限制区块当中。例如,最简单的one-input,one-input隔离见证交易会有90字节的交易数据,加上80个左右字节的签名数据,但只有这90字节是需要挤入这1MB区块的,而不是170个字节。更复杂的多重签名交易会节省更多的空间。
所以,一旦所有人都使用了隔离见证锁定输出,所有的交易也都是隔离见证交易,会有2-3倍的交易可以挤入1MB的区块当中。
隔离见证交易,并不会对目前的扩容瓶颈有所帮助,1MB区块消息在整个网络中的传播,将和以前一样会占用同样的带宽。有几个解决这个问题的项目,目前正在进行中(包括IBLTs,弱区块(weak blocks),瘦区块(thin blocks),一个“blocktorrent”协议),还有一个已经在部署的,可以让1MB区块消息的传播速度远远超过本来的速度(Matt Corallo的快中继网络(fast relay network))。
隔离见证的优点
采用隔离见证后,只有发出交易的人才可以改变交易ID,没有任何第三方可以做到。如果是多重签名交易,就只有多名签署人同意才能改变交易ID。这可以保证一连串的未确认交易的有效性,是未来双向支付通道或闪电网络所必须的功能。有了双向支付通道或闪电网络,二人或多人之间就可以实际上进行无限次交易,而无需把大量零碎交易放在区块链,大为减低区块空间压力。
未来可以通过软分叉增加最大区块容量,因为旧有节点根本看不到这些被隔离的见证,即使真实的区块已超过1MB,它们仍会以为没有超过限制而会接受区块。在整场有关区块容量的辩论中,最大的难点就是硬分叉。SegWit可以提供约2MB的有效区块空间而没有任何硬分叉风险。
可以大幅改善签署结构,曾经有一个超过5000个输入的交易,因为签署设计缺憾,需要半分钟才能完成检查。SetWit软分叉会把这个问题解决掉。如果推出全新的交易脚本语言,例如可以把数以千计的不同脚本通过MAST技术压缩至只有32字节;亦可以把不同签署合并检查,令检查交易的速度再以倍数上升。
轻量钱包可以变得更轻量,因为它们无需再接收见证数据,全节点可以为轻量钱包提供很简洁的证明,以检查交易是否合法。以后的节点就不再局限于完全验证和完全不验证,而是可以按个人的资源作部份验证,也就是说一台手机也可以参与保障系统安全。这可以大为降低系统对全节点的依赖,即使区块容量提升了,我们仍能保持安全。
SegWit主要争议
反对SegWit的关键点可大致分为技术、政治和思想三个方面。
一些人认为,在目前的状态下SegWit无法解决它承诺解决的问题。而这一观点的一个主要理由在于,这项更新提出的区块容量增加不足以满足比特币用户群不断增长的需求。
虽然大多数专家都会认同SegWit制定者的高超技术能力以及技术本身的可靠性。但是,不具备一定技术能来的普通人几乎不可能评估双方提出论据的真实性。
事实上,目前的争论也不纯粹是技术性的,还包括政治方面的问题,但这也只会使事情更加复杂。许多致力于研究SegWit的人同样受雇于名为Blockstream的公司,该公司主要产品是侧链解决方案。
社区中的一些人声称这会造成利益冲突,因为开发人员受到激励会阻碍在增加区块容量方面上所做尝试,从而人为地扩大对闪电网络等侧链解决方案的需求。尽管对这个说法还没有决定性证据,但是社区中的很大一部分人仍然选择相信这一点,因此也就反对SegWit。
而反对这一更新在思想方面的主要原因在于,它无法在提供可扩展性的同时,保证比特币网络在一定程度上充足的去中心化。如前所述,SegWit解决比特币交易容量不足这一长期问题,也只不过是在允许实施第二层侧链解决方案(如闪电网络)这一范围内。
而一些人认为这里存在的问题是侧链的工作原理。为了不依赖于高度拥挤的区块链,它们将货币转移到第二层系统。在这层系统中,所有的交易都由受信任的第三方处理,而不必在整个网络上进行传播,从而节省了大量资源和时间。
但由受信任权威机构负责却恰恰是比特币想要从货币体系中移除的。对于一些人来说,这种妥协是不可接受的,无论第三方在解决方案中施加的影响有多小。 而大鱼认为这是一种“去中心化原教旨主义”的坚持,有点类似当初的以太坊分裂成ETH和ETC。
关于本文
区块链的魅力就在于由于去中心化的特点,每一次的技术升级都会带来技术、经济、思想和政治的争议,完全不同于中心化系统想升级就升级;您也可以将本文分享出去让更多人了解这些知识,您的支持和鼓励是我最大的动力,长按二维码关注