Go-Ethereum
如何訪問 Geth 的 state trie
使用 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 端點快得多。