區塊鏈中的未使用/已使用標誌
一周前我剛剛開始對區塊鏈產生興趣,但是有些東西我無法弄清楚。
關於交易中的“已用/未用”標誌。我知道如果在未來的交易中將相同的輸出用作輸入,我們會標記“花費”交易的輸出。
-假設我們進行了一筆交易(交易 1),並且該交易被包含在區塊鏈中(比如說區塊 1)。我們直到 100 個區塊後(交易 2)才在區塊鏈中花費輸出(考慮一個簡單的交易單輸入和單輸出)。
我知道在事務 2 中,在輸入中,有先前事務的資訊(因為我們正在實現雜湊指針),如下所示的“prev_out”(從 Blockexplorer api 提取的事務的 JSON 格式):
'inputs': [{'prev_out': {'addr': '1PFtrRjbq4aLfM7k4tyLZ3ZAuTsgLr6Q8Q', 'n': 0, 'script': '76a914f423dfee34e4833104508103d89e316b4a49314088ac', 'spent': True, 'tx_index': 356882858,
到目前為止,沒有任何問題,我完全可以理解,我們可以在事務 2 中為之前的輸出(輸入)添加一個已花費/未花費的標誌。
現在假設這是交易 1 的輸出(稍後我們將花費 100 個區塊)。
順便說一句,這是一個真實的交易,它的雜湊:
a117a7aab7e2db8ef5fd40e74f72d689e13b733136454d2340a244236fbed9eb
'out': {'addr': '1PFtrRjbq4aLfM7k4tyLZ3ZAuTsgLr6Q8Q', 'n': 0, 'script': '76a914f423dfee34e4833104508103d89e316b4a49314088ac', 'spent': True, 'tx_index': 356893407, 'type': 0, 'value': 16351264}
我的問題是: 您可以看到“已用”標誌為 True,這怎麼可能?因為在 99 個區塊期間,交易未花費(標誌=假)。只有一種情況下“已花費”標誌為 True:
- 交易 2 必須與交易 1 在同一個區塊中。否則,如果交易 2 在區塊 100 並且交易 1 的標誌“已花費”為 True,則意味著:
對於 99 個塊,標誌為 False,在塊 100 中,我們更改了事務 1 的標誌,該標誌位於塊 1 中。
這意味著我們改變了區塊 1,因此改變了它的散列 –> 鑑於區塊鏈的結構是不可能的。
謝謝你開導我!
重要的是要了解您所說的花費標誌不是儲存在區塊鏈中的輸出欄位。它是由客戶端與區塊鏈互動在內部創建的。永久儲存在區塊鏈上的輸出資訊的唯一欄位是:
- 數量
- 鎖定腳本大小
- 鎖定腳本
比特幣網路上的所有完整節點通過檢查輸出是否是稱為 UTXO 集的結構的一部分來檢查輸出是否被花費。在這種結構中,所有節點都保留所有尚未在節點已驗證的區塊鏈的最後一個塊中花費的輸出。如果輸出是 UTXO 集的一部分,則意味著該輸出未使用。
對於區塊鏈中的每個新塊,節點都會驗證該塊並刪除 UTXO 集中的任何先前輸出,這些輸出已用作新塊中的輸入。
由於一個新節點通過從第一個區塊開始驗證區塊鏈,稱為創世區塊,並為區塊鏈中的每個區塊更新 UTXO 集,一旦該節點與其餘節點同步,UTXO 集將包含所有目前未使用的輸出網路。