理解 BSV 中的 Locking Script:花费条件的核心机制

Locking script 是 BSV 交易中不可或缺的部分,它定义了 UTXO 的花费条件。本文从基础概念出发,逐步解析 locking script 的位置、与地址的关系、表达方式及其在应用中的重要性。

林知衡

林知衡

technical_editor

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

在 BSV(Bitcoin SV)网络中,资金并不存储在传统的“账户”中,而是以未花费交易输出(UTXO)的形式存在。每个可花费的输出都带有一个锁定脚本(locking script),它定义了未来花费这笔资金所需满足的条件。理解 locking script 是掌握 BSV 底层资产控制权的关键。

Locking Script 的作用

一个交易输出仅包含金额是不够的。例如,假设一个输出包含 1000 satoshis,如果没有花费条件,网络无法确定谁有权使用它——任何人都可以将该输出作为输入引用。因此,每个输出必须包含锁定脚本,明确表达:

未来要花费这笔资金,必须满足这些条件。

在常见的付款中,条件通常是:“提供一个与特定公钥对应的有效数字签名。”

Locking Script 的位置

Locking script 位于交易的输出部分。简化的交易结构如下:

Code
1output:
2 amount: 1000 satoshis
3 locking script: <花费条件>

当一个输出尚未被花费时,它就是一个 UTXO。未来的交易若要花费它,需要在输入中提供解锁脚本(unlocking script)或解锁数据。这两个脚本书写在一个组合脚本中,共同执行验证:

Code
1unlocking script + locking script → 验证结果

如果结果为真,则花费有效;否则交易被拒绝。

Locking Script 与地址的关系

地址并非 locking script 本身,但地址通常可以帮助钱包生成对应的 locking script。以常用的 P2PKH(Pay to Public Key Hash)为例,地址背后对应一个公钥哈希(Hash160)。钱包根据地址生成 locking script,其逻辑大致为:

  • 未来花费者必须提供:
    1. 一个公钥。
    2. 一个签名。
  • 同时验证:
    1. 提供的公钥的哈希值等于锁定的哈希值。
    2. 签名能被该公钥验证。

因此,地址是用户友好的收款标识,而 locking script 是链上真实的花费条件。

Locking Script 可以表达的多种模式

除了普通的单签支付,Bitcoin Script 编程语言可以表达多种复杂条件:

  • 多签条件:需要多个签名才能花费。
  • 哈希原像条件:提供某个哈希的原像(如秘密值)即可花费。
  • 时间或序列约束:基于绝对时间(OP_CHECKLOCKTIMEVERIFY)或相对时间(OP_CHECKSEQUENCEVERIFY)限制。
  • 数据输出:例如 OP_RETURN 用于在链上存储任意数据,此类输出通常不可作为普通资金花费。
  • 应用协议状态:在代币、凭证或智能合约场景中,locking script 可以表达资产归属、状态更新权限等。

BSV 生态特别强调 Script 的表达能力,这使得它不仅是简单的转账系统,还能支持复杂的链上应用。

Locking Script 与 UTXO 控制权

UTXO 的控制权并不绑定到用户名或账户,而是完全由 locking script 定义。例如:

  • 如果 locking script 要求某个私钥的签名,则持有该私钥的人可以花费该 UTXO。
  • 如果要求多个签名,则必须满足多签条件。
  • 如果是一个不可花费的数据输出(如 OP_RETURN),则该输出不能再作为普通资金花费。

因此,理解 locking script 就等于理解 BSV 中“谁能花钱”的底层规则。

Locking Script 在 BSV 应用中的实践

在 BSV 应用中,locking script 不仅用于支付,还可作为应用状态的一部分。例如:

  • 代币输出的 locking script 可以表达资产的所有权。
  • 凭证输出可以定义谁能更新或撤销该凭证。
  • 应用状态输出可以要求特定签名才能推进状态机。
  • 数据输出可以用特定格式让 Overlay 网络识别。

但设计复杂的 locking script 需要谨慎,因为脚本的复杂程度会影响交易的标准性、手续费、验证成本以及矿工或服务的接受度。

新手常见误解

  1. Locking script 不是地址:地址是 locking script 的简写表示,而非脚本本身。
  2. Locking script 在输出中,不在输入中:输入提供的是解锁脚本,与输出的锁定脚本配合验证。
  3. 金额和 locking script 共同构成输出的核心:缺少任何一个,输出都无法被正确使用。
  4. 谁能花费 UTXO 取决于 locking script 和解锁数据是否匹配:与用户身份无关,完全由技术条件决定。
  5. 普通地址支付只是 locking script 的一种常见模板:BSV 支持远不止 P2PKH 一种模式。
  6. 复杂脚本不一定被广泛接受:需要关注比特币网络的标准交易策略和矿工政策。

参考来源

推荐文章