比特幣的基本交易是一種基本的簽名數據結構,用於記錄價值轉移。它將價值從未花費的交易輸出(UTXO)移動到新的輸出,這些新的輸出隨後成為可供未來支出的新UTXO。網絡通過密碼學驗證這些交易,確保它們正確記錄在其分散式帳本區塊鏈上。
解析比特幣交易:數位價值轉移的基石
比特幣的核心運作建立在一個簡單卻設計精巧的價值轉移系統之上。不同於傳統銀行以賬戶持有餘額,比特幣的運作更像是一個數位現金系統,每一單位的價值都能透過一系列交易追蹤其來源。這種基本機制通常被稱為「基礎交易」,是整個比特幣網路建立的基石。了解這些交易如何被構建、驗證和記錄,對於理解這款全球首創且規模最大的加密貨幣之安全性、完整性及其運作原理至關重要。
未花費交易輸出 (UTXO) 模型:運作中的數位現金
要理解比特幣交易的運作方式,首先必須理解「未花費交易輸出」(Unspent Transaction Output,簡稱 UTXO)的概念。這個模型與傳統的基於賬戶的系統有著典範轉移級別的不同,是比特幣設計的核心。
想像一下你錢包裡的實體現金:你並沒有一個現金的「賬戶餘額」;相反,你擁有特定面額的鈔票(例如一張 10 美元、一張 20 美元)。當你想買東西時,你會使用這些特定的鈔票。如果一件物品價格是 15 美元,而你用 20 美元的鈔票支付,你會收到 5 美元的找零——這是一張新的鈔票。
比特幣的 UTXO 模型運作方式與此類似:
- 無賬戶餘額: 比特幣錢包在技術上並不持有傳統意義上的「餘額」。相反,它們管理著一組可由錢包私鑰「花費」的 UTXO 集合。
- 離散的價值單位: 每個 UTXO 代表一筆特定且未花費的比特幣金額,它源自於前一筆交易的輸出。這就像是一張數位鈔票或一枚數位硬幣。
- 花費 UTXO: 當你發起交易時,你的錢包會選擇一個或多個你擁有的 UTXO,以支付你想發送的金額。這些被選中的 UTXO 會作為新交易的「輸入」被完全消耗(花費)。
- 產生新的 UTXO: 接著,該交易會產生新的 UTXO 作為「輸出」:
- 一個給接收者的 UTXO,包含你發送的金額。
- (選擇性地)另一個發回你錢包的 UTXO(即「找零輸出」),用於處理消耗的 UTXO 中扣除發送金額和手續費後剩餘的金額。
這種 UTXO 模型具有多項優勢,包括增強隱私性(因為交易不會明確連結到用戶賬戶,僅連結到公鑰)、提高防範雙重支出的安全性,以及透過平行處理交易實現更佳的可擴展性。它確保了每一單位的比特幣都能從其起源(挖礦)開始,在整個交易歷史中被審計和追蹤。
比特幣交易的解剖
每一筆比特幣交易都是一個由多個關鍵組件構成的數據結構。這種結構確保了價值可以在網路上被安全地轉移和驗證。
交易輸入 (Transaction Inputs)
輸入指明了被花費的比特幣「來自何處」。每個輸入都指向前一筆交易中的特定 UTXO。
- 前一筆輸出的交易 ID (TXID): 建立該被花費 UTXO 的交易之唯一識別碼(雜湊值)。
- 輸出索引 (Vout): 一個數字,用於指示前一筆交易中具體是哪一個輸出被花費(一筆交易可以有多個輸出)。
- 解鎖腳本 (ScriptSig): 這是證明所有權並授權花費的關鍵部分。對於標準的「支付至公鑰雜湊」(P2PKH)交易,ScriptSig 通常包含:
- 數位簽章: 由發送者的私鑰生成,對當前交易數據的雜湊值進行簽署。這證明了發送者授權了該交易,且無需洩露其私鑰。
- 公鑰: 由發送者的私鑰衍生而來。網路使用此公鑰,根據前一個 UTXO 鎖定腳本中嵌入的公鑰雜湊來驗證數位簽章。
交易輸出 (Transaction Outputs)
輸出指明了比特幣「去往何處」,以及在未來花費該筆比特幣需滿足的條件。
- 價值: 發送至此輸出的比特幣金額(以聰為單位,Satoshi 是比特幣的最小單位)。
- 鎖定腳本 (ScriptPubKey): 也稱為「花費條件」或「腳本雜湊」,此腳本定義了在未來的交易中花費此輸出必須滿足的條件。對於標準的 P2PKH 輸出,它通常包含接收者公鑰的雜湊值。要花費此輸出,接收者必須提供由該公鑰雜湊對應之私鑰生成的數位簽章,以及其公鑰。
其他交易欄位
除了輸入和輸出,比特幣交易還包含其他重要資訊:
- 版本號: 指示交易數據結構的版本,以便未來進行協議升級。
- 鎖定時間 (nLocktime): 一個可選欄位,指定交易在被加入區塊前必須達到的時間或區塊高度。這可用於時間鎖定合約。鎖定時間為 0(或小於 5 億)表示交易可以立即被納入。
- 見證數據 (SegWit 交易): 對於使用隔離見證 (SegWit) 協議的交易,簽名數據(見證數據)儲存在一個獨立的結構中,這有助於優化區塊空間並解決交易延展性 (Malleability) 問題。
整個交易數據結構(SegWit 的見證數據除外)隨後會經過加密雜湊處理,產生交易 ID (TXID),這是該特定交易的唯一識別碼。
構建與廣播交易
當你決定發送比特幣時,你的錢包軟體會在後台執行幾個關鍵步驟:
- UTXO 選擇: 你的錢包會掃描區塊鏈,找出所有可由你的私鑰花費的 UTXO。接著它會選擇這些 UTXO 的組合,使其總價值等於或大於你想要發送的金額加上交易手續費。
- 輸出創建:
- 為接收者的地址創建一個主要輸出,包含指定的比特幣金額。
- 如果選定的 UTXO 總價值超過發送金額加手續費,則會生成一個「找零輸出」。這個輸出將餘額發送回由你錢包控制的新地址,透過不重複使用地址來增強隱私。
- 交易手續費計算: 輸入總值與輸出總值(接收者 + 找零)之間的差額即為交易手續費,這筆費用由將交易納入區塊的礦工收取。錢包通常會根據網路擁塞程度和交易數據大小來估算手續費。
- 數位簽署: 交易中的每個輸入都必須由控制相應 UTXO 的公鑰所對應之私鑰進行數位簽署。簽署過程使用橢圓曲線數位簽章演算法 (ECDSA),根據交易數據為每個輸入生成唯一簽章。此簽章證明了所有者授權了花費,且未洩露私鑰。
- 交易組裝: 所有這些組件——選定的輸入、創建的輸出、簽章和其他欄位——被組裝成一個完整的交易數據結構。
- 廣播: 構建完成且簽署過的交易隨後會廣播到比特幣網路中。
交易驗證:網路的守門人
比特幣全節點在收到廣播的交易後,會立即開始嚴格的驗證程序,然後才將其轉發給其他節點。這種多步驟驗證對於維護網路完整性、防止無效或惡意交易至關重要。
以下是節點驗證交易的方式:
-
語法與結構檢查:
- 格式: 交易是否按照比特幣協議規則正確格式化?
- 大小: 是否符合最大大小限制?
- 版本: 版本號是否有效?
- 價值範圍: 所有數值(輸入、輸出)是否在有效範圍內(例如,非負數,不超過比特幣總供應量)?
- 簽章數量: 對於所使用的腳本類型,簽章數量是否正確?
-
引用 UTXO 的存在性與狀態:
- 未花費: 對於每個輸入,所引用的 UTXO 必須存在,且最重要的是必須是「未花費」的。這是防範雙重支出的主要防線。節點會檢查其本地的 UTXO 集合副本(所有當前未花費輸出的資料庫)。
- 成熟度: 如果 UTXO 是 Coinbase 獎勵(來自挖礦區塊),則在花費前必須達到成熟度(通常為 100 個區塊)。
-
腳本驗證:
- 對於每個輸入,節點會執行腳本驗證程序。它將
ScriptSig(來自輸入)與 ScriptPubKey(來自引用的 UTXO)結合。這個組合腳本隨後由比特幣腳本直譯器執行。
- 腳本必須評估為「TRUE」,交易輸入才算有效。這就是數位簽章根據 UTXO 鎖定腳本中指定的公鑰雜湊進行驗證的地方,以此證明授權。
-
價值一致性檢查:
- 輸入 vs. 輸出: 輸入中所有比特幣價值的總和「必須」大於或等於輸出中所有價值的總和。
- 無中生有: 比特幣不能憑空創造。輸入與輸出之間的差額即為交易手續費,歸礦工所有。
-
鎖定時間檢查: 如果指定了 nLocktime,則只有在當前區塊高度或時間超過 nLocktime 值時,交易才能被納入區塊。
只有在通過所有這些檢查後,交易才被視為有效。有效交易隨後會被添加到節點的記憶體池 (Mempool) 中,並轉發給其他連接的節點。
納入區塊:通往確認之路
經過驗證的交易待在記憶體池中,等待被納入區塊。這就是比特幣挖礦發揮作用的地方:
- 礦工選擇: 比特幣礦工持續監控記憶體池,選擇要納入其正試圖挖掘之新區塊的交易。礦工會優先選擇每位元組手續費較高的交易,因為這會增加他們的潛在獎勵。
- 區塊構建: 礦工組裝一個候選區塊,其中包含區塊頭(包含前一個區塊的雜湊、時間戳記、難度目標和交易的梅克爾根等詳情)以及所選的交易。
- 工作量證明: 礦工隨後進行密集的計算工作,試圖找到一個「隨機數」(Nonce),當它與區塊頭數據結合並進行雜湊處理時,產生的結果低於當前網路的難度目標。這就是「工作量證明」(PoW)。
- 區塊傳播: 一旦礦工找到有效的隨機數,他們就會向網路廣播這個新挖掘出的區塊。
- 區塊驗證: 其他節點收到區塊並迅速驗證其有效性:
- 區塊頭是否包含有效的工作量證明?
- 區塊內的所有交易是否各自有效且未被花費(根據其當前的 UTXO 集合進行檢查)?
- 區塊是否遵守所有共識規則(例如,區塊大小限制、有效的 Coinbase 交易)?
- 確認: 如果區塊有效,節點會將其添加到其區塊鏈副本中。此時,該區塊內的交易收到了它們的第一個「確認」。隨著後續更多區塊在該區塊之上被挖掘出來,該交易會獲得更多確認,使其變得越來越不可逆且安全。商家和交易所通常會等待一定數量的確認(例如 6 個)才認為交易已最終完成。
交易手續費:驅動網路的燃料
交易手續費是比特幣生態系統不可或缺的一部分,主要有兩個目的:
- 激勵礦工: 手續費補償礦工的計算工作並確保網路安全。如果沒有手續費,一旦區塊獎勵最終枯竭,礦工處理交易的動力將會降低。
- 防止網路垃圾郵件: 手續費能震懾惡意行為者,防止他們向網路發送大量微小、無經濟意義的交易,否則這些交易會消耗網路資源。
交易手續費「並非」基於轉移的比特幣金額,而是基於交易的數據大小(以位元組為單位)以及當前網路的擁塞程度。錢包通常會根據「每位元組多少聰」(sat/vB) 的費率來計算手續費。當網路繁忙時,隨著用戶透過提供更高手續費來競爭區塊空間,該費率往往會上升。
實例說明:愛麗絲支付給鮑伯
讓我們追蹤一筆簡單的交易:愛麗絲想發送 0.5 BTC 給鮑伯。
-
愛麗絲的錢包掃描: 愛麗絲的錢包識別出她擁有兩個 UTXO:
- UTXO A:0.3 BTC(來自先前與查理的交易)
- UTXO B:0.4 BTC(來自先前與大衛的交易)
- 總計可花費:0.7 BTC
-
UTXO 選擇: 為了發送 0.5 BTC,她的錢包需要覆蓋該金額加上手續費。它決定使用 UTXO B (0.4 BTC) 和 UTXO A (0.3 BTC),總計 0.7 BTC。
-
交易構建:
- 輸入:
- 輸入 1:引用 UTXO A (0.3 BTC),包含愛麗絲對 UTXO A 的簽章。
- 輸入 2:引用 UTXO B (0.4 BTC),包含愛麗絲對 UTXO B 的簽章。
- 輸出:
- 輸出 1:0.5 BTC 發送至鮑伯的公鑰雜湊。
- 輸出 2(找零):愛麗絲計算手續費。如果網路費率暗示此交易大小需 0.0001 BTC 手續費,則
0.7 BTC (輸入) - 0.5 BTC (給鮑伯) - 0.0001 BTC (手續費) = 0.1999 BTC。這 0.1999 BTC 會發送回愛麗絲錢包控制的一個新地址。
-
簽署與廣播: 愛麗絲的錢包對交易進行加密簽署,然後將其廣播到比特幣網路。
-
網路驗證: 全節點收到交易:
- 它們驗證 UTXO A 和 UTXO B 存在且確實未花費。
- 它們執行腳本,根據 UTXO A 和 UTXO B 原始鎖定腳本中的公鑰雜湊來驗證愛麗絲的簽章。
- 它們檢查輸入 (0.7 BTC) >= 輸出 (0.5 BTC + 0.1999 BTC)。差額 0.0001 BTC 即為隱含的手續費。
- 如果所有檢查通過,交易會被添加到記憶體池中。
-
挖礦與確認: 礦工選擇此交易(以及其他交易)放入新區塊。在找到有效的工作量證明後,該區塊被添加到區塊鏈中。愛麗絲的交易收到第一個確認,鮑伯現在擁有了 0.5 BTC 作為一個新的 UTXO。
比特幣交易模型的持久優勢
比特幣基礎交易機制的設計,以 UTXO 和強大的加密驗證為中心,提供了支撐其價值主張的根本優勢:
- 安全性: 數位簽章和工作量證明機制確保交易經過真實授權,且一旦確認在實務上即不可逆轉,防止了詐欺和雙重支出。
- 去中心化: 沒有單一實體可以單方面批准或拒絕交易。網路節點根據商定的規則獨立進行驗證。
- 透明度與可審計性: 雖然是化名的,但每一筆交易都公開記錄在區塊鏈上,允許任何人驗證價值的流動。
- 防範雙重支出: UTXO 模型和全網路對未花費輸出的驗證,使得兩次花費同一筆比特幣變得極其困難,這解決了比特幣誕生前數位貨幣固有的難題。
這種由 UTXO 選擇、腳本執行、加密簽署和去中心化驗證構成的縝密律動,確保了每一筆比特幣交易都是安全、可驗證且不可篡改的價值轉移記錄,構成了整個比特幣網路堅韌的骨幹。