什麼是 Bitcoin 未花費交易輸出 (UTXO)?

了解 UTXO 模型 💻
歷史記錄
Adam Back 和已故的 Hal Finney 是 Cypherpunk 密碼學小組的兩名成員,Bitcoin 白皮書作者 Satoshi Nakamoto 經常光顧該小組。兩人分別於 1997 年和 2004 年獨立開發了 UTXO 模型。
當 Bitcoin 的創造者 Satoshi Nakamoto 於 2009 年推出該協議時,它成為第一個實施 UTXO 模型的運作中數碼貨幣系統。
Hal Finney 和 Adam Back 都長期被懷疑是 Satoshi Nakamoto,儘管從未被證實。
UTXO 概覽
當您將 Bitcoin 發送給某人時,會以程式方式執行多個步驟。交易過程中的最早步驟之一是您的加密貨幣錢包掃描區塊鏈以查找您擁有的資金金額。這些資金稱為未花費交易輸出 (UTXO)。
您可以將 UTXO 視為之前 Bitcoin 交易中剩餘的零錢。
這些資金被視為「未花費」,因為您可以自由地將它們發送給某人或轉移到另一個錢包。它們被稱為「交易輸出」,因為它們是從之前的交易中產生。
如果您用一張 20 美元鈔票支付 12 美元的午餐,您會剩下 8 美元。在這個例子中,剩下的 8 美元將是一個未花費交易輸出。它會回到您的錢包,準備用於購買其他東西。
這正是 Bitcoin UTXO 的運作方式。當您進行交易時,來自之前 Bitcoin 交易的輸出,即您的 Bitcoin 零錢,被用作新交易的輸入。
實體現金交易和 UTXO 之間的另一個關鍵比較是,兩者都必須完全花費且不能細分。如果您有一個 5 Bitcoin 的 UTXO 並想發送 1 BTC 給某人,您將必須發送整個價值 5 Bitcoin 的 UTXO,並收到一個新的 UTXO 作為回報,價值 4 BTC 減去任何費用。
就像上面例子中,您交出整張 20 美元鈔票來支付 10 美元的午餐一樣。
當一個 UTXO 被花費時,它被視為「已消耗」,並在技術上從流通中移除。
任何剩餘的找贖都會生成為一個全新的 UTXO。UTXO 系統的這部分是 Bitcoin 解決雙重支付問題的方式。
就像您不能實體上給店主一張 5 美元鈔票,然後將同一張 5 美元鈔票給另一個人一樣,Bitcoin 用戶不能在兩次獨立的數碼交易中成功使用相同的未花費交易輸出。
當一個人嘗試兩次花費相同的 UTXO 時,這兩筆交易最終會進入 mempool — 一個待處理交易的等候室。它們會留在這裡,直到贏得工作量證明競爭的成功礦工將它們捆綁到新的區塊中。
您可以在我們的 Kraken 學習中心文章 什麼是 Bitcoin 挖礦?中了解更多關於此過程的資訊。
即使兩筆交易被捆綁到兩個獨立的區塊並同時處理,由於時間戳,其中一筆交易會比另一筆交易提前驗證。在經過多次確認(新區塊添加到區塊鏈)後,其他節點會標記第二筆無效交易並拒絕它。
鑄幣交易
Bitcoin 交易沒有輸入的唯一情況是當新鑄造的 BTC 是從挖礦中產生時。
這稱為鑄幣交易 (coinbase transaction),代表每個新區塊中的第一筆交易。
流通中的每個 satoshi(Bitcoin 的子單位)都可以使用透明的區塊鏈分類帳追溯到其各自的鑄幣交易。
為何 Bitcoin 使用 UTXO 模型?
帳戶餘額
為了識別用戶的餘額(也稱為 UTXO 集),加密貨幣錢包軟件會掃描區塊鏈,以查找與相應公共錢包地址相關聯的所有 UTXO。
所有 UTXO 的總和準確地記錄了錢包所有者控制的加密貨幣數量。
當一個 UTXO 被花費時,收件人的公共錢包地址會被分配到該金額,並且一旦執行,新的 UTXO 會記錄在區塊鏈上。
儲存
Bitcoin UTXO 記錄在各種交易中,這些交易儲存在 Bitcoin 區塊鏈上的區塊中。然而,這些資訊沒有明確索引,因此難以快速搜尋和整理元數據。
當使用像 Bitcoin Core 客戶端這樣的錢包軟件時,UTXO 元數據使用 LevelDB 數據庫儲存和索引。LevelDB 是 Google 於 2011 年創建的開源儲存系統,它使定位 UTXO 變得更快。
Bitcoin Core 客戶端是用於連接 Bitcoin 區塊鏈網絡的流行軟件。Bitcoin Core 最初由 Satoshi Nakamoto 創建,現在由志願開發者社區維護。
UTXO 內部運作 🚗
在更技術的層面上,交易主要有四個部分:
- 版本:這會告知網絡節點正在使用哪個版本的客戶端軟件。不同版本遵循不同的規則來驗證交易數據。
- 鎖定時間:這是決定交易添加到區塊鏈速度的時間量。此輸入決定了挖礦節點處理交易的最早可能時間。
- 輸入:指向資金來源或產生 UTXO 的先前交易的資訊。輸入還包含一個稱為「解鎖腳本」的東西。
- 輸出:有關正在轉移的價值、資金所有權被重新分配到的錢包以及形成的新 UTXO 的資訊。輸出還包含一個「鎖定腳本」。
UTXO 與實體現金有何不同
實體鈔票類比與 UTXO 模型之間的主要區別在於,Bitcoin 和其他基於 UTXO 的加密資產不受固定金額限制,即 5 美元、10 美元、15 美元等。任何數量的 Bitcoin(最多八個小數位)都可以是未花費交易輸出。
例如,您可能在交易中剩下 0.0003847 BTC。
這個金額將成為一個新的 UTXO,如果使用,則必須完全花費,不能分成更小的金額。
假設 John 的加密貨幣錢包餘額為 1 Bitcoin。他的餘額和該餘額的組成是兩回事,就像您的錢包裡可能有 100 美元,但它可能由四張 20 美元鈔票、兩張 5 美元鈔票和一張 10 美元鈔票組成。
假設 John 的 1 BTC 餘額由 5 個不同的未花費交易輸出組成。
- 0.138 BTC
- 0.1 BTC
- 0.004 BTC
- 0.73 BTC
- 0.028 BTC
John 想發送 0.6 BTC 給 Jane。為此,John 的錢包軟件會自動將他控制的任意數量的 UTXO 組合起來,以支付這筆交易以及處理它所涉及的任何礦工費用。
在這個例子中,假設他的錢包軟件自動將 John 價值 0.73 BTC 的 Bitcoin UTXO 發送給 Jane,並將剩餘金額減去交易費用後作為新的 UTXO 返回給 John。
這個金額會自動發送到找贖地址;一個連結到您的加密貨幣錢包的獨立地址。
鎖定和解鎖腳本 🔒
當 UTXO 被創建時,它們會使用收件人的公共錢包地址鎖定。為了將該 UTXO 用作新交易的輸入,它必須首先使用發件人的數碼簽名解鎖。
這是關於 Bitcoin 交易的另一件重要事情。當進行交易時,Bitcoin 並非以數碼方式從一個帳戶轉移到另一個帳戶。相反,它們被解鎖、重新分配給新所有者,然後再次鎖定。
這意味著只有新所有者可以使用其數碼簽名解鎖資金並將其轉移到其他地方;轉移給另一個人或轉移到其控制下的另一個錢包。
Script 是 Bitcoin 用於處理交易(包括鎖定和解鎖 UTXO)的程式語言。
- 鎖定腳本 (ScriptPubKey):當 UTXO 被鎖定時,鎖定腳本(稱為 ScriptPubKey)規定了在使用 UTXO 作為輸入之前需要滿足的條件。這通常涉及通過提供數碼簽名來證明您擁有與用於鎖定 UTXO 的公共錢包地址相對應的私鑰。
- 解鎖腳本 (ScriptSig):要解鎖 UTXO,您必須滿足鎖定腳本設定的條件,即提供數碼簽名,證明您控制著與用於鎖定 UTXO 的公鑰相對應的私鑰。
這可以防止其他人存取和花費這些資金。
什麼是 Bitcoin 塵埃?
Bitcoin 塵埃是指 UTXO 中包含從先前交易中剩餘的微量 satoshi。
就其本身而言,這些微不足道的 BTC 金額,其處理交易費用會超過其價值,因此它們通常會留在找贖地址中,等待與其他 UTXO 捆綁並花費。
什麼是塵埃攻擊?
塵埃攻擊是指詐騙者向數十萬個不同的錢包地址發送塵埃。其背後的想法是確定社交工程攻擊的潛在目標。
詐騙者會監察包含他們發送的塵埃的地址,等待所有者進行一筆交易,將連結到其錢包的不同地址的 UTXO 捆綁在一起。由於塵埃 UTXO 非常小,它們很有可能會與其他 UTXO 分組並用作輸入。
一旦發生這種情況,詐騙者就可以了解一個人擁有的資金。然後,他們可以選擇在交易中嵌入釣魚訊息,邀請所有者點擊下載惡意軟件的連結,或訪問模仿合法登陸頁面並要求提供個人資訊的虛假網站。
Bitcoin 塵埃攻擊有多危險?
塵埃攻擊不會讓詐騙者存取您的資金。
它們僅用於縮小由特定加密貨幣錢包控制的地址範圍。
為了最大程度地降低塵埃攻擊的風險,最好不要點擊連結或訪問與塵埃交易相關的網站。
開始購買 Bitcoin
既然您已經了解了未花費交易輸出模型的所有資訊,您準備好繼續您的加密貨幣之旅並購買 Bitcoin 了嗎?
請查閱我們的 Kraken 學習中心指南,了解更多關於如何購買 Bitcoin (BTC) 的資訊,並立即註冊 Kraken 帳戶。