高級
Script 語言
深入學習比特幣的腳本語言,了解如何使用操作碼創建複雜的支付條件。
30 分鐘
深入 Bitcoin Script
Bitcoin Script 是一種專門為比特幣設計的腳本語言。它故意被設計為圖靈不完備, 以確保腳本執行的可預測性和安全性。本章將深入探討 Script 的完整操作碼集和高級用法。
操作碼分類
常量操作碼
| 操作碼 | 十六進制 | 描述 |
|---|---|---|
| OP_0 / OP_FALSE | 0x00 | 推入空字節數組 |
| OP_1 - OP_16 | 0x51-0x60 | 推入數字 1-16 |
| OP_1NEGATE | 0x4f | 推入 -1 |
| PUSHDATA1/2/4 | 0x4c-0x4e | 推入指定長度的數據 |
堆疊操作
| 操作碼 | 描述 | 堆疊變化 |
|---|---|---|
| OP_DUP | 複製頂部元素 | [x] → [x, x] |
| OP_DROP | 移除頂部元素 | [x] → [] |
| OP_SWAP | 交換頂部兩個元素 | [x, y] → [y, x] |
| OP_ROT | 旋轉頂部三個元素 | [x, y, z] → [y, z, x] |
| OP_2DUP | 複製頂部兩個元素 | [x, y] → [x, y, x, y] |
| OP_PICK | 複製第 n 個元素到頂部 | [..., x, n] → [..., x, x] |
加密操作
| 操作碼 | 描述 |
|---|---|
| OP_SHA256 | SHA-256 哈希 |
| OP_RIPEMD160 | RIPEMD-160 哈希 |
| OP_HASH160 | SHA256 + RIPEMD160 |
| OP_HASH256 | 雙重 SHA256 |
| OP_CHECKSIG | 驗證 ECDSA 簽名 |
| OP_CHECKSIGVERIFY | 驗證簽名,失敗則終止 |
| OP_CHECKMULTISIG | 驗證 M-of-N 多重簽名 |
高級腳本模式
哈希時間鎖定合約 (HTLC)
HTLC 是閃電網絡的核心構建塊,允許原子交換和跨鏈交易:
OP_IF
OP_SHA256 <secret_hash> OP_EQUALVERIFY
<接收方公鑰> OP_CHECKSIG
OP_ELSE
<超時區塊> OP_CHECKLOCKTIMEVERIFY OP_DROP
<發送方公鑰> OP_CHECKSIG
OP_ENDIF
用途:
- 接收方提供 secret 可立即花費
- 超時後發送方可取回資金
閃電網絡承諾交易
這是閃電網絡通道中使用的腳本模式:
# 可撤銷的輸出
OP_IF
<revocation_pubkey>
OP_ELSE
<to_self_delay> OP_CHECKSEQUENCEVERIFY OP_DROP
<local_delayed_pubkey>
OP_ENDIF
OP_CHECKSIG
用途:
- 對方使用撤銷密鑰可立即花費(懲罰機制)
- 自己需要等待延遲後才能花費
Vault 保險庫
使用時間鎖實現的冷存儲保護機制:
OP_IF
# 緊急恢復路徑 - 需要所有密鑰
<恢復公鑰1> OP_CHECKSIGVERIFY
<恢復公鑰2> OP_CHECKSIGVERIFY
<恢復公鑰3> OP_CHECKSIG
OP_ELSE
# 正常花費路徑 - 需要延遲
<144區塊> OP_CHECKSEQUENCEVERIFY OP_DROP
<熱錢包公鑰> OP_CHECKSIG
OP_ENDIF
腳本限制
大小限制: 腳本最大 10,000 字節
堆疊限制: 最多 1,000 個元素,每個元素最大 520 字節
操作碼限制: 最多 201 個非推送操作碼
多重簽名: 最多 20 個公鑰
禁用操作碼: OP_CAT, OP_MUL, OP_DIV 等已被禁用
Script 演進
2012
P2SH (BIP-16)
允許將複雜腳本封裝在哈希中
2015
CLTV (BIP-65)
添加絕對時間鎖
2016
CSV (BIP-112)
添加相對時間鎖
2017
SegWit (BIP-141)
新的腳本版本系統
2021
Taproot (BIP-341/342)
Schnorr 簽名和 Tapscript
延伸閱讀
- • Taproot 升級:了解最新的腳本能力
- • Bitcoin 程式設計:從零實作腳本解釋器
- • BIP-341:Taproot 完整規範
已複製連結