Storage
狀態數據儲存在哪裡?
不久前在 Reddit 上提出了這個問題:
但是,狀態數據實際儲存在哪裡?在每個節點的硬碟上?獨立於區塊鏈還是在區塊鏈內部? — Reddit:關於乙太坊 EVM 和狀態儲存的基本問題
從概念上講,基於賬戶的區塊鏈有兩個重要組成部分:
- 事務表示狀態轉換函式
- 這些函式的結果可以儲存
“完整/歸檔”節點可能會將所有事務和所有塊高度的結果狀態轉換儲存在本地數據儲存中。這將包括所有歷史狀態,甚至那些不再有效的狀態。這允許客戶在過去的任何時間查詢區塊鏈的狀態,而無需從頭開始重新計算所有內容。這可能需要非常大量的磁碟儲存,並且由於不是絕對必要的,因此在概念上可以分離區塊鏈數據:
- 鏈數據(形成鏈的塊列表)
- 狀態數據(每個事務狀態轉換的結果)
雖然需要所有鏈數據來確保加密監管鏈並且沒有任何內容被篡改,但可以丟棄舊的狀態數據(稱為“修剪”)。這是因為狀態數據是隱式數據。也就是說,它的價值只能從計算中得知,而不是從實際傳達的資訊中得知。相比之下,鏈數據是顯式的,並作為區塊鏈本身儲存。
所以目前,雖然鍊和狀態數據都本地儲存在節點的磁碟上,但只有鏈數據是嚴格必要的。狀態數據可能是短暫的。