Transaction-Verification

區塊鏈中的交易索引

  • March 25, 2019

假設我們有很多年前的交易 T(1),區塊高度為 125001;然後一個新的交易 T(2) 消耗了 T(1) 的所有輸出,出現在塊高度 568720 附近(即今天)。中間有很多塊;許多 GB 的數據,並且節點需要在處理 T(2) 之前有效地檢查 T(1) 的輸出自從塊高度 125001 以來這些年來從未使用過。這看起來像是一個可擴展性問題。節點通常如何做到這一點?他們執行線性搜尋嗎?他們是否有所有活動交易的 B 樹索引?雜湊索引?有沒有更有效的方法來查找?區塊鏈的結構是否使得這種搜尋本質上是微不足道的?那些不儲存整個區塊鏈歷史的節點呢?

非常感謝。

每個全節點維護一個 UTXO 集,其中包含所有未使用的交易輸出。這個 UTXO 集是由每個完整節點在初始化時通過遍歷所有塊直到創世塊來建構的。與區塊鏈不同的是,UTXO 集儲存在機器的 RAM 中以允許更快的查詢(UTXO 實際上儲存在 中$DATADIR/chainstate,但被積極記憶體在記憶體中。)當接收並驗證新塊時,節點將刪除相關數據到被消費的 UTXO,並將新交易的輸出添加到 UTXO 集中。

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