MSTR Cat

区块链/等级 IV · 深入协议/4.1 Script/课程 7

隔离见证与交易延展性

不稳定的交易 ID、拆分出去的签名,以及为闪电网络扫清障碍的修复

材料具有 JSON 输出功能的区块浏览器SegWit 之前的 P2PKH 交易十六进制字符串(2016年或更早)SegWit 之后的 P2WPKH 交易十六进制字符串

好奇

  1. 为什么陌生人能够更改一笔交易的身份标识,却不破坏其有效性?
  2. 将签名移出哈希计算后,如何既解决延展性问题,又让签名继续受共识保护?
  3. 什么是区块权重?为什么对见证数据打折计算能够提升区块容量?

探索

  1. 在 SegWit 之前,交易 ID(txid)是对整笔交易(包括签名)进行双重 SHA-256 运算得到的哈希值。第三方可以重新编码签名,例如取 s 值的相反数或改变签名的压入方式,而不会使签名失效,从而为同一笔支付生成新的 txid。这种延展性会破坏未确认交易链:如果 Alice 的子交易通过 ID 引用其父交易,那么父交易一旦被篡改,子交易就会成为孤立交易,使追踪付款的钱包和交易所陷入混乱。
  2. 2014年2月,Mt. Gox 用这一机制来解释其崩盘期间的内部混乱,但后来的分析表明,它在所报告的损失中只占很小一部分。这一漏洞之所以长期存在,是因为 ECDSA 签名的字节表示本身就是可变的;第三方——以及在 BIP66 和 low-S 规则出台后主要是矿工——可以改写这些签名。这种不稳定性使得构建闪电网络这类双向支付通道并不安全,因为通道状态在交易确认之前就依赖于特定且可预测的交易 ID。
  3. 隔离见证(BIP141)于2017年8月24日在区块高度481,824激活,通过将见证数据与交易主体分离解决了这一问题。txid 现在只对非见证字段进行哈希,因此不会因签名编码的改变而改变。见证数据仍以独立结构保存在原始交易中,但不参与身份哈希的计算。第三方再也无法更改 txid,而签名仍然完全由共识规则验证。
  4. 见证数据通过每个区块 coinbase 交易中引用的默克尔树进行承诺,确保其无法在不使区块失效的情况下被删除或修改。尽管见证数据与 txid 分离,它仍按照一种新的“权重”指标计入区块大小限制:每个区块上限为4,000,000权重单位。每个非见证字节计为4个权重单位,每个见证字节计为1个权重单位,因此签名较多的交易更容易被容纳。
  5. BIP143 引入了一种新的签名哈希方案,消除了多输入交易的二次方哈希开销。BIP141 定义了版本0的见证程序 P2WPKH 和 P2WSH,它们成为新地址的标准;BIP144 则规定了见证数据在节点之间的传输方式。这些变更不仅修复了延展性问题,还通过建立带版本号的见证程序框架,为 Taproot 等未来升级奠定了基础,使脚本能够在不破坏现有共识规则的情况下演进。
  6. 打开区块浏览器,找到一笔最近的 P2WPKH 交易并查看:签名位于单独的“witness”字段中,而不在输入的 scriptSig 中,且 txid 的计算不包含这些签名。将其与一笔2016年 SegWit 之前的 P2PKH 交易进行比较——后者的签名位于 scriptSig 中,因此会参与 txid 的计算。这种直观的分离证实了见证数据不再影响交易的身份标识。

关键事实

  • 隔离见证于2017年8月24日在区块高度481,824激活。
  • 交易延展性使第三方能够通过修改 ECDSA 签名编码来更改 txid,而不会使交易失效。
  • BIP141 将签名移入独立的见证结构,该结构不参与 txid 的计算。
  • 区块权重上限为4,000,000单位,见证数据相对于非见证数据按四分之一计算。
  • BIP143 引入了一种签名哈希方案,消除了多输入交易的二次方哈希开销。
  • BIP141 引入了带版本号的见证程序(版本0:P2WPKH 和 P2WSH),为 Taproot 等后续版本留出了空间。

练习 九、六、三、一

9收集列出2017年之前交易延展性带来的9项技术或经济后果,并注明受影响的是用户、钱包、交易所还是协议开发者。
6归类将这9项后果归入6个类别:ID 不稳定、未确认交易链断裂、交易所混乱、通道无法实现、签名编码可变性,以及共识保护缺口。
3提炼将这6类归纳为3个核心原因,说明在 SegWit 出现之前,延展性为何阻碍了可扩展的支付通道。
1凝结用一句话说明:将见证数据从 txid 哈希中分离出来,如何同时解决 ID 稳定性问题并为未来的脚本升级铺平道路。

事实核查

日期、数字及数据均依据下方列出的已发表资料进行核实。

在互动学院中打开 →

EN PT ES JA KO RU DE FR MS