4
> w3.eth.syncing
AttributeDict({
  'currentBlock': 5787386,
  'highestBlock': 5787491,
  'knownStates': 138355583,
  'pulledStates': 138341120,
  'startingBlock': 5787335,
})

> w3.eth.blockNumber
0

我已经完成了完全同步,但块号始终为 0。

4

2 回答 2

2

首席 geth 开发人员 Peter 在这里发布了对这个问题的彻底回答:Block number is always zero with fast syncmode。为了给 carver 的答案添加更多颜色,虽然您可能已经收到了最新的块头 ( eth.currentBlock),但您的节点可能还有很多工作要下载整个状态树。引用彼得的话:

许多人错误地认为,因为他们有块,他们是同步的。不幸的是,情况并非如此,因为没有执行任何交易,所以我们没有任何可用的账户状态(即余额、随机数、智能合约代码和数据)。这些需要单独下载并与最新块进行交叉检查。这个阶段称为状态 trie 下载,它实际上与块下载同时运行;唉,现在比下载块需要更长的时间

于 2018-10-02T21:22:25.747 回答
0

这与为什么我的以太币余额为 0 在 geth 中的情况相同,即使同步已接近完成?但“症状”略有不同。

引用重要的一点:

geth --fast有一个有趣的效果:在同步完全完成之前,geth 无法提供有关帐户或合同的任何信息。

在 eth.syncing 返回 false 后再次尝试查询余额。

请注意,除了账户和合约之外,在同步完成之前,您也无法检索有关区块的任何信息。

当您的同步完全完成时,syncing将返回 false,例如:

> w3.eth.syncing
False
于 2018-06-18T21:16:05.910 回答