跳至主要內容
高級

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

延伸閱讀

已複製連結
已複製到剪貼簿