《詳解比特幣白皮書》-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……