1. 引言
SegWit为比特币上的一个软分叉,改变了比特币的交易格式。 SegWit,全称为Segregated Witness,隔离见证,由Bitcoin developer Pieter Wuille提出,通过隔离交易数据中的数字签名数据,旨在:
- 解决交易延展性问题(即接收方可截获并修改发送者的交易ID,以便从发送者那获得更多的coins。一旦将数字签名从inputs中分离出来,则不道德的一方将无法在nullify是数字签名的情况下修改交易ID。):解决了交易延展性问题,为之后的layer2协议,如闪电网络、atomic swaps、MAST(Merkelized Abstract Syntax Trees)等做了铺垫。
- 绕过某些协议限制(如增加区块容量,由1MB增加到将近4MB):通过send from a address才可利用所增加的空间。
所谓witness,是指:
所谓Segregate是指separate分离。
一笔交易中的数据主要包含2部分:
- 一个或多个input:input中有sender的public address。input中还包含签名,签名会占用交易中的大部分空间(约65%)。签名用于验证sender具有足够的资金的来完成支付。一旦每个节点都验证该交易是有效的,则会将该笔交易打包进去看,并添加到区块链中。
- 一个或多个output:output中有receiver的public address。
SegWit是忽略交易inputs中的签名数据,将其移到交易末端的结构中。 SegWit将witness从inputs中分离了出来。该witness中包含了用于验证交易有效性的数据,但是这些数据并不用于确定交易的效果。此外,定义了一个新的weight参数,使得区块最多支持400万个weight units (WU)。Non-witness和pre-segwit witness bytes 重量为4WU,而每个字节的Segwit witness重量仅为1WU,因此使得在不分叉的情况下,使区块大于1MB。
在成功激活OP_CLTV和OP_CSV之后,SegWit是保障闪电网络安全部署的最后一个协议修改。
由于新的witness中包含了Script versioning,因此未来可为SegWit scripts 修改或引入新的opcodes。
在2016和2017年,由于政治原因,矿工利用BIP 9激活机制中的缺陷阻止了隔离见证的激活。 在技术层面,比特币的共识规则由大多数经济体而不是由矿工控制的,因此可通过创建一个用户激活的软分叉BIP 148,这样大多数经济体可绕过阻碍的矿工,自行激活隔离见证,从而打破僵局。这需要大多数经济体之间进行协调,但最终取得了成功,在2017年8月24日,在区块高度481,824 成功激活了SegWit。
SegWit激活后,由block weight limit替代了之前的block size limit,支持最大的区块大小为约4MB。
参考资料
[1] Bitcoin wiki——Segregated Witness [2] What is SegWit? [3] 2017年 Segregated Witness Activates On Bitcoin: This Is What To Expect
|