隔离见证 Segwit

这节来介绍一个名词:隔离见证( Segwit ),聊聊什么叫隔离见证,为何要采用隔离见证,以及具体技术细节。理解本节内容需要对比特币底层有基本的了解,另外要理解什么是哈希和数字签名。

什么叫隔离见证?

隔离见证是比特币的一个修改方案,2017 年刚刚上线。

要理解什么是隔离见证,先要对比特币的交易有一个基本了解。比特币是个区块链,每个区块中的核心数据是交易。交易之所以可信,就是因为每条交易都附有交易发起者的数字签名,所以说数字签名起到见证( Witness )交易的作用。采用隔离见证之前,数字签名和交易数据是在一起的,而隔离见证就是把见证,也就是数字签名从交易中隔离出来,单独存放。

隔离见证算不上是比特币的一个功能,而是对之前比特币的缺陷的一个修改方案,是一次对比特币核心代码的调整。这就是隔离见证的基本含义了。

为何要开发隔离见证?

那么为何要开发隔离见证呢?答案就是扩容。

先说说什么是扩容。比特币每个区块的大小是 1M 左右,每十分钟才产生一个新的区块,所以可想而知,处理速度是有限的。实际上,比特币每秒能处理的交易数量,也就是经常被人们提起的 TPS 的数量,是个位数。所谓扩容就是要提高 TPS 。但是如何扩容,社区意见出现了分歧,主要提出了两种方案。

第一种方案很简单,就是直接增大每个区块的大小,例如还是十分钟出一个区块,但是每个区块的容量从 1M,提高到 8M,这样每秒处理交易数量肯定能提高。但是这种方案遭到了大部分人的反对。首先这种方案其实扩容能力有限。另外,也是更重要的,区块变大,就会导致对节点的网速和存储能力有了更加苛刻的要求,让很多人放弃成为节点,有悖于比特币的去中心化的思想。

所以比特币最终采用的是第二种方案,也就是隔离见证。隔离见证解决了交易延展性问题,相关的技术细节我们稍后就会介绍。隔离见证虽然对比特币做出了修改,但是比特币自身的 TPS 并没有明显提高。而是由于交易延展性问题被解决,所以让开发比特币上层的解决方案变得可能。具体来说,就是人们采用了一个两层方案来完成扩容工作,底层就是比特币本身,上层是闪电网络。有了闪电网络,就可以达成成百上千倍的交易处理速度,非常有效的解决了扩容问题。

解决扩容问题,是实施隔离见证方案的最重要的原因。当然,隔离见证修复了交易延展性问题,不仅仅让闪电网络变得安全,也让其他以前因为交易延展性而存在漏洞的方案变得安全了,例如 SPV ,我们这里就不展开了。

交易延展性

最后一部分我们讨论一下隔离见证的技术细节。主要聊聊交易延展性问题。

什么是交易延展性呢?英文就是 Transaction Malleability ,Malleability 也可以翻译成可锻性。一块儿金属,锻打几下之后,还是那块金属,基本价值没变,但是形状发生了细微的变化。一个交易被锻打了之后,交易依然是有效的,但是交易 ID 变( TxID )了。对交易的锻打这里可以理解为修改交易。

交易延展性是以前比特币中存在的一个缺陷,让攻击者可以去修改 TxID ,同时保证交易依然有效,这样同一个交易出现在网络上而 ID 不同,就会造成困惑,以至于导致各种交易失败问题。以前的比特币中,交易签名是交易的一部分,而 TxID 是交易的哈希。比特币采用椭圆曲线签名算法( ECDSA ),如果攻击者去修改了数字签名中的特定的一点数据,那么这个签名依然有效,也就是验证依然是可以通过的。但是由于签名是交易的一部分,那么签名变了,交易也就变了,所以经过哈希运算获得的 TxID 也就变了。

聊到这里,隔离见证为何能解决交易延展性就不难理解了。一旦每个交易的签名和交易数据分离,那么 TxID 生成就跟签名无关,而只是交易数据的哈希。所以攻击者就不可能通过修改签名,来生成不同的 TxID 了。

这就是隔离见证解决交易延展性的底层原理了。除此之外,隔离见证也让比特币的区块大小做了调整,以前的比特币的区块大小不能大于 1M,现在如果咱们去 Blockchain.com 去看一下,发现很多区块都大于 1M 的,当然,比特币核心团队限制区块大小的原则没有变,每个区块最大不允许超过 4M。这样,比特币本身的处理能力也获得了一定提升,虽然 TPS 依然是个位数。

总结

关于隔离见证,我们就聊这么多。总结起来一句话:隔离见证是一个为了实现扩容和解决交易延展性而实施的比特币的改进方案。

参考