1.问题说明
使用以太坊geth客户端查询某个地址在某个区块时的余额报错:
- 请求命令
curl -X POST -H Content-Type:application/json --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0xb54ca24ac19098db42454c8ee8df67d260a22b1e", "0x89f9ab"],"id":1}' http://127.0.0.1:8545
- 节点报错信息如下:
err="missing trie node 2e4ce586405e12c55ab10ad7a07f5bc49c46a390934ebba34e9ba741cc4020bd (path )"
2.问题原因
以太坊geth客户端只能跟踪具有状态的块,如果我们的节点使用了快速同步,则该事务可能太旧了,无法在没有存档节点的情况下进行本地跟踪
以太坊 geth客户端默认使用快速同步,以下为同步方式说明:
--syncmode value: Blockchain sync mode ("fast", "full", "snap" or "light") (default: fast)
3.问题解决
可以使用来运行–synmode=full,但是它将产生一个巨大的数据库,并且需要花费很多时间来处理每个块。
启动命令如下:
geth --syncmode=full --rpcapi db,eth,net,web3,personal,admin,miner --rpc --rpcaddr 0.0.0.0 --cache 2048 --maxpeers 30 --allow-insecure-unlock