1. 程式人生 > >《詳解比特幣白皮書》-Reclaiming Disk Space (回收硬碟空間)

《詳解比特幣白皮書》-Reclaiming Disk Space (回收硬碟空間)

Once the latest transaction in a coin is buried under enough blocks, the spent transactions before it can be discarded to save disk space.

一旦一枚最近的交易被足多的區埋藏,以前花銷過的交易記錄就可以清理掉來節約

To facilitate this without breaking the block's hash, transactions are hashed in a Merkle Tree [7][2][5], with only the root included in the block's hash.

為了實現這個而無需破壞區塊雜湊,交易記錄被雜湊到Merkle樹中,區塊雜湊只保留根節點

 

Old blocks can then be compacted by stubbing off branches of the tree. 

舊區可以通裁剪掉枝來壓縮。中間節點的雜湊沒必要儲存。

The interior hashes do not need to be stored.

 

Merkle Tree),又被稱雜湊、可信構上是一棵完全二叉,每個點都有一個雜湊與之對應,葉子點的雜湊需要認證的資料

行雜湊運算得到的,而中間節點的雜湊是由其子點的雜湊值聯行雜湊運算得到的。

如果不用Merkle樹,而是用一種扁平的結構來儲存雜湊值,例如把所有交易的打包雜湊成一個雜湊值,類似一個列表的結構。這種情況下驗證任一筆交易,都需要儲存其他所有交易資料。

作者已經說的很明白,採用Merkle樹的目的之一就是為了節省空間。如圖,為了驗證交易Tx3並不需要保持完整的樹,只需要儲存Tx3和根節點以及路徑上相關的雜湊值,就能逐層驗證Tx3。Merkle樹還有一個特色,就是可以快速定位出錯的資料。假如Tx3被篡改,那麼Hash3、Hash23、Root Hash這一個路徑上的雜湊值都會對不上。

A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes * 6 * 24 * 365 = 4.2MB per year. 

在沒有交易記錄的情況下,區塊頭部的體80。如果我10鍾產生一個區80* 6 * 24 * 365 = 4.2MB每年。

With computer systems typically selling with 2GB of RAM as of 2008, and Moore's Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory. 

按照2008算機系典型搭售2GB記憶體,以及摩定律預測當前增每年1.2GB,那麼就算將全部區塊頭部放入記憶體也不成問題

注:在有交易記錄的情況下,平均每個交易至少250,按平均每個區包含2000個交易來估算,包含完整交易記錄的區大小相當於區塊頭的數千倍。隨著交易的不斷生,存的佔用會越來越大。位元採用Merkle樹來節約空間,即不要求每個節點都儲存完整的區塊鏈資料,那麼如何在不下載全部交易記錄的情況下來驗證交易呢?於是就引出了下一章的SPV……