Nodes
如何判斷我正在使用的節點是否為完整存檔節點?
判斷我正在使用的節點是否使用完整存檔節點的最佳方法是什麼?
我知道的一種方法是
call
從舊塊的上下文中籤訂契約,但這需要 RPC 呼叫並且不是顯式的(call
可能由於其他原因而失敗)。此外,不同的客戶端(geth、party 等)會返回錯誤消息,因此這是不可靠的。有沒有辦法明確地做到這一點?
完整的存檔節點可以訪問區塊鏈的歷史狀態。例如,如果節點在塊 1 返回一個帳戶的餘額(有一些 eth),那麼該節點將是一個存檔節點。
- 歸檔節點的案例:
$ curl --data '{"method":"eth_getBalance","params":["0xe5Fb31A5CaEE6a96de393bdBF89FBe65fe125Bb3", "0x1"],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST localh ost:8545 {"jsonrpc":"2.0","result":"0x3635c9adc5dea00000","id":1}
在上面的程式碼片段中,我們正在查詢0xe5Fb31A5CaEE6a96de393bdBF89FBe65fe125Bb3的餘額,這個地址在創世塊期間收到了 1k ETH。
斷言上述 JSON-RPC 呼叫的結果等於 1K ETH 將明確指示該節點是否為存檔節點。
- 非歸檔節點的情況:
$ curl --data '{"method":"eth_getBalance","params":["0xe5Fb31A5CaEE6a96de393bdBF89FBe65fe125Bb3", "0x1"],"id":1,"jsonrpc":"2.0"}' -H "Content-Type: application/json" -X POST https://cloudflare-eth.com/ {"jsonrpc":"2.0","id":1,"error":{"code":-32000,"message":"missing trie node d67e4d450343046425ae4271474353857ab860dbc0a1dde64b41b5cd3a532bf3 (path )"}}
對於上述地址,非歸檔節點將無法返回區塊 1 的餘額。