Transaction-Verification

當記憶體中的 UTXO 已滿時,使用什麼策略將記憶體中的一個 UTXO 替換為另一個?

  • May 24, 2021

UTXO 集儲存在磁碟上,但一些 UTXO 也儲存在記憶體中。驗證交易時,需要查詢交易輸入指向的UTXO。首先你去記憶體找,如果沒有找到,你需要去磁碟找UTXO。由於 levelDB 的特性,在磁碟上搜尋到的 UTXO 需要寫入記憶體。如果此時記憶體已滿,節點如何在記憶體中為剛剛找到的 UTXO 騰出空間?

UTXO 集記憶體不是固定大小,限制也不是硬限制。可以將新條目添加到記憶體中,而無需考慮最大記憶體大小。事實上,記憶體對象本身甚至不知道限制是什麼。

而是定期刷新記憶體。因為 UTXO 集僅在塊驗證期間發生變化(記憶體池 UTXO 集在其他地方單獨處理),所以這種週期性刷新主要與傳入塊相關聯,而不是與計時器相關聯。驗證每個塊後,節點確定是否應將記憶體刷新到磁碟。有幾種情況會導致刷新,包括接近記憶體限制和超過記憶體限制。

因此,如果在驗證塊期間,記憶體已滿,它實際上會繼續增長,直到塊被完全驗證。然後在最後,整個記憶體將被刷新到磁碟並清空記憶體。

請注意,LevelDB 本身有一個獨立於 UTXO 集記憶體的記憶體。

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