Tapscript

Taproot使得MAST成为可能,但只是使用了略有不同版本的比特币脚本语言,这个新版本被称为tapscript。其主要区别包括:

脚本化多重签名的变化

旧的OP_CHECKMULTISIG和OP_CHECKMULTISIGVERIFY操作码被移除了。这些操作码与Taproot软分叉中的另一项变化——使用Schnorr签名进行批量验证的能力——不太兼容(参见第187页的“Schnorr签名”)。相反,提供了一个新的OP_CHECKSIGADD操作码。当它成功验证一个签名时,这个新的操作码将一个计数器增加一,这样就可以方便地计算通过的签名数量,然后与所需的成功签名数量进行比较,以重新实现与OP_CHECKMULTISIG相同的行为。

所有签名的变化

Tapscript中的所有签名操作都使用了BIP340中定义的Schnorr签名算法。我们将在第8章更深入地探讨Schnorr签名。 此外,任何预期不会成功的签名检查操作必须使用值OP_FALSE(也称为OP_0),而不是实际的签名。如果在失败的签名检查操作中提供任何其他内容,将导致整个脚本失败。这也有助于支持Schnorr签名的批量验证。

OP_SUCCESSx操作码

在以前版本的脚本中无法使用的操作码现在被重新定义为,如果使用它们,整个脚本将成功。这样做允许将来的软分叉在某些情况下重新定义它们为不成功,这是一种限制,因此可以在软分叉中实现。(相反,将一个不成功的操作定义为成功只能在硬分叉中完成,这是一种更具挑战性的升级路径。)

尽管我们在本章中深入研究了授权和认证,但我们跳过了比特币对花费者进行身份验证的一个非常重要的部分:它的签名。我们将在第8章中继续探讨这一点。

Last updated