Go-Ethereum

如何訪問 Geth 的 state trie

  • January 25, 2019

使用 Geth,我如何提取給定塊的網路狀態快照?

我的 Geth 節點執行完全同步(~300 gb),這意味著狀態樹應該已經保存下來。我試過直接訪問 leveldb 數據庫,但它與chaindata文件夾中的區塊鏈混合在一起,所以不清楚結構是什麼。

我也嘗試過使用 web3 dumpBlock 方法,該方法理論上可行,但實際可用時間太長(數小時)。

是否有另一種 API 方法可以更快地訪問 state trie?有關如何組織chaindata 文件夾中的數據庫的任何文件?

web3正如您所發現的,使用 RPC執行此操作將花費很長時間。閱讀.ldb文件是要走的路,也是以前在類似問題中出現過的問題。

我不知道有任何有效的、最新的.ldb解析器,儘管肯定有一些存在,所以我會聽從你可能得到的其他更有知識的答案。


同時…

請參閱:LDB files reading,它試圖將 OP 指向 Geth 的 state trie (Go) API 的部分方向,以期從頭開始編寫解析器。(這裡還有一個舊的 Go 解析器,儘管它可能已經過時了。)

為了更好地了解數據庫的佈局,請閱讀Exploring Ethereum’s state trie With Node.js。範常式式碼很舊,但可以通過一些調整來工作。

也相關,但沒有明確的答案:How to parse blocks with Python?

也與文件中的 RPL 編碼有關.ldb節點目錄中 LevelDB 文件的格式?使用 python leveldb API 提取內容時遇到問題

您還可以通過 localhost IPC api 讀取數據,這比 RPC http 端點快得多。

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