logo头像

区块链学习小栈

见证隔离

1.什么是隔离见证?

隔离见证(通常简写为SegWit)是对比特币软件提出的一种更新,旨在解决比特币面临的一系列严重问题。

SegWit是由Bitcoin Core团队的维护者之一Pieter Wuille的拟议更新。Bitcoin Core是当前最受欢迎的比特币标准客户端,由业内大多数企业使用。

最初,该更新旨在解决交易的延展性漏洞transaction malleability,这也是比特币软件中众所周知的弱点。虽然这种攻击向来对用户来说并不是最具破坏性的,但目前为止已经在多个攻击案例中被利用,因此也就凸显了修补这一漏洞的必要性。

而且,SegWit提供了一系列其他优势,现在关注的焦点也已从修复延展性漏洞转移到解决比特币扩容的问题。正如我们在同名文章以及许多其他文章中所阐述的那样,比特币正面临着大规模扩容的问题,而这些问题只会随着时间的推移越来越恶化。

2.见证隔离SegWit如何缓解比特币扩容问题?

隔离见证就是把脚本签名(scriptSig)信息从基本结构 (base block) 里拿出来,放在一个新的数据结构当中。做验证工作的节点和矿工也会验证这个新的数据结构里的脚本签名,以确保交易是有效的。那么重点来了:当审核统计区块大小的时候,脚本签大小不会被计算在内。

这简直是一个数学计算上的巧思!

图说隔离见证
下面我们来说一个非常浅显生动的例子,你瞬间就能明白了。

比如我们有一个交通法规,说一条大路上只能容许总面积是100单位面积的车辆。

每个车我们有30个单位的面积。大马路上一次只能跑3辆车。

这时候把车的结构重新调整下,把拖车放到了顶上。每个车的面积单位变成了14个单位. 这时候大马路上一次能跑7辆车了。


好我们现在把刚才浅显易懂的比喻换一下。马路 = 1个区块 车 = 每一笔交易

问题1: 脚本签名是不是和每笔交易在一起?

如图所释:车顶上的那个方块(脚本签名 ScripSig) 是属于车的一部分。验证交易的时候签名当然会被一起验证。

问题2:见证是不是在区块链上?

如图所释:只是改变了车的结构,而且整个车还是开在马路上。所以当然在区块链里面!

3. 见证隔离为比特币带来什么好处?

一条交易记录包括见证信息和交易信息。隔离见证就是把见证信息(签名)和交易信息隔离了,他们被记录在区块链上的不同的位置。而隔离见证之前是记录在一笔交易记录里的。 这样就可以:

  • 可以修复一个由交易延展性(transaction malleability)引起的问题。
  • 可以实现闪电网络。
  • 一定程度上增加一个区块里可容纳的交易数,缓解交易拥堵。

具体分析如下:

第一 、可以修复一个由交易延展性(transaction malleability)引起的问题:

先说一下交易延展性。比特币区块链上每笔交易记录里都包含有见证信息,交易的唯一标识(交易的哈希值)也是包括了见证信息计算出来的。由于见证算法的数学特性,任何人在拿到一个交易记录后,拿到其中的见证信息,然后可以在不需要知道私钥的情况下,很容易的拼凑出另外一个有效的见证信息。这样,他可以用拼凑出来的另外那个见证信息,拼凑上交易记录中的其他交易信息,制造出一个另外一个交易记录(哈希值不同)。如果可以让拼凑出来的交易记录先被写入区块链,那么,之前那个原始交易记录会被认为是无效的交易而失败。这不会造成双花,也不会对区块链造成破坏,但是对原始交易记录的发起者会造成困扰,因为如果拿着原始交易记录的哈希值找不到交易的成功记录。尤其是对于一些交易所,如果没有完整的内部日志,可能无法追溯交易记录,导致攻击者利用拼凑的交易记录先成功提币,再申诉说没有提到币,要求再次提币。隔离见证后,见证信息不再是交易记录的一部分,也就不参与交易记录哈希的计算,无法再通过修改见证信息来拼凑另外一个交易记录。

第二、可以更好的实现闪电网络:

闪电网络是在比特币网络上,两个账户间创建一个交易记录,这个交易记录锁定一些比特币。我们可以认为这两个账户间创建了一个子结算网络。后续这两个账户之间的转账都在这些子结算网络(创建一系列新的交易记录,但不广播到比特币网络上)进行,其交易的真实性也是由加密算法来保证的。直到某一时刻,某个账户提出结算申请(将最新的交易记录在比特币网络上广播),最终的交易在比特币的网络上进行。如果两个没有创建子结算网络的账户希望通过闪电网络转账,如果他们之间能找到一条结算网络的路径,也可以通过一系列的交易实现低手续费交易。由于闪电网络的具体实现需要创建一系列相互依赖的父子交易记录,需要先对子交易记录签名,然后将子交易记录交换后,再对父交易记录签名并广播。所以,有了隔离见证后,才能更完美的支持闪电网络。

第三、一定程度上增加一个区块里可容纳的交易记录数,缓解交易拥堵:

这个比较好理解,我们在上面已经讨论到了,见证信息占一个交易记录大约一半左右的空间,把见证信息挪走后,一个交易记录的大小会降低。从而增加了交易的容量。