比特币 Script 入门:智能交易逻辑的基础
高级
简而言之: 什么是比特币 Script?它如何运作,又有哪些功能?在这篇详细的技术指南中,我们将深入解析 Script 语言的结构及其实际应用。
比特币的可编程性:Script 为何存在
比特币不仅是一套数字货币系统——它还是一个平台,允许将特定的条件逻辑编码到交易中。这种可编程性是通过一种名为 Script 的简单语言实现的。
Script 定义了比特币交易的锁定和解锁条件。虽然它不如以太坊的智能合约灵活,但比特币 Script 能够通过更简单的机制实现强大的自定义逻辑。
什么是 Script?它如何运作?
Script 是一种基于栈的编程语言。其指令(即操作码,OP code)要么将数据压入栈中,要么对栈中已有的元素进行操作。
Script 出现在比特币交易的两个主要组成部分中:
- ScriptPubKey:由接收方地址指定的锁定脚本。
- ScriptSig:由发送方提供的解锁脚本。
这两段脚本会被拼接起来并一起执行。如果最终执行结果在栈顶留下“true”,则该交易有效。
比特币 Script 的主要特点
- 非图灵完备:没有循环,也不会无限执行。这是有意为之的安全设计。
- 确定性:相同的输入总是产生相同的输出。
- 极简:专为核心功能而设计,避免不必要的复杂性。
- 基于栈:基于 LIFO(后进先出)数据结构运行。
常见的脚本类型
1. P2PKH(支付到公钥哈希)
比特币中的标准交易格式。
- ScriptPubKey:OP_DUP OP_HASH160 <PubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
- ScriptSig:<Signature> <PublicKey>
只有持有相应私钥的人才能解锁这笔资金。
2. P2SH(支付到脚本哈希)
允许将更复杂的脚本表示为单个哈希地址。
- ScriptPubKey:OP_HASH160 <ScriptHash> OP_EQUAL
- ScriptSig:<Signature(s)> ... <RedeemScript>
常用于多重签名或时间锁定支付。
3. 多重签名(Multisig)
需要多个有效签名才能授权一笔交易。
示例:2-of-3 多重签名脚本:
OP_2 <PubKey1> <PubKey2> <PubKey3> OP_3 OP_CHECKMULTISIG
通常嵌入在 P2SH 结构中。
重要操作码概览
Script 使用操作码(OP code)来定义逻辑。常见的操作码包括:
- OP_DUP:复制栈顶元素。
- OP_HASH160:先执行 SHA-256,再执行 RIPEMD-160。
- OP_EQUALVERIFY:比较两个值;若不相同则报错。
- OP_CHECKSIG:验证数字签名。
- OP_CHECKLOCKTIMEVERIFY:强制执行基于时间的花费限制。
脚本将这些操作码组合起来,形成用于验证花费条件的逻辑链。
比特币 Script 技术示例
基础 P2PKH 示例
- ScriptSig:<Signature> <PublicKey>
- ScriptPubKey:OP_DUP OP_HASH160 <PubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
两者一起执行时,栈会逐步处理每个步骤,以验证所有权并授权支付。
时间锁定脚本
ScriptPubKey:<LockTime> OP_CHECKLOCKTIMEVERIFY OP_DROP <PubKey> OP_CHECKSIG
在到达指定的时间或区块高度之前,资金无法花费。适用于托管、遗产继承或分阶段释放资金等场景。
比特币 Script 能构建什么?
- 多重签名钱包
- 时间锁定支付
- 在闪电网络中开设通道
- 托管系统
- 受限的花费条件(例如一次性输出)
Script 在简洁性与功能性之间取得了平衡,这与比特币的设计原则一致。
比特币 Script 为何重要
比特币 Script 证明了比特币不仅仅是数字货币。它让交易能够包含可编程逻辑,在不牺牲安全性的前提下,提供更大的灵活性和无需信任的条件。
常见问题:关于比特币 Script 的疑问
问:比特币 Script 是图灵完备的吗?
答:不是。出于安全考虑,它刻意避免了循环和随机性。
问:比特币 Script 能支持 NFT 或 DeFi 吗?
答:只能以有限的形式支持。可以实现代币控制或托管等基础功能,但无法实现完整的 DeFi 逻辑。
问:现在还在添加新的操作码吗?
答:是的。随着隔离见证(SegWit)和 Taproot 等升级,已经引入了新的操作码,更多操作码也在讨论之中。
结论:Script 是比特币的智能层
比特币 Script 定义了驱动整个网络的交易逻辑。虽然它需要较深的技术理解,但对于开发者、安全专家和协议设计者来说,它是一项至关重要的工具。
随着越来越多的用户探索比特币 Script,他们会发现比特币究竟有多么灵活、安全和可编程。
建议:
- 使用测试网(testnet)安全地试验比特币 Script。
- 透彻理解 ScriptSig 与 ScriptPubKey 之间的区别。
- 通过实际编写脚本来学习操作码。
- 动手实践多重签名和时间锁场景,加深理解。
- 定期关注 Bitcoin Core 文档和 GitHub 上的 BIP 存档。





