Bitcoin-Core-Development

UTXO 數據庫是如何初始化的?

  • November 11, 2021

未使用交易的 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 腳本:輸出可以使用的條件

最後,在發生重組的情況下,為每個塊生成撤消數據。

引用自:https://bitcoin.stackexchange.com/questions/52911