Transactions
交易輸出如何標記為已用?
比特幣開發者指南指出
特定交易的每個輸出在區塊鏈中只能用作輸入一次。任何後續的引用都是禁止的雙重花費——嘗試花費相同的 satoshis 兩次。
那麼比特幣網路節點如何真正將交易的輸出標記為已用呢?我想它需要是不可逆的,這樣其他節點就不能恢復“已用”標記,但我想不出比特幣可以確保這一點的方法。
這種標記在標準比特幣程式碼中的什麼位置出現,它是如何出現的?
每個完整的比特幣節點都維護一個數據庫,其中剩餘未使用的輸出。
在驗證交易時,它的所有輸入都是從數據庫中獲取的。如果缺少一個,則驗證失敗。檢索到的數據包括那些未使用的輸出的值,以及它們的腳本(od 地址),它們定義了可以使用輸出的條件。此資訊對於驗證支出交易是否具有正確的簽名並且不會產生比其消耗的更多的比特幣是必要的。
如果一個區塊中所有交易的所有驗證都成功,則從數據庫中刪除消耗的輸入,並將這些交易的所有輸出作為新的未使用輸出添加到數據庫中,允許它們被未來的塊使用。
由於這個數據庫只包含輸出(例如,沒有簽名),甚至只有未使用的,它比整個區塊鏈小得多(截至 2014 年 7 月約為 450 MB)。所以,不,我們不會掃描整個區塊鏈來了解輸出是否沒有雙花——我們保留一個單獨的數據庫,其中僅包含我們需要從中進行驗證的數據。