Bitcoin-Core-Development
UTXO 數據庫是如何初始化的?
未使用交易的 ID 儲存在 UTXO 數據庫中。我假設它是由客戶端生成的:
for block in blocks: for transaction in block: utxo.remove(transaction.input) utxo.add(transaction)
但是,我有一些疑問:UTXO 數據庫中還儲存了哪些內容?它是否儲存每筆交易的實際未花費硬幣數量(這對於驗證未確認的交易似乎是必要的)?
UTXO 數據庫開始為空,然後在以您描述的方式解析區塊鏈時更新。只是,一筆交易可以有多個輸入和多個輸出,所以我這樣說:
for block in blocks: for transaction in block: for(input in transaction): utxoset.remove(input) for(output in transaction): utxoset.add(output)
顯然,檢查了塊的有效性,因此我們知道輸入和輸出是合法的。
然後,UTXO 集將外點引用的 UTXO 儲存為鍵,其中外點包括:
- TXID:創建輸出的交易的唯一雜湊標識符
- index:輸出在交易輸出列表中的位置
交易輸出中儲存的資訊是:
- 值:輸出適合的聰數
- pubkey 腳本:輸出可以使用的條件
最後,在發生重組的情況下,為每個塊生成撤消數據。