定义
Bitcoin Script 是一种基于栈的、图灵不完备的编程语言,用于定义以下条件: 比特币交易 可以花费。它是一个简单而强大的脚本系统,嵌入到每一笔比特币交易的输出(锁定脚本或scriptPubKey)和输入(解锁脚本或scriptSig)中,从而实现可编程的支出条件,而无需将比特币网络暴露于图灵完备智能合约平台的风险之中。比特币脚本(Bitcoin Script)支持 多重签名钱包,限时交易, 哈希锁定合约, 支付通道和原子交换——所有这些都不需要通用区块链。
起源与历史
| 日期 | 创建 |
| 2008 | 中本聪设计比特币脚本是比特币白皮书设计的一部分。 |
| 2009 | 比特币脚本部署在比特币创世区块中;支付到公钥 (P2PK) 是第一种脚本类型。 |
| 2012 | BIP 16:引入了 Pay-to-Script-Hash (P2SH) 功能,支持复杂的赎回脚本。 |
| 2015 | 新增了 CHECKLOCKTIMEVERIFY (CLTV) 功能,可对交易启用绝对时间锁定。 |
| 2016 | CHECKSEQUENCEVERIFY (CSV) 新增了对支付通道启用相对时间锁定的功能 |
| 2017 | SegWit 引入了付费见证公钥哈希 (P2WPKH) 和 P2WSH。 |
| 2021 | Taproot 升级(BIP 340/341/342)引入了 Schnorr 签名和通过 Tapscript 实现的 MAST。 |
| 2023 | 比特币序数利用脚本将数据写入见证数据 |
| 2023 | 关于《禁止酷刑公约》第347号议定书(OP_CAT)复兴的辩论愈演愈烈,或将延长其适用范围。 |
“比特币脚本刻意限制了功能——这并非缺陷,而是特性。简洁即安全。”——比特币核心开发者 Greg Maxwell
运作模式
比特币交易脚本执行 ══════════════════════════════════════════════════════ 锁定脚本 (scriptPubKey) — 在 UTXO 输出上:OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG(标准 P2PKH — 支付到公钥哈希)
解锁脚本(scriptSig)——由spender提供:
执行(基于栈):栈初始为空。
- 推→ 堆栈:[签名]
- 推→ 堆栈:[sig, pubKey]
- OP_DUP:重复顶部→堆栈:[sig,pubKey,pubKey]
- OP_HASH160:哈希顶部→堆栈:[sig,pubKey,pubKeyHash]
- 推→ 堆栈:[sig, pubKey, pubKeyHash, expected]
- OP_EQUALVERIFY:比较 → 堆栈:[sig, pubKey](如果相等)
- OP_CHECKSIG:验证签名 → 堆栈:[TRUE]
结果:TRUE = 交易有效且 UTXO 花费
脚本类型:P2PK → 支付给公钥(传统) P2PKH → 支付给公钥哈希(最常用) P2SH → 支付给脚本哈希(多重签名,复杂) P2WPKH → 原生隔离见证 (bech32) P2TR → 支付给 Taproot(最高效/最私密) ══════════════════════════════════════════════════════════
| 脚本类型 | 地址格式 | 用例 | 隐私性 |
| P2PK | (无标准地址) | 原始比特币 聪币 | 低 |
| P2PKH | 1…(Base58) | 标准单签名支付 | 低 |
| P2SH | 3…(Base58) | 多重签名、复杂脚本 | 中 |
| P2WPKH | bc1q…(bech32) | 原生 SegWit,费用更低 | 中 |
| P2WSH | bc1q…(bech32) | 原生 SegWit 脚本 | 中 |
| P2TR | bc1p… (bech32m) | Taproot、Tapscript、序数 | 高 |
简单来说
- 锁和钥匙:每个比特币输出都有一个锁(锁定脚本)——要花费它,您必须提供满足条件的正确密钥(解锁脚本)。
- 堆叠机脚本通过将值压入堆栈并执行操作来执行——它简单、可预测,并且故意不是图灵完备的,以防止无限循环。
- 多重签名示例:2/3 多重签名脚本需要 3 个指定私钥中的 2 个签名才能解锁资金——用于团队金库和安全钱包。
- Taproot 隐私Taproot 可以进行复杂的多重签名和 智能合约脚本 看起来与区块链上的简单单签名交易完全相同——提高了隐私性。
- 刻意限制与以太坊的 Solidity 不同,Bitcoin Script 无法访问外部数据、循环或调用其他合约——这使得它具有可预测性和安全性。
实际例子
| EventXtra XNUMX大解决方案 | 脚本类型 | 好处 |
| 交易所热钱包 | P2SH 2-of-3 多重签名 | 需要三把钥匙中的两把才能消费——防止单把钥匙被盗。 |
| 闪电网络通道 | HTLC(哈希时间锁定合约) | 支持即时链下比特币支付 |
| 原子交换 BTC↔LTC | 两条链上的HTLC | 无需信任、无需中介的跨链交易 |
| 时间锁定继承 | 检查锁定时间验证 | 资金仅在特定日期之后方可使用 |
| 序数铭文 | P2TR 见证数据 | Taproot 见证中的 NFT/数据铭文 |
优势
| 企业优势 | Detail |
| 安保防护 | 图灵不完备设计可以防止智能合约中可能出现的复杂攻击向量。 |
| 可预测性 | 每个脚本都以确定性的方式执行,且计算量有限。 |
| 表现力 | 支持多重签名、时间锁和足以满足闪电网络需求的 HTLC。 |
| 高效 | 脚本简洁精简,最大限度地减少了交易数据和费用。 |
| 隐私(Taproot) | 复杂的支出条件与简单的支付方式无法区分。 |
缺点与风险
| 风险 | Detail |
| 功能有限 | 无法实现复杂功能 DeFi, 预言机,或任意智能合约 |
| 脚本复杂性 | 高级多重签名脚本的正确实现非常复杂。 |
| 旧格式问题 | 较旧的脚本类型(P2PK、P2PKH)的隐私性低于现代替代方案。 |
| 已禁用的操作码 | 出于安全考虑,几个功能强大的操作码(OP_CAT、OP_CHECKSIGFROMSTACK)已被禁用。 |
| 脚本漏洞风险 | 自定义脚本中的错误可能会永久锁定资金。 |
风险管理提示:
- 在主网上线之前,务必先在测试网上测试自定义脚本实现。
- 使用 P2TR(Taproot)地址可获得最佳隐私保护和未来兼容性。
- 对于多重签名钱包,请使用成熟的实现方案(例如 Bitcoin Core、Sparrow Wallet),而不是自定义脚本。
- 安全存储兑换脚本 (P2SH)——您需要它们才能使用资金
常见问题解答
问:为什么比特币脚本不是图灵完备的?
答:图灵完备性会导致无限循环——这在区块链中非常危险,因为所有节点都必须执行每个脚本。Bitcoin Script 刻意设计的不完备性确保脚本以可预测的方式终止,从而防止拒绝服务攻击,并使脚本的形式化验证成为可能。
问:比特币脚本中的 HTLC 是什么?
答:哈希时间锁定合约 (HTLC) 是一种脚本,允许通过透露一个哈希值为预定值的秘密(原像)来领取付款,或者在超时后将款项退还给发送者。HTLC 是闪电网络的基本组成部分。
问:Taproot 如何改进 Bitcoin Script?
A:Taproot(BIP 340/341/342)引入了 Schnorr 签名,实现了密钥聚合;通过 Tapscript 引入了 MAST(Merklized 抽象语法树),实现了复杂的脚本,同时只显示已执行的分支,并且使所有 Taproot 输出在外部看起来都相同——显著提高了隐私性和效率。
UPay小贴士: 设置比特币钱包时,为了获得最佳的隐私性、效率和未来兼容性,请使用 Taproot (bc1p…) 地址。大多数现代钱包,例如 Sparrow 和 Phoenix,都原生支持 Taproot。
免责声明:本内容仅供教育用途,不构成财务或技术建议。
UPay——让加密货币成为百科全书










