比特币协议定期更新,旨在升级协议、解决缺陷和解决安全问题。自 2009 年诞生以来,已经成功实施了许多升级。其中一次更引人注目的升级处理了所谓的交易可塑性问题,这使得攻击者能间接修改交易 ID。
为了解决交易可塑性问题,实施的解决方案被称为隔离见证,或 SegWit。本文解释了SegWit如何停止交易可塑性,并概述了 SegWit 的扩展功能,这使得引入许多不同类型的扩展选项成为可能(阅读本文以了解区块链扩展)。
SegWit 由开发者 Pieter Wiulle 在 2015 年 12 月的 Scaling Bitcoin 会议上提出,当时的主题是使比特币变得更大更快。SegWit 承诺为比特币扩容打开大门,立即获得了大量社区支持。
SegWit 的设计最初在比特币改进提案(BIPs)141和148中概述。其初衷是解决更改签名和相应的交易 ID 的能力,这通常被称为交易可塑性。这是一段有缺陷的代码,允许任何人更改小的交易细节来修改交易散列,从而也改变了交易 ID。
尽管交易可塑性允许修改交易 ID,但它并未让 BTC 交易内容的更改成为可能。由于它只允许改变交易 ID 和散列,交易可塑性从未真正对比特币协议构成重大风险。但是,它确实阻碍了更复杂功能的开发,例如各种扩展解决方案和智能合约功能。
除了修复交易可塑性,SegWit 还重新创造了区块大小的概念。虽然在比特币区块链中,区块的大小传统上限于 1MB 的数据,但 SegWit 通过一个名为区块权重的新概念建立在此基础上。通过区块权重,每个区块限制为 4M 权重单位,或 1M vbytes,这意味着 1 vbyte 等于 4 个权重单位。因此,软件更新了 SegWit 协议的节点,可以潜在地发送和接收他们在 SegWit软分叉之前的四倍数据量。然而,由于各种约束,区块从不那么大——平均区块大小维持在 1.3MB 左右。
区块大小的重新设计也导致了交易费用的降低。在 SegWit 之前,交易费用是按每笔交易大小来确定的。随着区块权重概念的引入,这变成了按每个权重单位的费用。由于 SegWit 减少了区块链的负担,因此相应降低了交易验证和添加到区块链的费用。
为了测试其功能,SegWit 首先在 2017 年 5 月 10 日在莱特币上激活。一旦证明其功能,它也在 2017 年 8 月 23 日在比特币上实施。由于是通过软分叉实现的,区块链与不支持 SegWit 的节点兼容。这意味着,不管他们的区块有多大,比特币网络中的全节点都会有相同的账本副本。
一旦 SegWit 到位,它就启用了新的扩容方法,无论是链上还是链下扩容解决方案。
SegWit 使得实施Schnorr签名成为可能。Schnorr 签名是由 Schnorr 签名算法创建的数字签名。它的安全性基于离散对数问题的难解性。由于它较短,它在区块链上占用的空间比传统签名少。这减少了对区块链的负载,并通过第一层扩容增加了网络的吞吐量。
但也许由 SegWit 解锁的更有趣的功能是第 2 层扩容。可塑性修复为闪电网络的安全实施打开了大门。闪电网络是一个单独的网络,它结合了不同网络用户之间的通道和六度分隔原则,以连接尚未进行交易的用户。这项技术要求只有通道的起始和最终余额需要写入区块链,但通道中的交易则不需要。这减轻了区块链的负担,降低了交易费用,并提高了网络的速度。
SegWit 的实施是提高比特币可扩展性的关键一步。它已远远超出了其最初的设计(消除交易可塑性),并证明对支持不断增长的使用最大加密货币的群众至关重要。在撰写本文时,超过一半的比特币交易已采用 SegWit,预计这一数字将在未来增长。