Blocks

乙太坊塊結構-根和嘗試概念

  • July 21, 2017

試圖加強我的理解,所以希望你們能幫助我。

通過閱讀乙太坊維基,我相信乙太坊區塊頭的一部分包括以下內容:

*stateRoot

交易根

收據根*

哪些是嘗試本身的根節點的 keccak 雜湊。

我的問題如下……

Q1 - geth 在哪裡儲存這些嘗試 - 我估計在塊本身,即鏈數據文件夾中,在 ldb 文件中?還是我完全不在基地?

Q2 - (我假設狀態樹確實保存在每個塊中)塊 N 的狀態樹是否引用塊 N-1 的狀態樹(如果沒有發現帳戶狀態的更改,即僅記錄有差異的帳戶) ,或者狀態樹是否跨塊重複?

Q3 - 在狀態樹修剪時,我認為狀態被修剪掉了,因為如果我們有 stateRoot,這有效地驗證了狀態樹節點是好的,因此可以安全地丟棄狀態樹本身 - 這種理解從高層來看是否正確看法?

Q4 - .\ethereum\nodes 文件夾的用途是什麼?

謝謝!

首先,您需要查看上一個問題中的這張圖片以供參考。


Q1 - geth 在哪裡儲存這些嘗試 - 我估計在塊本身,即鏈數據文件夾中,在 ldb 文件中?還是我完全不在基地?

鏈數據實際上並不是塊本身的一部分——它單獨儲存在 leveldb 數據庫中。在您的機器上,這是chaindata文件夾內的內容。本身儲存各種嘗試的根的雜湊值,狀態數據(即鏈數據)就是其中之一。

看:


Q2 - (我假設狀態樹確實保存在每個塊中)塊 N 的狀態樹是否引用塊 N-1 的狀態樹(如果沒有發現帳戶狀態的更改,即僅記錄有差異的帳戶) ,或者狀態樹是否跨塊重複?

根據 Q1,您的第一個假設是不正確的,但是是的,狀態 trie 向後引用以防止重複。上一個答案中的這張圖片有助於視覺化這一點

[


Q3 - 在狀態樹修剪時,我認為狀態被修剪掉了,因為如果我們有 stateRoot,這有效地驗證了狀態樹節點是好的,因此可以安全地丟棄狀態樹本身 - 這種理解從高層來看是否正確看法?

我不完全確定,但之前的官方部落格文章可能會有所幫助: https ://blog.ethereum.org/2015/06/26/state-tree-pruning/


Q4 - .\ethereum\nodes 文件夾的用途是什麼?

它是您的節點知道的節點數據庫。它以 RLP 格式散播,因此不易閱讀。有關詳細資訊,請參閱節點目錄中 LevelDB 文件的格式?使用 python leveldb API 提取內容時遇到問題

引用自:https://ethereum.stackexchange.com/questions/21754