跳至主要內容
進階

腳本系統基礎

了解比特幣的腳本語言,這是實現各種支付條件的基礎。

18 分鐘

什麼是 Bitcoin Script?

Bitcoin Script 是一種基於堆疊的、圖靈不完備的腳本語言。它用於定義 UTXO 的花費條件, 是比特幣「可程式化貨幣」特性的基礎。每筆交易都包含腳本,決定了誰可以花費這些比特幣。

為什麼使用腳本?

腳本系統為比特幣提供了靈活性:

  • 靈活的支付條件 可以創建多重簽名、時間鎖定等複雜條件
  • 安全性 圖靈不完備確保腳本必定終止,避免無限迴圈
  • 可驗證性 任何人都可以驗證腳本的執行結果

堆疊式執行

Script 使用後進先出(LIFO)的堆疊來處理數據。操作碼從堆疊中取出數據,處理後將結果推回堆疊。

執行流程範例:
Stack: []

PUSH 2       → Stack: [2]
PUSH 3       → Stack: [2, 3]
OP_ADD       → Stack: [5]
PUSH 5       → Stack: [5, 5]
OP_EQUAL     → Stack: [true]
    

腳本結構

比特幣交易包含兩種腳本:

scriptPubKey(鎖定腳本)

定義在輸出中,指定花費這個 UTXO 需要滿足的條件。類似於一把「鎖」。

scriptSig(解鎖腳本)

定義在輸入中,提供滿足鎖定腳本條件的數據。類似於一把「鑰匙」。

常見操作碼

操作碼 功能
OP_DUP 複製堆疊頂部的元素
OP_HASH160 對頂部元素執行 SHA256 + RIPEMD160
OP_EQUALVERIFY 比較兩個元素是否相等,失敗則終止
OP_CHECKSIG 驗證簽名是否有效
OP_CHECKMULTISIG 驗證多重簽名
OP_IF / OP_ELSE 條件分支
OP_CHECKLOCKTIMEVERIFY 絕對時間鎖定
OP_CHECKSEQUENCEVERIFY 相對時間鎖定

P2PKH 腳本詳解

Pay to Public Key Hash 是最常見的腳本類型:

scriptPubKey (鎖定):
OP_DUP OP_HASH160 <公鑰哈希> OP_EQUALVERIFY OP_CHECKSIG

scriptSig (解鎖):
<簽名> <公鑰>

執行過程:
1. 推入 <簽名> 和 <公鑰>
2. OP_DUP: 複製公鑰
3. OP_HASH160: 計算公鑰哈希
4. OP_EQUALVERIFY: 驗證哈希匹配
5. OP_CHECKSIG: 驗證簽名
    

多重簽名範例

2-of-3 多重簽名腳本需要三個公鑰中的任意兩個簽名:

scriptPubKey:
OP_2 <公鑰A> <公鑰B> <公鑰C> OP_3 OP_CHECKMULTISIG

scriptSig:
OP_0 <簽名1> <簽名2>

注意: OP_0 是因為 OP_CHECKMULTISIG 的一個著名 bug
    

時間鎖定

比特幣支持兩種時間鎖定機制,是閃電網絡和其他二層方案的基礎:

CLTV(絕對時間鎖)

OP_CHECKLOCKTIMEVERIFY - 指定一個絕對的區塊高度或時間戳, 在此之前 UTXO 無法被花費。

CSV(相對時間鎖)

OP_CHECKSEQUENCEVERIFY - 指定從 UTXO 創建開始需要等待的區塊數, 用於閃電網絡的承諾交易。

延伸學習: 想要深入了解更多操作碼和高級腳本技巧, 請查看 Script 語言進階 章節。

延伸閱讀

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