比特幣腳本 Bitcoin script

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

比特幣腳本 Bitcoin script

 

比特幣腳本 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 之上

2026/9/15 5:33 AM


更多文章