比特币脚本

定义

Bitcoin Script 是一种基于栈的、图灵不完备的编程语言,用于定义以下条件: 比特币交易 可以花费。它是一个简单而强大的脚本系统,嵌入到每一笔比特币交易的输出(锁定脚本或scriptPubKey)和输入(解锁脚本或scriptSig)中,从而实现可编程的支出条件,而无需将比特币网络暴露于图灵完备智能合约平台的风险之中。比特币脚本(Bitcoin Script)支持 多重签名钱包,限时交易, 哈希锁定合约, 支付通道和原子交换——所有这些都不需要通用区块链。

 起源与历史

日期创建
2008中本聪设计比特币脚本是比特币白皮书设计的一部分。
2009比特币脚本部署在比特币创世区块中;支付到公钥 (P2PK) 是第一种脚本类型。
2012BIP 16:引入了 Pay-to-Script-Hash (P2SH) 功能,支持复杂的赎回脚本。
2015新增了 CHECKLOCKTIMEVERIFY (CLTV) 功能,可对交易启用绝对时间锁定。
2016CHECKSEQUENCEVERIFY (CSV) 新增了对支付通道启用相对时间锁定的功能
2017SegWit 引入了付费见证公钥哈希 (P2WPKH) 和 P2WSH。
2021Taproot 升级(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提供:

执行(基于栈):栈初始为空。

  1. 推→ 堆栈:[签名]
  2. 推→ 堆栈:[sig, pubKey]
  3. OP_DUP:重复顶部→堆栈:[sig,pubKey,pubKey]
  4. OP_HASH160:哈希顶部→堆栈:[sig,pubKey,pubKeyHash]
  5. 推→ 堆栈:[sig, pubKey, pubKeyHash, expected]
  6. OP_EQUALVERIFY:比较 → 堆栈:[sig, pubKey](如果相等)
  7. OP_CHECKSIG:验证签名 → 堆栈:[TRUE]

结果:TRUE = 交易有效且 UTXO 花费

脚本类型:P2PK → 支付给公钥(传统) P2PKH → 支付给公钥哈希(最常用) P2SH → 支付给脚本哈希(多重签名,复杂) P2WPKH → 原生隔离见证 (bech32) P2TR → 支付给 Taproot(最高效/最私密) ══════════════════════════════════════════════════════════ 

脚本类型地址格式用例隐私性
P2PK(无标准地址)原始比特币 聪币
P2PKH1…(Base58)标准单签名支付
P2SH3…(Base58)多重签名、复杂脚本
P2WPKHbc1q…(bech32)原生 SegWit,费用更低
P2WSHbc1q…(bech32)原生 SegWit 脚本
P2TRbc1p… (bech32m)Taproot、Tapscript、序数

 简单来说

  1. 锁和钥匙:每个比特币输出都有一个锁(锁定脚本)——要花费它,您必须提供满足条件的正确密钥(解锁脚本)。
  2. 堆叠机脚本通过将值压入堆栈并执行操作来执行——它简单、可预测,并且故意不是图灵完备的,以防止无限循环。
  3. 多重签名示例:2/3 多重签名脚本需要 3 个指定私钥中的 2 个签名才能解锁资金——用于团队金库和安全钱包。
  4. Taproot 隐私Taproot 可以进行复杂的多重签名和 智能合约脚本 看起来与区块链上的简单单签名交易完全相同——提高了隐私性。
  5. 刻意限制与以太坊的 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——让加密货币成为百科全书

新闻