BTC Script
大约 4 分钟
BTC Script
Bitcoin Script
1. 什么是Bitcoin Script 是一种简单的、基于栈的编程语言,用于定义比特币交易中资金的支出条件。它的主要作用是确保比特币在满足特定条件时才能被花费。Bitcoin Script 是非图灵完备的,意在保持简单和安全。
1.1 基本结构
比特币交易分为两个脚本部分:
- scriptPubKey(锁定脚本):它定义了如何锁定比特币,通常包含收款人的条件(如公钥哈希)。
- scriptSig(解锁脚本):包含满足锁定脚本条件所需的信息(如签名和公钥)。
两者的执行顺序如下:
- 解锁脚本和锁定脚本会被组合起来,并依次执行。
- 交易只有在整个脚本执行结果为
True
时,才会被认为是合法的。
1.2 常见操作符
Bitcoin Script 提供了一组基于栈的操作符来处理数据:
- OP_DUP:复制栈顶的元素。
- OP_HASH160:对栈顶元素进行哈希处理(RIPEMD-160(SHA-256(x)))。
- OP_EQUALVERIFY:验证栈顶两个元素是否相等,验证失败则终止脚本。
- OP_CHECKSIG:检查签名是否有效。
- OP_CHECKMULTISIG:验证多重签名条件。
1.3 常见的脚本类型
1.3.1 P2PKH (Pay-to-PubKey-Hash)
最常见的交易类型,要求发送方提供与收款地址对应的公钥和签名。
- scriptPubKey: OP_DUP OP_HASH160
<PubKeyHash>
OP_EQUALVERIFY OP_CHECKSIG - scriptSig:
<Signature>
<PublicKey>
1.3.2 P2SH (Pay-to-Script-Hash)
允许复杂的锁定脚本嵌套在哈希中,由解锁脚本提供完整的赎回脚本。
- scriptPubKey: OP_HASH160
<ScriptHash>
OP_EQUAL - scriptSig:
<RedeemScript>
<Data needed by RedeemScript>
1.3.3 多重签名 (Multisig)
多重签名交易要求多个公钥的签名来解锁资金。通常用于多人钱包。
- scriptPubKey: OP_2
<PubKey1>
<PubKey2>
<PubKey3>
OP_3 OP_CHECKMULTISIG
2. 比特币脚本的特点
- 基于栈的语言:所有操作基于栈的“推入”和“弹出”。
- 非图灵完备:比特币脚本不支持循环和递归,避免了复杂的计算和潜在的 DoS 攻击。
- 不可篡改:一旦脚本部署,交易验证规则不可更改。
- 时间锁支持:通过
OP_CHECKLOCKTIMEVERIFY
等操作符,可以实现基于时间的支付条件。
3. BTC Script 与 ETH 智能合约的区别
特性 | Bitcoin Script | Ethereum 智能合约 |
---|---|---|
图灵完备性 | 否,不能执行循环和递归 | 是,支持复杂逻辑,图灵完备 |
用途 | 用于定义交易验证条件 | 可用于金融应用、游戏、去中心化交易等 |
操作方式 | 基于栈操作,验证签名、哈希等 | 允许复杂计算和存储 |
复杂性 | 简单,通常只进行签名验证 | 复杂,支持多种金融逻辑和应用 |
合约升级 | 不可修改,一经部署不可更改 | 可以通过代理合约等技术实现合约升级 |
Gas 费用 | 无明确的 Gas 机制 | 每次操作都需消耗 Gas |
安全性 | 设计为非常安全,限制功能避免攻击 | 复杂性较高,智能合约漏洞常见 |
开发语言 | Bitcoin Script | Solidity、Vyper |
执行环境 | 比特币节点 | 以太坊虚拟机 (EVM) |
4. BTC Script 和智能合约的适用场景
4.1 Bitcoin Script 适用场景
- 简单支付条件:比如,验证签名、检查多重签名等。
- 时间锁支付:在未来的某个时间或区块后才能解锁。
- 简单的条件支付:通过
OP_IF
实现的分支逻辑。
4.2 Ethereum 智能合约适用场景
- 去中心化应用(DApps):如去中心化交易所、借贷协议、游戏等。
- 复杂的金融逻辑:如稳定币、借贷协议、自动化市场做市(AMM)等。
- NFT 应用:如数字艺术品、游戏道具等。
5. 总结
- Bitcoin Script 的设计目标是安全、简单,它主要用于验证比特币交易的合法性,功能有限但足够处理各种支付场景。
- Ethereum 智能合约 则是图灵完备的,能够支持复杂的去中心化应用,功能更强大,但也因此面临更多的安全挑战。
在应用场景上,Bitcoin Script 更适合支付相关的简单条件验证,而以太坊智能合约可以实现复杂的业务逻辑。