文章目录
- 概要
- 脚本类型
概要
比特币客户端的软件通过执行交易中包含的脚本(Script)来验证交易的有效性,这些脚本是用类似 Forth 的脚本语言编写的。脚本的特点是易于使用、简洁和基于堆栈的执行引擎,但它是图灵不完备的。比特币的脚本语言有不到 200 条被称为操作码的指令,旨在支持许多加密函数。比特币节点执行这些脚本指令以在堆栈执行引擎中执行哈希和数字签名验证等操作。
脚本类型
比特币内的交易验证依赖于两种类型的脚本:
- 锁定脚本(Locking Script):锁定脚本被写入交易输出中,用于指定将来使用该输出所必须满足的条件。脚本程序中的锁定脚本用“scriptPubKey”表示。
- 解锁脚本(Unlocking Script):解锁脚本被写入交易输入中,用于满足此输入中引用的输出UTXO的锁定脚本所施加的条件。大多数情况下,解锁脚本包含由锁定脚本中地址对应的私钥生成的数字签名。脚本程序中的解锁脚本用“scriptSig”表示。
当比特币客户端软件验证交易的有效性时,每个输入中的解锁脚本都会与此输入引用的 UTXO 中的锁定脚本一起执行,以查看其是否满足支出条件。如果比特币客户端软件完整地执行了脚本,没有错误地在堆栈顶部返回错误,则交易被视为有效。交易输出的类型可以根据其锁定脚本指定的支出条件进行分类。重要交易输出的类型包括 Pay-to-PublicKeyHash (P2PKH)、Pay-to-ScriptHash (P2SH)、数据记录输出 (OP_RETURN)、Pay-to-Witness-PublicKey (P2WPK) 和 Pay-to-Taproot (P2TR)。
在后面的文章中,我们将讨论这些类型的交易输出,特别关注 P2TR,它被广泛用于实现比特币第 1 层和第 2 层协议。