修剪和未修剪的區塊鏈之間的區別
在柏林區塊鏈聚會上,Gustav Simonsson 取笑 Homestead 即將發布(tm),我們正在討論區塊鏈膨脹和乙太坊區塊鏈的目前規模。
我們討論了修剪和未修剪的區塊鏈以及geth 快速同步選項。現在我想知道:
- 修剪和未修剪的區塊鏈有什麼區別?修剪後的區塊鍊是否仍然由塊組成?它甚至是*“區塊鏈”*嗎?
- 空間要求有什麼區別?完整的、未修剪的鏈目前大小為 7GB。修剪後的鏈條需要多少空間?
- 將快速同步客戶端修剪為輕客戶端怎麼樣?如果空間要求較低,使用快速同步客戶端而不是不安全的輕客戶端不是更好嗎?
修剪過的鏈客戶端可以被視為輕客戶端嗎?
讓我們一步一步來。
區塊鏈通常通過擁有一個起源(起源)狀態和幾個有資金的賬戶來工作,然後你放置在鏈上的每個區塊都會移動這些起源資金,同時也為礦工提供了一些額外的收益。因此,每當您將新區塊導入現有鏈中以查看您對世界的看法(狀態)時,並根據區塊中包含的交易轉換該狀態,從而得出您認為的新觀點世界的樣子。你不會放棄你過去對世界的看法,因為如果區塊鏈中有一個分叉(例如,一個礦工出現了一個更好的區塊,或者可能是兩個更好的區塊),那麼你需要將你的觀點從過去的狀態轉換為更好的版本。這會導致你通過永恆積累而轉變的所有過去狀態。
需要注意的重要一點是,大多數時候您並不關心帳戶在 3 年前有多少資金,您只關心目前的狀態(也許幾天前也是如此)。那麼,為什麼要保留所有過去非常古老的過渡狀態呢?狀態修剪本質上是獲取所有中間狀態,並將其衝下馬桶。要意識到的重要一點是,您只丟棄中間世界視圖,而不是塊本身或任何其他可能對網路不健康的數據(即加入節點需要同步數據)。因此,通過修剪您的狀態樹,您將失去查詢過去帳戶餘額的能力,但可以將儲存的數據量減少到其原始大小的 1/5-1/6 左右。
好的,那麼快速同步呢?好吧,按照之前的構想,如果你不關心3年前的一個隨機賬戶的餘額,為什麼要重播區塊鏈的整個交易歷史,只是為了回到目前狀態。所以快速同步的作用是下載所有區塊鏈,但它不執行一次生成一個塊的世界視圖的交易。相反,它只驗證工作量證明,當整個鏈被下載時,它會查看狀態根(定義目前世界視圖的雜湊)並直接從網路內下載狀態數據庫,從頭重建最終狀態,而不需要它的瞬態。這意味著,除了下載塊之外,它還需要下載額外的數據,狀態本身,所以它用頻寬交換處理能力(即我下載狀態,不生成它)。快速同步的最終結果是通過不同的方式從所有意圖和目的中修剪數據庫。此類數據庫的目前大小為 1.2-1.3GB。