2017 年 7 月 21 日,真正的扩容行动开始,全球比特币矿工开始锁定一个扩容软件升级。这次升级是基于比特币改进建议 BIP91 提出的「隔离见证」(Segregated Witness=SegWit)的方案,并计划在 2017 年 11 月份将比特币区块大小从1MB 提升到 2MB。
大家在这里可能会产生一些疑惑,什么是「隔离见证」,这里面都是些什么关系呢?我们来解释一下,首先所谓的区块扩容主要是要增加区块中容纳交易事务的区块体的空间大小,这个地方可谓是寸土寸金,现在不够住了,怎么办呢?相信大家根据生活经验也能给出两个一般性的做法:
1)增加区块空间的大小,宽敞又明亮;
2)缩小交易数据的尺寸,节能又环保。
第一种方案显然是最符合人们一般性思维的,这也是社区中坚持区块直接扩容一派的思想,那么第二种的缩小交易数据尺寸是什么意思,这里需要解释一个概念,那就是「隔离见证」。
「隔离见证」,英文是 Segregated Witness,我们知道在比特币的交易数据结构中,是通过发起者签署自己的 UTXO(未花费交易输出),然后填上接收者的地址而建立起来的,过程类似于签署支票,一张支票就相当于一条比特币的交易事务,签署 UTXO 就相当于支票签名,也就是所谓的「见证」,这是用来确认支票合法性的。
我们知道,支票上的关键内容无非就是签名和接收方以及支付金额,那么如何来确定这张支票数据的唯一性或者说完整性呢?在比特币中会对每一条交易事务数据进行一次哈希计算,得到一个事务 ID,在计算这个事务 ID 的过程中,都有哪些数据参与了计算呢?答案是整条交易事务,包括那个签名。那么这里就有可以探讨的余地了,一切就围绕这个签名来展开讨论,我们从比特币的交易历史数据中随便截取某笔交易的签名信息来看一下:
可以看到这个签名信息占据的空间还是不少的,如果能够把这块签名信息从交易事务中隔离开,存储在另外一边,那就能省出一块空间来容纳更多的交易数据。这些签名信息的主要作用就是见证交易数据的来源合法性,而实际上见证的过程只需要进行一次就行了,矿工负责见证交易数据是否得到了合法的授权,其他普通的节点只关心接收的结果,见证过后这些签名数据实际上没多大用处,节点在接收时可以丢弃这部分数据。这种将见证信息与交易数据隔离开的设想也就是「隔离见证」的意思。实际上「隔离见证」还在一定程度上能解决一个叫「交易延展性」的问题。
1、隔离见证地址的转账比普通地址转账所需的矿工费更少。
2、如果你需要将隔离见证地址的 BTC 转到普通地址,需要进行链上转账。
3、隔离见证地址“3”开头,普通地址“1”开头。
如上所述,交易事务 ID 在计算时将计算整条含签名的交易数据,而这个签名是可以被更改掉的,因为签名有很多种写法,攻击者无法修改交易事务中的输入和输出,但是却能重新修改签名,从而导致交易事务 ID 的计算值发生变化,一旦被攻击者更改,虽然不能被窃取比特币,但是却有可能导致交易不被网络确认(网络中会同时存在没有被修改过和被修改过的交易事务,这会导致冲突),而隔离开签名信息后,交易事务一旦发起将会完全固化。由于「隔离见证」的这些特点,因此这种方案也有不少人反对。
至此,比特币的扩容方案就有了如下的选择:
1)进行「隔离见证」并扩容区块;
2)仅进行隔离见证,区块容量保持不变;
3)仅扩容区块,不进行隔离见证。
说了这么多,隔离见证机制就是将比特币的交易数据中一些不重要的数据丢弃,但是这种做法本身是存在安全隐患的。