
深入理解 Unlocking Script:区块链交易的“开锁证据”
Unlocking Script 是交易输入中的解锁材料,用于满足上一笔输出的锁定条件。本文从概念、位置、工作原理到常见误解,全面解析这一关键机制。
林知衡
technical_editor
一句话理解
Unlocking script(解锁脚本)是写在交易输入(input)里的解锁材料,用来满足上一笔输出(output)的 locking script(锁定脚本)。如果把 locking script 比作一把锁,那么 unlocking script 就是那把钥匙——一笔交易要想花费某个旧的 UTXO,就必须提供正确的解锁材料。
Unlocking Script 在哪里
Unlocking script 位于当前交易的 input 中。每个 input 会引用上一笔交易的某个 output:
上一笔 output 中包含 locking script,当前 input 中包含 unlocking script。节点会将二者按规则组合执行:如果执行结果为真,这个 input 才算成功花费了该 UTXO。
一个 P2PKH 的例子
最常见的交易类型是 P2PKH(Pay-to-Public-Key-Hash),其 locking script 要求:
- 提供公钥(public key)
- 公钥的哈希与锁定的哈希匹配
- 提供有效签名(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 不只是普通签名,而是协议状态转移的证据集合。
新手常见误解
- Unlocking script 不决定收款人——outputs 决定新资金去向。
- Unlocking script 在 input 中,不在 output 中。
- 每个 input 都需要满足自己引用的旧 output 条件。
- 签名有效必须对应当前交易内容。
- 钱包自动生成 unlocking script,但开发者调试时仍要理解它。
- 旧 output 的 locking script 和当前 input 的 unlocking script 必须配套。
参考来源
推荐文章
区块链2026年6月1日
标准脚本 vs 非标准脚本:BSV 开发中容易被忽略的边界
共识上有效的交易,网络不一定处理。理解标准脚本与矿工策略,避免交易广播失败。
区块链2026年6月1日
解读Bitcoin Script:基于栈的脚本语言及其执行模型
Bitcoin Script是一种基于栈执行的脚本语言,用于验证交易花费条件。本文从栈的概念出发,通过例子说明其执行过程,并探讨P2PKH、受限设计、BSV应用等关键点,帮助理解这一链上验证语言的核心机制。
区块链2026年6月1日
OP_RETURN:BSV链上数据写入入门
了解OP_RETURN的基本概念、与普通支付的区别、数据格式要求、隐私注意事项以及应用场景。