深入理解 Unlocking Script:区块链交易的“开锁证据”

Unlocking Script 是交易输入中的解锁材料,用于满足上一笔输出的锁定条件。本文从概念、位置、工作原理到常见误解,全面解析这一关键机制。

林知衡

林知衡

technical_editor

发布于 2026年6月1日3 分钟阅读

一句话理解

Unlocking script(解锁脚本)是写在交易输入(input)里的解锁材料,用来满足上一笔输出(output)的 locking script(锁定脚本)。如果把 locking script 比作一把锁,那么 unlocking script 就是那把钥匙——一笔交易要想花费某个旧的 UTXO,就必须提供正确的解锁材料。

Unlocking Script 在哪里

Unlocking script 位于当前交易的 input 中。每个 input 会引用上一笔交易的某个 output:

Code
1input:
2 previous txid // 上一笔交易的哈希
3 output index // 被引用输出的索引
4 unlocking script // 解锁脚本

上一笔 output 中包含 locking script,当前 input 中包含 unlocking script。节点会将二者按规则组合执行:如果执行结果为真,这个 input 才算成功花费了该 UTXO。

一个 P2PKH 的例子

最常见的交易类型是 P2PKH(Pay-to-Public-Key-Hash),其 locking script 要求:

  1. 提供公钥(public key)
  2. 公钥的哈希与锁定的哈希匹配
  3. 提供有效签名(signature)

因此,要花费这个 output,unlocking script 通常提供:

  • 签名:证明你拥有对应的私钥
  • 公钥:用于验证签名和哈希匹配

节点验证过程:

  • 公钥的哈希是否等于 locking script 中记录的哈希?
  • 签名是否能用该公钥验证?
  • 签名是否绑定当前交易的内容?

如果全部通过,花费有效。

Unlocking Script 不是“付款指令”

新手容易把 unlocking script 理解成“我要转给谁”,这并不准确。收款对象在当前交易的 outputs 中表达,unlocking script 只负责证明“你能花这笔旧 UTXO”。

交易的两个方向必须分开理解:

  • inputs + unlocking scripts = 我能花哪些旧 UTXO
  • outputs + locking scripts = 我创建哪些新 UTXO

Unlocking script 解决的是“资金来源是否合法”,而不是“资金去哪里”。

每个 Input 都要满足自己的条件

一笔交易可以有多个 inputs,每个 input 引用不同的旧 output。每个旧 output 可能有不同的 locking script,因此每个 input 都必须提供对应的 unlocking data。

例如:

  • input 0 花 P2PKH output → 需要签名和公钥
  • input 1 花多签 output → 需要多个签名
  • input 2 花哈希锁 output → 需要原像数据

只要其中一个 input 解锁失败,整笔交易通常就是无效的。

签名为什么要绑定交易内容

如果 unlocking script 提供的是签名,那么签名必须绑定当前交易内容。否则,攻击者可能拿你的签名放到另一笔交易上(即重放攻击)。

签名通常覆盖:

  • 被花费的 input
  • 交易 outputs
  • 金额
  • 脚本上下文
  • SIGHASH 类型决定的部分交易数据

不同 SIGHASH 类型会影响签名覆盖范围。但新手阶段先理解:签名不是抽象地证明“我是我”,而是证明“我授权这笔具体交易”。

Unlocking Script 与钱包

普通用户很少手写 unlocking script。钱包或 SDK 会根据 UTXO 类型自动生成。但开发者仍需要理解它,因为交易失败时常见原因包括:

  • 使用了错误私钥
  • 公钥与锁定哈希不匹配
  • 签名覆盖的数据不对
  • input 引用了错误 output
  • 旧 output 的 locking script 类型不是你以为的类型

调试时,必须同时看旧 output 的 locking script 和当前 input 的 unlocking script。

BSV 应用中的作用

BSV 应用协议可能设计自定义 locking script,对应地也必须设计正确的 unlocking data。例如 token 或凭证状态转移可能要求:

  • 资产拥有者签名
  • 发行者签名
  • 特定数据字段
  • 前一状态引用
  • 哈希原像

这时 unlocking script 不只是普通签名,而是协议状态转移的证据集合。

新手常见误解

  1. Unlocking script 不决定收款人——outputs 决定新资金去向。
  2. Unlocking script 在 input 中,不在 output 中。
  3. 每个 input 都需要满足自己引用的旧 output 条件。
  4. 签名有效必须对应当前交易内容。
  5. 钱包自动生成 unlocking script,但开发者调试时仍要理解它。
  6. 旧 output 的 locking script 和当前 input 的 unlocking script 必须配套。

参考来源

推荐文章