先修区块链(07):Script、时间锁和见证不是一件事与区块链(40):Bitcoin 的软分叉、钱包协作与链外支付分层。SegWit 调整某类交易的见证数据承诺与交易标识规则,Schnorr 是签名方案,Taproot 是输出与花费路径的协议组合;把它们统称“签名升级”会漏掉输入字节、脚本分支和软分叉的验证边界。

flowchart LR
  T[待花输出类型/版本] --> C[消息与见证编码]
  C --> S[签名验证: 对应算法]
  C --> P[脚本路径条件]
  S --> V[节点共识检查]
  P --> V
  V --> I[txid/wtxid 与包含承诺]

Taproot 花费可根据实际条件走与密钥相关的路径或暴露特定脚本路径;不同路径泄露的信息不一样,但匿名性不能只凭使用该输出类型自动获得。向旧软件发送新版本输出时,还须核对旧节点究竟如何解析,不能把软分叉兼容性解释为“所有旧节点已完整验证新规则”。BIP 向量需按确切规范的编码逐字节比对,OpenSSL ECDSA 不能充当 Schnorr 验收。

同一个 SegWit 交易的基础字节和见证字节各对应不同的标识承诺范围。修改合法花费所用见证内容时,txid 的序列化域没有见证,wtxid 的域则包含见证;在没有哈希碰撞时应预期前者不变、后者变化。这是从两种序列化域得到的机制推论,仍须用 BIP 向量验证字节边界。Taproot 的签名验证也必须按输出版本、花费路径与相应消息计算,不应把“BIP 340 对一条消息验签成功”直接推成任意交易的脚本路径成功。

练习一:两笔交易仅见证字节不同,其 txid/wtxid 在具体见证规则下应如何判断?答案:若基础序列化不变且无碰撞,txid 不变而 wtxid 改变;仍须按该输入的有效性和编码规则分别核对。练习二:将 ECDSA 校验成功证据套用到 BIP 340 签名,能说明 Taproot 路径通过吗?答案:不能,算法和消息预映像都要按该版本核对。BIP 测试向量与 Core regtest NOT_RUN。

可迁移原则:编码、算法和脚本条件的升级需分别验收。参考:BIP 141、BIP 340、BIP 341(原文待核);导航:区块链(E01):Lightning 通道、HTLC 与链上退出 · E02 · 区块链(E03):SNARK/STARK 的约束、设置与成本如何分别验证。