比特幣腳本 Bitcoin script
每一筆比特幣交易的輸出,都包含一段鎖定腳本 ScriptPubKey,用以規定該輸出在被花費時必須滿足的條件。以及交易輸入時,提供解鎖腳本 ScriptSig 或資料 witness,與鎖定腳本一同執行,驗證是否符合可花費條件。

比特幣腳本 Bitcoin script,是一堆棧式腳本語言,設計風格類似於 Forth 語言,用以定義比特幣交易的驗證邏輯。
每一筆比特幣交易的輸出,都包含一段鎖定腳本 ScriptPubKey,用以規定該輸出在被花費時必須滿足的條件。以及交易輸入時,提供解鎖腳本 ScriptSig 或資料 witness,與鎖定腳本一同執行,驗證是否符合可花費條件。
所有的腳本語言均以是一系列可執行的操作碼 OPcode 指令,用於實現自動化和特定功能,主要設計理念為應用於通用化、簡易化的場景。
Bitcoin script 基本概念
-
UTXO 驗證機制 Bitcoin script 不是計算數值,而是驗證是否滿足得以使用 UTXO 未花費支出的條件。每個交易輸出都有一段鎖定腳本,花費時提供解鎖腳本,驗證兩段腳本合併執行是否條件成立。
-
堆棧式運算 比特幣腳本語言是一種堆棧式語言,操作碼 OPcode 遵守著後進先出的原則,將數據資料進行操作.以不同的操作碼指令組成,完成交易、多重簽名、多重付款等目的。
-
非圖靈完備 因圖靈完備的語言可調用函式自身數據計算的遞歸性、可分支性處理多任務等特性,但也產生了無限循環與無法收斂,等可能的漏洞風險成本,所以比特幣腳本刻意設計為非圖靈完備。
Bitcoin script 運作方式
-
腳本建立 交易輸出會先定義鎖定腳本條件,決定這筆 UTXO 未來要如何被花費,如簽章、特定雜湊或時間條件。同時花費方會提供對應的解鎖腳本資料,作為滿足條件的證明。
-
拼接腳本 實際驗證時,系統將解鎖腳本放在前,鎖定腳本拼接在後,合併成完整的序列。
-
線性讀取 合併後的腳本會由左至右逐條執行,每一個操作碼或資料,依序被讀取以及處理,不存在跳躍、迴圈或分支控制。
-
堆棧運算 執行使用堆棧 stack 結構運作。資料會被 push 進堆疊,OPcode 則從堆疊取出資料進行計算或驗證,再將結果推回堆疊。
-
條件判定 執行完成後,系統檢查堆疊最終結果,條件成立則解鎖成功,UTXO 可以被花費,若失敗則交易無效
Bitcoin script 應用
-
資金控制 Bitcoin script 可以定義不同的資金花費條件藉由組合不同的操作碼 OPcode,可建立簽章授權、時間鎖定、條件式支付等各種資金控制機制。
-
拓展協議基礎 許多比特幣擴展協議,Segwit、閃電網路、Taproot,皆建立於 Bitcoin script 之上

更多文章