隔离见证
什么是隔离见证
隔离见证是比特币核心开发人员Pieter Wuille 在2015年12月於香港提出的,一方面是解决比特币存在的一个安全漏洞(延展攻击),一个是用于扩容。 隔离见证的英文全称是“Segregated Witness”,简写为SW。
隔离见证解决什么问题
上文也说了, 隔离见证主要解决了两个问题, 一个是延展性攻击, 一个是扩容.
SW是怎么解决的
聊SW怎么解决以上的两个问题前, 我们先说说比特币区块的结构
比特币区块的结构
看上图说话, 区块中, 每一块的内容是区块头(header) + 交易(transactions) 组成的.
每一个交易里, 包含输入和输出.
输入里, 主要是地址 和 签名脚本(script_sig). 签名脚本又叫见证
(witness). 签名脚本一般比较长, 每个交易的约50%左右, 都是签名脚本.
SW的解决方法
解决问题的方法比较简单, 就是把script_sig
这部分数据, 不再记录在transaction
里, 而是记录在不同的地方. script_sig
地方存的不再是原来完整的数据, 而是一个指向新地址的指针. 这样, 就等于实现了扩容的问题.
SW用户在交易时,会把比特币传送到有别于传统的地址。当要使用这些比特币的时候,对其script_sig
做另外处理。
现在的区块和区块链结构图为:
使用SW之后的区块链结构图为:
为什么能扩容?
这是一个软分叉方案. 旧有节点根本看不到这些被隔离的见证,即使真实的区块已超过1MB,它们仍会以为没有超过限制而会接受区块。SW可以提供约2MB的有效区块空间而没有任何硬分叉风险。
为什么能解决延展性攻击?
比特币区块链上每笔交易记录里都包含有见证信息,交易的唯一标识(交易的哈希值)也是包括了见证信息计算出来的。 由于见证算法的数学特性,任何人在拿到一个交易记录后,拿到其中的见证信息,然后可以在不需要知道私钥的情况下,很容易的拼凑出另外一个有效的见证信息。 这样,他可以用拼凑出来的另外那个见证信息,拼凑上交易记录中的其他交易信息,制造出一个另外一个交易记录(哈希值不同)。如果可以让拼凑出来的交易记录先被写入区块链,那么,之前那个原始交易记录会被认为是无效的交易而失败。
这不会造成双花,也不会对区块链造成破坏,但是对原始交易记录的发起者会造成困扰,因为如果拿着原始交易记录的哈希值找不到交易的成功记录。尤其是对于一些交易所,如果没有完整的内部日志,可能无法追溯交易记录,导致攻击者利用拼凑的交易记录先成功提币,再申诉说没有提到币,要求再次提币。
隔离见证后,见证信息不再是交易记录的一部分,也就不参与交易记录哈希的计算,无法再通过修改见证信息来拼凑另外一个交易记录。
隔离见证有什么缺点
- 加大了区块的复杂度.
- 未升级钱包将无法接收来自SegWit钱包的交易。如果有人通过SegWit钱包向你发送比特币,你不会看到这笔交易直到某位矿工在区块中对这笔交易进行确认。复杂的新支付类型可能会导致那些代码质量差的钱包出现bug
- 对于扩容的解决并不彻底. 号称是可以达到2x的扩容, 其实真实的数字是1.3左右(取决于使用sw的矿池有多少).
隔离见证目前的状态
2018-3-19
2017.8 时, 隔离见证首次在bitcoin网络上被激活运行, 但是用户对这个功能不适应. 使用SW输入交易的比例在10-15%之间.
越来越多的交易所开始支持SW, 前几天提高到30%. 这里可以看到比例 ![image_1c8u3uknfuejkorvscb841m9s9.png-260.2kB][4]
这个比例还是低于预期.