除了UTXO之外的其他數據庫?
在這篇文章中,解釋了 UTXO 在用完後會被刪除。這是有道理的,因為它們不再“未使用”。
但是不是所有的 UTXO 都對他們之前的交易有引用/連接嗎?區塊鏈中是否有第二個“列表”儲存過去的所有交易?因為如果不是,那麼如果之前的交易不再在 UTXO 列表中,那麼該引用指向哪裡。
整個 UTXO 模型讓我有點困惑,所以謝謝你的澄清。
一旦花費,錢包就會從其未花費交易的記憶體中刪除 UTXO。交易不會從通用數據庫(區塊鍊或區塊索引)中刪除。以 txindex=1 執行的完整節點將永遠保留每筆交易。一些錢包雖然優化了數據庫以恢復磁碟空間——但這是針對錢包的優化,而不是比特幣工作方式的一部分。
例如,比特幣核心有許多記憶體和優化。其中之一是 UTXO 記憶體。擁有此記憶體的原因很明顯:如果您必須在每次交易之前搜尋整個區塊鏈以查找自己未使用的代幣,則可能需要數小時。所以比特幣核心會跟踪你的 UTXO。你的 UTXO 的輸出金額加起來就是你在錢包軟體上看到的餘額。
UTXO 記憶體永遠不會指向以前的交易——它只是一個優化記憶體,使比特幣核心可以輕鬆找到 TX。建構 UTXO 記憶體的算法知道 UTXO 來自哪個事務,但記憶體從不指向任何地方,除了未使用的輸出所在的 TX 索引。
僅當您花費 UTXO 然後在該交易上創建新的輸入 TX 時,指向先前交易的指針才存在。該輸入將指向先前未使用的交易,並且先前的 UTXO 將變為已使用。然後在該交易被探勘後創建一個新的 UTXO。這個 UTXO 成為接收者比特幣餘額的一部分,就像 UTXO 在你花費之前是你餘額的一部分一樣。
這張圖片(由 bitcoin.org 提供)可能有助於說明它是如何工作的:
看到那些 UTXO 在沒有新 TX 的情況下懸而未決嗎?在它們用完之前,它們仍然是 UTXO。
該插圖中的箭頭顯示了資金流向,但從技術上講,箭頭指向相反的方向:輸入指向之前的某個 UTXO 輸出。一旦一個輸入指向一個輸出,該輸出不再是一個 UTXO,它就是一個承諾的 TX。輸入將前一個 TX 連結到一個新的 UTXO,前一個被標記為已用。然後比特幣核心從記憶體中刪除這個先前的 UTXO。