需要非常舊的 rev*.dat 文件的案例有哪些?
對此有多個問題,但沒有一個,IMO,真正解決這個問題:
鑑於:
- rev*.dat 文件保存“撤消”數據,用於逐塊回滾 UTXO 狀態,
- 並且它們是 1::1 的塊文件(即,對於給定的 NNNNN 文件
blkNNNNN.dat
並revNNNNN.dat
保存相同塊的資訊),- 並且它們按照節點(來自網路)接收塊的順序被寫入和分塊
- 並且 UTXO 集是通過考慮區塊鏈順序的塊來計算(只能計算)的,
- 並且在任何區塊中,coinbase 交易對於 101 次確認(通過共識)都是不可花費的,因此多達 100 個區塊的重組不會導致硬幣突然消失的嚴重問題,並且堆積在頂部的 100 個區塊顯然足以等待任何重組…
然後: 是否曾經使用過非常舊的 rev.dat 文件?* 比方說,那些屬於埋在距離鏈頂深 100 多個區塊的區塊?如果曾經使用過它們**,案例是什麼?
(並且,在這裡回答以下列表中的第一個問題,如果 rev 文件全部被刪除,為什麼需要重新生成它們?
(獎勵問題:給定一個 txindex:rev*.dat 文件中是否有任何內容無法通過查看相應 blk*.dat 文件中的塊並使用 txindex 查找以前的交易來重新生成?
這裡的其他問題接近這個問題但不是欺騙:
- “舊的 rev*.dat 文件可以安全刪除嗎?” - 最接近點,接受的答案解釋(沒有真正解釋)如果你刪除它們“有效地破壞數據庫”,並且如果它們全部被刪除,它們將被重新創建。但是並沒有說明為什麼需要無限期地保留它們,這就是我要問的。
- “rev00000.dat 文件到底是什麼?” - 直接回答它們的用途,但不回答為什麼需要永遠保留它們
- “文件格式——rev*.dat” ——特別是關於rev文件內容的格式
- “原始撤消數據有什麼用?” - 可悲的是,唯一的答案甚至沒有回答所提出的問題,但實際上是此列表正上方文件格式問題 #57978 答案的剪切/粘貼 - 然而,它得到了 OP 的複選標記,去圖.. .
- “v0.19 的撤消文件格式更改和重組過程問題” -關於rev 文件內容格式的**非常詳細的答案
- 標籤“撤消文件” - 3 個問題(在此之前) - 2 個在上面列出,另一個是某人的一次性操作問題(空白 blk 和 rev 文件)。
- 關於何時使用 rev*.dat 文件(區塊鏈重組),這個答案非常好,但沒有說明為什麼它們會被永久保存。
- 並且它們是 1::1 的塊文件(即,對於給定的 NNNNN 文件
blkNNNNN.dat
並revNNNNN.dat
保存相同塊的資訊),- 並且它們按照節點(來自網路)接收塊的順序被寫入和分塊
這個假設是不正確的。這些
rev*.dat
文件實際上是按高度順序編寫的。這是因為它們是在不同的時間編寫的。一個塊的撤消數據只有在它連接到鏈尖後才被寫入,因此撤消數據最終按照塊連接的順序進行。因此,對於已下載但從未連接的塊,它們不存在撤消數據(儘管這種情況不太可能,因為除非它們應該連接,否則不會下載塊)。然後: 是否曾經使用過非常舊的 rev.dat 文件?* 比方說,那些屬於埋在距離鏈頂深 100 多個區塊的區塊?如果曾經使用過它們**,案例是什麼?
當涉及到節點的操作時,不,實際上並沒有使用舊的撤消數據。然而,它在節點操作之外確實有一些用途,特別是在通過 RPC 檢查區塊鏈,以及創建塊過濾器和硬幣統計索引時。
RPC 在某些地方使用撤消數據,因為它包含該塊花費的 UTXO。這允許
getblock
計算為區塊中的每筆交易支付的交易費用。但這並不是硬性要求,如果沒有找到撤消數據,則根本不計算費用。另一個使用 undo 數據的 RPC 是使用
getblockstats
undo 數據來計算塊的費用以及塊引起的 UTXO 集大小的變化。如果撤消不存在,則此 RPC 將失敗。對於塊過濾器和硬幣統計索引,撤消數據用於建構它們,因為它提供了 UTXO 集更改的快照。這允許填充索引而無需在建構時跟踪 UTXO 集,因此它減少了記憶體使用並提高了性能。
對於節點操作,僅當塊與尖端斷開連接時才需要撤消數據。這只發生在重組發生時。然而,比特幣的建構有可能進行非常大規模的工作重組,這可能會重組被認為是古代歷史的事物。
但是,在節點的操作中確實沒有使用舊的undo數據,並且可以添加一種刪除它們的模式。在我的節點上,總共有 48 GB 的數據,因此節省的空間幾乎沒有正常修剪那麼顯著。
(並且,在這裡回答以下列表中的第一個問題,如果 rev 文件全部被刪除,為什麼需要重新生成它們?
由於塊索引的工作方式,它們需要重新生成。由於它還包含撤消數據的位置,如果該數據失去,塊索引將發現這是一個錯誤,因此需要重新索引。如果添加了允許刪除 rev*.dat 文件的選項,那麼顯然必須更改。
(獎勵問題:給定一個 txindex:rev*.dat 文件中是否有任何內容無法通過查看相應 blk*.dat 文件中的塊並使用 txindex 查找以前的交易來重新生成?
是的,但這會很慢。