跳转至

UXTO解锁脚本的组成

比特币 UXTO输入中,解锁脚本的组成,并举例说明

在比特币的UTXO(未花费交易输出)模型中,解锁脚本(也称为“脚本签名”或scriptSig)是交易输入的一部分,用于证明该输入的所有者有权花费对应的UTXO。解锁脚本与UTXO中的锁定脚本(scriptPubKey)一起工作,通过满足锁定脚本的条件来解锁资金。

解锁脚本的组成

解锁脚本通常由以下部分组成,具体取决于交易类型和锁定脚本的要求: 1. 签名(Signature):由私钥生成的数字签名,用于证明交易发起者拥有对应的公钥和私钥。 2. 公钥(Public Key):与签名配对的公钥,用于验证签名的有效性。 3. 其他数据(可选):在某些复杂脚本(如多重签名或自定义脚本)中,可能包含额外的数据或多个签名。

在最常见的标准交易类型(如P2PKH,Pay-to-Public-Key-Hash)中,解锁脚本通常只包含签名和公钥。

P2PKH解锁脚本示例

假设有一个UTXO,其锁定脚本(scriptPubKey)为:

Bash
OP_DUP OP_HASH160 <公钥哈希> OP_EQUALVERIFY OP_CHECKSIG
这是一个典型的P2PKH脚本,要求花费者提供公钥和签名,并验证公钥的哈希与指定值匹配,签名有效。

对应的解锁脚本(scriptSig)可能是:

Bash
<签名> <公钥>
- <签名>:用私钥对交易数据签名的结果(通常是DER编码的ECDSA签名,后面附加一个字节的SIGHASH标志,例如01表示SIGHASH_ALL)。 - <公钥>:与私钥对应的椭圆曲线公钥(通常是压缩格式,33字节,以0203开头;或未压缩格式,65字节,以04开头)。

具体例子

假设某个UTXO的锁定脚本是:

Bash
OP_DUP OP_HASH160 1a91e3dace36e2be3bf030a2cf1a5e7c1d21e3f4 OP_EQUALVERIFY OP_CHECKSIG
对应的解锁脚本可能是:
Bash
3044022047ac8e878352d3ebbde1c94ce3a10d057c24175747116f8288e5d794d12d482f02207f8e8e5d794d12d482f47ac8e878352d3ebbde1c94ce3a10d057c24175747101 02f8e8e5d794d12d482f47ac8e878352d3ebbde1c94ce3a10d057c24175747116f
- 30440220...01:签名(70字节,DER编码,末尾01表示SIGHASH_ALL)。 - 02f8e8e...16f:压缩格式的公钥(33字节)。

执行过程

  1. 解锁脚本和锁定脚本拼接在一起执行。
  2. 比特币脚本引擎运行以下步骤:
  3. <公钥> 被复制(OP_DUP)。
  4. 计算公钥的哈希(OP_HASH160)。
  5. 与锁定脚本中的哈希值比较(OP_EQUALVERIFY)。
  6. 用公钥验证签名(OP_CHECKSIG)。
  7. 如果所有条件满足,UTXO被成功解锁。

其他类型

  • P2PK(Pay-to-Public-Key):解锁脚本只包含<签名>,因为锁定脚本直接验证公钥。
  • P2SH(Pay-to-Script-Hash):解锁脚本包含签名和其他数据(如赎回脚本),具体取决于P2SH的内部逻辑。

希望这个解释和例子清楚地说明了比特币解锁脚本的组成!如果有进一步问题,欢迎提问。